原文链接
[2201.12329] DAB-DETR: Dynamic Anchor Boxes are Better Queries for DETR (arxiv.org)https://arxiv.org/abs/2201.12329
原文笔记
在本文中,我们提出了一种新的查询公式,使用动态锚框进行DETR (DEtection TRansformer),并对查询在DETR中的作用进行了更深入的理解。这个新公式直接使用框坐标作为 Transformer 解码器中的查询,并逐层动态更新它们。使用框坐标不仅有助于使用显式位置先验来改进查询到特征的相似性,并消除 DETR 中缓慢的训练收敛问题,还允许我们使用框宽度和高度信息调制位置注意力图。这样的设计清楚地表明,DETR 中的查询可以实现为级联方式逐层执行软 ROI 池化。因此,在相同的设置下,它在类似 DETR 的检测模型中实现了 MS-COCO 基准的最佳性能,例如,使用 ResNet50-DC5 作为 骨干训练50 个 epoch 的 AP 45.7%。我们还进行了广泛的实验来确认我们的分析并验证我们方法的有效性。代码可在 https://github.com/SlongLiu/DAB-DETR 获得。
原文翻译
ABSTRACT
在本文中,我们提出了一种新的查询公式,使用动态锚框进行DETR (DEtection TRansformer),并对查询在DETR中的作用进行了更深入的理解。这个新公式直接使用框坐标作为 Transformer 解码器中的查询,并逐层动态更新它们。使用框坐标不仅有助于使用显式位置先验来改进查询到特征的相似性,并消除 DETR 中缓慢的训练收敛问题,还允许我们使用框宽度和高度信息调制位置注意力图。这样的设计清楚地表明,DETR 中的查询可以实现为级联方式逐层执行软 ROI 池化。因此,在相同的设置下,它在类似 DETR 的检测模型中实现了 MS-COCO 基准的最佳性能,例如,使用 ResNet50-DC5 作为 骨干训练50 个 epoch 的 AP 45.7%。我们还进行了广泛的实验来确认我们的分析并验证我们方法的有效性。代码可在 https://github.com/SlongLiu/DAB-DETR 获得。
1 INTRODUCTION
目标检测是广泛应用的计算机视觉的一项基本任务。大多数经典检测器基于卷积架构,在过去十年中取得了显著的进展(Ren et al., 2017; Girshick, 2015; Redmon et al., 2016; Bochkovskiy et al., 2020; Ge et al., 2021)。最近,Carion等人(2020)提出了一种名为DETR (DEtection TRansformer)的基于变压器的端到端检测器,它消除了对手工设计的组件(如锚点)的需求,并与现代基于锚点的检测器(如Faster RCNN)相比,表现出了良好的性能(Ren等人,2017)。
与基于锚的检测器相比,DETR 将对象检测建模为集合预测问题,并使用 100 个可学习的查询从图像中探测和池化特征,这使得预测不需要使用非最大抑制。然而,由于其查询的设计和使用无效,DETR 的训练收敛明显较慢,通常需要 500 个 epoch 才能获得良好的性能。为了解决这个问题,许多后续工作试图改进 DETR 查询的设计,以实现更快的训练收敛和更好的性能(Zhu et al., 2021; Gao et al., 2021; Meng et al., 2021; Wang et al., 2021)。
尽管取得了所有进展,但学习到的查询在DETR中的作用仍然没有得到充分的理解或利用。虽然之前的大多数尝试使 DETR 中的每个查询更明确地与一个特定的空间位置而不是多个位置相关联,但技术解决方案有很大不同。例如,Conditional DETR通过query的内容特征选择query进而学习一个条件空间query 以便更好地与图像特征匹配(孟等人,2021年)。高效的DETR引入了一个密集预测模块来选择top-K对象查询(Yao et al., 2021),Anchor DETR将查询表述为2D锚点(Wang et al., 2021),两者都将每个查询与特定的空间位置相关联。类似地,可变形DETR直接将2D参考点作为查询,并在每个参考点上执行可变形的交叉注意操作(Zhu等人,2021年)。但是上述所有工作都仅利用 2D 位置作为锚点,而不考虑对象尺度。
受这些研究的启发,我们仔细研究了 Transformer 解码器中的交叉注意模块,并建议使用锚框,即 4D 框坐标 (x, y, w, h),作为 DETR 中的查询,逐层更新它们。这种新的查询公式通过考虑每个锚框的位置和大小,为交叉注意模块引入了更好的空间先验,这也导致了更简单的实现和更深入地关于query在DETR中的作用的理解。
这个公式背后的关键见解是 DETR 中的每个查询由两部分组成:内容部分(解码器自注意力输出)和位置部分(例如 DETR 中的可学习查询)1。交叉注意力权重是通过将查询与一组键进行比较来计算的,这些键由两部分组成作为内容部分(编码图像特征)和位置部分(位置嵌入)。因此,Transformer 解码器中的查询可以解释为基于查询到特征相似性度量的特征图池化特征,该度量同时考虑了内容和位置信息。虽然内容相似性用于汇集语义相关的特征,但位置相似性是为围绕查询位置汇集特征提供位置约束。这种注意力机制促使我们将查询表述为锚框,如图 1 (c) 所示,允许我们使用锚框的中心位置 (x, y) 来池化中心周围的特征,并使用锚框大小 (w, h) 来调节交叉注意力图,使其适应锚框大小。此外,由于使用坐标作为查询,锚框可以逐层动态更新。通过这种方式,DETR 中的查询可以实现为级联方式逐层执行软 ROI 池化。
(这段写得相当好)
我们使用锚框大小来调节交叉注意,为池化特征提供了更好的位置先验。由于交叉注意可以从整个特征映射中汇集特征,因此为每个查询提供适当的位置先验是至关重要的,让交叉注意模块聚焦于与目标对象对应的局部区域。它还可以促进加快DETR的训练收敛性。大多数先前的工作通过将每个查询与特定位置相关联来改进 DETR,但它们假设固定大小的各向同性高斯位置先验,这不适用于不同尺度的对象。由于每个查询锚框中可用的大小信息 (w, h),我们可以将高斯位置先验调制为椭圆形。更具体地说,我们分别将其 x 部分和 y 部分的交叉注意力权重(softmax 之前)划分宽度和高度,这有助于高斯先验更好地匹配不同尺度的对象。为了进一步改进位置先验,我们还引入了一个温度参数来调整位置注意的平坦度,这在所有先前的工作中被忽略了。
总之,我们提出的DAB-DETR (Dynamic Anchor Box DETR)通过直接学习锚点作为查询,提出了一种新的查询公式。这个公式提供了对查询的作用的更深入理解,使我们能够使用锚大小来调节 Transformer 解码器中的位置交叉注意力图并逐层执行动态锚更新。我们的结果表明,在 COCO 对象检测基准上的相同设置下,DAB-DETR 在类似 DETR 的架构中获得了最佳性能。当使用单个 ResNet-50 (He et al., 2016) 模型作为训练 50 个 epoch 的主干时,所提出的方法可以达到 45.7% 的 AP。我们还进行了广泛的实验来确认我们的分析并验证我们方法的有效性。
2 RELATED WORK
大多数经典检测器都是基于锚的,使用锚框(Ren 等人,2017;Girshick,2015;Sun 等人,2021)或锚点(Tian 等人,2019;Zhou 等人,2019)。相比之下,DETR (Carion et al., 2020) 是一个完全无锚检测器,使用一组可学习向量作为查询。许多后续工作试图从不同的角度解决DETR收敛速度慢的问题。Sun等人(2020)指出,DETR训练缓慢的原因是由于解码器中的交叉注意,因此提出了一种仅编码器模型。Gao等人(2021)相反,在调节交叉注意之前引入了高斯。尽管它们的性能有所提高,但它们并没有正确解释缓慢的训练和查询在 DETR 中的作用。
改进 DETR 的另一个方向,与我们的工作更相关的,是更深入地理解查询在 DETR 中的作用。由于 DETR 中的可学习查询用于为特征池化提供位置约束,大多数相关工作试图使 DETR 中的每个查询更明确地与特定的空间位置相关,而不是 vanilla DETR 中的多个位置模式。例如,可变形 DETR (Zhu et al., 2021) 将 2D 参考点直接视为查询,并预测每个参考点的可变形采样点以执行可变形交叉注意力操作。条件DETR (Meng et al., 2021)解耦注意公式,并根据参考坐标生成位置查询。高效的 DETR (Yao et al., 2021) 引入了密集预测模块来选择前 K 个位置作为对象查询。尽管这些工作将查询与位置信息连接起来,但它们没有明确的公式来使用锚点。
与可学习查询向量包含框坐标信息的先前工作中的假设不同,我们的方法基于一个新的视角,即查询中包含的所有信息都是框坐标。也就是说,锚框是 DETR 的更好查询。并行工作 Anchor DETR (Wang et al., 2021) 也建议直接学习锚点,而它忽略了锚点的宽度和高度信息,如其他先前的工作所示。除了 DETR,Sun 等人。 (2021)通过直接学习框提出了一种稀疏检测器,它与我们共享相似的锚公式,但它丢弃了 Transformer 结构并利用硬 ROI 对齐进行特征提取。表 1 总结了相关工作和我们提出的 DAB-DETR 之间的主要区别。我们将我们的模型与五个维度上的相关工作进行比较:如果模型直接学习锚点,如果模型预测参考坐标(在其中间阶段),如果模型逐层更新参考锚点,如果模型使用标准的密集交叉注意力,如果注意力被调制以更好地匹配不同尺度的对象。如果模型逐层更新学习到的查询。附录 B 节提供了有关类似 DETR 的模型的更详细比较。我们为那些对表格有混淆的读者推荐本节。
3 WHY A POSITIONAL PRIOR COULD SPEEDUP TRAINING?
已经做了很多工作来加速 DETR 的训练收敛速度,同时缺乏对他们的方法为什么有效的统一理解。Sun等人(2020)表明,交叉注意模块主要负责收敛速度慢,但它们只是去掉了解码器进行更快的训练。我们遵循他们的分析来找到交叉注意力中的哪些子模块会影响性能。将编码器中的自我注意模块与解码器中的交叉注意模块进行比较,我们发现其输入之间的主要区别在于查询,如图2所示。由于解码器嵌入被初始化为0,因此在第一个交叉注意模块之后,它们被投影到与图像特征相同的空间。之后,它们将在解码器层中经历类似的过程就像编码器层中的图像特征那样。因此根本原因可能是由于可学习的查询。
交叉注意中的两个可能原因解释了模型缓慢的训练收敛:1)由于优化挑战很难学习查询,2)学习查询中的位置信息没有以与用于图像特征的正弦位置编码相同的方式编码。为了了解它是否是第一个原因,我们重用了 DETR(保持它们固定)中学习良好的查询,并且只训练其他模块。图 3(a) 中的训练曲线表明,固定查询在早期仅略微提高了收敛性,例如前 25 个 epoch。因此,查询学习(或优化)可能不是关键问题。
然后我们转向第二种可能性,并尝试找出学习到的查询是否具有一些不良属性。由于学习到的查询用于过滤某些区域的对象,我们在图4(a)中将学习到的查询和图像特征的位置嵌入之间的一些位置注意图可视化,每个查询都可以被视为位置先验使得解码器专注于感兴趣的区域。虽然它们充当位置约束,但它们也具有不良属性:多种模式和几乎统一的注意力权重。例如,图 4(a) 顶部的两个注意力图有两个或更多的浓度中心,使得当图像中存在多个对象时,很难定位对象。图 4(a) 的底部图侧重于太大或太小的区域,因此无法将有用的位置信息注入到特征提取过程中。我们推测 DETR 中查询的多个模式属性可能是其训练缓慢的根本原因,我们相信引入显式位置先验来约束局部区域的查询对于训练是可取的。为了验证这一假设,我们将 DETR 中的查询公式替换为动态锚框,可以强制每个查询关注特定区域,并将该模型命名为 DETR+DAB。图 3(b) 中的训练曲线表明,在检测 AP 和训练/测试损失方面,DETR+DAB 与 DETR 相比具有更好的性能。请注意,DETR 和 DETR+DAB 之间的唯一区别是查询的制定,并且没有引入像300 个查询或焦点损失这样的其他技术,结果表明,在解决 DETR 查询的多模式问题后,我们可以实现更快的训练收敛和更高的检测精度。
以前的一些工作也具有相似的分析并证实了这一点。例如,SMCA (Gao et al., 2021) 通过在参考点周围应用预定义的高斯图来加速训练。条件DETR (Meng et al., 2021)使用显式位置嵌入作为位置查询进行训练,产生类似于高斯核的注意图,如图4(b)所示。尽管显式位置先验导致训练的良好性能,但它们忽略了对象的尺度信息。相比之下,我们提出的DAB-DETR明确地考虑了对象尺度信息自适应调整注意权重,如图4(c)所示。
4 DAB-DETR
4.1 OVERVIEW
在 DETR (Carion et al., 2020) 之后,我们的模型是一个端到端的对象检测器,包括一个 CNN 主干、Transformer (Vaswani et al., 2017) 编码器和解码器,以及框和标签的预测头。我们主要改进解码器部分,如图 5 所示。
给定图像,我们使用 CNN 主干和 Transformer 编码器提取图像特征,以细化 CNN 特征。然后将包括位置查询(锚框)和内容查询(解码器嵌入)的双重查询输入解码器以探测与锚点相对应并与内容查询具有相似的模式的对象,。双重查询逐层更新,以逐渐接近目标真实对象。最终解码器层的输出用于通过预测头预测带有标签和框的对象,然后进行二分图匹配来计算 DETR 中的损失。为了说明我们的动态锚盒的通用性,我们还设计了一个更强的DABDeformable-DETR,可以在附录中找到。
4.2 LEARNING ANCHOR BOXES DIRECTLY
如第 1 节所述,关于查询在 DETR 中的作用,我们建议直接学习查询框或说锚框并从这些锚框导出位置查询。每个解码器层有两个注意模块,包括一个自我注意模块和一个交叉注意模块,分别用于查询更新和特征探测。每个模块都需要查询、键和值来执行基于注意力的值聚合,但这些三元组的输入不同。
我们将 Aq = (xq , yq , wq , hq ) 表示第 q 个锚点,xq , yq , wq , hq ∈ R , Cq ∈ RD 和 Pq ∈RD 表示为其对应的内容查询和位置查询,其中 D 是解码器嵌入和位置查询的维度。
给定一个锚 Aq ,其位置查询 Pq 由下式得到:
Pq = MLP(PE(Aq )),
其中 PE 表示位置编码以从浮点数生成正弦嵌入,MLP 的参数在所有层中共享。由于 Aq 是一个四元数,我们在这里重载 PE 运算符:
PE(Aq ) = PE(xq , yq , wq , hq ) = Cat(PE(xq ), PE(yq ), PE(wq ), PE(hq )).
概念 Cat 表示连接函数。在我们的实现中,位置编码函数 PE 将浮点数映射到 D/2 维的向量,如下所示:PE:R → R^D/2。因此,函数 MLP 将 2D 维向量投影到 D 维:MLP:R^2D → R^D。MLP模块有两个子模块,每个子模块由线性层和 ReLU 激活组成,特征缩减在第一个线性层进行。
在自我注意模块中,所有三个查询、键和值都具有相同的内容项,而查询和键包含额外的位置项:
受条件DETR (Meng et al., 2021)的启发,我们将位置和内容信息连接在一起作为交叉注意模块中的查询和键,这样我们就可以解耦内容和位置对查询和特征的相似度的贡献,计算为查询和键之间的点积。为了重新缩放位置嵌入,我们也利用了条件空间查询(Meng et al., 2021)。更具体地说,我们学习了 MLP(csq) : RD → RD 以获得以内容信息为条件的尺度向量,并使用它与位置嵌入执行逐元素乘法:
4.3 ANCHOR UPDATE
使用坐标作为查询进行学习,从而使逐层更新它们称为可能。相比之下,对于高维嵌入的查询,例如在 DETR (Carion et al., 2020) 和条件 DETR (Meng et al., 2021) 中,很难执行逐层查询细化,因为不清楚如何将更新后的锚点转换回高维查询嵌入。
按照前面的实践(Zhu et al., 2021;Wang et al., 2021),我们通过预测头预测相对位置(∆x,∆y,∆w,∆h)后,更新每一层的锚点,如图5所示。注意,不同层的所有预测头共享相同的参数。
4.4 WIDTH & HEIGHT-MODULATED GAUSSIAN KERNEL
传统的位置注意图被用作类似高斯的先验,如图6左侧所示。但是先验只是假设所有对象的各向同性和固定大小的,却忽视了它们的尺度信息(宽和高),为了提高位置先验,我们建议将尺度信息注入到注意力图中。
原始位置注意图中的查询到键相似度计算为两个坐标编码的点积之和:
其中1/√D用于缩放值正如Vaswani等人(2017)所提到的。我们通过将相对锚点宽度和高度与其 x 部分和 y 部分分开来调制位置注意力图(在 softmax 之前),以在与不同尺度的对象更好地匹配之前平滑高斯:
4.5 TEMPERATURE TUNING
对于位置编码,我们使用正弦函数 (Vaswani et al., 2017),其定义为:
其中 T 是手工设计的温度,上标 2i 和 2i + 1 表示编码向量中的索引。式(8)中的温度T影响位置先验的大小,如图7所示。T越大,注意图越平坦,反之亦然。请注意,温度 T 在 (Vaswani et al., 2017) 中硬编码为 10000,用于自然语言处理,其中 x 的值是表示句子中每个单词的位置的整数。然而,在 DETR 中,x 的值在 0 到 1 之间浮动,表示边界框坐标。因此,视觉任务非常需要不同的温度。在这项工作中,我们在所有模型中根据经验选择 T = 20。