Efficient DETR

Paper:https://arxiv.org/abs/2104.01318

Code:暂未开源

摘要

最近提出的端到端 transformer 检测器 (例如 DETR 和 Deformable DETR)有一个堆叠的 6 个解码器层的级联结构,以用来迭代更新 object queries,否则它们的性能会严重下降。在这篇论文中,作者研究了 object containers 的随机初始化,object containers 包含 object queries 和 reference points,用于负责多次迭代的要求。基于这个发现,作者提出 Efficient DETR,一种用于端到端目标检测的简单高效的流程。通过同时利用密集检测(dense detection)和稀疏集合检测(sparse set detection),Efficient DETR 在初始化 object containers 利用密集先验,并且弥补了 1 层 decoder 结构和 6 层 decoder 结构的性能差异。在 MS COCO 上进行的实验表明,该的方法只有 3 encoder layers 和 1 decoder layer,与 state-of-the-art 目标检测方法相比,性能具有竞争力。 Efficient DETR 在拥挤的场景中也很强大,它在 CrowdHuman 数据集上大大优于当前的目标检测器。

介绍

最近,DETR 提出一种基于 encoder-decoder transformer 架构和二部图匹配构建的端到端框架,改框架可以直接预测一组边界框,而无需后处理(NMS)。然而,DETR 需要比当前主流检测器 10 到 20 倍训练的 epoch 才能收敛,并且在检测小目标方面表现出相对较低的性能。

DETR 的检测流程可以抽象成 Fig.1(a)。我们首先定义 object container 作为一种结构信息的容器,它可以包含不同种的目标特征。object queries 和 reference points 都属于 object container,因为 object queries 和 reference points 可以表示抽象的特征和目标的位置信息。一组随机初始化的 object containers 被送入特征精练器(feature refiner)中,用于和从图像提取的特征做交互作用。具体来说,具有 cross-attention 模块的 6 decoder layers 扮演了 cascade feature refiner的角色,它迭代的更新 object containers。这个精练之后的 object containers 有助于 DETR最后的预测。此外,图片的特征是通过 feature extractor 提取到的,在 DETR 中的 feature extractor 包括 a CNN backbone 和 6 encoder layer。总之,图像和随机初始化的 object containers 通过 feature extractor 和 cascade feature refiner 得到最终的结果。在这个流程中,DETR 和 Deformable DETR 都具有 6-encoder 和 6-decoder transformer 架构。我们假设这种结构是 DETR 系列 实现目标检测高精度的关键。

在这篇论文中,作者研究了 DETR 的各个组成部分,并且了解其机制。作者通过大量实验发现具有额外辅助损失的 decoder layer 对性能的贡献最大。transformer decoders 迭代地用特征图与 object containers 进行交互。作者探索了 DETR 中 object containers 随机初始化和多次修正的要求导致了收敛缓慢。

然而,很难直接分析 object queries,因为它们只是一组抽象特征。Deformable DETR 为 object queries 提出了 reference points。Reference points 是一个2维张量,表示猜想的框的中心点。通过可视化训练模型的参考点,作者发现它们被证明仅用作基于锚点的方法中的 anchor points。 此外,作者报告了 1-decoder 结构的 reference points 的不同初始化导致巨大性能差异。 问题来了:对于端到端检测器中的 object containers,哪种初始化更好?

探索 DETR

回归 DETR

Encoder and decoder. DETR 系列方法是在一个 encoder-decoder transformer 架构上。encoder 和 decoder 都级联了 6 个相同的层。An encoder layer 由 a mullti-head self-attention 和 a feed-forward network (FFN) 组成,而 a decoder layer 有一个额外的 multi-head cross attention layer。encoder layer 起到了与卷积类似的作用,并且从具有 multi-head self-attention 的 CNN backbone 上提取上线文特征。在 decoders 中,一组 256 维的 object queries 与整个图像的 encoder features 进行交互,并通过 multi-head cross attention 聚合信息。辅助二分匹配损失应用于每一个 decoder layer。表 1 说明 DETR 对 decoder layer 的数量更加的敏感,这意味着 decoder 比 encoder 对于 DETR 来说更加的重要。特别是,采用具有 3-encoders 和 3-decoders 的 DETR 作为我们的 baseline。如果在 decoder 中移除 2 层 layer,AP 可以减少约 9.3。相比之下,删除 encoder 中的 2 层 layer,仅导致 1.7 AP 的下降。

