CVPR 2021 比CNN和Transformer更好的Backbone?伯克利&谷歌提出BoTNet,精度达84.7%

详细信息如下:

  • 论文链接:https://arxiv.org/abs/2101.11605

  • 项目链接:https://github.com/lucidrains/bottleneck-transformer-pytorch

导言:
在本文中,作者提出了BoTNet,它结合了自注意来完成包括图像分类、目标检测和实例分割在内的多个计算机视觉任务。通过在ResNet的最后三个瓶颈块中,用全局自注意力替换空间卷积,BoTNet在实例分割和目标检测方面显著改善了baseline的性能,同时减少计算参数和计算时间。
通过BoTNet的设计,作者还指出了如何将具有自注意力的ResNet瓶颈块看作是Transformer块。BoTNet在COCO实例分割基准数据集上基于Mask R-CNN框架实现了44.4%的Mask AP和49.7%的Box AP。作者还将BoTNet设计用于图像分类,得到的模型在ImageNet基准上获得了84.7%的TOP-1准确率的性能,同时基于TPU-v3硬件,BoTNet在计算时间上比EfficientNet模型快了1.64倍。

      01      

Motivation
基于深层卷积的主干网络结构(比如ResNet、GoogLeNet等)在图像分类、目标检测、实例分割方面取得了重大进展。大多数主干网络都是基于3×3的卷积。虽然卷积运算可以有效地捕捉局部信息,但目标检测、实例分割、关键点检测等视觉任务需要对远程依赖关系进行建模。
为了能够通过聚合局部交互来获得全局依赖关系,基于卷积的网络结构通常需要堆叠多层。虽然堆叠更多的层确实提高了主干网络的性能,但直接建立一个能够建模全局依赖关系的模型显然是更加方便的,因为它不需要多层卷积的堆叠,只需要一个结构就能进行全局信息的建模。
对远程依赖关系进行建模对于自然语言处理(NLP)任务也很是非常重要的。因此,基于自注意力机制的Transformer首先被应用在NLP领域中,用来学习跨越长序列的丰富关联特征。
为了让CNN主干网络也能具备这样的性质,一种简单的方法是用Transformer中提出的多头自注意(MHSA)层代替CNN中的空间卷积层,如上图所示。这种思路已经在两个不同的方向上进行了实现。
一方面,诸如SASA、AACN、SANET、Axial-SASA等模型将ResNet中的瓶颈块用不同形式(local, global, vector, axial)的Self-Attention替换。另一方面ViT使用堆叠的Transformer块,在不同的patch token上进行操作,以捕获全局的信息。
这些方法看似是两类不同的结构,但作者指出事实并非如此。相反,具有MHSA层的ResNet Botteneck块可以看做是具有瓶颈结构和其他微小差异(例如残差连接、归一化层等)的Transformer块。(如上图中间部分所示)。鉴于这种等价性,作者将具有MHSA层的ResNet瓶颈块称为 Bottleneck Transformer(BOT)块。
在视觉中使用自注意力以下有几个挑战:(1)与图像分类(224×224)相比,目标检测和实例分割中的图像大小(1024×1024)要大得多。(2)自注意力的计算量和显存消耗与输入特征的长度呈二次关系,造成了巨大的训练和推理的开销。
为了克服这些挑战,作者考虑了以下设计:(1)使用卷积从大图像中有效地学习抽象和低分辨率的特征图;(2)使用全局自注意(all2all self-attention)对卷积捕获的特征图中包含的信息进行处理和聚合。这种混合结构聚合了CNN和Self-Attention各自的优点,利用卷积进行空间下采样,并将自注意力集中在较小的分辨率上,可以有效地处理大图像。在本文中,作者将这种混合设计实例化为:只将ResNet的最后三个瓶颈块替换为BOT块,而不替换任何其他块改变。
与Baseline(在Mask R-CNN框架中使用ResNet-50)相比,这一简单的改变将COCO实例分割数据集上的mask AP提高了1.2%,并且训练和推理的开销更小。

      02      

Attention网络分类
上图给出了使用Self-Attention的深度学习网络的分类。下面我们来看一下BoTNet和Transformer、DETR、Non-Local网络的相似之处和区别。

2.1. Connection to the Transformer

BoTNet的一个关键特征是具有多头自注意(MHSA)层的ResNet瓶颈块,也可以看作是具有瓶颈结构的Transformer块。BoT模块的设计并不是本文的重点,相反,作者在本文中指出了MHSA ResNet瓶颈块与Transformer之间的关系,以提高对计算机视觉中自注意的结构设计的理解。除了将ResNet中的3x3卷积换成Self-Attention,BotNet与Transformer还有一些微小的差异:
  1. Normalization:Transformer使用的是Layer Normalization,而BoTNet采用ResNet中常见的Batch Normalization。
  2. Non-Linearities:Transformer中通常是在FFN中采用非线性激活函数,BoTNet和ResNet一样,在每个Block中采用了三次激活函数。
  3. Output projections:MHSA层中Self-Attention操作结束后包含一个线性投影层,而BoTNet中Self-Attention结束后不包含线性投影层。
  4. Optimizer:Transformer中通常采用Adam优化器,而BoTNet和ResNet一样,采用带动量的SGD优化器。

2.2. Connection to DETR

