何恺明团队新作VitDET:用于目标检测的Vit主干
-
何恺明团队新作VitDET:用于目标检测的Vit主干
论文:Exploring Plain Vision Transformer Backbones for Object Detection
论文地址:https://arxiv.org/pdf/2203.16527.pdf
代码地址: 代码将开源
摘要
- 现存问题: 为了基于Vit主干网络的预训练模型能够更好的适应下游任务,本文探索基于Vit的目标检测模型。
- 实验发现: (i)从单一尺寸的特征图(没有常见的FPN设计)构建一个简单的特征金字塔就能获取足够的信息特征;(ii)仅使用窗口注意(不使用swin中的窗口shift)并辅助很少的跨窗口传播块就能实现足够的信息交流。
- 实验结果: 使用MAE进行预训练的Vit主干,ViTDet可以与之前所有基于分层主干的领先方法竞争,另外,仅使用ImageNet-1K预训练即可在COCO数据集上达到61.3 AP
方法
本文并没有提出新的组件,目标是通过微小的模型调整,实现vit这种单尺度主干能够很好的使用目标检测任务。论文基于Mask RCNN类似模型进行修改。
简单的特征金字塔
FPN在下游模型中很常见。
如果主干网络是多尺度的,FPN模块就是将早期阶段的更高分辨率特征与后期的更强特征相结合。这在FPN中是通过自上而下和横向连接实现(图1左)但是,如果主干网络不是多尺度的(每一层具有相同的分辨率),FPN该如何生成?
文章提出了三个思路:
- 将vit模型人为的分成四个block,每个block通过不同stride的卷积和反卷积操作获取多尺度特征金字塔
- 仅仅使用vit最后一层特征,通过不同stride的反卷积操作获取多尺度金字塔
- 同样仅仅使用vit最后一层特征,但获取的多尺度金字塔中没有自上而下的信息流
全局信息
目标检测器受益于高分辨率的输入图像,但在整个主干中计算全局自注意需要消耗很大的内存,而且速度很慢
本文将研究重点放在这样一个场景上:通过预先训练好的主干网络来执行全局自我注意,然后在微调过程中适应更高分辨率的输入。就是不去修改主干网络来获取全局信息
那么这就带来了一个矛盾点:想不修改vit模型结构来获取全局信息(保证预训练权重可用),又不想计算全局注意力
文章提出了思路:
类似swin transformer,将特征图平分为不重叠的窗口,但不使用shift窗口滑动。
将vit平均分为4个子block(例如vit-L一共有24个block,那么将其分为4个子block,那么每个子block中含有6个小模块)方法1:
每个子block中的最后一个注意力模块设置为全局注意力计算,这样能够保证内存和计算量方法2:
每个子block后添加一个带跳跃连接的卷积模块(包含多个卷积层和一个residual层),卷积模块中的最后一个卷积层初始权重全为0,这样通过residual层能够保证整个卷积模块不影响vit的初始状态实验
消融实验
在COCO数据集上进行消融实验。在train2017数据集上进行训练,并在val2017上进行评估。得到目标检测边框(APbox)和实例分割(APmask)的结果。
使用MAE来初始化vit主干网络,在IN-1K上预训练简单的特征金字塔是足够的
对图2中的金字塔策略进行实验,如表1所示,结果显示简单的特征金字塔足以让普通ViT主干享受金字塔的好处研究表明,多层特征尺度结构,而不是自上而下/横向连接,是特征金字塔能够极大地有利于多尺度目标检测的主要原因。
少量全局模块是足够的
表2显示了各种形式的信息传播是有帮助的,而我们可以在大多数或所有块中使用窗口注意。重要的是,所有这些架构调整仅在微调期间执行;它们不需要重新设计预训练架构MAE提供高性能预训练主干网络
与多尺度主干网络对比
-
日常期待咚咚的论文小笔记!