为什么 decoder 比 encoder 更加的重要? 它们都是在一个级联的框架下,但是 decoder 的每个相同的层上都有 一个额外的辅助损失。在表 1 中,我们发现这个辅助的解码损失是 DETR 对 decoder layer 数量敏感的主要原因。在没有辅助损失的情况下,encoder 和 decoder 的行为趋于相同。我们指出辅助解码损失在更新 query feature 时引入了强监督,这使得 decoder 更高效。decoder 级联结构通过逐层的辅助损失来精练特征。迭代次数越多,辅助解码监督越有效。

为了进一步套索 decoder 的级联结构,作者尝试了不同数量的 decoder layer。表 2 显示,随着级联次数的减少,性能显著降低。6-layer decoder 和 1-layer decoder 存在 10.3 AP 的巨大下降。值得注意的是,在 decoder 中每次迭代后,仅仅 object queries 得到了更新。Object queries 与性能密切相关,因为最终的预测是来自 object queries 并由检测头预测。然而,object queries 在训练开始时是随机初始化的。我们假设这种随机初始化不能提供良好的初始状态,这可能是 DETR 需要 6 次迭代的级联结构来实现竞争性能的原因。

Object Containers 初始化的影响

基于前面的分析,object queries 的初始是值得研究的。object query 属于object container 中的特征信息。object query 被定义为可学习的位置嵌入,它是一个 256 维的抽象张量,因此很难分析。然而,我们观察到 DETR 中的每个 object query 都学会了专注于具有多种操作模式的特定区域和框的大小。我们假设研究 object query 的空间投影可能有助于直观的理解。

Deformable DETR 引入了一个新的组件,即与 object queries 相关的 reference point。Reference points 是表示框中心预测的 2 维张量,属于 object container 的位置信息。此外,参考点是通过线性投影从 256 维 object queries 中预测的。它们可以作为 object query 在 2D 空间中的投影,并提供 object query 中位置信息的直观表示。Reference point 和 object query 在 decoder 迭代期间更新,并作用到最终结果。

考虑到 reference points 直观地表示 object queries 中的位置信息,开始对其进行研究。在传递到 decoder layers 之前,reference points 试试通过随机初始化的 object queries 的线性投影生成的,如图 3(a)所示。我们称这个过程为参考点的初始化。图 2 展示了模型收敛之后的参考点。初始阶段的参考点均匀分布在图像上,覆盖整个图像区域。这种初始化类似于 anchor-based detectors 的 anchor points 的生成。随着迭代阶段的增加,reference points 逐渐聚集到前景的中心,最终在最后阶段几乎覆盖了所有的前景。直观的说,reference points 充当定位前景的 anchor points,并使得注意力模块专注于前景周围的一小组关键采样点。

在研究了 reference points 的更新之后,我们开始探索它们的初始化,这就是参考点的生成方式。对于剩下的部分,我们将 reference points 和 object queries 的初始化称为 object containers 的初始化。

