End-to-End Object Detection with Transformers
使用 Transformer 进行端到端目标检测
EECV -2020年
摘要
我们提出了一种将对象检测视为直接集预测问题的新方法。我们的方法简化了检测管道,有效地消除了对许多手动设计组件的需求,例如非最大抑制程序或锚点生成,这些组件明确编码了我们关于任务的先验知识。称为 DEtection TRAnsformer 或 DETR 的新框架的主要成分是基于集合的全局损失,它通过二分匹配强制进行独特的预测,以及一个转换器编码器-解码器架构。给定一小组固定的学习对象查询,DETR 推理对象的关系和全局图像上下文以直接并行输出最终的预测集。与许多其他现代检测器不同,新模型在概念上很简单,不需要专门的库。DETR 在具有挑战性的 COCO 对象检测数据集上展示了与完善且高度优化的 Faster RCNN 基线相当的准确性和运行时性能。此外,DETR 可以很容易地推广,以统一的方式产生全景分割。我们表明它明显优于竞争基线。
DETR(Detection Transformer)是一种基于Transformer的端到端对象检测器,由FAIR提出,可以同时进行对象检测和对象分类。它在去除了先前检测器的复杂流程(如非极大值抑制)的情况下,仅使用Transformer和注意力机制来完成检测任务。相比于其他对象检测器,DETR的最大优势在于其可以端到端地训练,因此可以更好地控制整个系统的误差。
DETR的工作原理如下:它首先将图像的像素表示转换为一组特征向量,然后通过Transformer模型对这些向量进行处理。接下来,DETR使用一个“对象查询”(object query)向量,该向量被设计为每个可能的对象的嵌入表示。这个查询向量与Transformer中的每个特征向量进行点积,从而产生一组注意力权重。这些权重表征了每个特征向量与查询向量之间的关联程度。根据这些权重,DETR可以找到每个对象在特征向量集合中的位置,从而检测图像中的对象。
DETR使用了一个预测头来执行对象检测和分类任务。该预测头由两个全连接层组成,其中一个层用于预测对象的类别,另一个层用于预测对象的边界框。在训练期间,DETR使用交叉熵和平滑L1损失函数对分类和边界框预测进行训练。在预测期间,DETR使用一种称为匈牙利算法的算法来分配预测边界框和目标边界框之间的匹配。这个过程是通过最小化边界框预测与目标边界框之间的距离来完成的。
总的来说,DETR通过将对象检测和分类任务建模为一个端到端的Transformer模型,从而取得了令人瞩目的成果。它可以直接对整个图像进行处理,避免了之前对象检测方法中需要手动选择感兴趣区域的繁琐过程。它还通过将所有的信息都放在一个Transformer模型中,使得它可以处理不同尺寸和比例的对象。
引言
对象检测的目标是为每个感兴趣的对象预测一组边界框和类别标签。现代检测器以间接的方式处理这个集合预测任务,通过在一个大的建议集[ 37、5]、锚点[ 23 ]或窗口中心[ 53、46]上定义代理回归和分类问题。它们的性能受到后置处理步骤的显著影响,这些步骤可以使近重复的预测崩溃,锚集的设计以及将目标框分配给锚的启发式方法[ 52 ]。为了简化这些管道,我们提出了一种直接的集合预测方法来绕过代理任务。这种端到端的思想导致了诸如机器翻译或语音识别等复杂结构化预测任务的重大进展,但在目标检测方面还没有:先前的尝试[ 43、16、4、39]要么添加了其他形式的先验知识,要么在具有挑战性的基准测试上没有被证明具有强大的基线竞争力。本文旨在弥合这一鸿沟。
我们通过将对象检测视为直接的集合预测问题来简化训练管道。我们采用了基于Transformer [ 47 ]的编码器-解码器架构,这是一种流行的序列预测架构。Transformer的自注意力机制显式地建模了序列中元素之间的所有成对交互,这使得这些架构特别适用于集合预测的特定约束,例如删除重复预测。
我们的检测TRansformer ( DETR ,见图1)一次性预测所有对象,并使用集合损失函数进行端到端的训练,该损失函数在预测对象和真实对象之间执行二分匹配。DETR通过删除多个手工设计的编码先验知识的组件来简化检测管道,如空间锚点或非最大抑制。与大多数现有的检测方法不同,DETR不需要任何定制的层,因此可以很容易地在任何包含标准CNN和Transformer类的框架中重现。
与以往大多数直接集预测的工作相比,DETR的主要特点是二部匹配损失和transformer与(non-autoregressive)并行解码[ 29、12、10、8]的结合。相比之下,以前的工作集中于使用RNN [ 43、41、30、36、42]进行自回归解码。我们的匹配损失函数可以将一个预测结果唯一地分配给一个对应的真实目标,并且对于预测对象的任意排列都具有不变性,因此我们可以同时输出多个预测结果。
我们在最流行的物体检测数据集COCO [24]上对DETR模型进行了评估,并与非常有竞争力的Faster R-CNN基线模型[37]进行了比较。更快速的区域卷积神经网络自最初发布以来,经历了多次设计迭代,性能得到了极大的提升。我们的实验表明,我们的新模型取得了相当的性能。更准确地说,DETR在大物体上表现出了显著的优势,这一结果可能得益于Transformer模型中的非局部计算。然而,在小物体上表现较差。我们期望未来的工作能够像FPN [22]对Faster R-CNN一样改善这一方面的性能。
图1:DETR通过将普通CNN与变压器架构相结合,直接(并行)预测最终的检测集。在训练过程中,二分匹配通过地面真值框唯一地分配预测。没有匹配的预测应该产生一个"无对象" ($\varnothing$)类预测。
DETR的训练设置与标准目标检测器有多种不同。新模型需要超长的训练时间表,并从transformer中的辅助解码损失中获益。我们深入探究了哪些成分对展示的性能至关重要。
DETR的设计理念很容易扩展到更复杂的任务。在我们的实验中,我们展示了在预训练的DETR上训练的一个简单的分割头在全景分割[ 19 ]上的竞争基线,这是一个具有挑战性的像素级识别任务,最近得到了普及。
有关著作
我们的工作基于几个领域的先前工作:集合预测的二分匹配损失、基于转换器的编码器-解码器架构、并行解码和目标检测方法。
设置预测
没有规范的深度学习模型来直接预测集合。基本的集合预测任务是多标签分类(参见例如[ 40 , 33 ]在计算机视觉背景下的参考文献),而基准方法一对多不适用于元素(即,近乎相同的盒子)之间存在基础结构的检测等问题。这些任务中的第一个困难是避免图片相似。大多数当前检测器使用诸如非极大值抑制之类的后处理来解决此问题,但直接集预测是免后处理的。它们需要全局推断方案来建模所有预测元素之间的相互作用,以避免冗余。对于常规模的集合预测,稠密的全连接网络[ 9 ]是足够的但代价高昂的。一般的做法是使用自回归序列模型,如递归神经网络[ 48 ]。在所有情况下,损失函数都应该通过预测的置换保持不变。通常的解决方案是基于匈牙利算法 [20] 设计损失,以找到真实值和预测之间的二分匹配。这强制执行排列不变性,并保证每个目标元素都具有唯一的匹配项。我们遵循二分匹配损失方法。然而,与大多数先前的工作相比,我们远离自回归模型并使用具有并行解码的转换器,我们将在下面进行描述。
Transformers和并行解码
Transformers是由Vaswani等人[47]引入的一种基于注意力机制的机器翻译建模方法。注意力机制[2]是一种神经网络层,可以从整个输入序列中聚合信息。Transformers 引入了自注意力层,与非局部神经网络 [49] 类似,它扫描序列的每个元素并通过聚合来自整个序列的信息来更新它。基于注意力机制的模型的主要优点之一是它们的全局计算和完美的内存,这使得它们比长序列上的RNNs更适合。在自然语言处理、语音处理和计算机视觉[ 8、27、45、34、31]中的许多问题上,transformers正在取代RNN。
在早期的序列到序列模型[44]之后,Transformers首先被用于自回归模型中,逐个生成输出标记。然而,推理代价巨大(与输出长度成比例,并且难以批处理),这导致了并行序列生成的发展,在音频[29]、机器翻译[12,10]、词表示学习[8]等领域,以及最近的语音识别[6]中得到了应用。我们也结合了Transformer和并行解码的方法,以平衡计算成本和执行集合预测所需的全局计算的能力。
目标检测
现代大多数物体检测方法都是相对于一些初始猜测进行预测的。两阶段检测器[37,5]根据提议(proposal)预测边界框,而单阶段方法则根据锚点[23]或可能的物体中心的网格[53,46]进行预测。最近的研究[52]表明,这些系统的最终性能严重依赖于这些初始猜测设置的精确方式。在我们的模型中,我们能够消除这个手工制作的过程,并通过直接预测关于输入图像而不是锚点的绝对边界框预测来简化检测过程。
基于集合的损失函数。几个目标检测器[9,25,35]使用二分图匹配损失函数。然而,在这些早期的深度学习模型中,不同预测之间的关系仅由卷积或全连接层建模,而手动设计的NMS后处理可以提高它们的性能。更近期的检测器[37,23,53]使用非唯一的分配规则将真实目标和预测结果进行匹配,并结合NMS处理。
可学习的NMS方法[16,4]和关系网络[17]使用注意力明确地建模不同预测之间的关系。使用直接的集合损失,它们不需要任何后处理步骤。然而,这些方法使用额外的手工制作的上下文特征,例如proposal box坐标,以有效地建模检测之间的关系,而我们正在寻找减少模型中编码的先验知识的解决方案。
循环检测器。与我们的方法最接近的是用于目标检测[43]和实例分割[41,30,36,42]的端到端集合预测。与我们类似,它们使用基于CNN激活的编码器-解码器架构和二分图匹配损失来直接生成一组边界框。然而,这些方法仅在小型数据集上进行了评估,并且没有与现代基线进行比较。特别是,它们是基于自回归模型(更精确地说是RNN),因此没有利用最近的具有并行解码功能的transformers模型。
DETR模型
直接使用集合预测进行检测需要两个关键因素:(1)一种集合预测损失函数,它强制预测的盒子与真实盒子之间有唯一的匹配;(2)一种架构,可以在单个通道内预测一组对象并建模它们之间的关系。我们在图2中详细描述了我们的架构。
图2:DETR使用传统的CNN主干网络来学习输入图像的二维表示。该模型对其进行平铺,并在将其传入transformer编码器之前进行位置编码的补充。然后,transformer解码器将一小固定数量的学习位置嵌入(我们称之为对象查询)作为输入,并附加到编码器输出。我们将解码器的每个输出嵌入传递到共享的前馈神经网络(FFN),该网络预测检测(类别和边界框)或“无物体”类别。
这段描述介绍了 DETR 模型的架构,它包含两个主要部分:一个 CNN 特征提取器和一个 transformer 编码器-解码器。模型首先使用 CNN 提取输入图像的特征表示,并通过加入位置编码来增强这个表示。接着,模型使用 transformer 编码器将特征表示转换为一组向量,这些向量被送入 transformer 解码器,以及一些被称为“对象查询”的额外向量。解码器使用这些对象查询来生成一组对象,每个对象都由一个向量表示,并根据它们与编码器输出之间的关系进行注意力计算。最后,每个对象向量被送入一个共享的前馈网络,用于预测该对象的类别和边界框,或者表示它是一个“没有对象”的类别。
目标检测集合预测损失
DETR模型在一次解码过程中推断出固定大小的预测集合N,其中N被设置为显著大于图像中通常的物体数量。训练的主要困难之一是将预测的物体(类别、位置、大小)与真实物体进行得分。我们的损失函数会在预测对象和真实对象之间生成最优的二分图匹配,并优化对象特定的(边界框)损失。
我们用y表示对象的基本真值集,用$\hat{y}=\{ \hat{y_i} \}^N_{i=1}$表示N个预测的集合。假设N大于图像中物体的数量,我们也将y看作大小为N的集合,其中$\varnothing$(无物体)用于填充。为了在这两个集合之间找到二分图匹配,我们搜索 N 个元素的置换$ \sigma \in \mathfrak{S} _N$,其具有最低的代价:
$$ \hat{\sigma}= \mathop{\arg \min}\limits_{\sigma \in \mathfrak{s}_N }\sum^N_i \mathcal{L}_{match}(y_i,\hat{y}_{\sigma(i)}),\tag{1} $$
其中$\mathcal{L}_{match}(y_i,\hat{y}_{\sigma(i)})$是真值$y_i$和指标为$\sigma(i)$的预测之间的成对匹配代价。这个最优指派是通过Hungarian algorithm有效地计算的,遵循先前的工作(例如。[ 43 ] )。
匹配代价同时考虑了类别预测和预测与真实框的相似度。真值集的每个元素i可以看作一个$y_i = ( c_i , b_i)$,其中$c_i$是目标类标签(这可能是$\varnothing$),$b_i\in[ 0 , 1]^4$是定义真值框中心坐标及其相对于图像大小的高度和宽度的向量。对于指标为$\sigma ( i )$的预测,定义类$c_i$的概率为$\hat{p}_{\sigma(i)}(c_i)$,预测框为$\hat{b}_{\sigma(i)}$。利用这些记号,我们定义$\mathcal{L}_{match}(y_i,\hat{y}_{\sigma(i)})$为$- \mathbb{1}_{\{c_i \neq \varnothing \}}\hat{p}_{\sigma(c_i)}+\mathbb{1}_{\{c_i \neq \varnothing \}}\mathcal{L}_{box}(b_i,\hat{b}_{\sigma(i)})$。
在现代目标检测器中,用来将候选框 [37] 或先验框 [22] 分配给目标物体的启发式分配规则与DETR中寻找匹配的过程起着相同的作用。主要区别在于我们需要为没有重复的直接集预测找到一对一匹配。第二步是计算损失函数,对前一步匹配的所有成对匹配应用 Hungarian loss。我们将损失定义为常见目标检测器的损失的线性组合,即类别预测的负对数似然和稍后定义的框损失:
$$ \mathcal{L}_{Hungarian}(y,\hat{y})=\sum^N_{i=1}[-\log \hat{p}_{\hat{\sigma}(i)}(c_i)+\mathbb{1}_{\{ c_i \neq \varnothing \}}\mathcal{L}_{box}(b_i,\hat{b}_{\hat{\sigma}}(i))],\tag{2} $$
其中 $\hat{\sigma}$是在第一步 (1) 中计算的最优分配。在实践中,当$c_i=\varnothing$时,我们将对数概率项的权重降低 10 倍,以解决类别不平衡问题。这类似于 Faster R-CNN 训练过程如何通过子采样 [37] 来平衡正/负提议。请注意,对象和$\varnothing$之间的匹配成本不依赖于预测,这意味着在这种情况下成本是常数。在匹配成本中,我们使用概率$\hat{p}_{\hat{\sigma}(i)}(c_i)$而不是对数概率。这使得类别预测项与$\mathcal{L}_{box}(·,·)$(如下所述)相当,并且我们观察到更好的经验表现。
边界框损失。匹配成本和Hungarian loss的第二部分是对边界框进行评分的$ \mathcal{L}_{box}(·)$。与许多将边界框预测表示为与一些初始猜测的∆(delta)不同的检测器不同,我们直接进行边界框预测。虽然这种方法简化了实现,但它带来了损失的相对缩放问题。最常用的 $\mathscr{l}_1$ 损失对于小盒子和大盒子会有不同的尺度,即使它们的相对误差相似。为了缓解这个问题,我们使用 $\mathscr{l}_1$ 损失和广义 IoU 损失 [38] $\mathcal{L}_{iou}(·,·)$ 的线性组合,它是尺度不变的。总的来说,我们的盒子损失是$\mathcal{L}_{box}(b_i,\hat{b}_{\sigma(i)})$定义为 $ \lambda_{iou}\mathcal{L}_{iou}(b_i,\hat{b}_{\sigma(i)})+\lambda_{L1}||b_i-\hat{b}_{\sigma(i)}||_1 $其中 $\lambda_{iou},\lambda_{L1}\in \mathbb{R}$是超参数。这两个损失由批次内的对象数量归一化。
Hungarian loss(匈牙利损失)是指用于对象检测模型中,对匹配目标和预测目标之间的损失进行计算的一种方法。该方法利用匈牙利算法,寻找预测结果与真实结果之间的最优匹配方式,并将其应用于计算分类损失和边框回归损失。这种方法可以解决预测目标与真实目标之间多对多、一对多、多对一的情况,并且能够处理目标数量不同的图片,因此在对象检测中被广泛使用。
DETR架构
整个 DETR 架构非常简单,如图 2 所示。它包含三个主要组件,我们将在下面描述它们:一个CNN主干用于提取紧凑的特征表示,一个编码器-解码器transformer,以及一个简单的前馈网络(FFN),用于进行最终的检测预测。
与许多现代检测器不同,DETR可以在任何提供公共CNN骨干和transformer体系结构实现的深度学习框架中实现,只需几百行代码。DETR的推断代码在PyTorch中可以实现少于50行的代码。我们希望我们的方法的简单性能够吸引更多的研究人员加入到检测领域。
骨干网络。从初始图像 $x_{img} \in \mathbb{R}^{3×H_0×W_0}$(带有 3 个颜色通道$^2$)开始,一个传统的 CNN 骨干网络会生成一个较低分辨率的激活图 $f \in \mathbb{R}^{C×H×W}$。我们通常使用的值是$C = 2048 and H,W = \frac{H_0}{32},\frac{W_0}{32}$。
$2:$输入图像一起批处理,充分应用 0-padding 以确保它们都具有与批处理中最大图像相同的维度 (H0, W0)。
Transformer编码器。首先,$1\times 1$卷积将高级激活图f的通道维度从C减小到较小的维度d,创建一个新的特征图$z_0\in \mathbb{R}^{d\times H\times W}$。编码器期望输入一个序列,因此我们将$z_0$的空间维度折叠成一个维度,得到一个$d\times HW$特征图。每个编码器层具有标准架构,并包括一个多头自注意力模块和一个前馈网络(FFN)。由于Transformer架构是置换不变的,因此我们用固定的位置编码[31,3]补充它们,这些编码被添加到每个注意层的输入中。有关体系结构的详细定义,我们将在补充材料中进行介绍,该体系结构遵循[47]中描述的体系结构。
预测前馈网络(FFNs)。最终的预测由一个3层感知机和具有ReLU激活函数和隐藏维度d的线性投影层计算得出。FFN预测边界框相对于输入图像的标准化中心坐标、高度和宽度,而线性层则使用softmax函数预测类标签。由于我们预测的边界框数量N通常比图像中感兴趣的实际物体数量大得多,因此我们使用了一个额外的特殊类标签$\varnothing$来表示在一个空槽位中没有检测到任何对象。这个类别在标准物体检测方法中扮演类似“背景”类别的角色。
辅助解码损失。我们发现在训练期间在解码器中使用辅助损失[1]是有帮助的,尤其是帮助模型输出每个类别的正确物体数量。我们在每个解码器层后添加了预测的 FFN 和匈牙利损失。所有预测 FFN 共享其参数。我们使用一个额外的共享层归一化,将来自不同解码器层的预测 FFN 的输入归一化。
实验
我们表明,与 Faster 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,backbone为10−5,权重衰减为10−4。所有transformer权重都使用Xavier init [11]初始化,backbone则使用torchvision中的ImageNet预训练ResNet模型[15]并冻结batchnorm层。我们使用两个不同的backbone进行实验:ResNet50和ResNet-101。相应的模型分别称为DETR和DETR-R101。遵循[21]的方法,我们还通过在backbone的最后一个阶段添加扩张卷积并从该阶段的第一个卷积中移除步幅来增加特征分辨率。相应的模型分别称为DETR-DC5和DETR-DC5-R101(扩张C5阶段)。此修改将分辨率增加了两倍,因此改善了小物体的性能,但编码器中的自注意力计算代价也增加了16倍,导致总体计算代价增加了2倍。这些模型和Faster R-CNN的FLOP的完整比较见表1。
表 1:在 COCO 验证集上与具有 ResNet-50 和 ResNet-101 主干的 Faster R-CNN 进行比较。顶部显示了 Detectron2 [50] 中 Faster R-CNN 模型的结果,中间部分显示了具有 GIoU [38]、随机裁剪训练时间增强和长 9x 训练计划的 Faster R-CNN 模型的结果。 DETR 模型实现了与经过大量调整的 Faster R-CNN 基线相当的结果,具有较低的 APS 但大大提高了 APL。我们使用 torchscript Faster R-CNN 和 DETR 模型来测量 FLOPS 和 FPS。名称中没有 R101 的结果对应于 ResNet-50。
我们使用比例增强,调整输入图像的大小,使最短边至少为 480 像素,最多为 800 像素,而最长边最多为 1333 [50]。为了帮助通过编码器的自注意力学习全局关系,我们还在训练期间应用了随机裁剪增强,将性能提高了大约 1 AP。具体来说,训练图像以 0.5 的概率裁剪为随机矩形块,然后再次调整大小为 800-1333。 Transformer 使用默认的 0.1 dropout 进行训练。在推理时,一些插槽预测空类。
我们使用尺度增强技术,将输入图像的最短边大小限制在480至800像素之间,最长边最大为1333 [50]。为了帮助编码器通过自注意力学习全局关系,在训练过程中还应用了随机裁剪数据增强技术,这可提高大约1个AP的性能。具体而言,训练图像有50%的概率被裁剪成随机矩形区域,然后将其重新调整为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个epoch,其中学习率在400个epoch后下降。这个计划比短计划增加了1.5个AP。
与 Faster R-CNN 的比较
Transformer通常使用Adam或Adagrad优化器进行训练,需要非常长的训练周期和dropout,DETR也不例外。然而,Faster R-CNN使用SGD进行训练,数据增强很少,我们不知道Adam或dropout的成功应用。尽管存在这些差异,我们试图使Faster R-CNN基线更加强大。为了与DETR保持一致,我们在盒子损失中添加广义IoU[38]、相同的随机裁剪增强和长时间的训练以提高结果[13]。结果如表1所示。在顶部部分,我们展示了使用3x训练计划在Detectron2模型动物园[50]中训练的Faster R-CNN模型的结果。在中间部分,我们展示了使用9x训练计划(109个时期)和上述增强训练的相同模型的结果(带“+”),这总共增加了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验证子集上实现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,运行速度为28 FPS,类似于具有相同backbone的Faster R-CNN-FPN。
编码器层数。我们通过改变编码器层数来评估全局图像级自注意力的重要性(见表2)。没有编码器层,整体AP下降3.9个点,大物体的下降更为显著,达到6.0个点。我们猜测,通过使用全局场景推理,编码器对于分离物体非常重要。在图3中,我们展示了训练模型最后一个编码器层的注意力图,关注图像中的几个点。编码器似乎已经将实例分开,这可能简化了解码器的对象提取和定位。
表 2:编码器尺寸的影响。每行对应一个具有不同数量的编码器层和固定数量的解码器层的模型。随着编码器层数的增加,性能逐渐提高。
图 3:一组参考点的编码器自注意力。编码器能够分离各个实例。预测是在验证集图像上使用基线 DETR 模型进行的。
解码器层数。我们在每个解码器层之后应用辅助损失(参见第3.2节),因此预测的前馈神经网络被设计为从每个解码器层的输出中预测对象。我们通过评估每个解码阶段将预测的对象进行分析(图4),从而分析每个解码器层的重要性。每一层后的AP和$AP_{50}$都会有所提高,最后一层与第一层相比总共提高了非常显著的8.2/9.5 AP。由于DET使用基于集合的损失,因此不需要NMS。为了验证这一点,我们对每个解码器的输出运行了标准的NMS过程,使用默认参数[50]。NMS改善了第一个解码器的预测性能。这可以解释为:变压器的单个解码层无法计算输出元素之间的任何交叉相关性,因此容易对同一对象进行多次预测。在第二个及以后的层中,激活上的自我注意机制允许模型抑制重复的预测。我们观察到NMS带来的改进随着深度的增加而减少。在最后几层中,我们观察到AP略有下降,因为NMS错误地删除了真正的正样本预测。
图 4:每个解码器层之后的 AP 和 $AP_{50}$ 性能。评估单个长进度基准模型。 DETR 在设计上不需要 NMS,这张图验证了这一点。 NMS 降低了最后一层的 AP,去除了 TP 预测,但提高了第一层解码器的 AP,去除了双重预测,因为第一层没有通信,并且略微提高了 $AP_{50}$。
与可视化编码器注意力类似,我们在图6中可视化解码器注意力,将每个预测对象的注意力映射以不同的颜色着色。我们观察到,解码器的注意力比较局部,即它主要关注物体的极端部位,例如头部或腿部。我们假设,在编码器通过全局注意力分离实例之后,解码器只需要关注极端部位,以提取类别和物体边界。
图 6:可视化解码器对每个预测对象的关注(来自 COCO 验证集的图像)。使用 DETR-DC5 模型进行预测。注意力分数针对不同的对象使用不同的颜色进行编码。解码器通常关注对象的四肢,例如腿和头。最好以彩色观看。
FFN 的重要性。在transformer中的FFN可以看作是1x1卷积层,这使得编码器类似于具有注意力增强的卷积网络[3]。我们尝试完全移除FFN,只保留transformer层中的注意力。通过将网络参数数量从41.3M减少到28.7M,只保留transformer中的10.8M,性能下降了2.3个AP,因此我们得出结论,FFN对于实现良好的结果是重要的。
位置编码的重要性我们的模型中有两种位置编码:空间位置编码和输出位置编码(对象查询)。我们尝试了各种固定和学习的编码组合,结果可以在表3中找到。输出位置编码是必需的,不能删除,因此我们尝试将它们一次传递给解码器输入或在每个解码器注意层添加到查询中。在第一个实验中,我们完全删除了空间位置编码,并在输入处传递输出位置编码,有趣的是,模型仍然实现了超过32的AP,与基线相比丢失了7.8 AP。然后,我们只在输入处一次传递了固定的正弦空间位置编码和输出编码,与原始transformer[47]中直接在注意力中传递位置编码相比,发现这会导致1.4 AP的降低。传递到注意力中的学习空间编码给出类似的结果。令人惊讶的是,我们发现在编码器中不传递任何空间编码只会导致1.3 AP的小幅降低。当我们将编码传递给注意力时,它们在所有层之间共享,而输出编码(对象查询)始终是学习的。
表 3:与具有固定正弦位置的基线(最后一行)相比,不同位置编码的结果。在编码器和解码器的每个注意层传递的编码。学到的嵌入在所有层之间共享。不使用空间位置编码会导致 AP 显着下降。有趣的是,将它们传递给解码器只会导致轻微的 AP 下降。所有这些模型都使用学习输出位置编码。
鉴于这些消融,我们得出结论,transformer 组件:编码器中的全局自注意力、FFN、多个解码器层和位置编码,都对最终的对象检测性能有显着贡献。
损失消融。为了评估匹配成本和损失中不同组成部分的重要性,我们训练了几个模型并打开和关闭了它们。损失有三个组成部分:分类损失、1个边界框距离损失和GIoU [38]损失。分类损失对于训练是必不可少的,无法关闭,因此我们训练了一个没有边界框距离损失的模型和一个没有GIoU损失的模型,并与基准模型进行比较,该基准模型使用了所有三个损失。结果见表4。单独使用GIoU损失占据了大部分模型性能,仅比使用所有三个损失的基准模型低0.7 AP。只使用$\mathscr{l}_1$而不使用GIoU则表现不佳。我们只研究了不同损失的简单削减(每次使用相同的权重),但其他组合它们的方法可能会获得不同的结果。
表 4:损耗成分对 AP 的影响。我们训练了两个模型,关闭 $\mathscr{l}_1$ 损失和 GIoU 损失,并观察到 $\mathscr{l}_1$本身的结果很差,但是当与 GIoU 结合使用时,$AP_M$ 和 $AP_L$ 会得到改善。我们的基线(最后一行)结合了这两种损失。
分析
解码器输出插槽分析:在图7中,我们可视化了DETR在COCO 2017验证集中所有图像中不同插槽预测的框。DETR为每个查询插槽学习了不同的专业化。我们观察到每个插槽都有几种操作模式,专注于不同的区域和框大小。特别地,所有插槽都有预测整个图像的框的模式(在图的中间对齐的红点可见)。我们假设这与COCO中对象的分布有关。
图7:DETR解码器中20个预测插槽中的所有图像来自COCO 2017验证集的所有框预测可视化,其中N=100。每个框预测表示为具有其中心坐标的点,通过每个图像大小进行归一化,使其落在1×1的正方形中。这些点的颜色编码为绿色表示小框,红色表示大水平框,蓝色表示大垂直框。我们观察到每个插槽都学习了在某些区域和框大小上专业化的几种操作模式。我们注意到,几乎所有插槽都有一种预测大型图像宽框的模式,在COCO数据集中很常见。
对于未见过的实例数量的泛化能力。COCO数据集中的某些类别在同一张图像中可能没有太多实例,例如训练集中没有一张图像包含超过13只长颈鹿。我们创建了一张合成图像(参见图5)来验证DETR的泛化能力。我们的模型能够找到图像中所有24只长颈鹿,这显然是超出了分布范围。该实验证实了每个物体查询中没有强的类别专业化。
图 5:稀有类的分布泛化。即使训练集中没有图像有超过 13 只长颈鹿,DETR 也可以毫不费力地泛化到 24 只或更多的同一类实例。
用于全景分割的 DETR
全景分割[19]最近引起了计算机视觉社区的广泛关注。与将Faster R-CNN [37]扩展到Mask R-CNN [14]类似,DETR可以自然地通过在解码器输出之上添加一个掩码头来进行扩展。在本节中,我们证明这样的头部可以用于生成全景分割[19],通过以统一的方式处理杂物和物品类别。我们在COCO数据集的全景注释上进行实验,该数据集除了80种物品类别外,还有53种杂物类别。
我们训练DETR在COCO上预测物体和场景类别的框,使用相同的方法。预测框是必要的,以便可以进行匈牙利匹配,该匹配是使用框之间的距离计算的。我们还添加了一个掩码头,为每个预测框预测一个二进制掩码,见图8。它以每个对象的变压器解码器输出作为输入,并在小分辨率上计算此嵌入在编码器输出上的多头(具有M个头)注意力分数,为对象生成M个注意力热图。为了进行最终预测并增加分辨率,使用类似FPN的体系结构。我们在补充材料中详细描述了体系结构。掩码的最终分辨率为4倍,并且每个掩码都使用DICE/F-1损失[28]和Focal损失[23]独立监督。
图8:Panoptic头的示意图。为每个检测到的对象并行生成一个二进制掩码,然后使用像素级argmax合并掩码。
Mask head可以分为两个步骤进行训练,或者联合训练。第一种方法中,我们只对边界框进行训练,然后冻结所有权重,只对Mask head进行25个epochs的训练。实验结果显示这两种方法的效果相似,我们使用后一种方法进行报告,因为这种方法会导致总的训练时间更短。
为了预测最终的全景分割,我们只需对每个像素的掩模分数进行argmax操作,并将相应的类别分配给生成的掩模。这个过程确保最终的掩模没有重叠,因此DETR不需要使用通常用于对齐不同掩模的启发式方法[19]。
训练细节。我们按照边界框检测的配方训练DETR、DETR-DC5和DETR-R101模型,在COCO数据集中预测stuff和things类别周围的框。新的掩码头训练了25个时期(详见补充材料)。在推断期间,我们首先过滤掉置信度低于85%的检测结果,然后计算每个像素的argmax,以确定每个像素属于哪个掩码。然后将同一stuff类别的不同掩码预测合并为一个,并过滤空掩码(小于4个像素)。
主要结果。定性结果显示在图9中。在表5中,我们将统一的Panoptic分割方法与几种将things和stuff区分对待的已有方法进行比较。我们报告Panoptic Quality(PQ)以及things($PQ^{th}$)和stuff($PQ^{st}$)的细分结果。我们还报告了掩码AP(计算在things类别上),在任何Panoptic后处理之前(在我们的情况下,在取像素级argmax之前)。我们表明,DETR在COCO-val 2017上的表现超越了已发布的结果,以及我们的强PanopticFPN基线(使用与DETR相同的数据增强进行公平比较训练)。结果细分显示,DETR在stuff类别上特别优秀,我们假设编码器关注的全局推理是这一结果的关键元素。对于things类别,尽管与基线相比在掩码AP计算上有高达8 mAP的严重缺陷,但DETR获得了有竞争力的PQth。我们还在COCO数据集的测试集上评估了我们的方法,并获得了46 PQ。我们希望我们的方法能够激发未来全面统一的Panoptic分割模型的探索。
图 9:DETR-R101 生成的全景分割的定性结果。 DETR 以统一的方式为事物生成对齐的掩码预测。
表 5:与 COCO val 数据集上最先进的方法 UPSNet [51] 和 Panoptic FPN [18] 的比较UPSNet 使用 1x 计划,UPSNet-M 是具有多尺度测试时间增强的版本。
结论
我们介绍了DETR,这是一种基于transformers和二分图匹配损失的直接集合预测的目标检测系统的新设计。该方法在具有挑战性的COCO数据集上达到了与优化的Faster R-CNN基线相当的结果。DETR易于实现,具有灵活的架构,可以轻松扩展到全景分割,且结果具有竞争力。此外,与Faster R-CNN相比,它在大型物体上的性能表现显著更好,这可能要归功于自我注意力所执行的全局信息处理。
这种新型检测器的设计也带来了新的挑战,特别是涉及训练、优化和对小目标的性能。当前的检测器需要经过数年的改进才能应对类似的问题,我们期望未来的工作能够成功地解决它们。
附录
预备知识:多头注意力层
由于我们的模型基于Transformer架构,因此我们在此提醒一下我们用于全面性的注意机制的一般形式。注意机制遵循[47],除了位置编码的细节(请参见方程式8),这里遵循[7]的方法。
多头注意力的一般形式是一个带有 M 个维度为 d 的头的函数,其函数签名如下(其中 $d′=\frac{d}{M}$,并在下方使用矩阵/张量大小):
$$ mh\text-attn:\;\; \underbrace{X_q}_{d\times N_q},\underbrace{X_{kv}}_{d\times N_{kv}},\underbrace{T}_{M\times 3\times d' \times d},\underbrace{L}_{d\times d}\mapsto \underbrace{\tilde{X}_q}_{d\times N_q} \tag{3} $$
其中,$X_q$是长度为$N_q$的查询序列,$X_{kv}$是长度为$N_{kv}$的键-值序列(为了简化说明,这两个序列具有相同数量的通道d),T是用于计算所谓的查询、键和值嵌入的权重张量,L是一个投影矩阵。输出与查询序列具有相同的大小。为了在给出细节之前固定词汇表,多头自注意力(mh-s-attn)是$X_q = X_{kv}$的特殊情况,即自注意力机制只作用于查询序列。
$$ \mathop{mh\text-\text s\text -\text attn}(X,T,L)=\mathop{mh\text-\text attn}(X,X,T,L)\tag{4} $$
多头注意力是单个注意力头的M次拼接,然后使用L进行投影。通常的做法是使用残差连接、dropout和层归一化。换句话说,如果将$\tilde{X}_q= mh\text - \text attn(X_q.X_{kv},T,L)$,将注意力头的拼接表示为 $\bar{\bar{X}}^{(q)}$,则有
$$ X'_q=[attn(X_q,X_kv,T_1);...;attn(X_q,X_{kv},T_M)] \tag{5} $$
$$ \tilde{X}_q=layernorm(X_q+dropout(LX'_q)),\tag{6} $$
“[;]” 在这里表示在通道轴上的拼接。
单头一个权重张量为$T'\in \mathbb{R}^{3×d'×d}$的attention head,用$attn(X_q, X_{kv}, T')$表示,需要附加位置编码$P_q \in \mathbb{R}^{d×N_q}$和$P_{kv} \in \mathbb{R}^{d×N_{kv}}$。它首先计算所谓的查询(query)、键(key)和值(value)嵌入(embeddings),在添加查询(query)和键(key)位置编码之后:
$$ [Q;K;V]=[T'_1(X_q+P_q);T'_2(X_{kv}+P_{kv});T'_3X_{kv}]\tag{7} $$
其中,$T'$ 是$ T'_1,T'_2,T'_3 $的串联。然后基于查询和键之间点积的 softmax 计算注意力权重 $α$,使得查询序列的每个元素都参与到键-值序列的所有元素中(i 是查询索引,j 是键值索引):
$$ \alpha_{i,j}=\frac{e^{\frac{1}{\sqrt{d'}}Q^T_iK_j}}{Z_i} 其中 Z_i=\sum^{N_{kv}}_{j=1}e^{\frac{1}{\sqrt{d'}}}Q^T_iK_j \tag{8} $$
在我们的情况下,位置编码可以被学习或固定,但在给定查询/键值序列的所有注意力层中共享,因此我们没有将它们明确地写作注意力的参数。我们在描述编码器和解码器时会更详细地介绍它们的确切值。最终输出是由注意力权重加权的值的聚合:第i行由$attn_i(X_q,X_{kv},T')=\sum^{N_{kv}}_{j=1}\alpha_{i,j}V_i$给出。
前馈网络 (FFN) 层原始 Transformer 交替使用多头注意力机制和所谓的 FFN 层[47],后者实际上是具有 Md 输入和输出通道的多层 1x1 卷积。我们考虑的 FFN 由两层具有 ReLU 激活函数的 1x1 卷积组成。与方程6类似,两层之后还有残差连接/丢失率/层规范化。
损失
为了完整起见,我们详细介绍我们方法中使用的损失。所有损失都按批次中对象数量进行标准化。在分布式训练中需要格外注意:由于每个 GPU 接收一个子批次,仅按本地批次中的对象数量进行归一化是不足的,因为通常情况下,各个子批次在 GPU 上不平衡。相反,重要的是按所有子批次中的总对象数进行归一化。
Box loss与[41,36]类似,我们在损失函数中使用了交并比的软版本,以及对$\hat{b}$的$\mathscr{l}_1$损失:
Box loss是一种用于目标检测模型的损失函数。它用于衡量模型在预测bounding box时与真实bounding box之间的差异。该损失函数通常由两个部分组成:位置损失和大小损失。位置损失衡量模型预测的bounding box与真实bounding box之间的位置差异,而大小损失衡量它们之间的尺寸差异。通过最小化box loss,模型可以更准确地预测bounding box,从而提高目标检测的准确性。在分布式训练时,需要注意对损失进行标准化,以确保在所有GPU上的子批次中的对象数量都被考虑在内。
$$ \mathcal{L}_{box}(b_{\sigma(i)},\hat{b}_i)=\lambda_{iou}\mathcal{L}_{iou}(b_{\sigma(i)},\hat{b}_i)+\lambda_{L1}||b_{\sigma(i)}-\hat{b}_i||_1,\tag{9} $$
其中,$\lambda_{iou},\lambda_{L1} \in \mathbb{R} $是超参数,$\mathcal{L}_{iou}(·) $是广义 IoU [38]:
$$ \mathcal{L}_{iou}(b_{\sigma(i)},\hat{b}_i)=1-(\frac{|b_{\sigma(i)} \cap \hat{b}_i|}{|b_{\sigma(i)} \cup\hat{b}_i |} - \frac{|B(b_{\sigma(i)},\hat{b}_i) / b_{\sigma(i)}\cup\hat{b}_i|}{|B(b_{\sigma(i)},\hat{b}_i|} )\tag{10} $$
$|.|$表示“区域”,框坐标的并集和交集用作框本身的简写。并集或交集的面积由 $b_{σ(i)}$ 和 $\hat{b}_i $的线性函数的最小值/最大值计算,这使得损失对于随机梯度表现得足够好。 $B(b_{σ(i)}, \hat{b}_i)$ 表示包含$ b_{σ(i)}, \hat{b}_i $的最大框(涉及 B 的面积也是根据框坐标的线性函数的 min / max 计算的)。
DICE/F-1损失 DICE 系数与 Intersection over Union 密切相关。如果我们用 $\hat{m}$ 表示模型的原始掩码 logits 预测,用 m 表示二进制目标掩码,则损失定义为:
$$ \mathcal{L}_{DICE}(m,\hat{m})=1-\frac{2m\sigma(\hat{m})+1}{\sigma(\hat{m})+m+1}\tag{11} $$
其中 $σ$ 是 sigmoid 函数。这种损失由对象的数量归一化。
详细架构
DETR 中使用的 Transformer 的详细描述如图 10 所示,位置编码在每个注意层中传递。图像特征从 CNN 主干传递到 Transformer 编码器中,同时空间位置编码被添加到每个多头自注意力层中的查询和键中。然后,解码器接收查询(最初设置为零)、输出位置编码(对象查询)和编码器内存,通过多个多头自注意力和解码器-编码器注意力生成最终的预测类标签和边界框。可以跳过第一个解码器层中的第一个自注意力层。
图10:DETR中transformer的结构。详情请见A.3节。
计算复杂度 在编码器中的每个自注意力操作的复杂度为 $\mathcal{O}(d^2HW + d(HW)^2):\mathcal{O}(d'd) $是计算单个查询/键/值嵌入的成本(并且 $M d'= d$),而 $\mathcal{O}(d'(HW)^2)$ 是计算一个头的注意力权重的成本。其他计算可以忽略不计。在解码器中,每个自注意力操作的复杂度为$ \mathcal{O}(d^2N + dN^2)$,编码器和解码器之间的交叉注意力复杂度为 $\mathcal{O}(d^2(N+HW) + dNHW)$,这比编码器要低得多,因为在实践中,$N \ll HW$。
FLOPS计算 鉴于Faster R-CNN的FLOPS取决于图像中提议的数量,我们报告了COCO 2017验证集中前100张图像的平均FLOPS数量。我们使用来自Detectron2 [50]的工具flop count operators计算FLOPS。我们在Detectron2模型上不进行修改,并扩展它以考虑DETR模型的批量矩阵乘积(bmm)。
训练超参数
我们使用AdamW[26]来训练DETR,并采用改进的权重衰减处理,设置为$10^{-4}$。我们还应用梯度裁剪,最大梯度范数为0.1。骨干网络和transformers的处理略有不同,下面我们将分别讨论其细节。
骨干网络我们使用在ImageNet上预训练的ResNet-50作为骨干网络,丢弃最后一层分类层。骨干网络中的批量归一化权重和统计量在训练期间被冻结,这是目标检测中广泛采用的做法。我们使用$10^{-5}$的学习率对骨干网络进行微调。我们观察到,将骨干网络学习率大约降低一个数量级,比其余网络小,对于稳定训练特别是在前几个时期非常重要。
Transformer我们使用学习率为$10^{-4}$来训练transformer。在每个多头注意力和前馈神经网络之后,我们应用0.1的加性dropout,然后进行层归一化。权重使用Xavier初始化方法进行随机初始化。
Losses我们使用线性组合的 $\mathscr{l}_1$ 和 GIoU 损失进行边界框回归,其中 $\lambda_{L1} = 5,\lambda_{iou} = 2$。所有模型都使用了 N = 100 个解码器查询槽进行训练。
Baseline(基线)我们增强的 Faster-RCNN+ 基线模型使用了 GIoU [38] 损失和标准 $\mathscr{l}_1$ 损失进行边界框回归。我们进行了网格搜索来寻找最佳的损失权重,并且最终模型仅使用了权重分别为 20 和 1 的 GIoU 损失来执行边界框和 proposal 回归任务。对于基线模型,我们采用了与 DETR 相同的数据增强策略,并使用 9× 训练策略(大约 109 个 epochs)。所有其他设置与 Detectron2 模型仓库中的相同模型相同。
空间位置编码 图像特征的空间位置与编码器的激活相关联。在我们的模型中,我们使用固定的绝对编码来表示这些空间位置。我们采用了原始 Transformer [47] 编码的二维推广 [31]。具体来说,对于每个嵌入的空间坐标,我们分别使用 $\frac{d}{2}$ 个不同频率的正弦和余弦函数。然后将它们连接起来得到最终的 d 通道位置编码。
其他结果
DETR-R101 模型的全景预测的一些额外定性结果如图 11 所示。
(a) 对象重叠的失败案例。 PanopticFPN 完全错过了一个平面,而 DETR 无法准确分割其中的 3 个平面。
(b) Things masks 以全分辨率预测,这允许比 PanopticFPN 更清晰的边界
图 11:全景预测的比较。从左到右:Ground truth、PanopticFPN with ResNet 101、DETR with ResNet 101
增加实例数 DETR被设计成无法预测超过其查询槽数的对象,即在我们的实验中为100个。在本节中,我们分析了DETR在接近这个限制时的行为。我们选择一个给定类别的规范正方形图像,在一个10x10的网格上重复它,并计算模型错过的实例的百分比。为了测试模型在少于100个实例的情况下的表现,我们随机遮盖一些单元格。这确保了对象的绝对大小无论可见的数量如何都是相同的。为了考虑到遮盖的随机性,我们重复了100次不同的遮盖实验。结果如图12所示。行为在各个类别中类似,当可见的实例多达50个时,模型可以检测到所有实例,但随后开始饱和,并错过越来越多的实例。值得注意的是,当图像包含全部100个实例时,模型平均只检测到30个,这比仅包含50个全部被检测到的实例的情况还要少。模型的这种反直觉行为可能是因为图像和检测远离训练分布。
图12:分析了DETR对于各种类别实例数量的分析,具体取决于图像中实例的数量。我们报告了平均值和标准差。随着实例数量接近100,DETR开始饱和,并错过越来越多的对象。
请注意,这个测试是一种针对模型在训练集之外的泛化能力的测试,因为很少有样本图片只包含单一类别的大量物体实例。很难从实验中区分两种类型的领域外泛化:图像本身与每个类别的物体数量。但由于几乎没有 COCO 图像只包含同一类别的大量物体,因此这种实验代表了我们最好的努力来了解查询对象是否会过度拟合数据集中标签和位置的分布。总的来说,这些实验表明,该模型不会在这些分布上过度拟合,因为它能够几乎完美地检测出多达 50 个物体。