DETR
提出了一种将目标检测视为直接集预测问题的新方法。我们的方法简化了检测管道,有效地消除了对许多手工设计组件的需求,如非最大抑制程序或锚生成,这些组件明确编码了我们对任务的先验知识。新框架称为检测Transformer或DETR,其主要组成部分是基于集合的全局损失,通过二部匹配强制进行唯一预测,以及Transformer编码器-解码器体系结构。给定一个固定的小范围学习对象查询集,DETR将考虑对象之间的关系和全局图像上下文,以直接并行输出最终的预测集。与许多其他现代探测器不同,新模型概念简单,不需要专门的库。在具有挑战性的COCO目标检测数据集上,DETR的准确性和运行时性能与成熟且高度优化的快速RCNN基线相当。此外,DETR可以很容易地进行推广,以统一的方式生成全景分割。我们表明,它显著优于竞争基线。训练代码和预训练模型可在https://github.com/facebookresearch/detr.
1简介
目标检测的目标是为每个感兴趣的对象预测一组边界框和类别标签。现代检测器以间接的方式解决这一集合预测任务,方法是在一大组建议[ 37,5]、锚[ 23]或窗口中心[ 53,46]上定义替代回归和分类问题。它们的性能受到后处理步骤、锚集设计以及将目标框分配给锚的启发式算法的显著影响,这些步骤使预测接近重复。为了简化这些管道,我们提出了一种直接集预测方法来绕过代理任务。这种端到端的理念在复杂的结构化预测任务(如机器翻译或语音识别)方面取得了重大进展,但在目标检测方面尚未取得进展:之前的尝试[43,16,4,39]要么添加了其他形式的先验知识,要么没有证明在具有挑战性的基准上与强大的基线具有竞争力。本文旨在弥合这一差距。
通过将目标检测视为直接集预测问题,我们简化了训练管道。我们采用了一种基于transformers(47)的编解码器架构,transformers是一种流行的序列预测架构。transformers的自注意机制明确地模拟了序列中元素之间的所有成对交互,使这些体系结构特别适用于集合预测的特定约束,例如删除重复预测。
我们的检测Transformer(DETR,见图1)一次预测所有对象,并使用集损失函数进行端到端训练,该函数在预测对象和真值对象之间执行二分匹配。DETR通过删除多个手动设计的组件来简化检测管道,这些组件编码先验知识,如空间锚或非最大抑制。与大多数现有的检测方法不同,DETR不需要任何自定义层,因此可以在包含标准CNN和transformer类的任何框架中轻松复制。1.
与之前大多数关于直接集预测的工作相比,DETR的主要特征是二部匹配损失和Transformer与(非自回归)并行解码的结合[29,12,10,8]。相比之下,之前的工作侧重于RNN的自回归解码[43,41,30,36,42]。我们的匹配损失函数唯一地将预测分配给真值对象,并且对预测对象的排列保持不变,因此我们可以并行地发出它们。
我们在一个最流行的目标检测数据集COCO[ 24]上评估DETR,并与一个非常有竞争力的Faster R-CNN基线进行比较[ 37]。自最初发布以来,更快的RCNN经历了多次设计迭代,其性能得到了极大的提高。我们的实验表明,我们的新模型达到了相当的性能。更准确地说,DETR在大型对象上表现出明显更好的性能,这一结果可能是由Transformer的非局部计算实现的。然而,它在小对象上的性能较低。我们预计,未来的工作将改善这一方面,就像FPN的发展为Faster R-CNN所做的那样。
DETR的训练设置在多个方面不同于标准对象检测器。新模型需要额外的长时间训练计划,并受益于Transformer中的辅助解码损失。我们将深入探讨哪些组件对演示的性能至关重要。
DETR的设计理念很容易扩展到更复杂的任务。在我们的实验中,我们表明,在预先训练好的DETR上训练的简单分割头可以在全景分割上超越竞争基线[ 19],这是一项具有挑战性的像素级识别任务,最近得到了普及。
2相关工作
我们的工作建立在多个领域的先前工作之上:集合预测的二部匹配损失、基于Transformer的编码器-解码器架构、并行解码和对象检测方法。
2.1集合预测
没有规范的深度学习模型可以直接预测集合。基本的集合预测任务是多标签分类(例如,计算机视觉背景下的参考文献请参见[40,33]),其中基线方法“一对一”不适用于诸如检测元素之间存在底层结构(即接近相同框)的问题。这些任务的第一个困难是避免重复。当前大多数检测器使用非最大抑制等后处理来解决此问题,但直接集预测不需要后处理。他们需要全局推理方案来模拟所有预测元素之间的交互,以避免冗余。对于恒定大小集预测,密集的完全连接网络[9]是足够的,但代价高昂。一般的方法是使用自回归序列模型,如递归神经网络[48]。在所有情况下,损失函数应通过预测的排列保持不变。通常的解决方案是基于匈牙利算法设计一个损失,以找到真值值和预测之间的二分匹配。这将强制执行置换不变性,并确保每个目标元素具有唯一的匹配。我们遵循二部匹配损失方法。然而,与大多数以前的工作相比,我们不再使用自回归模型,而是使用具有并行解码的Transformer,我们将在下面描述。
2.2Transformer和并行解码
Vaswani等人将Transformers作为一种新的基于注意力的机器翻译构建块引入。注意机制[ 2]是神经网络层,从整个输入序列中聚合信息。Transformers引入了自注意层,与非局部神经网络类似,它扫描序列的每个元素,并通过聚合整个序列的信息来更新。基于注意的模型的主要优点之一是其全局计算能力和完美的记忆能力,这使得它们比RNN更适合长序列。Transformers目前正在自然语言处理、语音处理和计算机视觉领域的许多问题中取代RNN[8,27,45,34,31]。
Transformer首先用于自回归模型,继早期的sequenceto序列模型[ 44]之后,一个接一个地生成输出标记。然而,令人望而却步的推理损失(与输出长度成比例,且难以批量)导致了在音频领域[ 29]、机器翻译领域[ 12,10]、词表示学习领域[ 8]以及最近的语音识别领域[ 6]的并行序列生成的发展。我们还结合了Transformer和并行解码,以在计算损失和执行集合预测所需的全局计算能力之间进行适当的权衡。
2.3目标检测
大多数现代目标检测方法都会根据一些初始猜测进行预测。两级探测器[37,5]预测boxw.r.t.提案,而单级方法预测w.r.t.锚[23]或可能的目标中心网格[53,46]。最近的研究[52]表明,这些系统的最终性能在很大程度上取决于这些初始猜测的确切设置方式。在我们的模型中,我们能够删除这种手工制作的过程,并通过使用绝对框预测w.r.t直接预测检测集来简化检测过程。输入图像而不是锚定。
基于集合的损失。
一些目标探测器[9,25,35]使用了二部匹配损失。然而,在这些早期的深度学习模型中,不同预测之间的关系仅用卷积层或完全连接层建模,手工设计的NMS后处理可以提高其性能。最近的探测器[ 37,23,53]在真值和预测之间使用非唯一分配规则,并使用NMS。
可学习的NMS方法[ 16,4]和关系网络[ 17]明确地建模了不同预测之间的关系,并加以注意。使用直接设置损失,它们不需要任何后处理步骤。然而,这些方法使用了额外的手工制作的上下文功能,如建议框坐标,以有效地建模检测之间的关系,同时我们寻找减少模型中编码的先验知识的解决方案。
经常性探测器。
最接近我们的方法是用于对象检测的端到端集预测[43]和实例分割[41,30,36,42]。与我们类似,他们使用基于CNN激活的编码器-解码器架构的二部匹配损失来直接生成一组边界框。然而,这些方法仅在小型数据集上进行评估,而不是根据现代基线进行评估。特别是,它们基于自回归模型(更准确地说是RNN),因此它们不会利用最近的Transformer进行并行解码。
3 DETR模型
检测中的直接集合预测有两个要素是必不可少的:(1)集合预测损失,它迫使预测和真值框之间进行唯一匹配;(2) 预测(在一次过程中)一组对象并对其关系建模的体系结构。我们在图2中详细描述了我们的体系结构。
3.1目标检测集预测损失
DETR在通过解码器的一次过程中推断出一组固定大小的N个预测,其中N被设置为明显大于图像中对象的典型数量。训练的主要困难之一是根据真值情况对预测对象(类别、位置、大小)进行评分。我们的损失在预测对象和真值对象之间产生最佳的二部匹配,然后优化特定对象(边界框)的损失。
让我们用y表示对象的基本真值集,而ˆy={yˆi}N i=1表示N个预测集。假设N大于图像中的对象数,我们也将y视为一组大小N,并用∅ (无对象)。为了找到这两个集合之间的二部匹配,我们搜索N个元素σ的置换∈ 损失最低的序列号:
其中,Lmatch(yi,yˆσ(i))是真值yi和指数σ(i)预测之间的成对匹配损失。在之前的工作(如[43])之后,使用匈牙利算法有效地计算了此最优分配。
匹配代价考虑了类别预测以及预测和真值框的相似性。基本真值集的每个元素i都可以看作是一个yi=(ci,bi),其中ci是目标类标签(可能是∅) 和bi∈ [0,1]4是一个向量,定义真值框中心坐标及其相对于图像大小的高度和宽度。对于指数σ(i)的预测,我们将ci类概率定义为ˆpσ(i)(ci),预测框定义为ˆbσ(i)。使用这些符号,我们将Lmatch(yi,yˆσ(i))定义为−1{ci6=∅}pˆσ(i)(ci)+1{ci6=∅}Lbox(bi,ˆbσ(i))。
这种寻找匹配的过程与启发式分配规则所起的作用相同,启发式分配规则用于将建议[37]或锚定[22]匹配到现代检测器中的真值对象。主要的区别是,我们需要找到一对一的匹配,以实现无重复的直接集预测。
第二步是计算损失函数,即前一步中匹配的所有对的匈牙利损失。我们定义的损失类似于常见目标探测器的损失,即类预测的负对数似然和后面定义的box损失的线性组合:
其中,ˆσ是在第一步(1)中计算的最佳分配。实际上,当ci=∅ 用系数10来解释阶级不平衡。这类似于Faster R-CNN训练程序如何通过二次抽样来平衡积极/消极提议[ 37]。请注意,对象和∅ 不依赖于预测,这意味着在这种情况下,损失是一个常数。在匹配损失中,我们使用概率ˆpσˆ(i)(ci)代替对数概率。这使得类预测项可公度为Lbox(·,·)(如下所述),并且我们观察到了更好的经验性能。
边界框丢失。
匹配损失和匈牙利损失的第二部分是为边界框打分的Lbox(·)。与许多探测器不同的是,它们作为一个整体进行盒预测∆ w、 r.t.一些初步猜测,我们直接进行框预测。虽然这种方法简化了实现,但也带来了损失相对比例的问题。即使相对误差相似,最常用的“1损失”对于小box和大box也会有不同的尺度。为了缓解这个问题,我们使用了“1损失”和广义IoU损失的线性组合,即规模不变的Liou(·,·)。总的来说,我们的box损失是Lbox(bi,ˆbσ(i)),定义为λiouLiou(bi,ˆbσ(i))+λL1 | bi− ˆbσ(i)| | 1,其中λiou,λL1∈ R是超参数。这两个损失通过批内对象的数量进行规范化。
3.2 DETR架构
整个DETR体系结构非常简单,如图2所示。它包含三个主要组件,我们将在下面描述:用于提取紧凑特征表示的CNN主干、编码器-解码器Transformer和用于进行最终检测预测的简单前馈网络(FFN)。
与许多现代检测器不同,DETR可以在任何深度学习框架中实现,该框架提供了一个通用的CNN主干和一个只有几百行的Transformer架构实现。在PyTorch中,DETR的推理代码可以在不到50行中实现[ 32]。我们希望,我们方法的简单性将吸引新的研究人员加入检测社区。
主干
从初始图像ximg开始∈ R 3×H0×W0(具有3个颜色通道2),传统的CNN主干生成较低分辨率的激活图f∈ R C×H×W。我们使用的典型值是C=2048和H,W=H0 32,W0 32。
Transformer编码器。
首先,1x1卷积将高级激活图f的通道维数从C降低到更小的维数d。创建新的特征图z0∈ R d×H×W。编码器需要一个序列作为输入,因此我们将z0的空间维度压缩为一维,从而生成d×HW特征图。每个编码器层都有一个标准体系结构,由一个多头自注意模块和一个前馈网络(FFN)组成。由于transformer体系结构是置换不变的,因此我们使用固定位置编码对其进行补充,这些编码被添加到每个注意层的输入中。我们根据补充材料对架构的详细定义,该定义遵循[ 47]中所述的定义。
Transformer解码器。
解码器遵循Transformer的标准架构,使用多头自和编码器-解码器注意机制转换大小为d的N个嵌入。与原始transformer不同的是,我们的模型在每个解码器层并行解码N个对象,而Vaswani等人[47]使用自回归模型预测输出序列,一次一个元素。我们将不熟悉这些概念的读者参考补充材料。由于解码器也是置换不变的,因此N个输入嵌入必须不同才能产生不同的结果。这些输入嵌入是学习的位置编码,我们称之为对象查询,与编码器类似,我们将它们添加到每个注意层的输入中。解码器将N个对象查询转化为一个输出嵌入。然后,通过前馈网络(在下一小节中描述)将它们独立解码为方框坐标和类标签,从而得到N个最终预测。该模型利用自身和编码器-解码器对这些嵌入的注意,利用对象之间的成对关系对所有对象进行全局推理,同时能够将整个图像用作上下文。
预测前馈网络(FFN)。
最终的预测由一个具有ReLU激活函数和隐藏维数d的三层感知器和一个线性投影层计算。FFN预测输入图像中box的归一化中心坐标、高度和宽度,线性层使用softmax函数预测类别标签。由于我们预测一个由N个边界框组成的固定大小的集合,其中N通常比图像中感兴趣的对象的实际数量大得多,因此需要一个额外的特殊类标签∅ 用于表示在插槽中未检测到任何对象。该类与标准对象检测方法中的“背景”类起着类似的作用。
辅助解码损失。
我们发现,在训练过程中,在解码器中使用辅助损失[1]很有帮助,尤其是有助于模型输出每个类的正确对象数。我们在每个解码器层之后添加预测FFN和匈牙利损失。所有预测FFN共享其参数。我们使用一个额外的共享层规范来规范来自不同解码器层的预测FFN的输入。
4个实验
我们表明,与快速的R-CNN相比,DETR在定量评估COCO方面取得了有竞争力的结果。然后,我们对结构和损失进行了详细的烧蚀研究,并提供了见解和定性结果。最后,为了证明DETR是一个通用且可扩展的模型,我们给出了全景分割的结果,在固定的DETR模型上只训练了一小部分扩展。我们提供代码和预训练模型,以在https://github.com/facebookresearch/detr.
数据集。
我们在COCO 2017检测和全景分割数据集上进行了实验[ 24,18],其中包含118k训练图像和5k验证图像。每个图像都使用边界框和全景分割进行注释。每个图像平均有7个实例,在训练集中,单个图像中最多有63个实例,在相同图像上从小到大不等。如果未指定,我们将AP报告为bbox AP,即多个阈值上的整数度量。为了与Faster R-CNN进行比较,我们报告了最后一个训练时期的验证AP,对于烧蚀,我们报告了过去10个时期的中位数超过验证结果。
技术细节。
我们使用AdamW[ 26]对DETR进行训练,将初始Transformer的学习率设置为10−4,主干到10−5,重量衰减到10−4.所有Transformer重量均使用Xavier init初始化[ 11],主干采用torchvision的ImageNet预训练ResNet模型[ 15],带有冻结的batchnorm层。我们报告了两种不同主干的结果:一种是ResNet50,另一种是ResNet-101。相应的模型分别称为DETR和DETR-R101。在[21]之后,我们还通过在主干的最后一个阶段添加一个膨胀,并从该阶段的第一个卷积中删除一个步幅来提高特征分辨率。相应的模型分别称为DETR-DC5和DETR-DC5-R101(扩张C5期)。这种修改将分辨率提高了两倍,从而提高了小型对象的性能,但编码器的自注意损失增加了16倍,导致计算损失总体增加了2倍。表1给出了这些模型和Faster R-CNN的FLOPs的完整比较。
我们使用比例放大,调整输入图像的大小,使最短边至少为480像素,最多为800像素,而最长边最多为1333像素[ 50]。为了通过编码器的自注意帮助学习全局关系,我们还在训练期间应用随机裁剪增强,将性能提高约1 AP。具体而言,列车图像以0.5的概率裁剪为随机矩形面片,然后再次调整为800-1333。对Transformer进行训练,默认下降值为0.1。在推理时,一些槽预测空类。为了优化AP,我们使用相应的置信度来覆盖这些得分第二高的时段的预测。与过滤空插槽相比,AP提高了2个点。其他训练超参数见A.4节。在我们的消融实验中,我们使用300个epoch的训练计划,200个epoch后学习率下降10倍,其中一个epoch是对所有训练图像的一次传递。在16个V100 GPU上训练300个epoch的基线模型需要3天,每个GPU有4个图像(因此总批量为64个)。与Faster R-CNN相比,我们训练了500个时期,学习速度在400个时期后有所下降。与较短的时间表相比,此时间表增加了1.5 AP。
4.1与Faster R-CNN的比较
Transformer通常由Adam或Adagrad优化器进行训练,训练时间很长,而且中途退出,DETR也是如此。然而,Faster R-CNN是用SGD进行训练的,数据扩充最少,我们不知道Adam或drop out的成功应用。尽管存在这些差异,我们仍试图使R-CNN基线更快更强。为了使其与DETR保持一致,我们将广义IoU(38)添加到box损失中,同样的随机裁剪增加和长期训练可以改善结果(13)。结果见表1。在顶部部分,我们展示了Detectron2 Model Zoo[50]对使用3x时间表训练的模型的Faster R-CNN结果。在中间部分,我们展示了相同模型的结果(带“+”),但使用9x计划(109个epoch)和所述增强进行了训练,总共增加了1-2个AP。在表1的最后一节中,我们展示了多个DETR模型的结果。为了在参数数量上具有可比性,我们选择了一个具有6个Transformer和6个解码器层(宽度为256)以及8个注意头的模型。与带有FPN的Faster R-CNN一样,该模型有41.3M的参数,其中23.5M在ResNet-50中,17.8M在Transformer中。尽管Faster R-CNN和DETR仍有可能随着训练时间的延长而进一步提高,但我们可以得出结论,在相同的参数数量下,DETR可以与Faster R-CNN竞争,在COCO val子集上达到42 AP。DETR实现这一目标的方法是通过提高APL(+7.8),但请注意,该模型仍落后于APS(-5.5)。具有相同参数数和类似FLOPs计数的DETR-DC5具有更高的AP,但在AP中仍然明显落后。Faster R-CNN和带有ResNet-101主干的DETR也显示出类似的结果。
4.2烧蚀
transformer解码器中的注意机制是建模不同检测的特征表示之间关系的关键组件。在烧蚀分析中,我们探讨了架构的其他组件和损失如何影响最终性能。在研究中,我们选择了基于ResNet-50的DETR模型,具有6个编码器、6个解码器层和256个宽度。该模型的参数为41.3M,在短时间和长时间内分别达到40.6和42.0 AP,运行速度为28 FPS,类似于具有相同主干的Faster R-CNN-FPN。
编码器层数。
我们通过改变编码器层的数量来评估全局图像级自注意的重要性(表2)。如果没有编码器层,总体AP下降了3.9个点,在大型对象上更显著的下降是6.0个AP。我们假设,通过使用全局场景推理,编码器对于分离对象很重要。在图3中,我们将训练模型的最后一个编码器层的注意力图可视化,重点放在图像中的几个点上。编码器似乎已经分离了实例,这可能简化了解码器的对象提取和定位。
解码器层数。
我们在每个解码层之后应用辅助损失(见第3.2节),因此,通过设计对预测FFN进行训练,以预测每个解码层输出的对象。我们通过评估在解码的每个阶段预测的对象来分析每个解码器层的重要性(图4)。AP和AP50在每一层之后都有所改善,在第一层和最后一层之间,总共有非常显著的+8.2/9.5 AP改善。由于其基于集合的损失,DETR在设计上不需要NMS。为了验证这一点,我们为每个解码器后的输出运行了一个标准NMS程序,其中包含默认参数[50]。NMS提高了来自第一个解码器的预测的性能。这可以解释为Transformer的单个解码层无法计算输出元素之间的任何互相关,因此容易对同一对象进行多个预测。在第二层和后续层中,激活过程中的自注意机制允许模型抑制重复预测。我们观察到,NMS带来的改善随着深度的增加而减少。在最后几层,我们观察到AP有一点损失,因为NMS错误地删除了真正的积极预测。
与可视化编码器注意类似,我们在图6中可视化解码器注意,用不同的颜色为每个预测对象的注意图着色。我们观察到解码器的注意力是相当局部的,这意味着它主要注意物体的四肢,如头部或腿部。我们假设,在编码器通过全局注意分离实例之后,解码器只需要注意端点来提取类和对象边界。
FFN的重要性。
Transformer内部的FFN可以被视为1×1卷积层,使得编码器类似于注意力增强卷积网络[3]。我们试图将其完全移除,只注意Transformer层。通过将网络参数的数量从41.3M减少到28.7M,只剩下Transformer中的10.8M,性能下降了2.3 AP,因此我们得出结论,FFN对于取得良好的效果非常重要。
位置编码的重要性。
在我们的模型中有两种位置编码:空间位置编码和输出位置编码(对象查询)。我们对固定编码和学习编码的各种组合进行了实验,结果见表3。输出位置编码是必需的,不能删除,因此我们尝试在解码器输入时传递一次,或者在每个解码器注意层添加到查询中。在第一个实验中,我们完全删除了空间位置编码,并在输入端传递了输出位置编码,有趣的是,模型仍然达到了32个以上的AP,与基线相比损失了7.8个AP。然后,我们在输入端一次性传递固定正弦空间位置编码和输出编码,就像在原始Transformer中一样[ 47],并发现与直接传递位置编码相比,这导致1.4 AP下降。将学习到的空间编码传递给注意者也会得到类似的结果。令人惊讶的是,我们发现不在编码器中传递任何空间编码只会导致较小的AP下降1.3 AP。当我们将编码传递给注意点时,它们会在所有层上共享,并且输出编码(对象查询)总是被学习的。
考虑到这些烧蚀,我们得出结论,Transformer组件:编码器中的全局自注意、FFN、多个解码器层和位置编码,都对最终的目标检测性能有显著贡献。
损失烧蚀。
为了评估匹配损失和损失的不同组成部分的重要性,我们训练了几个打开和关闭它们的模型。损失有三个组成部分:分类损失、`1包围盒距离损失和GIoU(38)损失。分类损失对于训练是必不可少的,并且无法关闭,因此我们训练了一个没有边界盒距离损失的模型,以及一个没有GIoU损失的模型,并与基线进行比较,在所有三种损失下进行训练。结果见表4。GIoU自身的损失占了模型性能的大部分,与基线相比仅损失0.7 AP,加上综合损失。如果不使用GIoU而使用'1,则效果不佳。我们只研究了不同损失的简单烧蚀(每次使用相同的权重),但其他组合方法可能会获得不同的结果。
4.3分析
解码器输出时隙分析
在图7中,我们对COCO 2017 val集合中所有图像的不同插槽预测的框进行了可视化。DETR为每个查询槽学习不同的专门化。我们观察到,每个插槽都有针对不同区域和box大小的几种操作模式。特别是,所有插槽都具有预测图像宽度框的模式(在绘图中间对齐的红点可见)。我们假设这与COCO中物体的分布有关。
泛化到看不见的实例数。
COCO中的某些类没有在同一图像中用同一类的多个实例很好地表示。例如,训练集中没有超过13只长颈鹿的图像。我们创建一个合成图像3来验证DETR的泛化能力(见图5)。我们的模型能够在图像上找到所有24只长颈鹿,这显然是分布不均的。这个实验证实了在每个对象查询中都没有很强的类专门化。
4.4全景分割的DETR
全景分割[19]最近引起了计算机视觉界的广泛注意。与Faster R-CNN[ 37]扩展为MaskR-CNN[ 14]类似,可以通过在解码器输出顶部添加Mask头来自然扩展DETR。在本节中,我们演示了这样一个头部可以通过以统一的方式处理东西类来产生全景分割。我们在COCO数据集的全景注释上进行了实验,该数据集除80个事物类别外,还有53个事物类别。
我们训练DETR预测COCO上的东西类和事物类的方框,使用相同的配方。为了使训练成为可能,需要预测框,因为匈牙利匹配是使用框之间的距离计算的。我们还添加了一个掩模头,用于预测每个预测框的二进制掩模,见图8。它将每个对象的transformer解码器的输出作为输入,并在编码器的输出上计算该嵌入的多头部(有M个头部)注意分数,以较小的分辨率为每个对象生成M个注意热图。为了进行最终预测并提高分辨率,使用了类似FPN的体系结构。我们在附录中更详细地描述了该体系结构。掩模的最终分辨率为第4步,每个掩模使用DICE/F-1损失[28]和焦点损失[23]进行独立监督。
面具头部可以联合训练,也可以分两步训练,我们只训练box的DETR,然后冻结所有重量,只训练面具头部25个epoch。实验上,这两种方法给出了相似的结果,我们报告了使用后一种方法的结果,因为它可以缩短总的挂钟时间训练。
为了预测最终的全景分割,我们只需在每个像素的Mask得分上使用argmax,并将相应的类别分配给生成的Mask。该程序确保最终掩模没有重叠,因此,DETR不需要经常用于对齐不同掩模的启发式方法。
训练详情。
我们按照边界框检测的方法训练DETR、DETR-DC5和DETR-R101模型,以预测COCO数据集中stuff和things类周围的框。新的面具头经过了25个epoch的训练(详情见补充)。在推断过程中,我们首先以低于85%的置信度过滤掉检测,然后计算每像素argmax以确定每个像素属于哪个Mask。然后,我们将同一材料类别的不同Mask预测折叠为一个,并过滤空的预测(小于4像素)。
主要结果。
定性结果如图9所示。在表5中,我们将我们的统一全景分割方法与几种不同对待事物和事物的既定方法进行了比较。我们报告了全景质量(PQ)和事物分解(PQth)和事物分解(PQst)。我们还报告了在任何全景后处理之前(在我们的案例中,在使用像素级argmax之前),MaskAP(根据things类计算)。我们表明,DETR的表现优于COCO val 2017上公布的结果,以及我们强大的PanopticFPN基线(为了公平比较,使用与DETR相同的数据扩充进行训练)。结果分解显示,DETR在stuff类中尤其占主导地位,我们假设编码器注意允许的全局推理是这一结果的关键因素。对于things类,尽管与MaskAP计算的基线相比,存在多达8个mAP的严重不足,但DETR获得了具有竞争力的PQth。我们还在COCO数据集的测试集上评估了我们的方法,并获得了46个PQ。我们希望,我们的方法将激发在未来工作中探索全景分割的完全统一模型。
5结论
我们提出了DETR,这是一种基于Transformer和二部匹配损失的直接集预测目标检测系统的新设计。该方法在具有挑战性的COCO数据集上实现了与优化Faster R-CNN基线相当的结果。DETR易于实现,并且具有灵活的体系结构,可以轻松扩展到全景分割,从而获得有竞争力的结果。此外,与速度Faster R-CNN相比,它在大型对象上的性能明显更好,这可能是由于自注意对全局信息的处理。
这种新的探测器设计也带来了新的挑战,特别是在小对象的训练、优化和性能方面。目前的探测器需要几年的改进才能应对类似问题,我们预计未来的工作将成功解决DETR的问题。
附录A
A、 1准备工作:多头注意层
因为我们的模型是基于Transformer架构的,所以我们在这里提醒大家注意机制的一般形式,我们使用这些注意机制来实现穷尽性。注意机制遵循[47],但位置编码的细节(见等式8)遵循[7]。
多头
维度为d的M个头的多头注意的一般形式是一个具有以下特征的函数(使用d 0=d M,并在次圈中给出矩阵/张量大小)
其中,Xq是长度Nq的查询序列,Xkv是长度Nkv的键值序列(为了便于说明,具有相同数量的通道d),T是用于计算所谓的查询、键值和值嵌入的权重张量,L是投影矩阵。输出的大小与查询序列的大小相同。为了在给出细节之前确定词汇,多头自注意(mh-s-attn)是特殊情况Xq=Xkv,即。
多头注意是简单地将M个单注意头串联起来,然后用L投影。通常的做法是使用剩余连接、退出和层规范化。换言之,表示X q=mh attn(Xq,Xkv,T,L)和X (q)注意头的串联,我们有
其中[;]表示通道轴上的串联。
单头
重量张量为T 0的注意头∈ R 3×d 0×d,由attn(Xq,Xkv,T0)表示,取决于额外的位置编码Pq∈ R d×Nq和Pkv∈ R d×Nkv。在添加查询和键位置编码后,它首先计算所谓的查询、键和值嵌入[7]:
其中,T 0是T 0 1、T0 2、T0 3的串联。然后,基于查询和关键字之间点积的softmax计算注意权重α,以便查询序列的每个元素注意键值序列的所有元素(i是查询索引,j是键值索引):
在我们的例子中,位置编码可以学习或固定,但对于给定的查询/键值序列,位置编码在所有注意层之间共享,因此我们不会将它们明确地写为注意的参数。在描述编码器和解码器时,我们给出了它们的精确值的更多细节。最终输出是由注意力权重加权的值的集合:第i行由attni(Xq,Xkv,T0)=PNkv j=1αi,jVj给出。
前馈网络(FFN)层
原始Transformer交替使用多头注意和所谓的FFN层[ 47],它们实际上是多层1x1卷积,在本例中具有M d输入和输出通道。我们考虑的FFN由两层具有ReLU激活的1x1卷积组成。在两层之后还有一个剩余连接/断开/分层形式,类似于等式6。
A、 2损失
为完整起见,我们详细介绍了我们方法中使用的损失。所有损失都通过批内对象的数量进行规范化。分布式训练必须格外小心:因为每个GPU都接收一个子批次,所以仅通过本地批次中的对象数进行规范化是不够的,因为通常子批次在GPU之间是不平衡的。相反,按所有子批次中的对象总数进行规格化很重要。
box体损失
与[41,36]类似,我们在损失中使用了一个软版本的联合交集,以及ˆb上的“1损失”:
式中λiou,λL1∈ R是超参数,Liou(·)是广义IoU[ 38]:
|.|表示“面积”,方框坐标的并集和交集用作方框本身的缩写。由bσ(i)和ˆbi的线性函数的最小/最大值计算并集或交点的面积,这使得损失在随机梯度下表现得足够好。B(Bσ(i),ˆbi)指包含Bσ(i),ˆbi的最大box(涉及B的面积也基于box坐标的线性函数的最小/最大值计算)。
骰子/F-1损失[ 28]
骰子系数与并集上的交集密切相关。如果我们用ˆm表示模型的原始Masklogits预测,m表示二进制目标Mask,则损失定义为:
其中σ是sigmoid函数。该损失通过对象的数量标准化
A、 3详细架构
图10给出了DETR中使用的Transformer的详细描述,以及在每个注意层传递的位置编码。来自CNN主干的图像特征通过transformer编码器传递,同时空间位置编码被添加到每个多头自注意层的查询和键中。然后,解码器接收查询(最初设置为零)、输出位置编码(对象查询)和编码器内存,并通过多个多头自注意和解码器-编码器注意生成预测类标签和边界框的最终集。可以跳过第一解码器层中的第一自注意层。
计算复杂性
编码器中的每个自注意都有复杂性O(d 2HW+d(HW)2):O(d 0d)是计算单个查询/键/值嵌入的损失(M d0=d),而O(d 0(HW)2)是计算一个头部的注意权重的损失。其他计算可以忽略不计。在解码器中,每个自注意都在O(D2N+dN2)中,编码器和解码器之间的交叉注意在O(D2(N+HW)+dNHW)中,这远低于编码器,因为实际上是N HW
FLOPs计算
鉴于快速R-CNN的FLOPs取决于图像中提案的数量,我们报告了COCO 2017验证集中前100张图像的平均FLOPs数量。我们使用Detectron2中的工具FLOPs计数操作符计算FLOPs[ 50]。我们对Detectron2模型使用它而不做任何修改,并将其扩展到DETR模型中考虑批量矩阵乘法(bmm)。
A、 4训练超参数
我们使用AdamW[ 26]训练DETR,改进重量衰减处理,设置为10−4.我们还应用了梯度剪裁,最大梯度范数为0.1。主干和Transformer的处理略有不同,我们现在讨论这两个方面的细节。
主干
ImageNet预训练主干ResNet-50从Torchvision导入,丢弃了最后一个分类层。主干批归一化权重和统计信息在训练期间冻结,这是在目标检测中广泛采用的做法。我们使用10的学习率微调主干−5.我们观察到,骨干网络的学习率大约比网络的其他部分小一个数量级,这对于稳定训练非常重要,尤其是在最初的几个时期。
Transformer
我们以10%的学习率训练Transformer−4.在层归一化之前,在每次多头注意和FFN后应用0.1的加性衰减。使用Xavier初始化随机初始化权重。
损失
我们使用'1和GIoU损失的线性组合分别使用λL1=5和λiou=2权重进行边界框回归。所有模型均使用N=100个解码器查询槽进行训练。
基线
我们增强的更快的RCNN+基线使用GIoU[38]损失以及边界框回归的标准“1损失”。我们进行了网格搜索以找到损失的最佳权重,最终模型仅使用GIoU损失,框回归任务和建议回归任务的权重分别为20和1。对于基线,我们采用与DETR中相同的数据扩充,并以9×时间表(约109个epoch)对其进行训练。所有其他设置与Detectron2 model zoo中的相同型号相同[ 50]。
空间位置编码
编码器激活与图像特征的相应空间位置相关。在我们的模型中,我们使用固定的绝对编码来表示这些空间位置。我们将原始Transformer编码推广到2D情况。具体来说,对于每个嵌入的两个空间坐标,我们分别使用具有不同频率的d 2正弦和余弦函数。然后我们将它们串联起来,得到最终的d通道位置编码。
A、 5其他结果
DETR-R101模型全景预测的一些额外定性结果如图11所示。
增加实例数
根据设计,DETR预测的对象数不能超过其查询槽数,即在我们的实验中为100个。在本节中,我们将分析DETR在接近该极限时的行为。我们选择一个给定类的标准方形图像,在10×10网格上重复该图像,并计算模型错过的实例的百分比。为了测试少于100个实例的模型,我们随机屏蔽了一些单元格。这确保了无论有多少可见对象,对象的绝对大小都是相同的。为了解释掩蔽的随机性,我们用不同的掩蔽重复实验100次。结果如图12所示。在不同的类中,这种行为是相似的,当多达50个实例可见时,模型会检测到所有实例,然后开始饱和并错过越来越多的实例。值得注意的是,当图像包含所有100个实例时,模型平均只检测到30个,这比图像仅包含全部检测到的50个实例时要小。模型的反直觉行为可能是因为图像和检测远离训练分布。
请注意,此测试是对设计分布之外的泛化的测试,因为只有很少的示例图像具有单个类的大量实例。从实验中很难区分两种类型的域外泛化:图像本身与每类对象的数量。但是,由于几乎没有COCO图像只包含同一类的很多对象,因此这种类型的实验代表了我们最大的努力,以了解查询对象是否过适合数据集的标签和位置分布。总的来说,实验表明,该模型不会过度拟合这些分布,因为它可以对多达50个对象进行近乎完美的检测。
A、 6 PyTorch推理代码
为了演示该方法的简单性,我们在清单1中包含了PyTorch和Torchvision库的推理代码。该代码使用Python 3.6+、PyTorch 1.4和Torchvision 0.5运行。请注意,它不支持批处理,因此它仅适用于使用分布式数据并行(DistributedDataParallel)进行推理或训练,每个GPU有一个图像。还请注意,为清晰起见,此代码在编码器中使用学习到的位置编码,而不是固定的,并且位置编码仅添加到输入中,而不是在每个Transformer层。进行这些更改需要超越PyTorch对transformers的实现,这会影响可读性。复制实验的完整代码将在会议之前提供。