计算机视觉中的注意力机制学习笔记
祁帅辉 (公众号 茴香豆502)
注意力机制在CV领域已经被广泛的使用。下面介绍几种经典的应用于提取网络特征的注意力模块,并结合个人理解,提出两种较为有效的注意力模块。
SEnet(https://arxiv.org/pdf/1709.01507.pdf)
CBAM(https://arxiv.org/pdf/1807.06521.pdf)
eSE Module(https://arxiv.org/pdf/1911.06667.pdf)
ECA-Net(https://arxiv.org/pdf/1910.03151.pdf)
一、SE-Net:Squeeze-and-Excitation Network
SE-Net的出发点是:不同的特征通道对于提升网络性能的重要性不同,也就是说:不同的特征通道应该具有不同的权重大小,考虑的是特征通道间的权重关系。
SE-Net解决的就是这个权重问题,是通过学习的方式自动获取权重大小,也就是注意力。如图1所示,SE-Net通过Squeeze模块和Exciation模块实现所述功能。
图1 SE-Net
为了详细了解SE-Net的实现细节,可参考图2进行理解。
输入X为大小是H*W*C的特征块,经过Squeeze模块(全局最大值池化或全局平均值池化)后,变为1*1*C的特征块,如图2蓝色框所示;紧接着就是Excitaton操作,将Squeeze模块的输出1*1*C的特征块经过第一个全连接层,转化为1*1*C/r(r>1,且为正整数)的特征块,目的是为了减少计算量,降低模型大小;后接ReLU激活函数;然后接入第二个全连接层,将通道数转化为C;后接Sigmoid激活函数,即可得到各个通道的权重,将权重与输入X相乘,即可得到带有注意力的特征块输出,如图2红色框所示。
图2 SE-Net细节示意图
但是在实际应用中,SE-Net有时使用全连接,有时使用1*1的卷积,使用卷积最大的好处就是降低了网络计算量,增加了网络的非线性表达能力。
代码:
二、eSE Module
通过第一部分对SE-Net的介绍,我们可以知道,为了减小模型的计算量,在SE-Net中使用了比例因子r,但这无疑降低了SE模块提取权重的能力,进而造成特征损失或者说权重表达能力减弱。因此在CenterMask算法中,作者提出一种高效的SE模块(eSE),如图3所示。其实,唯一的差别其实就去掉了带有比例因子r的第一个全连接层和ReLU激活函数。其出发点就是提升SE模块的产生的通道注意力权重,同时还降低了模型的计算量。
图3 eSE
代码:
三、CBAM:Convolutional Block Attention Module
CBAM最大的创新之处在于将特征空间的注意力加入到网络当中,提出了结合特征通道和特征空间两个维度的注意力机制。如图4所示,输入特征首先经过通道注意力模块,然后经过空间注意力模块,用于生成修正后的特征。CBAM与SE-Net相同,都是通过学习的方式自动获取每个特征通道和特征空间上的权值大小,通过注意力机制的添加,用于抑制对视觉任务不重要的特征。
图4 CBAM
CBAM中提取特征通道注意力的方式基本和SE-Net类似,如图5所示,只不过和SE-Net相比,全局最大值池化和全局平均值池化全部都使用了,然后经过Shared MLP模块,该模块本质上就是SE-Net中的3个全连接层,只不过在CBAM模块中,使用的是1*1卷积实现的,然后将分别经过全局最大值池化和全局平均值池化的2个1*1*C的通道权重相加,经过激活函数即可得到最终的通道注意力权重。
图5 通道注意力模块
然后将经过通道注意力模块的特征作为输入,经过空间注意力模块,得到空间注意力权重。具体过程就是将C*W*H的特征,经过全局最大值池化和全局平均值池化后,分别得到1*W*H的特征块,然后进行concat,变为2*W*H的特征块,经过Conv2d标准卷积后,变为1*W*H的特征块,经过激活函数后,即可得到空间注意力权重,最后与加入通道注意力机制的特征块相乘即可得到最终的加入空间注意力机制的特征块。
图6 空间注意力模块
代码:
四、ECA-Net
为了克服性能与复杂度之间的矛盾关系,ECA-Net提出一种能够提高深度CNNs性能的超轻注意模块。ECA模块通过分析SE-Net的结构了解到:降维对于提升模型性能是没有用的,跨通道间的信息交互对于提升模型性能才是至关重要的。
ECA模块的设计其实很简单,和eSE模块的结构完全相同,如图7所示。
图7 ECA-Net
只不过区别在于,ECA模块不是采用1*1的卷积核,而是采用基于通道数量的自适应卷积核大小进行卷积,具体计算公式为:
其中,C表示特征通道数量,γ=2和b=1表示两个超参数,ECA模块与eSE模块的差距,仅在于此,但带来了明显的性能增益,主要得益于通过信息交互增强了模型提取通道特征权重的能力。
代码:
通过对上述注意力机制模型的研究,我们知道,CBAM中包含了两个SE模块,因此,CBAM提取通道注意力的能力是较为低效的,因此,可以考虑将CBAM模块中的通道注意力提取模块,修改为高效的ECA通道注意力模块,如图8所示。
图8 AAM(An Advanced Module)
当然,也可以考虑将CBAM模块中提取特征通道注意力的Shared MLP直接更改为ECA模块中的权重计算方法,双路提取注意力。如图9所示。
图9 高效的CBAM模块(ECBAM)
为了验证上述6类注意力模块的性能优劣,笔者以FaceBoxes人脸检测算法为例,在WIDER FACE数据集上进行了测试,实验结果如表1所示。
七、总结
其实,整篇内容都是围绕注意力机制中的SE模块进行优化的,从eSE模块的考虑减小模型计算量,到CBAM模块中对空间注意力机制的添加,再到ECA模块对SE模块的深度剖析,都是对注意力机制在计算机视觉中应用的探索。
虽然笔者所提出的AAM、ECBAM的创新性一般,但是对于提升网络性能还是有很大改善,也可以当做是一种提升性能的trick。