DETR 是Facebook AI 研究院于2020年提出的一种端到端的目标检测新方法,它省略了大量人工设计的组件并且不需要NMS后处理。
论文地址:https://arxiv.org/pdf/2005.12872.pdf
对于DETR 的改进Deformable DETR 可以阅读:https://blog.csdn.net/weixin_40671425/article/details/121453942
我们提出了一种将目标检测视为直接集预测(set prediction)问题的新方法。我们的方法简化了检测pipeline,有效地消除了对许多手工设计组件的需求,例如非最大抑制程序(NMS)或anchor生成(anchor generation),这些组件明确地编码了我们关于任务的先验知识。新框架的主要成分称为 DEtection TRansformer 或 DETR,是基于集合的全局损失(set-based global loss),通过二分匹配强制进行唯一预测,以及转transformer encoder-decoder架构。给定一组固定的学习目标查询(objects queries)集,DETR 会推理目标和全局图像上下文的关系,以直接并行输出最终的预测集。与许多其他现代检测器不同,新模型在概念上很简单,不需要专门的库。 DETR 在具有挑战性的 COCO 目标检测数据集上展示了与完善且高度优化的 Faster RCNN 基线相当的准确性和运行时性能。此外,DETR 可以很容易地推广到以统一的方式产生全景分割。我们表明它显着优于竞争基准。训练代码和预训练模型可在 https://github.com/facebookresearch/detr 获得。
目标检测的目标是为每个感兴趣的目标预测一组边界框和类别标签。现代检测器通过在大量proposals [37,5]、anchor [23] 或窗口中心 [53,46] 上定义代理回归和分类问题,以间接方式解决此集合预测任务。它们的性能受到后处理步骤的显着影响,以折叠近似重复的预测,acnhor sets的设计以及将目标框分配给anchofrr的启发式 [52]。为了简化这些pipeline,我们提出了一种直接集预测(set prediction)方法来绕过代理任务。这种端到端的理念在复杂的结构化预测任务(例如机器翻译或语音识别)方面取得了重大进展,但尚未在目标检测方面取得重大进展:之前的尝试 [43,16,4,39] 要么添加其他形式的先验知识,或者尚未证明在具有挑战性的基准测试中具有强大的基线竞争力。本文旨在弥合这一差距。
我们通过将对目标检测视为直接集预测问题来简化训练pipeline。 我们采用基于transformer [47] 的encoder-decoder架构,这是一种流行的sequence预测架构。 Transformers 的自注意力(self attention)机制明确地对序列(sequence)中元素之间的所有成对交互进行建模,使这些架构特别适用于集合预测的特定约束,例如删除重复预测。
我们的DEtection TRansformer(DETR,参见图 1)一次预测所有目标,并使用一组损失函数进行端到端训练,该函数在预测目标和GT目标之间执行二分匹配。 DETR 通过删除编码先验知识的多个手工设计的组件(如空间anchor或NMS)来简化检测流程。 与大多数现有检测方法不同,DETR 不需要任何自定义层,因此可以在包含标准 CNN 和transformer类的任何框架中轻松复现。
图 1:DETR 通过将常见的 CNN 与transformer架构相结合,直接预测( 并行)最终检测集。 在训练期间,二分匹配使用GT框唯一地分配预测。 没有匹配的预测应该产生“no object”(空集)类预测。与之前关于直接集预测的大多数工作相比,DETR 的主要特征是二分匹配loss和tranaformer(非自回归)并行解码的结合 [29,12,10,8]。 相比之下,之前的工作侧重于使用 RNN 进行自回归解码 [43,41,30,36,42]。 我们的匹配损失函数唯一地将预测分配给GT目标,并且对预测目标的排列是不变的,因此我们可以并行检测目标。
我们在最流行的目标检测数据集 COCO [24] 上评估 DETR,与非常有竞争力的 Faster R-CNN 基线 [37] 相比。 Faster RCNN 经历了多次设计迭代,其性能自最初发布以来得到了极大的提升。 我们的实验表明,我们的新模型实现了可比的性能。 更准确地说,DETR 在大型目标上表现出明显更好的性能,这一结果可能是由transformer的非局部计算实现的(使用全局context)。 然而,它在小物体上的性能较低。 我们预计未来的工作将以与 FPN [22] 为 Faster R-CNN 所做的开发相同的方式改进这方面。
DETR 的训练设置与标准物体检测器有多种不同。 新模型需要超长的训练scheduler,并受益于transformer的辅助解码损失(auxiliary decoding losses)。 我们彻底探索了哪些组件对展示的性能至关重要。
DETR 的设计理念很容易扩展到更复杂的任务。 在我们的实验中,我们发现在预训练的 DETR 之上训练的简单分割head在全景分割 [19] 上优于竞争基线,这是一项最近流行的具有挑战性的像素级识别任务。
我们的工作建立在多个领域的先前工作之上:用于集合预测的二分匹配损失、基于transformer的编encoder-decoder架构、并行解码和目标检测方法。
没有规范的深度学习模型可以直接预测集合。基本的集合预测任务是多标签分类(参见例如 [40,33] 以获取计算机视觉背景下的参考),其中基线方法,one-vs-rest(一对多),不适用于检测等问题,其中存在潜在的元素之间的结构(即几乎相同的框)。这些任务的第一个困难是避免接近重复。大多数当前的检测器使用非极大值抑制等后处理来解决这个问题,但直接集预测是无后处理的。他们(集预测)需要对所有预测元素之间的交互进行建模以避免冗余的全局推理方案。对于恒定大小的集预测,密集的全连接网络 [9] 就足够了,但成本很高。一般的方法是使用自回归序列模型,例如循环神经网络 [48]。在所有情况下,损失函数应该通过预测的排列保持不变。通常的解决方案是基于匈牙利算法[20]设计一个损失,以找到真实和预测之间的二分匹配。这强制排列不变性,并保证每个目标元素都有唯一的匹配。我们遵循二分匹配损失方法。然而,与大多数先前的工作相比,我们远离自回归模型并使用具有并行解码的transformer,我们将在下面描述。
Vaswani 等人引入了transformer [47] 作为机器翻译的新方法,他是的基于注意力的构建块。 注意机制 [2] 是从整个输入序列聚合信息的神经网络层。 Transformers 引入了自注意力层,类似于非局部神经网络 [49],它扫描序列的每个元素并通过聚合整个序列的信息来更新它。 基于注意力的模型的主要优点之一是它们的全局计算和完美的记忆,这使得它们比 RNN 更适合长序列。 Transformer 现在正在自然语言处理、语音处理和计算机视觉中的许多问题中取代 RNN [8,27,45,34,31]。
Transformers 最初用于自回归模型,继早期的sequence-to-sequence模型 [44] 之后,一 一生成输出标记(tokens)。 然而,在音频[29]、机器翻译[12,10]、单词表示学习[8]、 以及最近的语音识别 [6]。 我们还将transformer和并行解码结合起来,以在计算成本和执行集合预测所需的全局计算的能力之间进行适当的权衡。
大多数现代目标检测方法都会根据一些初始猜测进行预测。 两阶段检测器 [37,5] 预测框 w.r.t.proposals,而单阶段方法进行预测 w.r.t. anchor [23] 或可能的目标中心网格 [53,46]。 最近的工作 [52] 表明这些系统的最终性能在很大程度上取决于设置这些初始猜测的确切方式(很依赖初始超参设置)。 在我们的模型中,我们能够通过使用绝对框预测w.r.t. 直接预测检测集来移除这种手工制作的过程并简化检测过程。 输入图像而不是anchor。
set-based loss:几个目标检测器 [9,25,35] 使用了二分匹配损失。 然而,在这些早期的深度学习模型中,不同预测之间的关系仅用卷积层或全连接层建模,手工设计的 NMS 后处理可以提高它们的性能。 最近的检测器 [37,23,53] 与 NMS 一起使用GT和预测之间的非唯一分配规则。
可学习的 NMS 方法 [16,4] 和关系网络 [17] 明确地对不同预测之间的关系进行建模。 使用直接set losses,它们不需要任何后处理步骤。 然而,这些方法使用额外的手工制作的上下文特征,如proposal框坐标来有效地建模检测之间的关系,同时我们寻找减少模型中编码的先验知识的解决方案。
循环检测器:与我们的方法最接近的是用于目标检测 [43] 和实例分割 [41,30,36,42] 的端到端集预测。 与我们类似,他们使用基于 CNN 激活的encoder-decoder架构的二分匹配损失来直接生成一组边界框。 然而,这些方法仅在小数据集上进行评估,而不是根据现代基线进行评估。 特别是,它们基于自回归模型(更准确地说是 RNN),因此它们不会利用最近的具有并行解码功能的transformer。
检测中的直接集合预测有两个要素是必不可少的:(1)强制预测框和GT框之间唯一匹配的集合预测损失; (2) 一种预测(在一次传递中)一组目标并对其关系建模的架构。 我们在图 2 中详细描述了我们的架构。
图 2:DETR 使用传统的 CNN backbone来学习输入图像的 2D 表示。 该模型将其展平并在将其传递到transformer encoder之前用位置编码对其进行补充(简单说就是送入transformer encoder层之前,需要把backbone学习到的feature map先进行1x1卷积进行通道压缩,然后把压缩后的feature map 拍平为一个vector和位置编码这个vector相加后再送入)。 然后,transformer decoder将少量固定数量的学习位置embeddings作为输入,我们称之为目标查询(object queries),并且另外注意编码器输出。 我们将decoder的每个输出embedding传递给一个共享的前馈网络 (FFN),该网络预测检测目标(类和边界框)或“无目标”类。DETR 在通过解码器的单次传递中推断出一组固定大小的 N 个预测,其中 N 设置为显着大于图像中的典型目标数量(N是预先设置的一个数,这个数远大于图像中要检测的目标)。 训练的主要困难之一是根据GT对预测目标(类别、位置、大小)进行评分。 我们的loss在预测目标和GT目标之间产生最佳二分匹配,然后优化特定于目标(边界框)的loss。
我们用 y 表示目标的GT集合, 表示 N 个预测集合。 假设 N 大于图像中目标的数量(所以一般N默认设置为一个比较大的数),我们也将 y 视为一组大小为 N 的集合,用空集(, 没有目标)填充的【简单说y是GT集合用空集填充到大小为N,和预测集大小一样】。 为了找到这两个集合之间的二分匹配,我们以最低代价搜索 N 个元素 的排列:
其中是GT 和具有索引 的预测之间的成对匹配成本(matching cost)。 根据先前的工作(例如[43]),使用匈牙利算法有效地计算了这个最佳分配。
匹配成本同时考虑了类别预测以及预测框和GT框的相似性。 GT集的每个元素 i 可以看作是一个 其中 是目标类标签(可能是空,因为GT集会用空元素填充到和预测相同的大小N)和 是一个向量,它定义了GT框中心坐标及其相对于图像大小的高度和宽度。 对于索引为 的预测,我们将类别 的概率定义为 ,将预测框定义为 。 使用这些符号,我们将定义为
这种寻找匹配的过程与用于将proposal [37] 或anchor[22] 匹配到现代检测器中的GT目标的启发式分配规则起着相同的作用。 主要区别在于我们需要找到一对一匹配的直接集合预测,而没有重复。
第二步是计算损失函数,即上一步中匹配的所有对(pairs)的匈牙利损失。 我们定义的损失类似于常见物体检测器的损失,即类预测的负对数似然和框损失的线性组合:
其中 是第一步 (1) 中计算的最佳分配(即代价最小的预测)。 在实践中,我们在 时, 降低对数概率项的权重。 以因子 10 来解释类别不平衡。 这类似于 Faster R-CNN 训练过程如何通过二次采样来平衡 正/负proposals [37]。 请注意,目标和空集不依赖于预测,这意味着在这种情况下cost是一个常数。 在匹配cost中,我们使用概率 而不是对数概率。 这使得类预测项与 (如下所述)相称,并且我们观察到了更好的经验表现。
整个 DETR 架构非常简单,如图 2 所示。它包含三个主要组件,我们将在下面进行描述:用于提取紧凑特征表示的 CNN backbone、一个encoder-decoder transformer和简单的前馈网络 (FFN) 进行最终的检测预测。
与许多现代检测器不同,DETR 可以在任何提供通用 CNN backbone和transformer架构的深度学习框架中实现,只需几百行代码。 在 PyTorch [32] 中,DETR 的推理代码可以用不到 50 行代码。 我们希望我们方法的简单性将吸引新的研究人员加入检测社区。
Backbone: 从初始图像 (具有3个颜色通道)开始,传统的 CNN backbone生成较低分辨率的激活图 。 我们使用的典型值是 C = 2048 和 。
Transformer encoder:首先,1x1 卷积将高层激活图 f 的通道维度从 C 减少到更小的维度 d。 创建一个新的特征图 (先对backbone 提取的feature map采用1x1的卷积进行通道压缩) 。 encoder需要一个sequence作为输入,因此我们将 z0 的空间维度折叠为一维,从而得到 d×HW的 特征图(dxHxW -》 dxHW)。 每个encoder层都有一个标准架构,由一个multi-head self-attention模块和一个前馈网络(FFN)组成。 由于transformer架构是排列不变的(即与顺序无关),我们用固定位置编码 [31,3] 补充它,这些编码被添加到每个注意力层的输入中。 我们遵循补充材料架构的详细定义,其遵循 [47] 中描述的定义。
Transformer decoder:decoder遵循transformer的标准架构,使用multi-head self-attention机制和encoder-decoder 注意力机制转换大小为 d 的 N 个embeddings。与原始transformer的不同之处在于,我们的模型在每个decoder层并行解码 N 个目标,而 Vaswani 等人 [47] 使用自回归模型一次预测一个元素的输出序列。我们建议不熟悉这些概念的读者参考补充材料。由于decoder也是排列不变的(与顺序无关),因此 N 个输入embeddings必须不同才能产生不同的结果。这些输入embeddings是被位置编码学习到的,我们称作目标查询(object queries),与encoder类似,我们将它们添加到每个注意力层的输入中。 N 个目标查询(object queries)被decoder转换为输出embeddings。然后通过前馈网络FFN(在下一小节中描述)将它们独立解码为框坐标和类标签,从而产生 N 个最终预测。在这些embeddings上使用self-attention和encoder-decoder attention,模型使用它们之间的成对关系将所有目标一起全局推理,同时能够使用整个图像作为上下文(context)。
预测前馈网络(FFNs):最终预测由具有 ReLU 激活函数和隐藏维度为 d 的 3 层感知器和线性投影层计算。 FFN 预测输入图像 w.r.t. box的归一化中心坐标、高度和宽度。线性层使用 softmax 函数预测类标签。 由于我们预测了一组固定大小的 N 个边界框,其中 N 通常远大于图像中感兴趣目标的实际数量,因此额外的特殊类标签 “空集” 用于表示槽内(slot)没有检测到物体。 此类在标准目标检测方法中扮演着与 “background” 类相似的角色。
辅助解码loss:我们发现在训练期间在decoder中使用辅助损失 [1] 很有帮助,尤其是帮助模型输出每个类别的正确目标数量。 我们在每个decoder层之后添加预测 FFN 和匈牙利损失(hungarian loss)。 所有预测 FFN 共享它们的参数。 我们使用额外的共享层范数(shared layer-norm)来规范化来自不同decoder层预测的 FFNs 输入。
我们表明,与 Faster R-CNN 相比,DETR 在 COCO 的定量评估中取得了有竞争力的结果。 然后,我们提供了架构和loss的详细消融研究,给出了insights和定性结果。 最后,为了表明 DETR 是一种通用且可扩展的模型,我们展示了全景分割的结果,仅在固定的 DETR 模型上训练了一个小的扩展。 我们在 https://github.com/facebookresearch/detr 提供代码和预训练模型来重现我们的实验。
Datasets:我们在 COCO 2017 检测和全景分割数据集 [24,18] 上进行实验,其中包含 118k 训练图像和 5k 验证图像。 每个图像都用边界框和全景分割进行标注。 每张图像平均有 7 个实例,训练集中的单个图像最多有 63 个实例,在相同的图像上从小到大。 如果未指定,我们将 AP 报告为 bbox AP,即多个阈值的积分指标。 为了与 Faster R-CNN 进行比较,我们报告了最后一个训练epoch的验证 AP,对于消融实验,我们报告了最后 10 个epoch的验证结果的中位数。
技术细节:我们用 AdamW [26] 训练 DETR,将初始transformer的学习率设置为 10-4,backbone 的学习率设置为 10-5,权重衰减设置为10-4。所有transformer权重都使用 Xavier init [11] 初始化,backbone使用来自 Torchvision 的 ImageNet 预训练 ResNet 模型 [15],并冻结的BN层。我们使用两种不同的backbone报告结果:ResNet-50 和 ResNet-101。相应的模型分别称为DETR和DETR-R101。following [21] ,我们还通过向backbone的最后阶段添加 dilation 并从该阶段的第一个卷积中移除stride来提高特征分辨率。相应模型分别称为DETR-DC5和DETR-DC5-R101(dilated C5 stage)。这种修改将分辨率提高了两倍,从而提高了小物体的性能,代价是encoder的self-attention成本增加了 16 倍,导致计算成本总体增加了 2 倍。表 1 中给出了这些模型和 Faster R-CNN 的 FLOP 的完整比较。
表1:用ResNet50和ResNet101 backbone在COCO验证集上和Faster RCNN比较。上面部分展示了在Detectron2上训练的Faster RCNN结果,中间部分展示了采用了GIoU,random crop 训练时增强和长达9倍训练schedule 的Faster RCNN结果,DETR 模型实现了与经过大量调整的 Faster R-CNN baseline相当的结果,具有较低的 但大大提高了 (DETR对大目标的检测效果更好,应该是采用了全局上下文信息带来的收益)。 我们使用 torchscript Faster R-CNN 和 DETR 模型来测量 FLOPS 和 FPS。 名称中没有 R101 的结果对应于 ResNet-50。
我们使用缩放增强(scale augmentation),调整输入图像的大小,使最短边至少为 480 像素,最多为 800 像素,而最长边最多为 1333 个pixel[50]。为了通过encoder的self-attention来帮助学习全局关系,我们还在训练期间应用了随机裁剪(random crop)增强,将性能提高了大约 1 个 AP。具体来说,将训练图像以 0.5 的概率裁剪为随机矩形块,然后再次将其大小调整为 800-1333。transformer 使用默认的 dropout 0.1 进行训练。在推理时,一些槽(slots)预测为空类。为了针对 AP 进行优化,我们使用相应的置信度用第二高的评分类别覆盖这些槽(slots)的预测(简单说,当一个slot预测为“空类”时,取该slot预测得分第二高的类别作为结果覆盖)。与过滤空槽(slot)相比,这将 AP 提高了 2 个点。其他训练超参数可以在 A.4 节中找到。对于我们的消融实验,我们使用 300 个 epoch 的训练scheduler,200 个 epoch 后学习率下降了 10 倍,其中单个 epoch 是一次遍历所有训练图像。在 16 个 V100 GPU 上训练 300 个 epoch 的baseline模型需要 3 天,每个 GPU 有 4 个图像(因此总batch size为 64)。为了与 Faster R-CNN 进行比较,我们训练了更长的scheduler,我们训练了 500 个 epoch,400 个 epoch 后学习率下降。与较短的scheduler相比,此scheduler增加了 1.5 个 AP。(缺点:训练epoch 从300涨到500,提升1.5个AP,表明DETR收敛很慢)。
Transformer 通常使用 Adam 或 Adagrad 优化器进行训练,训练时间很长,并且采用 dropout,这对于 DETR 也是如此。然而,Faster R-CNN 是用 SGD 训练的,采用最少的数据增强,我们不知道 Adam 或 dropout 的成功应用。尽管存在这些差异,我们仍试图使 Faster R-CNN 基线更强大。为了使其与 DETR 保持一致,我们将广义 IoU [38](GIoU) 添加到box loss、相同的随机裁剪增强和已知可改善结果的长期训练 [13]。结果如表 1 所示。在顶部,我们展示了来自 Detectron2 Model Zoo [50] 的 Faster R-CNN 结果,用于使用 3x scheduler训练的模型。在中间部分,我们展示了相同模型的结果(带有 "+"),但使用 9x scheduler(109 个ecpoch)和所描述的增强功能进行训练,总共增加了 1-2 个 AP。在表 1 的最后一部分,我们显示多个 DETR 模型的结果。为了在参数数量上具有可比性,我们选择了一个具有 6 个transformer和 6 个宽度为 256 的decoder层和 8 个attention head的模型。像具有 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 实现这一点的方式是通过提高 (+7.8),但是请注意,该模型在 (-5.5)上仍然落后。DETR-DC5 与相同数量的参数和相似的 FLOP 计数具有更高的 AP,但在上仍显着落后。 Faster R-CNN 和带有 ResNet-101backbone的 DETR 也显示了类似的结果。
transformer decoder中的注意力机制是对不同检测的特征表示之间的关系建模的关键组件。 在我们的消融分析中,我们探索了我们架构的其他组件和loss如何影响最终性能。 在研究中,我们选择了基于 ResNet-50 的 DETR 模型,具有 6 个encoder、6 个decoder层和 256 层宽度。该模型有 41.3M 参数,在短时间和长时间训练scheduler上分别达到 40.6 和 42.0 AP,并以 28 FPS 运行,类似于具有相同backbone的 Faster R-CNN-FPN。
encoder 层数:我们通过改变transformer层数来评估全局图像级self-attention的重要性(表 2)。 在没有encoder层的情况下,整体 AP 下降了 3.9 个点,在大型物体上下降了 6.0 个更显着的 AP。 我们假设,通过使用全局场景推理,encoder对于解开(disentangling)目标很重要。 在图 3 中,我们将训练模型的最后一个encoder层的注意力图(attentione maps)可视化,重点关注图像中的几个点。encoder似乎已经分离了实例,这可能会简化decoder的目标提取和定位。
表2:encoder尺寸的影响。 每行对应一个具有不同数量的encoder层和固定数量的decoder层的模型。 随着更多的encoder层,性能逐渐提高。
图3:一组参考点的encoder self-attention。 encoder能够分离单个实例。 在验证集图像上使用baseline DETR 模型进行预测。
decoder层数:我们在每个decoding层之后应用辅助损失(auxiliart losses)(参见第 3.2 节),因此,预测 FFN 设计训练从每个decoder层的输出中预测目标。我们通过评估将在decoding的每个阶段预测的目标来分析每个decoder层的重要性(图 4)。每一层后AP和AP50都有提升,在第一层和最后一层之间有非常显着的 AP提升 +8.2/9.5。由于其基于集合的损失(set-based loss),DETR 在设计上不需要 NMS。为了验证这一点,我们为每个decoder之后的输出运行了一个标准的 NMS 程序,其中包含默认参数 [50]。 NMS 提高了第一个decoder的预测性能。这可以解释为transformer的单个decoding层无法计算输出元素之间的任何互相关,因此容易对同一目标进行多次预测。在第二层和后续层中,激活上的自注意力机制允许模型抑制重复预测。我们观察到 NMS 带来的改进随着深度的增加而减少。在最后一层,我们观察到 AP 中的一个小损失,因为 NMS 错误地删除了正确的预测。
图4:每个decoder层后的 AP 和 AP50 性能。 评估单个长schedule baseline模型。 DETR 在设计上不需要 NMS,此图验证了这一点。 NMS 降低了最后几层的 AP,去除了 TP 预测,但提高了第一层解码器的 AP,去除了双重预测,因为第一层没有通信,并且略微提高了 AP50。
与可视化encoder attention类似,我们在图 6 中可视化decoder attention,用不同颜色为每个预测目标着色attention maps。 我们观察到decoder attention是相当局部(local)的,这意味着它主要关注目标的四肢,例如头部或腿部。 我们假设在encoder通过全局注意力分离实例后,decoder只需要注意四肢来提取类和目标边界。
图 6:可视化每个预测目标的decoder attention(来自 COCO val 集的图像)。 使用 DETR-DC5 模型进行预测。 对于不同的目标,注意力分数用不同的颜色编码。 decoder通常关注目标的四肢,例如腿和头。FFN的重要性:transformer内部的 FFN 可以被视为 1 × 1 卷积层,使encoder类似于注意力增强卷积网络 [3]。 我们试图完全移除它,只在transformer层留下注意力。 通过将网络参数数量从 41.3M 减少到 28.7M,仅在transformer中留下 10.8M,性能下降了 2.3 个 AP,因此我们得出结论,FFN 对于获得良好的结果很重要。
位置编码的重要性:我们的模型中有两种位置编码:空间位置编码和输出位置编码(object queries)。我们试验了固定编码和可学习编码的各种组合,结果见表 3。输出位置编码是必需的并且不能被删除,因此我们实验要么在decoder输入处传递一次它们,要么在每个decoder注意力层添加到queries中。在第一个实验中,我们完全去除了空间位置编码并在输入处传递输出位置编码,有趣的是,该模型仍然实现了超过 32 个 AP,与baseline相比损失了 7.8 个 AP。然后,我们在输入时传递固定的正弦空间位置编码和输出编码,就像在原始transformer [47] 中一样,并发现与在注意力中直接传递位置编码相比,这导致 1.4 个 AP 下降。传递给注意力的学习空间编码给出了类似的结果。令人惊讶的是,我们发现在encoder中不传递任何空间编码只会导致下降 1.3 个AP。当我们将编码传递给注意力时,它们在所有层之间共享,并且总是学习输出编码(object queries)。
表3:与具有固定正弦位置的baseline(最后一行)相比,不同位置编码的结果。 固定正弦位置编码是在encoder和decoder中的每个注意力层传递的编码。 学习到的embeddings在所有层之间共享。 不使用空间位置编码会导致 AP 显着下降。 有趣的是,在decoder中传递它们只会导致 AP 的轻微下降。 所有这些模型都使用学习到的输出位置编码。
鉴于这些消融,我们得出结论,transformer组件:encoder中的全局self-attention、FFN、多个decoder层和位置编码,都对最终的目标检测性能有显着贡献。
loss 消融:为了评估匹配成本和loss的不同组成部分的重要性,我们训练了几个模型来打开和关闭它们。 loss包含三个组成部分:分类loss、L1 边界框距离loss和 GIoU loss[38]。 分类loss对于训练是必不可少的,不能关闭,所以我们训练一个没有边界框距离loss的模型,一个没有 GIoU loss的模型,并与baseline比较,用所有三个loss训练。 结果如表 4 所示。 GIoU loss本身占模型性能的大部分,仅比baseline的组合loss损失 0.7 个AP 。 在没有 GIoU loss的情况下使用L1 loss显示出较差的结果。 我们只研究了不同loss的简单消融(每次使用相同的权重),但其他组合它们的方法可能会得到不同的结果。
表4:loss组件对 AP 的影响。 我们训练了两个模型,关闭了L1 loss和 GIoU 损loss,并观察只使用到L1 loss时的结果很差,但是当与 GIoU 结合使用时,APM 和 APL 得到了改善。 我们的baseline (最后一行)结合了两种loss。
decoder 输出slot分析:在图 7 中,我们可视化了 COCO 2017 验证集中所有图像的不同slot预测的框。 DETR 为每个query slot学习不同的specialization。 我们观察到每个slot都有几种操作模式,专注于不同的区域和框大小。 特别是,所有slot都具有预测图像宽度boxes的模式(可见于图中间对齐的红点)。 我们猜测这与 COCO 中目标的分布有关。
图7:对来自 COCO 2017 val 的所有图像的所有框预测的可视化,在 DETR decoder中总共 N = 100 个预测槽(slots)中的 20 个。 每个框预测都表示为一个点,其中心坐标位于按每个图像尺寸归一化的 1×1 正方形中。 这些点是用颜色编码的,所以绿色对应小框,红色对应大水平框,蓝色对应大垂直框。 我们观察到每个槽(slot)都学会了专注于具有多种操作模式的某些区域和boxes大小。 我们注意到几乎所有的槽(slot)都有一种预测大图像范围框的模式,这在 COCO 数据集中很常见。
泛化到未见数目的instancees:COCO 中的某些类在同一图像中不能用相同类的许多实例很好地表示。 例如,训练集中没有超过 13 只长颈鹿的图像。 我们创建了一个合成图像来验证 DETR 的泛化能力(见图 5)。 我们的模型能够在图像上找到所有 24 只长颈鹿,这显然是超出分布的。 这个实验证实在每个object queries中都没有很强的类专业化(class-specialization)。
全景分割 [19] 最近引起了计算机视觉社区的广泛关注。 类似于 Faster R-CNN [37] 到 Mask R-CNN [14] 的扩展,DETR 可以通过在decoder输出的顶部添加一个mask head来自然地扩展。 在本节中,我们展示了这样的head可以通过以统一的方式处理事物和事物类来产生全景分割 [19]。 我们对 COCO 数据集的全景注释进行了实验,该数据集除了 80 个事物类别(things categories)外,还有 53 个事物类别(stuff categories)。
我们训练 DETR 来预测 COCO 上的stuff and things 类的boxes,使用相同的配方。 训练需要预测框,因为匈牙利匹配是使用框之间的距离计算的。 我们还添加了一个mask head,它为每个预测框预测一个二进制mask,见图 8。它将transformer decoder输出的每个目标作为输入,并计算这个encoder输出embedding的multi-head(有 M 个头)attention 分数 ,以小分辨率为每个目标生成 M 个注意力热图。 为了进行最终预测并提高分辨率,使用了类似 FPN 的架构。 我们在补充中更详细地描述了架构。 masks的最终分辨率的stride为4,每个mask都使用 DICE/F-1 loss [28] 和focal loss [23] 独立监督。
mask head可以联合训练,也可以分两步训练,我们只训练boxes 的 DETR,然后冻结所有的权重,只训练mask head 25 个epoch。 实验上,这两种方法给出了相似的结果,我们使用后一种方法报告结果,因为它具有更短的总wall-clock训练时长。
为了预测最终的全景分割,我们只需在每个像素的mask分数上使用 argmax,并将相应的类别分配给生成的mask。 这个过程保证最终的mask没有重叠,因此,DETR 不需要经常用于对齐不同掩码的启发式 [19]。
训练细节:我们按照边界框检测的方法训练 DETR、DETR-DC5 和 DETR-R101 模型,以预测 COCO 数据集中stuff and things类周围的框。 新的mask head训练了 25 个epoch(详见补充)。 在推理过程中,我们首先以低于 85% 的置信度过滤掉检测,然后计算每个像素的 argmax 以确定每个像素属于哪个mask。 然后我们将同一材料类别的不同mask预测合二为一,并过滤空的mask(小于 4 个像素)。
主要结果:定性结果如图 9 所示。在表 5 中,我们将我们的统一全景分割方法与几种以不同方式处理things and stuff的既定方法进行了比较。我们报告全景质量 (PQ) 以及things的分解 (PQth) 和stuff (PQst)。我们还在任何全景后处理之前(在我们的例子中,在采用像素级 argmax 之前)报告;mask AP(在things classes上计算)。我们表明,DETR 在 COCO-val 2017 以及我们强大的 PanopticFPN baseline(使用与 DETR 相同的数据增强进行训练,以进行公平比较)上的已发布结果的表现优于已发表的结果。结果分解表明 DETR 在stuff classes中尤其占主导地位,我们假设encoder注意力允许的全局推理是该结果的关键因素。对于things class,尽管与mask AP 计算的baseling相比存在高达 8 mAP 的严重缺陷,但 DETR 获得了具有竞争力的 PQth。我们还在 COCO 数据集的测试集上评估了我们的方法,并获得了 46 个 PQ。我们希望我们的方法能在未来的工作中激发对全景分割的完全统一模型的探索。
表5: 在 COCO val 数据集上与最先进的方法 UPSNet [51] 和 Panoptic FPN [18] 的比较我们使用相同的数据增强重新训练 PanopticFPN作为DETR,以 18 倍的时schedule进行公平比较。 UPSNet 使用 1x schedule,UPSNet-M 是具有多尺度测试时间增强的版本。