一、论文简介
论文题目:When Shift Operation Meets Vision Transformer: An Extremely Simple Alternative to Attention Mechanism
https://doi.org/10.48550/arXiv.2201.10801 |
AlexNet的革命性进步,CNNs主导计算机视觉领域近10年
ViT的Backbone明显优于CNN的Backbone,迅速应用于目标检测、语义分割、动作识别等计算机视觉任务中。
ViT相比CNN,具有显著的优点:
1、提供了同时捕获短期和长期依赖的可能性,摆脱了卷积的局限限制
2、两个空间位置之间的相互作用动态地依赖于各自的特征,而不是一个固定的卷积核
但是,这两点是否是成功的关键:
对于第一点:Swin-Transformer和Local ViT引入局部注意力机制,将其注意力范围限制在一个小的局部区域内,结果表明系统性能没有由于局部限制而下降
对于第二点:MLP-Mixer提出用线性投影层代替注意力层,其中线性权值不是动态生成的,仍然在ImageNet数据集上达到领先的性能
既然全局特性和动态特性可能对ViT框架都不重要,那ViT成功的根本原因是什么?
没有全局范围、没有动态、没有参数、没有算数计算
二、网络结构
标准的ViT构建块包括:注意力层、前馈网络(FFN)
作者用Shift操作取代前一个注意力层,保持后一个FFN部分不变。给定一个输入特征,构建块将首先沿着4个空间方向(左、右、上、下)移动一小部分通道,随后的FFN进行通道混合,以进一步融合来自相邻通道的信息。
基于shift building block构建了一个类似ViT的Backbone,即ShiftViT。这个Backbone很好地用于主流视觉识别任务,性能与Swin Transformer相当甚至更好。
在与Swin-T模型相同的计算预算内,ShiftViT在ImageNet数据集达到81.7%(相对于Swin-T的81.3%)。对于密集预测任务,在COCO检测数据集上平均精度(mAP)为45.7%(Swin-T的43.7%),在ADE20k分割数据集上平均精度(mloU)为46.3%(Swin-T的44.5%)。
因此,作者认为应该更多关注组成部分,而不是仅仅关注注意力机制。
现如今引发一波不断上升的关于视觉Transformer的研究浪潮,主要研究重点是改进注意力机制,使其能够满足视觉信号的内在特性。例如:MSViT构建层次注意力层以获得多尺度特征。Swin-Transformer在其注意力机制中引入了一种局部性约束。还有pyramid attention、local-global attention、cross attention等。
本文目的:注意力机制可能不是ViTs工作的关键部分,甚至可以被一个非常简单的Shift操作所取代,作者希望这些结果能够激励研究者重新思考注意力机制的作用。
MLP Variants
MLP-Mixer引入一个Token的混合MLP,以直接连接所有空间位置。消除了ViT的动态特性,但不是去准确性,后续工作研究了MLP更多设计,如空间门控单元或循环连接。
红色框部分是token-mixing MLP,绿色框部分是channel-mixing MLP。
ShiftViT可归类为MLP架构,Shift操作可视为一个特殊的Token混合层,Shift操作简单(不包含参数、没有FLOP),由于具有固定的线性权值,普通的MLP变体不能处理可变的输入大小。Shift操作克服了这一障碍,使Backbone用于更多的视觉任务,如目标检测和语义分割。
Shift Operation
Shift操作在2017年被认为是空间卷积操作的一种有效的替代方案
论文题目:CVPR2018 Shift: A Zero FLOP, Zero Parameter Alternative to Spatial Convolutions
常规卷积
Depthwise Separable Convolution
pointwise Convolution
Shift操作可看做是Depthwise Convolution的一种特殊情况
通道域是空间域信息的层次化扩散
因此通过设置不同方向的shift卷积核,可以将输入张量不同通道进行平移,随后配合1x1卷积实现跨通道的信息融合,即可实现空间域和通道域的信息提取。
使用一个类似三明治的体系结构,2个1×1卷积核一个Shift操作,来近似一个K×K卷积
Shift操作进一步扩展到不同的变体:active Shift、sparse Shift、partial Shift
Shift-ViT
总体结构
作者遵循Swim Transformer的体系结构,给定一个形状H×W×3的输入图像,首先将图像分割成不重叠的patches。patch-size为4×4像素,因此patch partition的输出值为H/4×W/4 token,其中每个token的通道大小为48。
之后模块分为四个stage,每个stage包括2个部分:嵌入生成和堆叠shift块。
对于第一阶段的嵌入生成,使用一个线性投影层将每个token映射成一个通道大小为c的嵌入。
对于其余阶段,通过kernel_size为2×2的卷积来合并相邻的patch。patch合并后,输出的空间大小是下采样的一半,而通道大小是输入的2倍,即从C到2C。
每个stage,shift块的数量可以是不同的,分别记为N1、N2、N3、N4。在out实现中,仔细选择了Ni的值,从而使整个模型与Baseline Swin Transformer模型共享相似数量的参数。
Shift Block
由三个顺序堆叠的组件组成:Shift操作、层归一化和MLP网络。
Shift操作在CNN中已经得到了很好的研究,可以由许多设计选择,如active Shift、sparse Shift。在本工作中遵循TSM中的partial Shift操作。
shift building block
给定一个输入张量,一小部分的通道会沿着空间的四个方向移动,即左、右、上、下,而其余的通道保持不变。在Shift之后,超出范围的像素被简单地删除,空白像素被填充为0。本论文中,Shift步长设置为1。
形式上,假设输入特征z的形状为H×W×C,其中C为通道数,H和W分别为空间高度和宽度。输出特性z与输入特性具有相同的形状,可以写成:
其中γ是一个比率因子来控制通道的百分比。大多数实验中,γ的值设置为1/12。
Pytorch实现
Shift操作不包含任务参数或算术计算,仅需内存复制。因此,Shift操作效率高,易于实现。与自注意力机制相比,Shift操作对TensorRT等深度学习推理库更干净、整洁、更友好。
Shift块的其余部分与ViT的标准构建块相同。MLP网络有2个线性层,第一个方法将输入将输入特征的通道增加到一个更高的维度,例如从C到τC。之后,第2个线性层将高维特征投影到c的原始通道大小中。在这两层之间,采用GELU作为非线性激活函数。
架构变体
为了与Baseline Swin Transformer进行比较,作者还构建了多个具有不同数量参数和计算复杂度的模型。
引入了Shift-T(iny)、Shift-S(mall)、Shift-B(ase)变种,分别对应swin-t、swin-s、swin-b。
Shift-T是最小的,与Swin-T和ResNet-50的大小相似,Shift-S和Shift-B大约比shifvit复杂2倍和4倍。
基本嵌入通道C的详细配置和块数{Ni}如下:
除了模型尺寸之外,作者还仔细观察了模型的深度,在提出的模型中,几乎所有的参数都集中在MLP部分,因此可以控制MLP τ的扩展比来获得更深的网络深度。如果未指定,则将展开比率τ设置为2。消融分析表明,更深层次的模型获得了更好的性能。
三、实验
消融实验
之前的实验证明了本文的设计原则,即大的模型深度可以弥补每个构件的不足。通常,在模型深度和构建块的复杂性之间存在一种权衡,有了固定的计算预算,轻量级的构建块可以享受更深层次的网络工作架构。
为了进一步研究这种权衡,作者提供了一些具有不同深度的Shift-ViT模型。对于ShiftViT,大多数参数存在于MLP部分。作者可以通过改变MLP τ的扩展比来控制模型深度。如表中选择Shift-T的扩展比来控制模型深度。选择Shift-T作为基线模型。研究了在1到4范围内的扩张比τ。指的注意的是不同条目的参数和FLOPs几乎是相同的。
从表中,可观察到一个趋势,即模型越深入,性能越好。当ShiftViT的深度增加到225时,在分类、检测、分割上分别比57层的分类、检测、分割的绝对增益提高了0.5%、1.2%、2.9%。在这种趋势支持了猜想,即强大而沉重的模块,如attention,可能不是Backbone的最佳选择。
1、Percentage of shifted channels
Shift操作只有一个超参数,即位移信道的百分比。缺省情况下,设置为33%。将移动通道的比例分别设置为20%、25%、33%和50%。
表明最终性能对这个超参数不是很敏感。与最佳设置相比,移动25%的通道指挥导致0.3%的绝对损失。在合理的范围内(25%~50%),所有的设置都达到了比Swin-T Baseline更好的精度。
2、Shifted pixels
在Shift操作中,一小部分通道沿4个方向移动一个像素。为了进行全面的探索,还尝试了不同的移动像素。当偏移的像素为0,即没有发生偏移时,ImageNet数据集的Top-1精度仅为72.9%,明显低于本文的Baseline(81.7%)。
没有移动意味着不同的空间位置之间没有相互作用,此外,如果在shift操作中移动两个像素,模型在ImageNet上达到80.2%的top-1精度,这也比默认设置略差。
3、ViT-style training scheme
Shift操作在cnn中得到很好的研究,但没有令人印象深刻。Shift-Res-Net-50在ImageNet上的准确率仅为75.6%,远低于81.7%,因此是什么对ViT有利?
作者怀疑原因可能在于虚拟现实式的训练计划。具体来说,大多数现有的ViT变体遵循DeiT中的设置,这与训练cnn的标准管道有很大不同。
例如:ViT-style方案采用AdamW优化器,在ImageNet上训练时长为300epoch.相比之下,cnn风格的方案更倾向于SGD优化器,训练计划通常只有90epoch。由于本文的模型继承了ViT-style训练方案,观察这些差异如何影响性能是很有趣的。
由于资源有限,不能完全对齐所有设置之间的ViT-style和CNN-style。因此选择4个任务可以来启示的重要因素:优化器、激活函数、规范化层、训练计划。表中可看到这些因素显著影响准确性,尤其是训练进度。这些结果表明,ShiftViT良好的性能部分是由ViT-style训练方案带来的。
同样,ViT的成功也可能与其特殊的训练计划有关。在今后的ViT研究中应该认真对待这一问题。
ImageNet and COCO
总的来说,本文的方法可以实现与最先进技术相媲美的性能。对于基于ViT和基于MLP的方法,其最佳性能约为83.5%,而本文模型达到了83.3%的精度。对于基于CNN的方法,本文模型略差,但是因为EfficientNet采用更大的输入大小,所以比较不完全公平。
与2个工作S^2-MLP和AS-MLP,这两部分的工作在移Shift操作上由相似的想法,但是在构建块中引入了一些辅助模块,例如投影前层和投影后层。本文的表现略好于这两项工作,证明了设计选择仅仅用一个简单的Shift操作就可以很好的搭建Backbone。
除了分类任务外,目标检测任务和语义分割任务也可以观察到相似的性能轨迹。值得注意的是,一些基于ViT和基于MLP的方法不容易扩展到如此密集的预测任务,因为高分辨率的输入产生了难以负担的计算负担。由于Shift操作的高效率,本文的方法不存在这种障碍。