Reference Point 不同的初始化。 在 anchor-based detectors 中,anchors 的生成对模型的性能有一个较大的影响。anchors 在每一个滑动窗口的位置生成,并且为目标可能出现的位置提供了一个合适的初始化。在 reference points 的初始化中,它的作用类似于 anchor points,可能对 Deformable DETR 的性能有影响。作者针对级联(6-decoder)和非级联(1-decoder)结构尝试了不同的初始化,并且比较它们的性能。如表 3 所示,不同的初始化在非级联结构上表现确实不同。相反,在级联结构上它们有一个相似的性能。与推测一致,网格(grid)初始化是在滑动窗口的中心生成 reference points,它的结果类似于可学习的初始化。然而,另外两种初始化,中心(center)和边界(border),在没有迭代的情况下,导致了准确率的巨大下降。为了更好的分析,我们再几个阶段可视化了不同初始化的 reference points,如图 4 所示。随着迭代的增加,它们的 reference points 往往处于相同的分布,并且在最终的阶段以相似的模式定位前景。总之,reference points 的不同初始化导致模型在非级联结构中性能的巨大差异,而级联结构通过多次迭代带来了它们的差距。 从另一个角度来看,更好的 reference points 初始化可能会提高非级联结构的性能。

我们能否通过更好的初始化来弥补 1-decoder 结构和 6-decoder 结构的差距?

基于以上的发现,reference points 更好的初始化可以提升性能,尤其对 1-decoder 结构。考虑到 reference points 类似于 anchor points,我们假设在主流检测器中 anchor 的先验可以帮助解决这个问题。在当前的 two-stage 检测器中,region proposals 通过 RPN 以一个滑窗的操作生成的,它可以针对前景提供一组类比无关的候选区域。

RPN 使用 dense 的先验生成前景的粗糙的边界框。如图 3(b) 所示,我们将 RPN 层添加到从 encoder 出来的 dense feature 上。RPN head 共享 encoder 的特征,并且为每一个 anchor 预测 objectness score 和 偏移。得分较高的边界框被选择作为 region proposals。然后,我们再非级联的结构中使用这些 region proposals 的中心作为 reference points 的初始化。表 3 表明了这种方式带来的较大的性能提升。图 5 可视化了这个方法,这里 reference points 作为初始化阶段得到了与其他方法最后阶段相似的分布。Region proposals 以一种更合理的分布初始化了 reference points,提升了非级联结构的 Deformable DETR 的准确性。

如表 4 所示,使用 dense 先验作为 reference point 的初始化,使得它达到了一个更好的初始化状态,并且在 1-decoder 结构中带来了显著的性能提升。然而,reference point 仅仅是 object query 的空间映射,object query 包含额外的抽象信息。因此,怎么同时使用 dense 先验初始化 256-d 的 object feature呢?

直观上,对于 proposal 初始化中的每个 reference point,我们从特征图中选择其对应的特征,即来自 encoder 的 256-d 张量,作为其 object query 的初始化。我们的方法如图 3(c) 所示。 在表 4 中,我们的方法将 1-decoder 结构进一步改进了 3 AP。此外,仅使用 dense 先验初始化 object query 并使用没有reference point 的原始 decoder 也可以显着改善 baseline。

这些结果表明 object container 的初始状态,包括 Deformable DETR 中的 reference point 和 object query,与非级联结构的性能高度相关。RPN 中的 proposals 信息提供了更好的初始化,有可能通过 dense 先验提高性能。基于我们的研究,我们提出了 Efficient DETR,它能够缩小 1-decoder 结构和 6-decoder 结构之间的性能差距。

Efficient DETR

Efficient DETR 包含 3 encoder layers 和仅仅 1 decoder layer,并且在 decoder 中没有级联结构。这个框架如图 5 所示。Efficient DETR 包含两个部分:dense 和 sparse。Dense 部分在来自 encoder 的 dense 特征上做预测。它从 dense 的预测结果中选择 top-k proposals。这个 4-d proposals 和它对应的 256-d feature 作为 reference points 和 object queries 的初始化。在 sparse 部分,object containers(包含 reference points 和 object queries )使用 dense 先验作为初始化,并且送入到 1-layer decoder,使其与 encoder feature 做信息交互更新特征。最终的预测结果来自于这个更新之后的 object containers。

实验部分