原文链接
[2104.01318] Efficient DETR: Improving End-to-End Object Detector with Dense Prior (arxiv.org)https://arxiv.org/abs/2104.01318
原文笔记
What
1、一种针对DETR的objectquery初始化的方法
2、针对Deformable DETR进行改进,改进之后的模型具有更小的参数量和更精简的架构
3、特定的query数量递减的方法可以以100个query实现300个query的效果,同时不增加参数量
其实一言以蔽之:先经过Dence走预测头进行初步预测,找到的框当参考点并提取向量当object query,将参考点和object query放一起叫object container走稀疏模块 再送入之间的预测头预测
为啥一个密集一个稀疏呢,因为注意力计算的计算量不一样呗,密集是所有proposal都算,稀疏是挑选出来的object query算。
Why
- 传统的目标检测方法(fastrcnn,fasterrcnn,yolo)无论是单阶段还是双阶段,都需要引入一些人工先验知识或者手工组件(NMS等)抑制了端到端目标检测方法的发展
- 最近提出的端到端transformer检测器,如DETR和Deformable DETR,具有堆叠6个解码器层的级联结构来迭代更新对象查询,如果不采用这么多的decoder layers进行堆叠则其性能会严重下降。但是这多层解码器机构又会大大的增加模型总体的参数量,增大内存占用并且增加训练和验证的时间
Challenge
1、DETR训练占用的资源多
2、DETR收敛慢
3、DETR对小物体的检测不好
How
We define the object container as a container of structured information, which includes different kinds of object features. Object queries and reference points both belong to the object container, since the object queries and the reference points could represent the abstract features and positional information of objects.
作者把原来detr中的objectquery重新定义为object container 包含两部分一个是feature一个是参考点,他这么定义的原因可能来自于deformable DeTR
从这个想法出发来解决1、2
以query数量递减以及融合deformable的想法来解决3
原文翻译
Abstract
最近提出的端到端transformer检测器,如DETR和Deformable DETR,具有堆叠6个解码器层的级联结构来迭代更新对象查询,如果不采用这么多的decoder layers进行堆叠则其性能会严重下降。在本文中,我们研究了对象容器的随机初始化,包括对象查询和参考点,主要负责多次迭代的要求。(其实目的是替换多次迭代,减少训练次数)基于我们的发现,我们提出了高效DETR,这是一种简单有效的端到端目标检测流程。通过利用密集检测和稀疏集检测,Efficient DETR 利用密集先验来初始化对象容器,并弥补了 1-decoder 结构和 6-decoder 结构的差距。在 MS COCO 上进行的实验表明,我们的方法仅使用 3 个编码器层和 1 个解码器层,与最先进的对象检测方法相比实现了具有竞争力的性能。高效的DETR在密集场景中也具有健壮性。它在CrowdHuman 数据集上大大优于现代检测器。
1. Introduction
对象检测是计算机视觉中的一项经典任务,它研究定位边界框并预测图像中对象类别。现代检测器[9,27,24,20]使用滑动窗口方法生成密集锚点,建立网络预测和groundtruth之间的联系。非最大抑制(NMS)等后处理方法用于去除预测的冗余。这些手工制作的组件无法实现端到端的对象检测。
最近,DETR [2] 提出了一个基于编码器-解码器转换器 [34] 架构和二分匹配的端到端框架,该框架在没有后处理的情况下直接预测一组边界框。然而,DETR 比现代主流检测器 [27, 24, 20] 需要 10 到 20 倍的训练时间才能收敛,并且显示检测小物体的性能相对较低。可变形 DETR [43] 从以下两个方面解决了这两个问题:(i)。用局部空间注意替换全局范围注意,加速了训练的收敛性。(ii)。用多尺度特征图替换单尺度特征图,显著提高了小目标检测的性能。
DETR的管道可以抽象如图1(a)所示。我们将对象容器定义为结构化信息的容器,其中包括不同类型的对象特征。对象查询和参考点都属于对象容器,因为对象查询和参考点可以表示对象的抽象特征和位置信息。一组随机初始化的对象容器被馈送到特征细化器,以与从图像中提取的特征进行交互。具体来说,具有交叉注意模块的 6 个解码器层扮演级联特征细化器的角色,该细化器迭代地更新对象容器。细化的对象容器有助于DETR的最终预测。此外,从图像中提取特征是从特征提取器中提取的,该特征提取器具有 CNN 主干和 DETR 中的 6 个编码器层。换句话说,图像和随机初始化的对象容器通过特征提取器和级联特征细化器得到最终的结果。在这个管道中,DETR 和 Deformable DETR 都有一个 6 编码器和 6 解码器转换器架构。我们假设这种结构是 DETR 系列在目标检测中实现高精度的关键。
在本文中,我们研究了 DETR 的组件以了解它们的机制。我们进行了广泛的实验,发现具有额外辅助损失的解码器层对性能贡献最大。Transformer 解码器迭代地将对象容器与特征图交互。我们探索DETRs中对象容器的随机初始化对多次细化的长时间要求(即解码器层)负主要责任,这进而导致收敛速度慢。
然而,很难直接分析对象查询 [2],因为它们只是一组抽象特征。由于可变形 DETR,它为对象查询提出了参考点 [43]。参考点是二维张量,表示盒子中心的猜测。通过可视化训练模型的参考点,我们发现它们的作用被证明相当于在基于锚点的方法[27,22]中充当锚点[33,40,17,7]。此外,我们报告了参考点的不同初始化导致 1-decoder 结构的性能差异巨大。这里的问题是:对于端到端检测器中的对象容器,哪种初始化更好。
在本文中,我们提出了高效DETR,这是一种简单但有效的端到端检测器1(b)。高效的 DETR 有两个部分:密集和稀疏。两部分共享相同的检测头。在密集部分,执行基于滑动窗口的一组特定密集预测来生成建议。Top-K (本文中的 K=100) 对 4-d 提议进行评分,其 256-d 编码器特征被视为参考点和对象查询。对象容器的初始化是如此合理,以至于我们的方法能够仅使用 1 个解码器层实现更好的性能和快速收敛。具体来说,基于可变形 DETR 的 3-encoder 和 1-decoder 结构可以使用 ResNet50 [11] 主干和更快的 (36 epoch) 训练实现具有竞争力的性能(COCO [21] 中的 44.2AP)。
2. Related Work
2.1. One-stage and Two-stage Detectors
主流检测器主要基于锚框或锚点。锚点在每个滑动窗口位置的中心生成,它为对象提供候选者。在YOLO[24]、SSD[22]、RetinaNet[20]和FCOS[33]等一级检测器中,该网络直接预测整个特征图的锚点的类别和偏移量。一对多标签分配规则通常用于计算每个锚点的目标。NMS等后处理用于去除对象的重复预测。相比之下,两级检测器,如Faster RCNN[27]和Mask RCNN[10],不能直接输出最终的预测。相反,他们首先执行类不可知的密集预测,通过区域建议网络(RPN)生成前景建议[27,1,35]。ROIPool[27]或ROIAlign[10]层用于从主干特征中提取区域建议的特征。NMS 也用于最终结果。ROIPool 和 ROIAlign 层解决了特征错位问题并改进了建议。因此,两级检测器通常比一级检测器表现出更好的性能。
2.2. End-to-end Detectors
端到端检测器,如[36]、DETR[2]、可变形DETR[43]和稀疏RCNN[31],不需要额外的后处理阶段,并在端到端框架中执行目标检测。DETR 建立在编码器解码器转换器架构中。主干特征通过 6 个编码器层来提取特征图每个位置的上下文信息。对象查询,定义为可学习的位置编码[34,2],被发送到6个解码器层,以迭代地与编码器特征交互。对象查询的大小很小,例如 DETR 中的 100 个。最终结果由检测头从对象查询中预测。在每个解码器层添加一个集合预测损失,即二部匹配损失,进行细化。在没有任何手工制作的组件的情况下,DETR 直接预测一组带有分数的框作为最终的预测。然而,DETR 需要很长的训练过程(~500 个 epoch),并且不利于检测小物体。
为了解决这些问题,Deformable DETR 和 Sparse RCNN 都提出了一种有效的解决方案。在Deformable DETR 中,多尺度特征用于帮助检测小物体。它为每个对象查询生成一个参考点,并提出了一个可变形注意模块[4,42,43],使每个参考点只关注一个小的固定采样点集。这种修改将transformer中的全局连接转换为局部连接,并将收敛速度从 DETR 的 500 个 epoch 显着提高到 50 个 epoch。可变形 DETR 也处于 6 编码器和 6 解码器架构中。稀疏 RCNN 提出了一个纯粹的稀疏框架,用于具有可学习建议的对象检测。成对地为每个可学习区域proposal生成一个 256-d 的proposal feature。与DETR中的对象查询类似,proposal features被馈送到6个动态实例交互头[31],以与特征金字塔网络(FPN)[19]中的区域特征交互。RoI 层限制了提议特征使其仅与几个局部特征交互,并使 Sparse RCNN 具有快速收敛的速度(36 个 epoch)。此外,[32]、[5]和[8]还以其他方式研究了DETR的收敛性问题
3. Exploring DETR
3.1. Revisit DETR
Encoder and decoder.DETR系列结构都是基于encoder-decoder的transformer架构,编码器和解码器分别级联 6 个相同的层。一个编码器层由多头自注意力和前馈网络 (FFN) 组成,而解码器层有一个额外的多头交叉注意力层。编码器层与卷积具有相似的作用,并从具有多头自注意力的 CNN 主干中提取上下文特征。在解码器中,一组 256-d 对象查询与整个图像的编码器特征交互,并通过多头交叉注意力聚合信息。辅助二分匹配损失应用于每个解码器层。表 1 说明了 DETR 对解码器层的数量更敏感,这意味着解码器比 DETR 的编码器更重要。特别是,采用具有 3 个编码器和 3 个解码器的 DETR 作为我们的基线。如果在解码器中删除两层,AP 可以减少约 9.3。相比之下,在编码器中删除两层只会导致 1.7 AP 下降。
为什么解码器比编码器更重要。它们都处于级联架构中,只是解码器对每个相同的层都有额外的辅助损失。在表 1 中,我们发现辅助解码损失是 DETR 对解码器层数量更敏感的主要原因。编码器和解码器的行为在没有辅助损失的情况下趋于相同。我们指出,辅助解码损失在更新查询特征时引入了强监督,这使得解码器更加高效。解码器的级联结构通过逐层辅助损失细化特征。迭代次数越多,辅助解码监督就越高效。
为了进一步探索解码器的级联结构,我们尝试了不同数量的解码器层。表 2 显示,随着级联减少的次数,性能显着下降。6 层解码器和 1 层解码器之间存在 10.3 AP 的巨大下降。值得注意的是,每次迭代后只更新对象查询。对象查询与性能密切相关,因为最终预测由检测头从它们预测。但是,对象查询在训练开始时随机初始化。我们假设这种随机初始化并不能提供良好的初始状态,这可能是 DETR 需要 6 次迭代的级联结构来实现竞争性能的原因。
3.2. Impact of initialization of object containers
基于上一节中的分析,值得研究对象查询的初始化。对象查询属于对象容器的特征信息。对象查询被定义为可学习的位置嵌入,它是一个 256 维的抽象张量,难以分析。然而,我们观察到 DETR 中的每个对象查询都学会用几种操作模式专门处理某些区域和框大小。我们假设研究对象查询的空间投影可能有助于以直观的方式理解。
由于可变形 DETR [43],它带来了一个新的组件,称为与对象查询(object query)相关的参考点(referrance point)。参考点是二维张量,表示盒子中心的预测,属于object container的位置信息。此外,参考点是通过线性投影从 256-d 对象查询中预测得到的。它们可以作为对象查询在二维空间中的投影,并提供对象查询中位置信息的直观表示。参考点和对象查询在解码器迭代期间更新,并有助于最终结果。
考虑到参考点直观地表示对象查询中的位置信息,我们从它们开始探索。在传递到解码器层之前,参考点是通过随机初始化对象查询上的线性投影生成的,如图3(a)所示。我们将此过程称为参考点的初始化。图 2 显示了收敛模型的学习参考点。初始阶段的参考点均匀分布在图像上,覆盖整个图像区域。我们指出,这种初始化类似于基于锚点的检测器中锚点[12,33,40,17,7]的生成。随着迭代阶段的增加,参考点逐渐聚集到前景的中心,最后在第一阶段覆盖几乎所有的前景。直观地说,参考点作为定位前景的锚点,使注意模块聚焦于前景周围的一小组关键采样点。
在调查参考点的更新后,我们开始对其初始化的探索,这就是参考点的生成方式。对于其余部分,我们统称参考点的初始化和对象查询的初始化为对象容器的初始化。
Different initialization of reference point在基于锚点的检测器中,锚点的生成对模型的性能有很大的影响。大多数情况下,锚点在每个滑动窗口位置生成,这被证明是对象提案的适当初始化。作为锚点的参考点的初始化可能对Deformable DETR的性能产生影响。我们在级联(6-decoder)和非级联(1-decoder)结构中尝试了几种不同的参考点初始化并比较了它们的性能。如表 3 所示,在非级联结构中,不同的初始化行为完全不同。相反,它们会导致级联结构中的类似性能。与推测一致,网格初始化,即在滑动窗口中心生成参考点,会导致近似等于可学习初始化的性能。然而,另外两种初始化、中心和边界,在没有迭代的情况下会导致准确性大幅下降。为了更好地分析,我们在几个阶段可视化了不同初始化的参考点(图4)。随着迭代阶段的增加,它们的参考点往往在相同的分布中,并在最后阶段以相似的模式定位前景。总之,参考点的不同初始化导致模型在非级联结构上的性能的巨大差异,而级联结构通过多次迭代弥补了它们的差距。从另一个角度来看,更好的参考点初始化可以提高非级联结构的性能。
Can we bring the gap of 1-decoder structure and 6-decoder structure with better initialization?基于上一节中的发现,更好地初始化参考点可能会提高性能,尤其是对于 1-decoder 结构。考虑到参考点作为锚点,我们假设主流检测器中的锚点先验可以帮助我们解决这个问题。在现代两级检测器中,区域提议由 RPN 在滑动窗口范式中生成,为前景提供一组与类无关的候选者。
RPN是一种利用密集先验生成前景粗边界框的有效结构。如图3(b)所示,我们在编码器的密集特征上添加RPN层。RPN头共享编码器的特征,并预测anchors的对象得分和偏移量。选择得分最高的边界框作为区域建议。然后,我们用非级联结构中区域建议的中心初始化参考点。表 3 显示了结果,大大优于其他方法,导致非级联结构的巨大改进。图 5 展示了该方法的可视化,其中初始阶段的参考点与最后一阶段其他方法的分布相似。区域建议以更合理的分布初始化参考点,提高了无级联结构的可变形DETR的精度。
如表 4 所示,为参考点提供具有密集先验的更好初始状态会导致 1-decoder 结构的显着改进。然而,参考点只是对象查询的空间投影,而对象查询包含对象容器的额外抽象信息。因此,如何同时用密集先验初始化 256-d 查询特征?
直观地说,对于提案初始化中的每个参考点,我们从特征图中选择其对应的特征,即来自编码器的 256-d 张量作为其对象查询的初始化。我们的方法如图3(c)所示。在表 4 中,我们的方法将 1-decoder 结构进一步提高了 3 AP。此外,仅使用密集先验初始化对象查询并使用没有参考点的原始解码器也可以为基线带来显着的改进。
这些结果表明,对象容器的初始状态,包括可变形 DETR 中的参考点和对象查询,与非级联结构的性能高度相关。RPN 中的提议信息提供了更好的初始化,有可能通过密集先验来提高性能。基于我们的研究,我们提出了高效的 DETR,它能够弥补 1-decoder 结构和 6-decoder 结构之间的性能差距。
4. Efficient DETR
受上一节中发现的启发,我们提出了一个简单但有效的对象检测框架,称为高效 DETR。它有 3 个编码器层,只有 1 个解码器层,没有解码器中的级联结构。该体系结构如图5所示。高效的DETR由两部分组成:密集和稀疏。密集部分对编码器的密集特征进行预测。一个应用top-k选择方法从密集预测中选择一组建议。解码器中的 4-d 提议及其 256-d 特征被视为参考点和对象查询的初始化。在稀疏部分(sparse part),使用密集先验初始化的对象容器、参考点和对象查询被馈送到 1 层解码器以与编码器特征交互以进行进一步细化。最终结果是从细化的对象容器预测的。两部分共享相同的检测头。所有编码器和解码器层都使用 [43] 中提出的可变形注意模块。对于其余部分,我们将介绍我们网络的细节。
Backbone.在 Deformable DETR 的设计之后,我们构建了一个主干,其中包含从 ResNet 中提取的多尺度特征图。我们的主干有四个尺度的特征图,有 256 个通道。前三个特征图通过 1×1 步幅 1 卷积从 ResNet 的 C3、C4、C5 特征图中提取。同时最后一个特征图是通过 C5 上的 3×3 步幅 2 卷积生成的。
Dense part.如上所述,密集部分由Backbone、编码器和检测头组成。当用卷积替换编码器时,它就变成了一级检测器。在两阶段可变形 DETR 之后,为多尺度特征图中的每个位置生成锚点。基本锚刻度设置为0.05。检测头为每个锚预测C (DETR[2]中的C=91)类别分数和4个偏移量。与 [2, 43, 31] 相同,分类分支是一个线性投影层,回归分支是一个隐藏大小为 256 的 3 层感知层。
Sparse part.密集部分的输出不改变编码器特征的大小。我们通过他们的是物体的置信度分数(它被定义为作为前景的置信度)选择其中一组,对于每个锚点,我们取其 256 维编码器特征预测的最大类别分数作为其客观性分数。选择得分最高的 K 个提案作为参考点。在这里,我们使用参考点作为 4-d 框,而不是 2-d 中心来获得更多的空间信息。至于对象查询,它们取自编码器特征图。在密集部分,每个锚点的预测来自编码器特征图中的 256-d 特征。我们将此 256-d 特征作为提议特征。提案特征和参考点成对出现,并由同一个锚点连接。在我们的方法中,提案特征被视为其参考点的对象查询。从某种意义上说,首先,当特征通过编码器层时,位置编码已经编码到提议特征中。其次,密集部分的任务与稀疏部分相同,除了其输出的大小。直观地说,密集部分的特征可以作为稀疏部分的初始状态。此外,鉴于密集部分和稀疏部分的任务非常相似,这两个部分共享相同的检测头。然而,以每个 256-d 特征作为训练样本,由于每次迭代的训练样本较多,密集部分比稀疏部分收敛得更快。从这个角度来看,密集特征(提议特征)可以作为稀疏特征(对象查询)的良好初始化。
在初始化之后,对象查询被送到解码器层进行加强,在传统的检测算法中[12, 9, 27, 24, 20],一级检测器面临特征错位,而两级检测器通过 ROIAlign [10, 23] 或 ROIPool [27] 解决了这个问题。在我们的稀疏部分,错位由解码器固定,其中交叉注意模块使对象查询能够聚合与其相关的特征。最终预测来自这些增强的对象查询。
与之前的 DETR 不同,我们的提议数量是在训练过程中动态调整的。鉴于网络无法在训练开始时预测准确的类别分数,从一开始就设置了大量提案(300)。这主要确保几乎所有的前景都覆盖在稀疏的提案集中。然而,少量的建议会错过一些困难的例子。这导致训练不稳定。作为网络的训练,我们线性地减少了数字。最终数字减少到 100。这种策略使得网络高效,它使用100个提案达到了与300个天训练的准确度相当
Loss.在密集部分和稀疏部分我们的框架结构共享相同的标签分配规则和损失函数,为了避免像NMS一样的后处理操作一个一对一标签分配原则被采用,像[30,2,43]一样,我们用匈牙利算法来匹配预测与真值,匹配花销和损失函数的定义相同,L = λcls·Lcls +λL1·LL1 +λgiou·Lgiou .损失函数与[2,43,31]中的损失函数一样,Lcls 表示用于分类的焦点损失 [20]。LL1 和 Lgiou 表示 L1 损失和广义 IoU 损失 [28] 用于定位。λcls、λL1 和 λgiou 是它们的系数。我们在密集部分而不是一对多分配中应用一对一的标签分配规则,因为一对多分配依赖于更多的提议才能达到类似的性能。如第 5.3 节所述,密集部分中的 1-to-1 分配允许 Efficient DETR 以少量提案 (100) 实现高精度。