当前位置:网站首页>何凯明新作ViTDET:目标检测领域,颠覆分层backbone理念

何凯明新作ViTDET:目标检测领域,颠覆分层backbone理念

2022-08-11 05:25:00 pontoon

Exploring Plain Vision Transformer Backbones for Object Detection

【网址】:

https://arxiv.org/abs/2203.16527

【开源代码】:Code will be made available.

目标检测任务受益于独立通用的backbone和专门为检测任务设计的模块(neck,head)。很长一段时间以来,由于卷积网络的特性,这些backbone一直是多尺度的分层架构,这严重影响了用于检测多尺度物体的neck/head设计。Vision Transformers (ViT) 与典型的 ConvNets 不同,原始的 ViT 是一个简单的、非分层的架构,它始终保持单尺度特征图。 它的“极简主义”在应用于目标检测时遇到了挑战:

其一,如何在下游任务中用预训练好的plain backbone网络来处理好各种大小不同的物体?

其二,全局注意力机制的复杂度与输入图像尺寸的平方呈正比,在面对高分辨率图像时,处理效率低下。

放弃这种追求的一种解决方案是将分层设计重新引入主干。在该解决方案,例如 Swin Transformers及相关研究,可以继承基于 ConvNet 的检测器设计,并已取得成功。

在这项工作中,我们追求不同的方向:我们探索仅使用普通、非分层backbone的目标检测器。如果这个方向成功,它将能够使用原始的 ViT backbone进行目标检测;这将使预训练设计与微调需求脱钩,保持上游与下游任务的独立性,就像基于 ConvNet 的研究一样。 这个方向也部分遵循了 ViT 在追求通用特征时“减少归纳偏差”的准则。 由于非局部自注意力计算可以学习平移等变特征,它们也可以从某些形式的监督或自监督预训练中学习尺度等变特征。(个人理解:例如swt设计模仿convnet,增加了归纳偏差)

1.瓶颈问题

仅使用普通、非分层backbone(ViT)的目标检测器带来的问题:

其一,如何在下游任务中用预训练好的plain backbone网络来处理好各种大小不同的物体?

其二,全局注意力机制的复杂度与输入图像尺寸的平方呈正比,在面对高分辨率图像时,处理效率低下。

2.本文贡献:

(1) 提出了一种仅使用普通、非分层backbone(ViT)的目标检测器为ViTDet,可以与领先的分层backbone检测器(例如,Swin、MViT)竞争,仅使用没有标签的 ImageNet-1K 预训练就能超过ImageNet-21K 预训练的分层backbone检测器。

(2) 在普通的 ViT backbone,舍弃了FPN 模块,而仅仅使用单尺度featur map进行操作。

(3) 在ViT backbone上应用window attention解决在面对高分辨率图像时,处理效率低下问题,并且在之后仅使用少量的cross-window blocks。

(4) 我们的方法保持了将检测模块特定设计与任务不可知的backbone分离的理念,检测模块的先验知识仅在微调期间引入,无需在预训练中先验地调整backbone设计。(个人理解:比如需要根据目标尺寸大小人为设定FPN层数,分层结构等)。

3.解决方案:

我们的目标是消除对backbone的分层约束,并启用对普通backbone目标检测的探索。 为此,我们的目标是进行最少的修改,以仅在微调期间使简单的backbone适应目标检测任务。 在这些适应之后,原则上可以应用任何检测器头,为此我们选择使用 Mask R-CNN及其扩展。 我们的目标不是开发新组件。

  • 提出Simple feature pyramid(SFP):

 左边为传统分层backbone+FPN,右边是ViT原始backbone+SFP。

只使用来自backbone的最后一个特征图,在这张特征图上,应用一组卷积或反卷积来生成多尺度特征图。传统FPN中,不同尺度特征图来自不同下采样倍率的卷积层,在普通的 ViT backbone中,我们发现这不是必需的,简单的反卷积就足够了。

作者也探讨了(b)方式,发现效果并不好。(个人理解:最初的FPN的动机是将低分辨率、强特征映射与高分辨率、弱特征映射结合起来。 当backbone是普通的,没有高分辨率的map时,这个基础就失去了,这可以解释为什么简单的金字塔就足够了。)

为什么仅使用简单的反卷积或者卷积效果比分层效果好,我们认为这是因为 ViT 可以依赖位置嵌入(positional embedding)来编码位置,还可能因为高维 ViT patch embeddings不一定会丢弃信息。(个人理解:在FPN中,不同尺度feature map,大尺寸feature map纹理信息丰富,位置信息强,而vit有positional embedding,可以学习一定的位置信息,同时ViT在较深层的块中有较长的注意距离,在较浅层的块中距离比较局限)

  • window attention with a few cross-window blocks:

我们关注的是预训练backbone执行全局self-attention的场景,然后在微调过程中适应更高分辨率的输入。而一些方法(例如Swin transfomer)则是直接在预训练中改变注意力计算适应更高分辨率的输入。

我们探索使用带有几个跨窗口块的窗口注意力。在微调期间,给定高分辨率特征图,我们将其划分为常规的非重叠窗口。在每个窗口内计算自注意力。

