动机
- 之前有一篇论文提出了SENet,在feature map的通道上进行attention生成,然后与原来的feature map相乘。这篇文章指出,该种attention方法只关注了通道层面上哪些层会具有更强的反馈能力,但是在空间维度上并不能体现出attention的意思。
- attention不止能告诉网络模型该注意什么,同时也能增强特定区域的表征。本文的CBAM在channel和spatial两个维度上引入了attention机制。
- CBAM作为本文的亮点,将attention同时运用在channel和spatial两个维度上,CBAM与SE Module一样,可以嵌入了目前大部分主流网络中,在不显著增加计算量和参数量的前提下能提升网络模型的特征提取能力。
创新
- 提出了一个高效的attention模块----CBAM,该模块能够嵌入到目前的主流CNN网络结构中。
- 通过额外的分离实验证明了CBAM中attention的有效性。
- 在多个平台上(ImageNet-1K,MS COCO和VOC 2007)上证明了CBAM的性能提升。
方法
Convolutional Block Attention Module
- 当输入 作为input feature map时,本文提出的CBAM主要对其进行以下两个运算:
- 整体结构
- 结构细节
Channel attention module
-
这部分的工作与SENet很相似,都是首先将feature map在spatial维度上进行压缩,得到一个一维矢量以后再进行操作。与SENet不同之处在于,对输入feature map进行spatial维度压缩时,作者不单单考虑了average pooling,额外引入max pooling作为补充,通过两个pooling函数以后总共可以得到两个一维矢量。global average pooling对feature map上的每一个像素点都有反馈,而global max pooling在进行梯度反向传播计算只有feature map中响应最大的地方有梯度的反馈,能作为GAP的一个补充。
-
具体做法如下,以 表示输入feature map,
-
和 分别代表经过global average pooling和global max pooling计算后的feature, 和 代表的是多层感知机模型中的两层参数,在这部分的计算可以用如下公式表示:
Spatial attention module
- 这部分工作是论文跟SENet区别开来的一个重要贡献,除了在channel上生成了attention模型,作者表示在spatial层面上也需要网络能明白feature map中哪些部分应该有更高的响应。首先,还是使用average pooling和max pooling对输入feature map进行压缩操作,只不过这里的压缩变成了通道层面上的压缩,对输入特征分别在通道维度上做了mean和max操作。最后得到了两个二维的feature,将其按通道维度拼接在一起得到一个通道数为2的feature map,之后使用一个包含单个卷积核的隐藏层对其进行卷积操作,要保证最后得到的feature在spatial维度上与输入的feature map一致,如同上图中下部分网络所示。
Arrangement of attention modules
- 两个attention的module,以何种顺序去设置和组合同样很重要,作者在之后的实验中,也体现了channel-first、spatial-first和parallel的实验结果。
网络结构
- 将CBAM嵌入到ResNet后的结构
实验
Channel attention
- 通过与baseline的对比可以发现,attention方法能提升网络的表征能力,在其中使用了AvgPool作为spatial压缩的方法对比MaxPool体现出了更好的优越性,当将两者结合在一起以后网络的表征能力.
空间注意力
Arrangement of the channel and spatial attention
- 在SE-ResNet50作为baseline的对比中,作者考虑了三种情况:channel-first、spatial-first和parall的方式,可以看到,channel-first能取得更好的分类结果。