CBAM论文笔记

    论文:CBAM: Convolutional Block Attention Module. Sanghyun Woo, Jongchan Park, Joon-Young Lee, and In So Kweon


摘要

    本文提出了Convolutional Block Attention Module(CBAM),一个简单而有效的前馈卷积神经网络注意力模块。给定一个特征图,CBAM可以沿着通道和空间维度依次得到注意力特征图,然后将注意力特征图相乘到输入特征图中进行自适应特征细化。由于CBAM是轻量的,而且是一个通用模块,因此可以加入到任何CNN中仅需要很小的计算量,而可以与CNNs一起进行端到端训练。然后在ImageNet、MS COCO、VOC 2007等数据集进行实验,结果表明可以提升分类和检测性能。


引言

    为了提高CNNs的性能,最近大家都在往网络的三个方面进行研究:深度、宽度和基数(cardinality)。而本文则不同,研究的是架构的另一方面:Attention。Attention不仅告诉我们注意哪里,而且提高兴趣区域的表示能力。我们的目标是使用Attention机制提高表示能力:集中注意力在重要的特征上,抑制不重要的特征。因此本文提出新的网络模块:Convolutional Block Attention Module(CBAM)。

    因为卷积运算通过混合跨通道和空间信息来抽取信息特征的,所以我们沿着这两个主要维度(通道轴和空间轴)来关注有意义的特征。因此CBAM中依次应用了通道注意力模块和空间注意力模块,网络学会通道和空间中需要注意what和where。

    在ImageNet的实验中,通过加入CBAM,可以在baseline的基础上获得很大的提升。本文使用grad-CAM对训练的模型进行可视化,发现CBAM-enhanced模型可以更关注目标。考虑到这点,我们猜想性能的提升来自精确的注意力,降低无关的特征噪声。最后,我们在MS COCO、VOC 2007上的实验验证了CBAM的广泛的可用性和带来的性能提升,而仅仅需要很小的计算量。

    本文的主要贡献在三个方面:

    1)提出了一个简单高效的注意力模块(CBAM),可广泛用于提高CNNs的表示能力。

    2)通过广泛的消融研究来验证注意力模块的有效性。

    3)通过插入CBAM,我们验证了在多个基准测试(ImageNet-1K、MS-COCO和VOC 2007)上,各种网络的性能都得到了极大的改善。


相关工作

    众所周知,注意力机制在人类感知中扮演着重要的角色。人类视觉的一个重要特点是不会同时处理整个场景。反之,为了更好地捕捉视觉结构,人类利用一系列的局部瞥见,有选择性地聚焦于显著的部分。

    最近有几个工作尝试在CV中引入注意力机制来提高大规模分类任务的性能。比如Residual Attention Network是一个编码-解码形式的注意力模块。通过细化特征映射,网络不仅性能良好,而且对噪声输入具有鲁棒性。与RAN直接计算一个3d的注意力特征图不同,CBAM将注意力机制解耦为通道注意力和空间注意力。这种解耦不仅计算量小,而且可以减少参数过拟合问题,可以在现成的网络架构中直接集成。

    与CBAM更接近的工作是SENet,他们用GAP计算逐通道的注意力机制。但是本文发现这并不是最佳方法,因为SENet忽略了最重要的空间注意力部分,而可以决定网络应该注意到“where”。而CBAM同时使用了通道注意力和空间注意力,这比SENet效果更好。


CBAM

    给定输入特征图F∈R(CxHxW),CBAM可以生成1D的通道注意力特征图Mc∈R(Cx1x1)和2D的空间注意力特征图Ms∈R(1xHxW),如下图:

图片1.jpg

    这个过程用公式表示:

    F’=Mc(F)⊙F

    F’’=Ms(F’)⊙F’

    其中⊙表示逐元素乘法,F’’是最终输出的特征图。下图是通道注意力模块和空间注意力模块的实现:

图片2.jpg

通道注意力模块:利用特征的通道间关系生成通道注意力特征图。将特征图的每个通道看作一个特征检测器,通道注意力聚焦在哪些对输入图片来说是有意义的(what)。为了更高效的计算,我们将整个输入特征图的空间维度进行聚合,最常用的就是平均池化。使用平均池化可以有效的学习到目标的范围,因此SENet也采用这种方法。但是本文也认为最大池化可以收集到区分不同目标的信息以更精确的获得通道注意力。因此这里同时使用平均池化和最大池化,我们认为这种方法可以大地提升精度。

    过程为:首先使用平均池化和最大池化聚合输入特征图,得到两个不同的特征图:Fc_avg,Fc_max,这两个都是一维的。然后将两个特征图输入到Shared MLP中生成通道注意力特征图Mc∈R(Cx1x1)。Shared MLP只有一个隐层,为了减小参数量,隐层的维度为:R(C/r x1x1),其中r是减小的比率。计算过程如下:

图片3.jpg

    其中σ是sigmoid函数,W0∈R(C/r xC)、W1∈R(CxC/r)是MLP的参数。需要注意的是W0、W1对两个输入是参数共享的。

空间注意力模块:利用特征的空间关系生成空间注意力特征图。空间注意力聚焦在哪里是有用的信息(where),这与通道注意力是互补关系。首先沿着通道轴计算平均池化和最大池化,然后拼接两个池化结果得到一个特征图(或特征描述子)。通过池化操作可以得到激活度很大的信息区域。接着对特征描述子进行卷积操作得到空间注意力特征图Ms∈R(1xHxW)。

    过程为:使用平均池化和最大池化得到两个2D的特征图:Fs_avg∈R(1xHxW)和Fs_max∈R(1xHxW)。将这两特征图拼接,再经过一个卷积就得到了最终的空间注意力特征图。计算过程如下:

图片4.jpg

    其中σ是sigmoid函数,f7x7表示进行大小为7x7的卷积运算。

注意力模块的集成:两个注意力模框可以以并行或串行的方式集成到网络中,但是我们发现串行的方式得到的结果更好,而且先放通道注意力后放空间注意力得到的结果略好于反过来放。


实验

    论文以CBAM结合ResNet作为实验的模型,其架构如下:

图片5.jpg

1)消融实验

通道注意力实验:

图片6.jpg

空间注意力实验:

图片7.jpg

注意力模型集成方案实验:

图片8.jpg

2)分类实验

ResNet+CBAM模型与其它SOTA模型的比较:

图片9.jpg

训练时的误差曲线比较:

图片10.jpg

MobileNet+CBAM的结果比较:

图片11.jpg

3)注意力机制的可视化

图片12.jpg

图片13.jpg

4)目标检测实验

图片14.jpg

图片15.jpg





上一篇:
下一篇:

首页 所有文章 机器人 计算机视觉 自然语言处理 机器学习 编程随笔 关于