与 Swin 不同,我们不会跨层“移动”窗口。 为了使窗口之间信息交互,使用了极少数(默认情况下,4 个)可以跨窗口的块(cross-window block)。我们将预训练的backbone平均分成 4 个块子集(例如,对于 24 块 ViT-L,每个子集中有 6 个)。我们在每个子集的最后一个块中应用cross-window block。 我们研究这两种策略:

(1)Global self-attention

在每个子集的最后一个块中执行Global self-attention。由于Global block的数量很少,内存和计算成本是可接受的。

(2)Convolutional

在每个子集之后添加一个额外的卷积块。卷积块是由一个或多个卷积和一个恒等映射分支组成的残差块(residual block)。

这样使检测微调与全局自注意力预训练兼容,没有必要重新设计预训练架构。

Discussion:

我们的工作在检测器的backbone方面遵循了原始普通 ViT 论文的精神。 虽然 ViT 论文的讨论集中在减少平移等变的归纳偏差,但在我们的案例中,它是关于在主干中的尺度等变上减少甚至没有归纳偏差。 我们假设普通主干实现尺度等方差的方法是从数据中学习先验知识,类似于它如何在没有卷积的情况下学习平移等方差和局部性。(个人理解:分层架构实际上引入了尺度等变归纳偏差)。

4.实验:

在 COCO 数据集上进行消融实验。 我们在 train2017 split 上进行训练并在 val2017 split 上进行评估。评估指标为目标检测(APbox)和实例分割(APmask)。使用在没有标签的 IN-1K 上预训练的 MAE 初始化backbone。

消融实验:模型为使用普通的 ViT 主干的Mask R-CNN,在 COCO 上评估,对比SFP与FPN以及加入了top-down connections的SFP的效果。

消融实验:模型为使用普通的 ViT 主干的Mask R-CNN,在 COCO 上评估。

(a)对比不加cross-window模块,以及分别采用global self-attention,卷积模块,swin transformer的shifted win设计的效果。

(b)对比不加cross-window模块,以及把卷积作为cross-window模块时,不同的卷积结构的效果,naive(一个3x3的卷积层),basic(两个3x3的卷积层),bottleneck(1×1→3×3→1×1 的结构)。

(c)对比不加cross-window模块,以及在不同位置加入cross-window模块的效果。first 4 blocks(将这4个cross-window模块全部加入到backbone的第一个block),last 4 blocks(将这4个cross-window模块全部加入到backbone的最后一个block),evenly 4 bloacks(将这4个cross-window模块,放置在在backbone的每个block的最后一个块中)

(d)对比不加cross-window模块,和加入多少数量的cross-window模块的效果。

消融实验:模型为使用普通的 ViT-L 主干的Mask R-CNN,对比对比不加cross-window模块,以及加入cross-window模块的数量及类型的效果。

训练内存(每个 GPU)以batch-size为1进行测试。测试时间(每个图像)在 A100 GPU 上进行测试。

卷积是最实用的,只增加了 ≤5% 的内存和时间,也增加了 4% 的参数。使用 4 global也是可行的,并且不会增加模型大小。所有 24 global的全局自注意力是不切实际的。重要的是,所有这些架构调整只在微调期间执行,不需要重新设计预训练的架构。

对比实验,对比分层结构和作者提出的plain-backbone的效果。

我们分别为每个主干搜索最佳超参数。我们的 Swin 结果优于原始论文中的对应结果;我们的 MViTv2 结果优于或与原始论文中报告的结果相当。

继原始论文之后,Swin 和 MViTv2 都使用相对位置偏差。 为了更公平的比较,在我们的 ViT 主干中采用相对位置偏差,但仅在微调期间,不影响预训练,这种添加将 AP 提高了1个点。 在上一节的所有消融实验中,没有采用相对位置偏差。

对于MAE为何不用在分层结构上做对比(我们也很好奇MAE对分层backbone的影响,但这在很大程度上超出了本文的范围,因为它涉及到用MAE为分层backbone找到好的训练方。同时观察到,在Image-1K上进行MAE预训练的MViTv2-L比Image-21K监督预训练的MViTv2-L好1.3(达到了54.9),但也比ViT-L,ViT-H小。

这表明普通 ViT 主干可能比分层主干更受益于 MAE 预训练,这表明 MAE 的自我监督训练可以弥补尺度上缺乏归纳偏差。

分层backbone通常涉及增强的自我注意块设计。例如Swin中的转移窗口注意和MViT v1/v2中的池注意。这些块设计,如果应用于普通backbone,也可以提高精度和参数效率。虽然这可能使我们的竞争对手处于优势,但我们的方法在没有这些增强的情况下仍然具有竞争力。

不同模型的参数量,FLOP,test time与APbox的对比。结论:越大的模型,其收益越大。

对比实验,对比作者提出的ViTDet和其他主流检测网络(分层或者单尺度)。检测框架是 Cascade Mask RCNN(表示为“Cascade”)、Hybrid Task Cascade(HTC),或其扩展(HTC++)。

关于另一种plain-backbone,UViT 旨在设计一种适用于检测任务的plain-backbone,而作者的方法是不针对特定任务,是通用的。

我们的探索表明,plain-backbone检测是一个很有前途的研究方向。这种方法在很大程度上保持了通用主干和下游任务特定设计的独立性。

原网站

版权声明
本文为[pontoon]所创,转载请带上原文链接,感谢
https://blog.csdn.net/pontoon/article/details/124459631