论文题名:《CBAM: Convolutional Block Attention Module》
arxiv:https://arxiv.org/abs/1807.06521v2
github: https://github.com/Jongchan/attention-module
CBAM 是对标于SENet所提出的一种结合了通道注意力和空间注意力的轻量级模块,它和SENet一样,几乎可以嵌入任何CNN网络中,在带来小幅计算量和参数量的情况下,大幅提升模型性能。
卷积神经网络在很大程度上推动了计算机视觉任务的发展,最近的众多研究主要关注了网络的三个重要因素:深度、宽度、基数(cardinality)
深度的代表:VGG、ResNet
宽度的代表:GooLeNet
基数的代表:Xception、ResNeXt
而本文作者承接SENet的思想,从attention(注意力)这个维度出发,研究提升网络性能的方法。
人类视觉系统的一个重要特性是,人们不会试图同时处理看到的整个场景。取而代之的是,为了更好地捕捉视觉结构,人类利用一系列的局部瞥见,有选择性地聚集于显著部分。近年来,有人尝试将注意力机制引入到卷积神经网络中,以提高其在大规模分类任务中的性能。
本文作者为了强调空间和通道这两个维度上的有意义特征,依次应用通道和空间注意力模块,来分别在通道和空间维度上学习关注什么、在那里关注。CBAM如下图1 所示。
图1 CBAM模块
输入特征依次通过通道注意力模块、空间注意力模块的筛选,最后获得经过了重标定的特征,即强调重要特征,压缩不重要特征。
1.通道注意力模块
CBAM的通道注意力模块如下图2所示:
图2 通道注意力模块
相比SENet只使用全局平局池化层来压缩通道特征,本文作者认为最大池化可以收集到难区分物体之间更重要的线索,来获得更详细的通道注意力。因此,本文同时使用了平均池化和最大池化后的特征,然后将他们依次送入一个权重共享的多层感知机中(MLP),这里估计是参考了NIN(网中网)这篇文章,最后将各自的输出特征再对应位置Add,其中本文并没有说明在参数学习这里为啥使用多层感知机而不使用全连接层(像SENet那样),可能是通过1X1卷积来更好地融合通道信息吧。通道注意力主要聚焦于输入图像的什么特征是有意义的。
2.空间注意力模块
CBAM的空间注意力模块如下图3所示:
图3 空间注意力模块
加入空间注意力模块在一定程度上弥补了只是用通道注意力的不足,因为空间注意力主要聚焦于输入图像的哪部分的有效信息较丰富。刚开始看着部分的时候对池化部分不是很理解,后来查看了代码才知道,这里的池化操作是沿着通道轴进行的,即每次池化时对比的是不同通道之间的数值,而非同一个通道不同区域的数值。哈哈,第一次见这种方法。所通过最大池化和平均池化各获得一张特征图,而后将他们拼接成一张2D特征图,再送入标准7X7卷积进行参数学习,最终得到一张1D的权重特征图。注意,不管是通道注意力得到的权重,还是空间注意力得到的权重,在最后于原数据相乘时,都使用了数据的广播机制的。
3.CBAM的tensorflow代码
图4 CBAM 代码
4.可视化
读这篇文章,还学到的一点就是运用grad-CAM进行可视化,这可以增强论文的可信度。
本文的可视化如下图4所示。
图5 可视化
grad-CAM是最近提出的一种可视化方法,它利用梯度来计算卷积层空间位置的重要性,由于梯度是针对一个唯一的类计算的,grad-CAM的结果清楚地显示了对最终预测产生影响的图像区域。本文作者通过这种方法来观测神经网络是如何有效利用图像特征的。从图4可知,加入了CBAM的ResNet50它的有效预测区域范围更大,最后的softmax概率值也更大,结果也更加准确。
5.学习感受
1.对空间注意力机制有了一定的了解;
2.学习到将平均池化和最大池化一起用效果会更好;
3.对池化的方式有了新认识;
4.学习到通过使用grad-CAM的可视化方法,可以是增加论文的说服力。