【深度学习】ViTDet:Exploring Plain Vision Transformer Backbones for Object Detection

Posted by ShawnD on November 2, 2022

Abstract

作者探索了朴素的、非层次化的视觉 Transformer(ViT)作为目标检测的骨干网络。

这种设计使原始的ViT架构能够进行微调,以进行目标检测,而无需重新设计用于预训练的层次化骨干。

通过最小的微调调整,所提出的普通骨干检测器可以实现有竞争力的结果。

令人惊讶的是,作者观察到:

(i)从单尺度特征图(没有常见的FPN设计)构建一个简单的特征金字塔就足够了

(ii)在很少的 cross-window propagation 块的帮助下使用窗口注意(不需要 shift)就足够了。

通过预训练为 Masked Autoencoders(MAE) 的普通ViT骨干,该检测器名为ViTDet,可以与之前基于层次化的主干的领先方法竞争,仅使用 ImageNet-1K 预训练在COCO数据集上达到高达 61.3 AP。

Method

这篇文章的目标是消除对骨干的层次化约束,并能够探索朴素骨干目标检测。为此,这篇文章的目标是进行最小的修改,仅在微调期间使朴素主干适应目标检测任务。在这些适应之后,原则上可以应用任何检测器头,为此作者选择使用Mask R-CNN [25]及其扩展。这篇文章的目标不是开发新组件;相反,其专注于在探索中可以得出哪些新见解。

Simple feature pyramid. FPN 是构建用于目标检测的网络内金字塔的常见解决方案。如果主干是分层的,FPN的动机是结合早期阶段的高分辨率特征和后期阶段的更强特征。这是在 FPN 中通过自上而下和横向连接实现的(图1左)。

如果骨干是非层次化的,FPN动机的基础丢失了,因为主干中的所有特征图的分辨率都相同。 在该场景中,作者只是简单地使用来自主干的最后一个特性图,它应该具有最强的特征。在这个特征图上,作者应用了一组卷积或反卷积去卷积以并行的方式生成多尺度特征图。具体来说, 默认的 ViT 特征图的尺度为 $\frac{1}{16}$(步长为 16), 作者使用步长为 ${2, 1, \frac{1}{2}, \frac{1}{4}}$ 的卷积生成尺度为 $\frac{1}{32}, \frac{1}{16}, \frac{1}{8}, \frac{1}{4}$ 的特征图, 其中步长为分数表示反卷积。作者称之为 “simple feature pyramid”(图1右)。

从单个特征图构建多尺度特征图的策略与SSD的相似。然而,该场景涉及从深度、低分辨率的特征图中进行上采样,这与SSD不同,后者利用较浅的特征图。在层次化主干中,上采样通常由横向连接辅助[37];在朴素的 ViT 主干中,作者实验上发现这没有必要(第4节),简单的去卷积就足够了。作者假设这是因为 ViT 可以依赖位置嵌入[54]来编码位置,还因为高维 ViT patch 嵌入不一定丢弃信息。

我们将与同样建立在朴素主干上的两种 FPN 变体进行比较(图2)。在第一个变体中,主干被人工划分为多个阶段,以模拟层次化主干的阶段,并应用横向和自上而下的连接(图2(a))。第二个变体与第一个变体相同,但仅使用最后一层特征图,而不是分阶段(图2(b))。作者表明 FPN 变体并不是必要的。

Backbone adaptation. 目标检测器受益于高分辨率输入图像,但计算整个主干的全局自注意力由于内存大小被限制,并且速度缓慢。在该研究中,作者重点关注预训练的主干执行全局自注意力的场景,然后在微调期间适应高分辨率的输入。这与目前直接通过主干预训练中修改注意力计算的方法形成了鲜明的对比。该场景能够使用原始的 ViT 主干进行检测,而无需重新设计预训练结构。

