论文传送门: CBAM: Convolutional Block Attention Module
代码(Pytorch): https://github.com/Jongchan/attention-module
Content
Introduction
Convolutional Block Attention Module
Introduction
卷积神经网络发展到现在, 各路大佬主要在网络的三个重要的维度发光发热——深度(depth), 宽度(width), 基数(cardinality*). VGG通过不断堆叠多个相同的模块获得深层网络; ResNet 巧妙地通过 residual blocks 和 skip connection 构造出更深的网络; 而 GoogLeNet 注意到了 width 这个重要的因素; Xception 和ResNext 则是不断增加网络的 cardinality. 后者不仅能减少参数, 还能拥有比前两者更好的表达能力. 这次作者则从另一个截然不同的角度 attention 提出了 CBAM 这个可以在模型中即插即用的小模块.
cardinality
*: 这个概念在 ResNeXt 的论文中被提出, 定义为the size of the set of transformations
, 在 ResNext 中指其 block 的分支数量.
这是一篇 ECCV2018 的的论文, CBAM 即是 Convolutional Block Attention Module, 分别通过 channel 和 spatial 两个轴增强特征图中的有用特征, 并且抑制无用特征, 从而告诉模型应该注意哪个区域. 人在第一眼接触图像时, 视觉系统并不会马上处理全局的信息, 而是会选择性地关注一些突出的局部信息. 比如一张小狗躺在草地上的照片, 人第一眼看去不会发现草地上哪根草是竖起来的, 哪根是弯下去的, 而是会选择性地先观察哪只小狗长什么样. 所以 attention 的设计合情合理.
先前的 Residual Attention Network 使用了 encoder-decoder 方式的 attention 模块重定义 feature map (就像食品再加工那样), 不但性能很好, 还有不错的鲁棒性. 而 CBAM 则是通过从 channel 和 spatial 两个维度分解上面的过程得到的, 且能做到在其他网络中即插即用.
Convolutional Block Attention Module
先设 feature map 为
F
ϵ
R
C
∗
H
∗
W
F \epsilon R^{C *H*W}
FϵRC∗H∗W , CBAM依次推断出一个一维 attention map:
M
c
ϵ
R
C
∗
1
∗
1
M_c \epsilon R^{C*1*1}
McϵRC∗1∗1 和一个二维的 spatial map:
M
c
ϵ
R
1
∗
H
∗
W
M_c \epsilon R^{1*H*W}
McϵR1∗H∗W, 整体的数学公式为:
两条公式分别是 channel attention 和 spatial attention 操作. 其中 ⨂ \bigotimes ⨂ 表示 element-wise multiplication , 即对应元素相乘. 这个也很好理解, 重要的区域给他乘一个大一点的数, 不重要的就乘一个小一点的数. F F F 经过重定义后得到 F ′ ′ F'' F′′. 接下来分开看下 channel 和 spatial 两个维度的具体操作.
Channel attention module
channel attention 主要关注输入特征图中 ‘what’ is meaningful , 并且计算其各个 channel 之间的内在关系. 为了集成每个channel 上的空间信息, 对 input feature
F
F
F 使用了常规的 average-pooling 并得到
F
a
v
g
c
F^c_{avg}
Favgc; 同时为了获得 object 更精细的特征而使用常规 max-pooling 并得到
F
m
a
x
c
F^c_{max}
Fmaxc. 如上图, 接着将
F
a
v
g
c
F^c_{avg}
Favgc 和
F
m
a
x
c
F^c_{max}
Fmaxc 接入一个 shared network 中, 由只有一层隐藏层的多层感知机(MLP)构成. 为减少参数, 将 Shared MLP 的中间那层的大小设为
R
C
/
r
∗
1
∗
1
R^{C/r*1*1}
RC/r∗1∗1 (r 是一个衰减比率). 然后将经过 Shared MLP 后的
n
e
w
_
F
a
v
g
c
new\_F^c_{avg}
new_Favgc 和
n
e
w
_
F
m
a
x
c
new\_F^c_{max}
new_Fmaxc 进行 element-wise summation (对应元素相加)得到 Channel Attention. channel attention map 表示的其实是特征图的各个 channel 之间的内在关系, 即哪些 channel 是值得关注的, 哪些 channel 是应该忽略的. 整个流程用公式表示为:
Spatial attention module
spatial attention 探讨的则是在空间层面 feature map 的内在关系, 即哪些区域是重要的, 哪些是不重要的, 算是 channel attention 的互补方法. 算法上要更简单些, 为了得到 feature map 的通道信息, 先同时沿着 channel axis 对其进行 average-pooling 和 max-pooling 操作分别得到
F
a
v
g
s
ϵ
R
1
∗
H
∗
W
F^s_{avg} \epsilon R^{1*H*W}
FavgsϵR1∗H∗W 和
F
m
a
x
s
ϵ
R
1
∗
H
∗
W
F^s_{max} \epsilon R^{1*H*W}
FmaxsϵR1∗H∗W, 然后将二者 concatenate, 接着经过一个标准卷积层就得到了, spatial attention map. 公式表示为:
Arrangement of attention modules
经实验, 作者发现将 channel attention 和 spatial attention 级联的性能会比并行的好, 且在级联时把 channel attention 放在前面效果会更好.
Experiment
作者选择在 ImageNet-1K 上验证分类性能, 在 MS COCO 和 VOC 2007 上验证检测性能.
Image Classification on ImageNet-1K![在这里插入图片描述](https://img-blog.csdnimg.cn/20201101085758746.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYxMjc2Mw==,size_16,color_FFFFFF,t_70#pic_center)
这几个实验都验证了上面算法设计思路的正确性.
MS COCO and VOC 2007 Object Detection
Conclusion
从人眼视觉的注意力机制出发, 作者设计了一个 convolutional bottleneck attention module (CBAM) 对特征进行增强或者抑制, 提高了模型的特征表达能力 . CBAM 由 channel attention module 和 spatial attention module 级联构成, 在提升模型性能的同时还保持了较小的开销.