BAM: Bottleneck Attention Module
作者提出了一个简单但是有效的Attention 模型—BAM,它可以结合到任何前向传播卷积神经网络中,通过两个分离的路径 channel和spatial, 得到一个Attention Map.
整体结构图如下:
作者将BAM块放在了Resnet网络中每个stage之间。
主要思想
Channel attention
从下图可以看出,作者获取channel attention的方式是使用一个全局平均池化聚合不同通道的feature map,生成一个\(1×1×C\)的vector,经过一个沙漏模型后跨信道注意力。在MLP之后,添加了一个批处理归一化(BN)层来调整空间分支输出的尺度。计算公式如下:
Spatial attention
具体地,使用1×1卷积在整个通道维度上对特征图进行结合和压缩。 为简单起见,使用与通道分支相同的缩减比r。 在减少之后,应用两个3×3扩张卷积以有效地利用上下文信息。 最后,使用1×1卷积将特征再次简化为空间注意力图。 对于缩放调整,在空间分支的末尾应用批量标准化层。 简而言之,空间注意力计算如下:
Combine two attention
由于两种注意力图有不同的尺寸,将注意力图扩展到\(\mathbb{R}^{C \times H \times W}\)并结合。为了有效的梯度传播,选择了逐元素求和。
Dual Attention Network for Scene Segmentation
作者提出了一种双重注意网络(DANet)来自适应地集成局部特征及其全局依赖性。
位置力关注模块通过所有位置处的特征的加权和来选择性地聚合每个位置处的特征。无论距离如何,相似的特征都将彼此相关。同时,通道注意力模块通过整合所有通道映射中的相关特征来选择性地强调相互依赖的信道映射。
将两个注意模块的输出相加以进一步改进特征表示,这有助于更精确的分割结果。
网络结构:
采用移除down-sampling的dilated ResNet(与DeepLab相同)的预训练网络基础网络为,最后得到的feature map大小为输入图像的1/8。之后是两个并行的attention module分别捕获spatial和channel的依赖性,最后整合两个attention module的输出得到更好的特征表达。
在传统的扩张FCN之上附加两种类型的注意力模块,分别对空间和通道维度中的语义相互依赖性进行建模。
ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks
文章作者认为SEnet在实行过程中进行了通道降维,这种操作对于channel attention去获得一个很好的性能是有很大的影响的。因此作者尝试提出了一种在senet的过程中不涉及到通道降维来获得一对一权重对应的稳定效果,为了平衡性能和复杂度,本文设计了一种超轻量级的注意力模块-ECA Module(Efficient Channel Attention)来提升大型CNN的性能。。
文中将SE模块与三种变体比较,表明避免维度降低有助于学习有效的通道注意。
作者使用的权重矩阵:
Improving Convolutional Networks with Self-calibrated Convolutions
本文提出了一种自校正卷积(多个卷积注意力组合的模块),替换基本的卷积结构,在不增加额外参数和计算量的情况下,该卷积可以通过特征的内在通信达到扩增卷积感受野的目的,进而增强输出特征的多样性。相比于标准卷积,该卷积通过自校正操作自适应地在每个空间位置周围建立了远程空间和通道间依存关系,从而使得产生的特征图更具有区分度。
主要贡献
1、使每个空间位置都能自适应地编码远距离区域的信息上下文,从而打破了在小区域(例如3x3)内进行卷积的传统。 这使自校正卷积产生的特征表示更具辨识性。
2、 提出的自校正卷积是通用的,可以轻松应用于标准卷积层,而无需引入任何参数和复杂性开销或更改超参数。
如图, SC模块的流程也比较简单,首先输入 X 沿通道方向进行分割得到 \(X_{1}\) 和 \(X_{2}\) , 然后 \(\mathcal{F}_{1}-\mathcal{F}_{4}\) 分别表示四个卷积操作 \(\left(K_{1}-K_{4}\right\). 为其对应的卷积核, 大小均为 \(3\times3\) )。文中 所提到的 Self-Calibrated 主要是上半分支,表示为:
其中, \(F_{up}\)和 \(F_{\text {down}}\) 分别表示 r=4 的上采样操作和下采样操作。 \(\sigma\) 为sigmoid函数。
总的来说,文中的self-Calibrated Convolutions就是一个多尺度特征提取模块。作者通过特征图下采样来增大CNN的感受野,每个空间位置都可以通过自校准操作融合来自两个不同空间尺度空间的信息。而且从图中可以看出,Self-Calibrated Convolutions没有引入额外的可学习参数,但是其计算量还是会增大。
An Efficient Pyramid Split Attention Block on Convolutional Neural Network
Pyramid Split Attention Block用于增强特征提取
即插即用,可将Pyramid Split Attention Block取代ResNet的3×3卷积,提出基准网络ESPANet
PSA模块整体结构图
Pyramid Split Attention (PSA)在SENet的基础上提出多尺度特征图提取策略,整体结构图如下所示。具体可分为如下四个步骤:
Split and Concat (SPC)模块用于获得空间级多尺度特征图;
SEWeight(SENet中的模块)被用于获得空间级视觉注意力向量来抽取多尺度响应图的目标特征;
使用Softmax函数用于再分配特征图权重向量;
元素相乘操作用于权重向量与原始特征图来获得最终结果响应图。
Split and Concat module
Split and Concat module
如上图所示,k0、k1、k2和k3是不同卷积核参数(以ESPANet-small为例,论文取3,5,7和9),G0、G1、G2和G3是分组卷积的参数(以ESPANet-small为例,论文默认取1,4,8和16)。整体可看做是模型采用不同卷积核提取多尺度目标特征,并采取Concat操作结合不同感受野下的多尺度特征。
ESPANet
ESPANet中的block如下所示,相比于ResNet,其就是使用PSA模块取代3x3的卷积,ESPANet block整体结构如下图所示。
ResT: An Efficient Transformer for Visual Recognition
本文提出了一种高效的多尺度视觉transformer,称为ResT,它可以作为图像识别的通用主干。与已有的采用标准transformer块处理固定分辨率原始图像的transformer方法不同,本文的方法具有以下优点:(1)构造了一种内存高效的多头自关注算法,它通过简单的深度卷积压缩内存,在保持多头多样性的同时,将交互作用投射到注意头维度上;(2)位置编码被构造为空间注意力,更灵活,可以处理任意大小的输入图像,而不需要插值或微调;(3)不再在每个阶段开始时直接进行标记化,而是将patch embedding设计为在标记图上带有stride的重叠卷积操作堆栈。
与CNN主干不同的是,Transformer首先将图像分割成一系列的patches(即标记),然后用位置编码对这些标记求和来表示粗略的空间信息,最后采用Transformer块的堆栈来捕获特征信息。标准transformer块包括多头自关注(MSA)和前馈网络(FFN),多头自关注(MSA)采用query-key-value分解来对序列令牌之间的全局关系进行建模,前馈网络(FFN)用于学习更广泛的表示(如图1b所示)。因此,transformer模块可以根据图像内容动态调整接受场。
尽管transformer骨干网显示出了比CNN更大的潜力,但它仍然有四个主要缺点:(1)现有的transformer骨干网直接对原始输入图像中的patches进行标记化,很难提取构成图像中一些基本结构(如角点和边缘)的低层特征。(2)transformer块中MSA的存储和计算与空间维度或通道维度成二次曲线关系,导致训练和推理的开销很大。(3)MSA中的每个头部只负责输入令牌的一个子集,这可能会影响网络的性能,特别是当每个子集的通道维数太低时,使得query和key的点积无法构成信息函数。(4)现有的transformer骨干网中的输入标记和位置编码都是固定比例的,不适合需要密集预测的视觉任务。
如图2所示,ResT共享与ResNet完全相同的管道,即用于提取低级信息和加强局部性的stem模块,然后是构建分层特征图的四个阶段,最后是用于分类的head模块。每个stage由patch embedding、位置编码模块和具有特定空间分辨率和通道尺寸的多个transformer块组成。patch embedding模块通过分层扩展通道容量,同时通过重叠卷积运算降低空间分辨率来创建多尺度特征金字塔。与传统方法只能处理固定尺度的图像不同,我们的位置编码模块被构造为以输入令牌的局部邻域为条件的空间注意力。通过这样做,该方法更加灵活,可以处理任意大小的输入图像,而不需要插值或微调。此外,为了提高MSA的效率,我们构建了一种高效的多头自注意(EMSA),它通过简单的深度卷积操作来压缩内存。此外,我们在保持多头的多样性能力的同时,通过在注意头维度上投射交互来弥补每个头的输入标记的短长度限制。
多头自注意模块
(1)与MSA类似,EMSA首先采用一组投影来获得查query Q。
(2)为了压缩存储器,2D输入token x∈Rn×dm沿空间维度重塑为3D的输入token(即,ˆx∈Rdm×h×w),然后馈送到深度卷积运算以将高度和宽度维度减少因数s。为简单起见,s是由EMSA头的数量k自适应设置的,即,s=8/k。kernel size、stride和padding分别为s+1、s和s/2。
(3)空间减少后的新token映射ˆx∈Rdm×h/s×w/s被重塑为二维映射,即ˆx∈Rn’×dm,n’=h/s×w/s,然后将ˆx送入两组投影,得到key K和value V。
(4)之后,我们采用公式4计算query Q、key K和value V上的注意力函数。
这里,Conv(·)是一个标准的1×1卷积运算,它模拟了不同头部之间的相互作用。因此,每个头部的注意力功能可以依赖于所有的key和query。然而,这将削弱MSA在不同位置联合处理来自不同表示子集的信息的能力。为了恢复这种多样性能力,我们为点积矩阵(在Softmax之后)添加了实例归一化(即,IN(·))。
(5)最后,将每个头部的输出值进行拼接和线性投影,形成最终输出。
EMSA的计算量为O(2dmn2/s2+2d2mn(1+1/s2)+dmn(s+1)2/s2+k2n2/s2),大大低于原MSA(假设s>1),特别是在较低阶段,n趋于较高。
此外,我们在EMSA之后加入了FFN,以进行特征变换和非线性处理。每个高效transformer块的输出为:
Beyond Self-attention: External Attention using Two Linear Layers for Visual Tasks.
self-attention自身存在两个缺点:(1)计算量太大,计算复杂度与pixel的平方相关;(2)没有考虑不同样本之间的潜在关联,只是单独处理每一个样本,在单个样本内去捕获这类long-range dependency。
针对这两个问题,作者提出了一个external attention模块,仅仅通过两个可学习的external unit,就可以简化self-attention的时间复杂度,简化到与pixel数量线性相关;同时由于两个unit是external的,对于整个数据集来说都是shared,所以还可以隐式地考虑到不同样本之间的关联。两个unit在实现的时候是两个linear layer,因此可以直接end2end优化。
Module
上图中(a)和(b)分别表示经典的self-attention和简化版self-attention,计算复杂度均为\(O(dN^{2})\),N表示特征图pixel数,d表示feature维度。经作者观察发现,这两种方法都是建立一个N-to-N的attention关联,即attention map的生成。而attention map自身是稀疏的,也就是说只有很少量的pixel之间有关联,所以N-to-N的attention map可能会显得redundant。
所以只需要用到需要的value即可,大可不必计算整张N-to-N的attention map。图(c)表示作者提出的external-attention module,他负责计算输入feature和external memory unit之间的attention:
M作为external unit,其维度是\(S ∗ d\),S是超参数。M这里作为一个独立于input的可学习的参数,算是对整个数据集来说的一个memory。A是根据先验推断出的attention map,在feature map和M线性变换后要经过一个不太一样的Norm。
在实际中,作者利用了两个这样的memory unit\(M_{k}\)和\(M_{v}\)作为key和value,来增加网络的capacity。因此整个external attention的计算式如下:
所以external attention的计算复杂度降为\(O(dSN)\),由于S是超参数,所以可以设置的远小于pixel数目N。经实验发现,S为64的时候效果就非常好了。所以此时external attention的计算复杂度与N线性相关,相比于经典的自注意力机制来说更加有效。