提出了一种将对象检测视为直接的集合预测问题的新方法。我们的方法简化了检测管道,有效地消除了许多手工设计的组件的需要,如非最大抑制程序或锚定生成,显式地编码了我们对任务的先验知识。新框架的主要成分,称为DEtection TRansformer或DETR,是一个基于集合的全局损失,通过二部匹配迫使独特的预测,以及transformer encoder-decoder架构。给定一组固定的小型学习对象查询,DETR对对象和全局图像上下文之间的关系进行推理,以直接并行输出最终的预测集。与许多其他现代探测器不同,这个新模型在概念上很简单,不需要专门的库。DETR在具有挑战性的COCO目标检测数据集上展示了准确性和运行时性能,与完善和高度优化的Faster RCNN的基础网络相当。此外,DETR可以很容易地推广到以统一的方式产生全光分割。我们证明,它明显优于竞争的基础网络。培训代码和预先训练过的模型可在https://github.com/facebookresearch/detr
目标检测的目标是为每个感兴趣的对象预测一组边界框和类别标签。现代检测器以一种间接的方式解决这个集合预测任务,通过在大量建议[37,5]、锚定[23]或窗口中心[53,46]上定义anchor回归和分类问题。它们的性能受到崩溃接近重复预测的后处理步骤、锚点集的设计和将目标框分配给锚点[52]的启发式方法的显著影响。为了简化这些管道,我们提出了一种直接的集合预测方法来绕过anchor任务。这种端到端哲学导致了复杂结构化预测任务的重大进展,如机器翻译或语音识别,但尚未在目标检测:以前的尝试[43,16,4,39]要么添加其他形式的先验知识,要么没有被证明具有挑战性的基准。本文旨在弥补这一差距。
我们通过将目标检测视为一个直接的集合预测问题来简化训练管道。我们采用了一种基于transformer encoder-decoder结构,这是一种流行的序列预测结构。transformer的自我注意机制,明确地模拟了序列中元素之间的所有成对交互作用,使得这些架构特别适合于集合预测的特定约束,如删除重复的预测。
我们的DEtection TRansformer(DETR,见图1)一次预测所有对象,并使用一个集合损失函数进行端到端训练,该函数在预测对象和地面真实对象之间执行二部匹配。DETR通过删除多个手工设计的编码先验知识的组件来简化检测管道,如空间锚点或非最大抑制。与大多数现有的检测方法不同,DETR不需要任何定制的层,因此可以很容易地在任何包含标准CNN和transformer类的框架中复制。
与以往大多数的直接的集合预测工作相比,DETR的主要特征是二部匹配损失和transformer与(非自回归)并行解码[29,12,10,8]的结合。相比之下,之前的工作集中于RNN[43,41,30,36,42]的自回归解码。我们的匹配损失函数唯一地将一个预测分配给一个地面真实对象,并且对预测对象的排列是不变的,所以我们可以并行地发射它们。
我们在最流行的目标检测数据集之一COCO[24]上评估DETR,与一个非常具有竞争性的Faster R-CNN基线网络[37]。Faster RCNN经历了许多设计迭代,它的性能自最初发布以来有了很大的提高。实验表明,我们的新模型取得了类似的性能。更准确地说,DETR在大型对象上显示出了显著更好的性能,这一结果很可能是由transformer的非本地计算所实现的。然而,它在小物体上的性能较低。我们希望未来的工作将像FPN[22]对R-CNN的开发一样改进这方面。
DETR的训练设置在多种方面不同于标准的对象检测器。新的模型需要超长的训练计划,并受益于transformer中的辅助解码损失。我们将彻底探讨哪些组件对所演示的性能至关重要。
DETR的设计理念很容易扩展到更复杂的任务中。在我们的实验中,我们证明了一个在预先训练的DETR之上训练的简单分割头部超过了泛光分割[19]的竞争性的基线网络,这是一项具有挑战性的像素级识别任务,最近开始流行起来。
我们的工作建立在之前在几个领域的工作基础上:集合预测的二部匹配损失、基于transformer的编解码器架构、并行解码和目标检测方法。
没有规范的深度学习模型可以直接预测集合。基本的集合预测任务是多标签分类(例如,在计算机视觉中参见参考[40,33]),其中基线方法,one-vs-rest,不适用于检测元素之间存在底层结构的问题(即靠近的相同的真实框)。这些任务的第一个困难是避免近乎重复。目前的检测器使用后处理,如非最大抑制来解决这个问题,但直接预测集合是无后处理的。它们需要全局推理方案来建模所有预测元素之间的交互,以避免冗余。对于恒定大小集合预测,密集全连接网络[9]是足够的,但代价高昂。一般的方法是使用自回归序列模型,如递归神经网络[48]。在所有的情况下,损失函数应该是不变的排列的预测。通常的解决方案是设计一个基于匈牙利算法[20]的损失,以找到地面真实和预测之间的二部匹配。这加强了排列不变性,并保证每个目标元素都有一个唯一的匹配。我们遵循二部匹配损失的方法。然而,与之前的大多数工作相比,我们远离了自回归模型,并使用具有并行解码的transformer,我们将在下面描述。
Transformers是由Vaswani等人.[47]介绍的,作为一种新的基于注意力的机器翻译构建模块。注意机制[2]是一种从整个输入序列中聚合信息的神经网络层。Transformers引入了自注意层,类似于非局部神经网络[49],它会扫描一个序列中的每个元素,并通过聚合整个序列中的信息来更新它。基于注意力的模型的主要优点之一是其全局计算和完美的内存,这使得它们比rnn更适合于长序列。transformer正在自然语言处理、语音处理和计算机视觉[8,27,45,34,31]的许多问题上取代rnn。
transformer首先被用于自回归模型,遵循早期的序列到序列模型[44],逐个生成输出令牌。然而,高昂的推理成本(与输出长度成正比,难以批处理)导致了并行序列生成的发展,在音频[29]、机器翻译[12,10]、单词表示学习[8]和最近的语音识别[6]领域。我们还结合了transformer和并行解码,以便在计算成本和执行集合预测所需的全局计算的能力之间进行适当的权衡。
大多数现代的目标检测方法都是相对于一些初始的猜测而做出预测的。Two-stage检测器[37,5]预测盒w.r.t.建议,而单阶段的方法使预测w.r.t.锚定[23]或可能的对象中心[53,46]的网格。最近的工作[52]表明,这些系统的最终性能在很大程度上取决于这些初始猜测的确切设置方式。在我们的模型中,我们能够删除这个手工制作的过程,并通过使用绝对预测盒预测w.r.t.直接预测检测集来简化检测过程一个输入的图像,而不是一个锚点。
Set-based loss. 几个目标检测器[9,25,35]使用了二部匹配损失。然而,在这些早期的深度学习模型中,不同预测之间的关系仅用卷积层或全连接层进行建模,而手工设计的NMS后处理可以提高它们的性能。最近的探测器[37,23,53]使用地面真实框和预测之间的非唯一分配规则和NMS。
可学习的NMS方法[16,4]和关系网络[17]明确地模拟了不同预测之间的关系。使用直接集合损失,它们不需要任何后处理步骤。然而,这些方法使用额外的手工制作的上下文特性,如建议框坐标来有效地建模检测之间的关系,而我们则寻找减少模型中编码的先验知识的解决方案。
Recurrent detectors. 最接近我们的方法的是目标检测[43]和实例分割[41,30,36,42]的端到端集合预测。与我们类似,他们使用基于CNN激活的编解码器架构的二部匹配损失来直接产生一组边界框。然而,这些方法只在小数据集上进行评估,而不是根据现代基准数据集进行评估。特别是,它们是基于自回归模型(更准确地说是rnn),所以它们没有利用最近的并行译码 transformer。
在检测中,直接集合预测是必不可少的:(1)集合预测损失,迫使预测和地面真实盒之间的唯一匹配;(2)一种预测(在一次传递中)一组对象并建模它们的关系的架构。我们将在图2中详细描述我们的架构。
DETR在通过解码器的一次通道中推断出一组固定大小的N个预测,其中N被设置为明显大于图像中物体的典型数量。训练的主要困难之一是对预测的物体(类别、位置、大小)进行评分。我们的损失在预测对象和地面真实对象之间产生一个最优的二部匹配,然后优化特定对象的(边界框)损失。
让我们用y表示对象的地面真实集,用表示N个预测的集。假设N大于图像中的对象数量,我们也认为y是一组大小为N的集合,其中填充了∅(没有对象)。为了找到这两个集合之间的二部匹配,我们寻找了一个代价最低的N个元素的排列:
其中,是地面真值yi和具有索引σ(i)的预测之间的成对匹配代价。根据之前的工作(如[43]),匈牙利算法有效地计算这个最优分配。
匹配代价考虑了类预测和预测和地面真实框的相似性。每个元素i的地面真相集可以被视为一个,ci是目标类标签(可能是∅)和bi∈[0,1]4是一个向量,定义了地面真相盒中心坐标及其高度和宽度相对于图像大小。对于指数σ(i)的预测,我们将类的概率定义为,预测框定义为。通过这些符号,我们将)定义为。
这种寻找匹配的过程与现代探测器中用于匹配建议[37]或锚定[22]到地面真实对象的启发式分配规则起着相同的作用。主要的区别是,我们需要找到一对一匹配的直接集预测没有重复。
第二步是计算损失函数,即在上一步中匹配的所有对的匈牙利损失。我们对损失的定义类似于普通目标探测器的损失,即类预测的负对数似然和后面定义的真实框损失的线性组合:
其中,ˆσ是在第一步(1)中计算出的最优赋值。在实践中,当ci=∅时,我们将对数概率项降低10倍以解释类不平衡。这类似于Faster R-CNN训练过程如何通过对[37]进行子抽样来平衡正/负建议。请注意,对象和∅之间的匹配损失并不依赖于预测,这意味着在这种情况下,损失是一个常数。在匹配损失中,我们使用概率ˆpˆσ(i)(ci)而不是对数概率。这使得类预测项可以与Lbox(·,·)(如下所述)相比较,并且我们观察到更好的经验性能。
Bounding box loss. 匹配成本和匈牙利损失的第二部分是Lbox(·),它对边界框进行评分。不像许多探测器作为∆w.r.t.进行真实框预测有一些最初的猜测,我们会直接做出真实框预测。虽然这种方法简化了实现,但它提出了一个关于损失的相对缩放的问题。最常用的l1损失对于小盒子和大盒子将有不同的规模,即使它们的相对误差是相似的。为了缓解这个问题,我们使用了l1损失和广义IoU损失[38]Liou(·,·)的线性组合,这是尺度不变的。总的来说,我们的回归损失是Lbox(bi,ˆbσ(i)),定义为,其中λiou,λL1∈R是超参数。这两个损失按批处理内对象的数量进行标准化。
整体的DETR体系结构出奇的简单,如图2所示。它包含三个主要组件,我们将在下面描述:一个CNN主干来提取一个紧凑的特征表示,一个encoder-decoder transformer,和一个简单的前馈网络(FFN)来进行最终的检测预测。
与许多现代检测器不同,DETR可以在任何深度学习框架中实现,该框架提供了一个通用的CNN主干和一个只有几百行的转换器架构实现。DETR的推理代码可以在PyTorch[32]中在少于50行中实现。我们希望我们的方法的简单性将吸引新的研究人员到检测社区。
Transformer encoder. 首先,一个1x1的卷积将高级激活映射f的信道维度从C降低到一个更小的维度d。创建一个新的特征映射。编码器期望一个序列作为输入,因此我们将z0的空间维度折叠成一维,从而得到一个d×HW特征图。每个编码器层都有一个标准的架构,由一个多头自注意模块和一个前馈网络(FFN)组成。由于transformer架构是排列不变的,我们用固定的位置编码[31,3]来补充它,并添加到每个注意层的输入中。我们遵循补充材料中架构的详细定义,它遵循[47]中描述的定义。
Transformer decoder. 该解码器遵循transformer的标准体系结构,使用多头自解码器和编解码器注意机制转换N个大小为d的嵌入。与原始transformer的不同之处在于,我们的模型在每个解码器层并行解码N个对象,而Vaswani等人[47]使用一个自回归模型,每次预测一个元素的输出序列。我们将不熟悉这些概念的读者参考补充材料。由于解码器也是排列不变的,N个输入嵌入必须不同才能产生不同的结果。这些输入嵌入是被学习到的位置编码,我们将其称为对象查询,与编码器类似,我们将它们添加到每个注意层的输入中。N个对象查询被解码器转换为一个输出嵌入。然后,通过前馈网络(在下一节中描述)将它们独立解码为真实框坐标和类别标签,从而得到N个最终预测。在这些嵌入上使用自编码器和编解码器的注意,该模型使用它们之间的成对关系对所有对象进行全局推理,同时能够使用整个图像作为上下文。
Prediction feed-forward networks (FFNs). 最终的预测是由一个具有ReLU激活函数和隐藏维数d的3层感知器和一个线性投影层计算的。FFN预测方框w.r.t.的标准化中心坐标、高度和宽度输入图像和线性层使用softmax函数预测类标签。由于我们预测了一个固定大小的N个边界框集,其中N通常比图像中感兴趣的实际对象数量大得多,因此使用一个额外的特殊类标签∅来表示在一个槽内没有检测到任何对象。这个类在标准的对象检测方法中扮演着与“背景”类类似的角色
Auxiliary decoding losses. 我们发现在训练过程中使用解码器中的辅助损耗[1]很有帮助,特别是帮助模型输出每个类的正确对象数量。我们在每个解码器层后添加预测ffn和匈牙利损失。所有的预测ffn都有它们相同的参数。我们使用一个额外的共享层范数来将来自不同解码器层的预测ffn的输入规范化。
结果表明,在COCO的定量评价中,DETR比R-CNN取得了具有竞争力的结果。然后,我们提供了一个详细的消融研究的结构和损失,与见解和定性的结果。最后,为了证明DETR是一个通用的和可扩展的模型,我们给出了全光分割的结果,只在一个固定的DETR模型上训练一个小的扩展。我们提供了代码和预训练的模型来重现我们在https://github.com/facebookresearch/detr上的实验。
Dataset. 我们在COCO 2017检测和全光分割数据集[24,18]上进行了实验,其中包含118k个训练图像和5k验证图像。每幅图像都标注有边界框和全景分割。平均每张图像有7个实例,在训练集中的一个图像中有多达63个实例,在同一图像上从小到大。如果没有指定,我们将AP报告为bboxAP,即超过多个阈值的积分度量。为了与Faster R-CNN进行比较,我们报告了最后一个训练时期的验证AP,对于消融,我们报告了过去10个时期的验证结果的中位数。
Technical details. 我们用AdamW[26]训练DETR,将初始transformer的学习速率设置为10−4,主干的设置为10−5,权重衰减为10−4。所有transformer的权重都用Xavier init[11]初始化,而主干是使用imageNet预训练的ResNet模型[15]。我们报告了两种不同主干的结果:ResNet-50和ResNet-101。相应的模型分别被称为DETR和DETR-r101。 在[21]之后,我们还通过在主干的最后一个阶段添加一个扩展,并从该阶段的第一个卷积中删除一步,来提高特征分辨率。相应的模型分别被称为DETR-DC5和DETR-DC5-R101(扩张型C5期)。这种修改将分辨率提高了2倍,从而提高了小对象的性能,但代价是编码器的自我注意成本增加了16倍,导致计算成本总体增加了2倍。表1给出了这些模型的流量与Faster R-CNN的完整比较。
我们使用比例增强,调整输入图像的大小,使最短的边至少为480像素,最多为800像素,而最长的边最多为1333[50]。为了通过编码器的自我注意来帮助学习全局关系,我们还在训练过程中应用了随机裁剪增强技术,提高了大约1个AP的性能。具体地说,将一个训练图像以概率为0.5裁剪成一个随机的矩形窗口,然后再调整到800-1333。transformer的训练默认dropout值为0.1。在推理时,一些slots预测空类。为了优化AP,我们使用相应的置信度,用第二高的评分类来覆盖对这些slots的预测。与过滤掉空slots相比,这将AP提高了2个点。其他训练超参数详见A.4节。在我们的消融实验中,我们使用了300个epochs的训练计划,学习速率在200个epochs后下降了10倍,其中一个时期是比所有训练图像传递一次。在16 V100个GPU上训练300个epoch的基线模型需要3天,每个GPU有4张图像(因此总批处理大小为64张)。对于与Faster R-CNN相比的更长的时间表,我们训练500个epochs,在400个epochs后学习率下降。与较短的时间表相比,这个时间表增加了1.5 AP。
Transformers通常由Adam或Adagrad优化器进行训练,并且训练时间很长,并且使用dropout,DETR也是如此。然而,Faster R-CNN是用SGD和最小的数据增强来训练的,我们并没有意识到Adam或dropout的成功应用。尽管存在这些差异,我们还是试图使一个Faster R-CNN基线更强。为了将其与DETR对齐,我们在边框损失中添加广义IoU[38],相同的随机裁剪增强和长时间训练,以改善结果[13]。结果如表1所示。在顶部部分,我们展示了来自Detectron2 Model Zoo[50]的Faster R-CNN结果,用于用3x时间表训练的模型。 在中间部分,我们展示了相同模型的结果(“+”),但使用9个时间表(109个epochs)和描述的增强,总共增加了1-2个AP。在表1的最后一节中,我们展示了多个DETR模型的结果。为了在参数的数量上进行比较,我们选择了一个具有6个transformer和6个decoder层,宽为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)中仍然落后。具有相同参数数量和相似FLOP计数的DETR-DC5具有相同的AP更高,但在APS中也明显落后。使用ResNet-101骨干,Faster R-CNN和DETR也显示了类似的结果。
transformer解码器中的注意机制是建模不同检测的特征表示之间关系的关键组成部分。在我们的消融分析中,我们探讨了我们的体系结构的其他组件和损失如何影响最终的性能。在本研究中,我们选择了基于resnet-50的DETR模型,其中有6个编码器,6个解码器层,宽度为256。该模型有41.3M参数,在短时间和长调度上分别达到40.6和42.0 AP,在28FPS的情况下运行,类似于具有相同主干的Faster R-CNN-FPN。
Number of encoder layers. 我们通过改变编码器层的数量来评估全局图像提升自我注意的重要性(表2)。在没有编码器层的情况下,总体AP下降3.9点,大型物体下降6.0 AP。我们假设,通过使用全局场景推理,编码器对于解开对象是重要的。在图3中,我们可视化了一个训练模型的最后一个编码器层的注意图,重点关注图像中的几个点。编码器似乎已经分离了实例,这可能简化了解码器的对象提取和定位。
Number of decoder layers. 我们在每个解码层后应用辅助损耗(见第3.2节),因此,通过设计训练预测ffn,以预测每个解码器层的输出中的对象。我们通过评估在解码的每个阶段将被预测的对象来分析每个解码器层的重要性(图4)。AP和AP50在每一层后都有所改善,在第一层和最后一层之间总共达到了非常显著的+8.2/9.5AP的改善。由于DETR具有基于集合的损失,因此在设计上不需要NMS。为了验证这一点,我们在每个解码器后的输出运行一个带有默认参数[50]的标准NMS过程。NMS提高了来自第一个解码器的预测的性能。这可以解释为这样一个事实,即转换器的单一解码层不能计算输出元素之间的任何相互关联,因此它容易对同一对象进行多个预测。在第二层和随后的几层中,激活后的自我注意机制允许模型抑制重复的预测。我们观察到,NMS带来的改善随着深度的增加而减少。在最后一层,我们观察到AP的一个小损失,因为NMS错误地消除了真正的积极预测。
与可视化编码器注意类似,我们在图6中可视化解码器注意,将每个预测对象的注意地图用不同的颜色着色。我们观察到解码器的注意是相当局部的,这意味着它主要关注物体的四肢,如头部或腿。我们假设,在编码器通过全局注意分离出实例后,解码器只需要注意到末端就可以提取出类和对象的边界。
Importance of FFN. tranformers内部的FFN可以看作是1×1的卷积层,使得编码器类似于注意增强卷积网络[3]。我们试图完全删除它,只留下注意在tranformers层。通过将网络参数的数量从41.3M减少到28.7M,在tranformers中只剩下10.8M,性能下降了2.3AP,因此我们得出结论,FFN对于获得良好的结果很重要。
Importance of positional encodings. 在我们的模型中,有两种位置编码:空间位置编码和输出位置编码(对象查询)。我们用固定编码和学习编码的各种组合进行了实验,结果见表3。输出位置编码是必需的,不能删除,所以我们实验在解码器输入传递一次,或者在每个解码器注意层添加查询。在第一个实验中,我们完全删除了空间位置编码,并在输入时传递输出位置编码,有趣的是,该模型仍然实现了超过32 AP,比基线损失了7.8 AP。然后,我们在输入时传递固定的正弦空间位置编码和输出编码一次,就像在原始tranformers[47]中一样,并发现与直接传递位置编码相比,这导致了1.4 AP的下降。传递给注意力的学习的空间编码也会得到类似的结果。令人惊讶的是,我们发现在编码器中不传递任何空间编码只会导致AP小幅下降1.3AP。当我们将编码传递给注意力时,它们在所有层中共享,并且总是学习输出编码(对象查询)。
考虑到这些问题,我们得出结论,tranformers组件:编码器的全局自注意、FFN、多解码器层和位置编码,都对最终的目标检测性能有显著贡献。
Loss ablations. 为了评估匹配成本和损失的不同组成部分的重要性,我们训练了几个打开它们的模型。损失有三个组成部分:分类损失、l1边界框距离损失和GIoU[38]损失。分类损失对于训练是必不可少的,不能关闭,所以我们训练了一个没有边界框距离损失的模型和一个没有GIoU损失的模型,并与训练了所有三种损失的基线进行比较。结果见表4。GIoU本身的损失占了模型性能的大部分,仅损失0.7AP/基准,综合损失。使用不使用GIoU的l1的效果很差。我们只研究了不同损失的简单消融(每次都使用相同的权重),但其他组合它们的方法可能会得到不同的结果。
Decoder output slot analysis 在图7中,我们可视化了COCO 2017 val集中所有图像的不同slot预测的盒子。DETR为每个查询slot学习不同的专门化。我们观察到,每个slot都有几种操作模式,聚焦于不同的区域和盒子大小。特别是,所有的slot都有预测图像范围的方框的模式(在图中间对齐的红点可见)。我们假设这与COCO中物体的分布有关。
Generalization to unseen numbers of instances. COCO中的一些类不能用同一图像中同一类的许多实例很好地表示。例如,在训练集中没有超过13只长颈鹿的图像。我们创建了一个合成图像3来验证DETR的泛化能力(见图5)。我们的模型能够在图像上找到所有的24只长颈鹿,这明显超出了分布范围。这个实验证实了在每个对象查询中都没有很强的类专门化。
全光分割[19]最近引起了计算机视觉界的广泛关注。类似于Faster R-CNN[37]扩展到mask R-CNN[14],DETR可以通过在解码器输出上添加一个mask head来自然扩展。在本节中,我们演示了这样的头可以通过以统一的方式处理东西和事物类来产生全景分割[19]。我们在COCO数据集的泛视注释上进行了实验,该注释除了80个物体类别外,还有53个物体类别。
我们训练DETR来预测COCO类别上的预测框,使用相同的方法。预测边界框是训练可能的,因为匈牙利匹配是使用边界框之间的距离计算的。我们还添加了一个mask head,它预测每个预测框的二进制mask,见图8。它将每个对象的transformer decoder的输出作为输入,并在编码器的输出上计算该嵌入的多头(有M个头)注意力分数,在一个小的分辨率下为每个对象生成M个注意力热图。为了做出最终的预测并提高分辨率,我们使用了一个类似于FPN的架构。我们将在补充部分中更详细地描述了该体系结构。mask的最终分辨率为4个步长,每个mask使用DICE/F-1损失[28]和焦点损失[23]独立监督。
mask头可以联合训练,也可以分两步训练,我们只训练边界框上的DETR,然后冻结所有的权重,只训练 mask头25个epochs。实验上,这两种方法给出了相似的结果,我们报告使用后一种方法的结果,因为它导致更短的总挂时间训练。
为了预测最终的全景分割,我们只需在每个像素的mask分数上使用argmax,并将相应的mask分配给相应的类别。这个过程保证了最终的mask没有重叠,因此,DETR不需要一个通常用于对齐不同mask的启发式[19]。
Training details. 我们训练DETR、DETR-DC5和DETR-R101模型,按照边界框检测的方法,来预测COCO数据集中的物体和物体类周围的边界框。新的mask head经过了25个epochs的训练(详情见补充)。在推理过程中,我们首先过滤掉置信度低于85%的检测,然后计算每个像素的argmax,以确定每个像素属于哪个mask。然后,我们将相同内容类别的不同mask预测折叠在一个类别中,并过滤空的预测(小于4个像素)。
Main results. 定性结果如图9所示。在表5中,我们比较了我们的统一全视分段方法与几种已建立的不同处理事物的方法进行比较。我们报告Panopin质量(PQ)和things(PQth)和stuffff(PQst)的故障。我们还报告了mask AP(根据事物类计算),在任何全景处理后之前(在我们的案例中,在使用像素级的argmax之前)。我们发现,DETR优于COCO-val2017上发表的结果,以及我们强大的强PanopticFPN基线(使用与DETR相同的数据增强训练,以进行公平比较)。结果分解显示,DETR在东西类中尤其占主导地位,我们假设编码器注意所允许的全局推理是导致这个结果的关键因素。对于事物类,尽管与mask AP计算上的基线相比存在高达8 mAP的严重缺陷,但DETR获得了竞争性的PQth。我们还在COCO数据集的测试集上评估了我们的方法,得到了46PQ。我们希望我们的方法将启发在未来的工作中探索完全统一的模型的全景分割。
我们提出了一种基于transformer和二部匹配损失的目标检测系统的新设计。该方法在具有挑战性的COCO数据集上获得了与Faster R-CNN基准网络相当的结果。DETR易于实现,并具有灵活的架构,易于扩展到全景分割,具有具有竞争力的结果。此外,它在大型物体上的性能明显优于更快的R-CNN,这可能要归功于自我注意对全局信息的处理。
这种新的探测器设计也带来了新的挑战,特别是在训练、优化和性能方面。目前的探测器需要几年的改进来解决类似的问题,我们希望未来的工作能够成功地解决DETR的这些问题。
由于我们的模型是基于Transformer架构的,所以我们在这里提醒我们用于详尽性的注意机制的一般形式。注意机制遵循[47],除了在[7]后面的位置编码的细节(见公式8)。
Multi-head M个维数为d的多头注意的一般形式是一个具有以下特征的函数(使用,并在下括号中给出矩阵/张量大小)
其中为长度为的查询序列,为长度为的键值序列(为了便于说明,通道数d相同),T为计算所谓查询、键和值embeddings的权值张量,L为投影矩阵。输出与查询序列的大小相同。为了在给出细节之前修复词汇,多头自我注意(mh-s-attn)是特殊例,即。
多头注意仅仅是M个单个注意头的连接,然后用L进行投影。常见的做法[47]是使用残差连接、dropout和层归一化。换句话说,表示和是注意力头的连接,我们有
Single head 一个具有权重张量的注意头,用表示,依赖于额外的位置编码和。在添加查询和键位置编码[7]后,首先计算所谓的query, key and value embeding:
其中是的连接点。然后根据queries和keys之间的点积的softmax计算注意权重α,使查询序列中的每个元素关注键值序列中的所有元素(i是query索引,j是key-value索引):
在我们的例子中,位置编码可以被学习或固定,但对于给定的query/key-value 序列,它们在所有注意层中共享,因此我们不显式地将它们作为注意的参数。在描述编码器和解码器时,我们给出了关于它们的精确值的更多细节。最终的输出是由注意力权重加权的值的聚合:第i行由给出。
Feed-forward network (FFN) layers 原来的transformer交替使用多头注意力和所谓的FFN层[47],这实际上是有效的多层1x1卷积,在我们的情况下有Md的输入和输出通道。我们所考虑的FFN是由两层1x1的卷积组成的。在这两层之后还有一个残差连接//dropout/layernorm,类似于方程6。
为了完整性起见,我们详细介绍了在我们的方法中使用的损失。所有损失都按批处理内对象的数量进行标准化。分布式训练必须格外注意:由于每个GPU接收到一个子批,因此仅通过本地批中的对象数量进行规范化是不够的,因为通常子批在GPU之间不是平衡的。相反,必须通过所有子批中的对象总数进行规范化。
Box loss 与[41,36]类似,我们在损失中使用了软版本的IOU,在ˆb中使用了l1损失:
|.|的意思是“area”,框坐标的联合和交集被用作框本身的缩写。并集或交点的面积是由和的线性函数的最小值/最大值计算出来的,这使得损失对于随机梯度表现得足够良好。表示包含,的最大的方框(涉及B的区域也是根据方框坐标的线性函数的最小值/最大值计算的)。
DICE/F-1 loss DICE系数与联合号上的交叉路口密切相关。如果我们用ˆm表示模型的原始mask对数预测,用m表示二进制目标mask,则损失定义为:
其中σ是s型函数。这个损失由对象的数量归一化。
图10给出了在DETR中使用的transformer的详细描述,以及在每个注意层上传递的位置编码。来自CNN主干的图像特征通过transformer编码器,以及空间位置编码被添加到每个多层自注意层的查询和键中。然后,解码器接收queries(最初设置为零)、输出位置编码(对象queries)和编码器memory,并通过多个多头自注意和解码器-编码器注意生成最后一组预测的类标签和边界框。可以跳过第一解码器层中的第一自注意层。
Computational complexity 编码器中的每个自注意都具有复杂度是计算单个query/key/value embeddings(和)的成本,而是计算一个头部的注意权重的成本。其他的计算方法可以忽略不计。在解码器中,每个自注意在,编码器和解码器之间的交叉注意在,比实际中以来的编码器低得多。
FLOPS computation 考虑到Faster R-CNN的失败取决于图像中建议的数量,我们报告了COCO 2017验证集中前100张图像的平均失败次数。我们用探测器2[50]的工具故障计数算子计算失败。我们对探测器2模型使用它,并将其扩展到考虑批矩阵乘法(bmm)考虑DETR模型。
我们使用AdamW[26]训练DETR,改进了权重衰减处理,设置为10**−4。我们也应用了梯度剪切,其最大梯度范数为0.1。主干和transformer的处理略有不同,我们现在讨论两者的细节。
Backbone ImageNet预训练的主干ResNet-50是从Torchvision中导入的,丢弃了最后一个分类层。在训练过程中,Backbone批归一化权值和统计量被冻结,遵循在目标检测中广泛采用的做法。我们使用10**−5的学习率来调整主干。我们观察到,让主干学习率大约比网络的其他部分要小一个数量级,对于稳定训练很重要,特别是在前几个epoch。
Transformer 我们以10**−4的学习率训练transformer。每次多头注意后加dropout 0.1,层归一化前 dropout FFN。权值用Xavier初始化进行随机初始化。
Losses 我们使用l1和GIoU损失的线性组合,分别使用λL1=5和λiou=2的权值进行边界框回归。所有模型均采用N=100解码器query slots进行训练。
Baseline 我们增强的Faster-RCNN+基线使用GIoU[38]损失和标准的l1损失来进行边界框回归。我们进行了网格搜索,以找到损失的最佳权值,最终的模型分别在边界框和建议框回归任务中使用权重为20和1的GIoU损失。对于基线,我们采用与DETR中使用的相同的数据增强,并使用9×时间表(大约109个epoch)进行训练。所有其他设置都与Detectron2 model zoo[50]的相同模型相同。
Spatial positional encoding 编码器的激活与图像特征的相应空间位置相关联。在我们的模型中,我们使用一个固定的绝对编码来表示这些空间位置。我们采用将原始transformer[47]编码推广到二维情况[31]。具体来说,对于每个空间坐标的embeding,我们独立地使用不同频率的d/2正弦和余弦函数。然后,我们将它们连接起来,以得到最终的d信道位置编码。
对DETR-R101模型的泛光预测的一些额外的定性结果如图11所示。
Increasing the number of instances 根据设计,DETR不能预测比它有query slots更多的对象,即在我们的实验中是100。在本节中,我们将分析DETR在接近这个极限时的行为。我们选择一个给定类的标准正方形图像,在一个10×10网格上重复它,并计算该模型遗漏的实例的百分比。为了测试少于100个实例的模型,我们随机屏蔽了一些单元格。这确保了无论对象有多少是可见的,其绝对大小都是相同的。为了解释掩蔽的随机性,我们用不同的掩蔽重复实验100次。计算结果如图12所示。在类之间的行为是相似的,当模型检测多达50个可见时的所有实例时,然后它开始饱和并丢失越来越多的实例。值得注意的是,当图像包含所有100个实例时,模型平均只检测到30个,这比图像只包含50个全部检测到的实例要小。该模型的反直觉行为很可能是因为图像和检测结果远离训练分布。
请注意,这个测试是一种基于设计的泛化测试,因为很少有包含单个类实例的示例图像。很难从实验中分离出两种类型的域外泛化:图像本身和每个类的对象数量。但是,由于很少到没有COCO图像只包含同一类的大量对象,这种类型的实验代表了我们理解查询对象是否过度适合数据集的标签和位置分布的最大努力。总的来说,实验表明,该模型不会对这些分布进行过度拟合,因为它能产生多达50个物体的近乎完美的探测。
为了演示该方法的简单性,我们在清单1中包含了包含PyTorch库和火炬视觉库的推理代码。该代码使用Python3.6+、PyTorch 1.4和Torchvision libraries运行。请注意,它不支持批处理,因此它只适用于使用分布式数据并行算法进行推理或训练。还要注意,为了清晰起见,该代码在编码器中使用学习到的位置编码,而不是固定的,并且位置编码只添加到输入中,而不是在每个变压器层。做出这些更改需要超越transformer的PyTorch实现,这阻碍了可读性。重现实验的整个代码将在会议前提供。