BOT模块论文阅读
1、总结
Bottleneck Transformers for Visual Recognition 介绍BoT模块(卷积与自注意力结合),及大量实验 论文: Bottleneck Transformers for Visual Recognition GitHub:https://github.com/leaderj1001/BottleneckTransformers
2、摘要
提出了BoTNet。通过在ResNet的最后三个bottleneck blocks中用全局自注意(global self-attention)替换空间卷积(spatial convolution),而无其它修改。通过对BoTNet的设计,我们还指出了如何将具有自注意性的ResNet的bottleneck blocks视为Transformers blocks。
3、介绍
深度卷积主干架构在图像分类、目标检测、实例分割等方面取得了重大进展。大多数的主干架构(backbone)使用多层3×3卷积。卷积操作可以有效地捕获局部信息,而目标检测、实例分割、关键点检测等视觉任务需要建模长期依赖关系。 为了全局聚合局部捕获的滤波器响应,基于卷积的原始检测需要堆叠多层。尽管堆叠更多的层确实提高了这些骨干的性能,但一个建模全局(非局部)依赖关系的显式机制可能是一个更强大、更可靠的解决方案,而不需要那么多的层。建模长期依赖对自然语言处理(NLP)任务也至关重要。自我注意是一种计算原始,它通过基于内容的寻址机制实现成对的实体交互,从而跨长序列学习丰富的关联特征层次。这现在已经成为一个标准工具的变压器块的形式,突出的例子是GPT和BERT模型。 在视觉中使用自注意的一种简单方法是用Transformers中提出的多头自注意( multi-head selfattention,MHSA)层来取代空间卷积层(图1)。该方法已在两种似乎完全不同的方法上取得了进展。 1、诸如SASA、AACN、SANet、轴向-SASA等模型,建议用不同形式的自注意(局部、全局、向量、轴向等)来替代ResNet的bottleneck blocks中的空间卷积。 2、有视觉变压器(Vision Transformer, ViT),它提出在非重叠面片的线性投影上叠加变换块(stack Transformer blocks)。 这些方法似乎呈现了两种不同的架构类型。但相反,带有MHSA层的ResNet的bottleneck blocks可以看作是具有瓶颈结构的变压器块(Transformer blocks with a bottleneck structure),以及模量上的微小差异,如残差连接、归一化层的选择等。(图3)。鉴于这种等价性,我们将具有MHSA层的ResNet的bottleneck blocks称为BoT模块。
在视觉中使用自注意(self-attention)时,这里有一些挑战: (1)与图像分类相比,目标检测和实例分割方面的图像大小较大; (2)自我注意力的记忆和计算与空间维度成平方比例,导致计算量增大; 为了克服这些挑战,我们考虑以下设计: (1)使用卷积来从大图像中学习抽象和低分辨率的特征图; (2)使用全局(共2个)自我注意(self-attention)来处理和聚合卷积捕获的特征图中包含的信息。这种结合的设计: (1)有效的使用现有的和经过良好优化的原语(primitives)进行卷积和2个自注意(self-attention); (2)可以通过卷积进行空间下采样,让注意力在更小的分辨率上工作,从而可以更有效地处理大图像。 下面是这个混合设计的一个简单的实用实例化: 用BoT模块替换ResNet的最后三个bottleneck blocks,其它不变。或者说,取一个ResNet,只将最后的三个3×3卷积替换为MHSA层(图1,表1)。该基线在Mask R-CNN框架中使用ResNet-50,无超参数差异。接下来,我们将这个简单的实例化称为BoTNet,因为它通过BoT模块连接到Transformer。
4、相关工作
图2:使用自注意进行视觉识别的深度学习架构的分类。BoTNet是一个同时使用卷积和自注意的混合模型。自我注意的具体实现可以类似于变压器块(Transformer block)或非局部块(Non-Local block)(在图4中突出显示的差异)。BoTNet不同于DETR、VideoBERT、CCNet等结构,它在主干结构内部(backbone)使用自我注意,而不是在主干结构之外使用它们。作为一种混合模型,BoTNet不同于SASA、LRNet、SANet、Axial-SASA和ViT等纯注意力模型。 图2给出了一种使用自我注意来实现视觉的深度学习架构的分类。在本节中,我们将重点关注:(1) Transformer vs BoTNet;(2)DETR vs BoTNet;(3)Non-Local vs BoTNet。 1、Transformer vs BoTNet:本文的一个关键信息是,具有多头自注意(MHSA)层的ResNet的bottleneck blocks可以被看作是具有 bottleneck结构的Transformer blocks。这在图3中得到了可视化的解释,我们将这个块命名为BoT。除了图中已经看到的(剩余连接和块边界),还有一些区别: (1)标准化:Transformer使用层标准化,而BoT blocks使用批量规范化,是典型的ResNet的bottleneck blocks; (2)非线性:Transformer在FFN块中使用一个非线性,而ResNet结构允许BoT blocks使用三个非线性; (3)输出投影:Transformer中的MHSA块包含一个输出投影,而BoT blocks中的MHSA层(图4)没有; (4)我们使用SGD与动量优化器,而Transformer通常使用Adam优化器训练。 2、DETR vs BoTNet:DETR是一个检测框架,它使用Transformer隐式地执行区域建议和对象的本地化,而不是使用R-CNN。DETR和BoTNet都试图利用自注意来提高目标检测和实例分割的性能。不同之处在于,DETR使用了主干架构之外的Transformer块,目的是为了摆脱区域建议(region proposals)和非最大抑制。另一方面,BoTNet的目标是提供一个主干架构,使用类似Transformer的块来进行检测和实例分割。 3、Non-Local vs BoTNet:3个非局部(NL)网使变压器和非局部均值算法之间的连接。他们将NL块插入到ResNet中的最后一个(或)两个块组(c4、c5)中,并提高了视频识别和实例分割的性能。与NL-Nets一样,BoTNet也是一种使用卷积和全局自注意的混合设计。NL层和MHSA层之间的三个区别(如图4所示): (1) 在MHSA中使用多个头、值投影和位置编码; (2) NL块使用信道因子减少2的瓶颈(而不是采用ResNet结构的BoT块中的4); (3) NL块作为附加块插入到ResNet主干中,而不是用BoTNet替换现有的卷积块。
5、方法
表1:BoTNet-50的架构(BoT50):BoT50与ResNet-50(R50)的唯一区别是在c5中使用了MHSA层(图4)。对于输入分辨率为1024×1024,c5第一块中的MHSA层在64×64上工作,其余两个层在32×32上运行。 BoTNet的设计很简单:将ResNet中的最后三个空间(3×3)卷积替换为多头自注意(MHSA)层,该层在二维特征图上实现全局(all2all)自注意(图4)。一个ResNet通常有4个阶段(或块组),通常被称为[c2、c3、c4、c5],相对于输入图像的步幅分别为[4,8,16,32]。堆栈[c2、c3、c4、c5]由多个具有剩余连接的瓶颈块组成(例如,R50有[3,4,6,3]个瓶颈块)。
图4:BoT块中使用的多头自注意(MHSA)层。虽然我们使用4个头,但为了简单起见,我们没有在图上显示它们。所有2所有注意力都在二维特征图上进行,相对位置分别编码高度和宽度Rh和Rw。注意对数为qkT+qrT,其中q、k、r分别表示查询、密钥和位置编码(我们使用相对距离编码[53,4,49])。L和N分别表示元素向和和矩阵乘法,1×1表示点态卷积。除了使用多个磁头外,高亮显示的蓝色方框(位置编码和值投影是非局部图层[63,65]中唯一不存在的三个元素。 在本文中考虑的输入分辨率(224×224和640×640)的方法是可行的。我们的目标是在高性能实例分割模型的更现实的设置中使用注意力,其中通常使用更大分辨率的图像(1024×1024)。考虑到跨n个实体全局执行自我注意需要O(n2d)内存和计算,我们认为遵循上述因素的最简单的设置是包含最低分辨率的主干特征图,即c5堆栈中的残余块.ResNet主干中的c5堆栈通常使用3个块,每个块有一个空间3×3卷积。用MHSA层替换它们构成了BoTNet架构的基础。c5中的第一个块使用3×3的步幅卷积,而另外两个使用步幅1。由于所有2个所有的注意力都不是一个分散的操作,我们对第一个BoT块使用2×2的平均池和步幅2。BoTNet架构如表1所示,MHSA层如图4所示。
4.实验 略 非常多 可以看原文
|