作者探索了使用窗口注意力和几个跨窗口块。在微调期间,给定高分辨率特征图,作者将它划分为常规的非重叠窗口。 在每个窗口中计算自注意力。这是原始 Transformer 中 “restricted” 的自注意力。

与Swin不同,我们不会在各层将窗口“shift”。为了允许信息传播,作者使用少数(默认情况下是4个)可以跨窗口的块。作者将预训练的主干均匀地分为4个 blocks 子集(例如,24-blocks 的 ViT-L 的子集有6个)。作者在每个子集的最后一个块中应用传播策略。作者研究两种策略:

(i) Global propagation. 作者在每个子集的最后一个块中执行全局自注意力。由于全局块的数量很少,内存和计算成本是可行的。这类似于[34]中与 FPN 联合使用的混合窗口注意力。

(ii) Convolutional propagation. 作为替代方案,作者在每个子集后添加一个额外的卷积块。卷积块是由一个或多个卷积和恒等捷径组成的残差块[27]。此块中的最后一层初始化为零,因此块的初始状态为恒等式。将块初始化为恒等映射允许将其插入预训练的主干的任何地方,而不会破坏主干的初始状态。

这两种主干适应很简单,使检测微调与全局自注意力预训练变得易于使用。如前所述,没有必要重新设计预训练架构。

Discussion. 目标检测器包含可能与任务无关的组件,如主干,以及其他特定于任务的组件,如 RoI 头。这种模型分解使与任务无关的组件能够使用非检测数据(例如ImageNet)进行预训练,这可能会提供优势,因为检测训练数据相对稀缺。

从这个角度来看,追求涉及较少归纳偏置的主干是合理的,因为主干可以使用大规模数据和/或自监督进行有效训练。相比之下,特定于检测任务的组件可用的数据相对较少,并且可能仍然受益于额外的归纳偏置。虽然追求具有较少归纳偏置的检测头是一个活跃的工作领域,但像 DETR 这样的领先方法对训练具有挑战性,并且仍然受益于特定于检测的先验知识。

在这些观察的推动下,作者的工作对检测器主干遵循了原始朴素的 ViT 论文。虽然ViT论文的讨论[14]侧重于减少对平移不变形的归纳偏置,但在这个例子中,在主干中更少甚至没有在 scale equivariance 上的归纳偏置。作者假设,朴素主干实现 scale equivariance 等方差的方法是从数据中学习先验知识,类似于它如何在没有卷积的情况下学习平移不变形和局部性。

作者的目标是证明这种方法的可行性。因此,作者选择用标准检测特定组件实现该方法(如 Mask R-CNN 及其拓展)。探索检测头中更少的归纳偏置是未来工作的一个开放而有趣的方向。作者希望它能从这里的工作中受益并在此基础上再接再厉。

Implementation. 我们使用朴素的 ViT-B、ViT-L、ViT-H[14]作为预训练主干。作者将 patch 大小设置为16,因此特征图尺度为1/16,即 $\text{stride} = 16$。 作者的探测器头遵循 Mask R-CNN [25] 或 Cascade Mask R-CNN [4],其结构细节在附录中描述。输入图像为 $1024 \times 1024$ ,在训练期间增加了大的尺度抖动[19]。由于这种严重的正则化,作者在COCO中微调了多达100个 epoch。作者使用AdamW优化器[43],并使用基线版本搜索的最佳超参数。更多详情见附录。

Conclusion

作者的探索表明,朴素骨干检测是一个有前景的研究方向。

这种方法在很大程度上保持了通用主干网络和下游任务特定设计的独立性——基于ConvNet的研究就是这种情况,但基于 Transformer 的研究却不是这样。

作者希望将训练与微调解耦是一种总体上有利于社区的方法。

例如,在自然语言处理(NLP)中,通用预训练(GPT,BERT)极大地推进了该领域,并一直在支持各种下游任务。

在这项研究中,作者的普通骨干探测器受益于MAE提供的现成预训练模型。

作者希望这种方法也将有助于拉近计算机视觉和NLP领域的距离。