2021CVPR论文:Coordinate Attention
论文标题:Coordinate Attention for Efficient Mobile Network Design
摘要(翻译)
近年来对轻量级网络(mobile network)设计的研究表明,通道注意力机制(例如:Squeeze-and-Excitation attention, 压缩-激发注意力机制,出自SENet, CVPR2018)对于模型性能的提升具有显著效果,但它们通常忽略掉了位置信息——这对于生成空间选择性注意力图(spatially selective attention maps)非常重要。在这篇文章中,我们针对轻量级网络提出了一种新的注意力机制,该机制将位置信息嵌入到通道注意力中。我们称其为 坐标注意力(Coordinate Attention) 机制。
不同于通道注意力将一个特征张量通过二维全局池化转换为单个特征向量,坐标注意力将通道注意力拆解为两个一维特征提取的过程,分别沿着两个空间方向(译注:宽,高)提取特征。通过这种方法可以提取一个空间方向上的远距离依赖关系,同时又可以在另一个空间方向上保持精确的位置信息。结果产生的特征图然后分别编码为一对方向感知(direction-aware)与位置敏感(position-sensitive)的注意力图,可以增补应用于输入的特征图来增强对感兴趣对象的表示。
我们的坐标注意力机制简单,可以灵活插入于经典的轻量级网络,如MobileNetV2, MobileNeXt和EfficientNet并且几乎没有额外的计算开销。大量实验表明,我们的坐标注意力机制在ImageNet分类上存在性能提升,更有趣的是,它在下游任务中表现更好,如目标检测和语义分割。
回顾几种注意力机制
SENet
特征图$U$首先通过$F_{sq}$压缩(squeeze)为$1\times1{\times}C$的向量,将一个通道内所有的空间特征编码为该通道上的全局特征。在论文中,这一步操作是通过全局均值池化(Global Avarage Pooling, GAP)来实现的,即特征图各个通道上权值之和除以特征图的尺寸(宽×高):
在激励这一环节中,瓶颈结构能有效降低参数量并提升泛化能力,$r$是一个超参数,称作降维系数(redution ratio),$r$值的大小决定了SE块的容量(capacity)与计算开销。在论文中,作者采用SE-ResNet-50对$r$值大小进行了实验,在平衡性能与计算开销上,设置$r=16$能在两者之间产生平衡。在实践中,由于不同层承担不同的角色,因此整个网络的$r$值可根据需要调整以达到更好的性能。
SE模块的方便之处在于可以直接加入现有的骨干网络之上,例如将SE Block插入ResNet和Inception这两种骨干网络中:
CBAM: Convolutional Block Attention Module (ECCV 2018)
在SENet中,作者只考虑了通道维度上的权重。而卷积操作本身是通过跨通道信息和空间信息混合在一起来提取信息特征的。因此,在CBAM的模块中;作者考虑在空间和通道两个维度上分别应用注意力机制,来使模型学习到在通道维度上“注意什么”和空间维度上“注意哪里”。
CBAM对于两个模块的安排是经过实验验证的结果。在4.1节的消融实验中,作者发现:顺序(串行)安排两个子模块所生成的注意力图比并行安排两个子模块的注意力图更加精细;优先通过通道注意力模块的性能比优先通过空间注意力模块更好;此外同时使用两种注意力模块在任何情况下都比单独使用通道注意力机制的结果更好(因此证明该结构的设计是有效的)。
对于更具体的模块结构,如下图所示:
CA注意力机制
由于轻量级网络的计算能力有限,任何带来巨大开销的注意力机制都是难以应用到现实的,因此目前最流行的轻量级网络的注意力机制仍然是SE。但是SE只考虑对通道信息计算权重,因此后来的注意力机制考虑通过压缩特征图的通道维度来利用位置信息,再通过卷积来计算空间注意力,然而卷积本身只捕获局部关系,不能对视觉任务必不可少的远程依赖关系(long-range dependencies)进行建模。
基于上述原因,作者一方面为了避免CBAM中首先进行通道注意力时采用GAP、GMP导致位置信息损失,同时考虑长距离依赖,提出了这种新颖的,将位置信息嵌入到通道注意力中的坐标注意力机制。其结构如下:
下一步是采用$1\times1$的卷积压缩通道数为$C/r$,接下来进行批归一化(Batch Normalization),随后进行非线性变换——在这一步中,作者用的非线性变换似乎是自己改进的Swish激活函数:对于每个元素$x$,其经过激活值后的结果为$x\times{ReLU6(x+3)\ /\ 6}$,其中ReLU6是ReLU函数将最大值限制为6之后的结果:$ReLU6(x)=min(max(0,x),6)$。至于为什么用这个激活函数,作者在文章里面压根一点没提,只在3.2.2的公式(6)下方做了说明: δ is a non-linear activation function.
压缩完通道维度之后,作者又将拼接而来的两者进行Spilt分开了。在知乎上,我看到有人提到$x$和$y$两方向信息交互的问题,在进行思考之后,我个人认为上一步的拼接与卷积压缩维度的操作不能说是实现信息的融合,只能说是两者共用了同一组卷积核参数。行文至此,我觉得有必要动手试试,如果整个过程中不进行拼接操作会有什么样的效果。(不过最近有点懒也有些忙,或许有空了再试试。)
分开-恢复维度-Sigmoid激活函数,这样就得到了两组不同方向上的注意力权重。最后将这些权重与输入的特征图相乘(具体操作应该是这两个平面上的权重通过广播机制膨胀为三维矩阵,再进行点乘操作)就得到了经特征重校准后的特征图。
在消融实验中,作者在一些常见的轻量级网络上将原有的SE注意力机制替换为CA注意力机制,其结果都存在1%左右的提升。