DETR是一种检测框架,它使用Transformer隐式地执行区域proposal和目标定位,而不使用R-CNN。DETR和BoTNet都使用自注意来提高目标检测和实例(或全景)分割的性能。
不同之处在于,DETR在主干网络之外使用Transformer块,其motivation是去掉区域proposal和非极大值抑制以实现更简单的目标检测。BoTNet的目标是提供一个主干网络,因此,BoTNet与检测框架(无论是DETR还是R-CNN)是无关的。在本文中,作者基于Mask R-CNN和 Faster R-CNN框架进行了实验。

2.3. Connection to Non-Local Neural Nets

Non-Local(NL)Net在Transformer和非局部均值算法之间建立了连接,它将NL块插入到ResNet的最后一个或两个块(C4,C5)中,提高了视频识别和实例分割的性能。与NL-Net一样,BoTNet也是一种使用卷积和全局自注意力的混合设计。NL层和本文MHSA层的三个不同之处:
  1. MHSA层使用多个head、value投影和位置编码;
  2. NL块将使用通道拓展参数降低为2,BOT块中依旧为4;
  3. NL块作为附加块插入到ResNet主干网络中,而不是像BotNet那样替换现有卷积块。

      03      

方法
BoTNet的设计很简单:将ResNet中的最后三个3×3空间卷积替换为用all2all Self-Attention实现的多头自注意力(MHSA)层(如上图所示)。ResNet具有4个stage,通常称为[C2,C3,C4,C5],这些stage由具有残差连接的多个瓶颈块组成。
本文的目标是在高性能实例分割模型的中使用注意力机制,这通常会使用更大分辨率(1024×1024)的图像。但是自注意力的计算复杂度和输入的特征长度是呈二次相关的,因此作者在本文中只在最低分辨率的特征图(C5)中用到了自注意力。
ResNet主干网络中的C5通常使用3个块,每个块中具有一个3×3空间卷积。BoTNet中用MHSA层替换了这些3×3空间卷积。C5中第一个3×3空间卷积采用的步长为2,由于all2all attention没有步长这个概念,因此作者在第一个BoT Block之后用了一个2 × 2 average-pooling来进行空间上的降采样。
BoTNet和ResNet的网络对比如上表所示。
为了让attention操作能够进行位置感知,基于Transformer的体系结构通常利用位置编码,目前也有工作表明相对距离感知的位置编码更适合于视觉任务。相对位置编码使得attention操作不仅关注到内容信息,而且能够关注到不同位置的特征之间的相对距离,从而能够有效地将跨对象的信息与位置感知相关联。因此在本文中,作者也采用了相对位置编码。

      04      

实验

4.1. BoTNet improves over ResNet on COCO Instance Segmentation with Mask R-CNN

上表显示了两个网络在Mask R-CNN上进行实例分割的结果。可以看出,BoT50需要比较长的训练时间才能显示出比R50的明显性能提升。但是训练时间太长,这个优势又变小了。

4.2. Scale Jitter helps BoTNet more than ResNet

为了解决训练时间变长之后,性能优势减小。作者加入了不同程度的multi-scale jitter,可以看出,加入multi-scale jitter之后,性能优势更加明显。

4.3. Relative Position Encodings Boost Performance

可以看出,加入相对位置编码和绝对位置编码都能提升性能,但是相对位置编码性能提升更大。

4.4. BoTNet improves backbones in ResNet Family

为了验证BoT模块在不同网络上的有效性,作者在ResNet50,101,152上都做了实验,发现都有不同程度上的性能提升。

4.5. BoTNet scales well with larger images

上表结果表明,BoTNet能够促进对R50、R101上较大图像的训练。BoTNet在1024×1024上的训练结果上明显优于ResNet在1280×1280上的训练结果。

4.6. Comparison with Non-Local Neural Networks

上表显示了本文的BoT Block和NL Block的性能对比,可以看出,本文的方法比NL Block在性能上更好。

4.7. Image Classification on ImageNet

从上表可以看出,与ImageNet上的R50相比,BoT50没有显著提高性能。作者认为这是因为分类任务中输入的图片分辨率太低,因此C5层中的特征图的信息不足。因此,作者在分类任务中,将用于检测和分割的MHSA中的平均池化模块去掉了,得到了BoTNet-S1,并且参数量没有发生变化。可以看出BoTNet-S1能够进一步提升性能。
上表显示了加入数据增强和更长训练的时间的结果,可以看出BoTNet-S1相比于其他结构依旧具备性能上的优势,并且优势更加明显。
从上图可以看出,BoTNets T7达到了84.7%的准确率,在相似性能下比B7-RA快了1.64倍。

      05      

总结
目前Self-Attention和CNN都是深度学习网络中的基础组件,已经有很多的工作结合CNN和Self-Attention来构建建模能力更强、泛化性能更好的主干网络(比如CoATNet)。
在本文中,作者采用了一个非常简单的方式:直接将ResNet C5中的3x3卷积替换成了Self-Attention,来提升模型的性能。本文的重点并不是提出一个全新的网络结构,所以作者在网络上的修改非常简单。相反,作者希望通过本文的分析,促进更多人能够更好的理解网络结构的设计。
▊ 作者简介
研究领域:FightingCV公众号运营者,研究方向为多模态内容理解,专注于解决视觉模态和语言模态相结合的任务,促进Vision-Language模型的实地应用。
知乎/公众号:FightingCV

END

加入「Transformer交流群👇备注:TFM

(0)

相关推荐