CBAM (ECCV, 2018)

CBAM: Convolutional Block Attention Module

摘要

作者指出, 目前的大量工作, 在对 backbone 网络进行改进时, 大多会从三个方面进行改进: depth, width, and cardinality. 而作者从另外一个角度: attention 进行改进. 相比于之前的 SE-Block attention 工作, 作者不仅利用了特征图谱中通道之间的关系, 还利用了特征图谱上空间上的关系. 由此提出了 Channel attention module 和 Spatial attention module. 这两个 module 在实现方式上和 BAM 类似. 区别在于 CBAM 是以 Sequential 的形式使用在 basic block 上的, 而 BAM 是以 parallel 的形式使用在 bottleneck 上的. 作者通过使用证明, CBAM 可以使用在大多数的 backbone 网络上, 并且可以在极低的计算资源增加下增强 backbone 网络的能力.

方法

CBAM 的整体结构图如下图 1 所示. 原始的 feature map 会首先经过一个 attention 模块, 然后得到的结果会再经过另一个 attention 模块. 最终会利用 element-wise multiplication 将 attention 模块添加到原始的 feature map 之上.

CBAM%2Ffig1.jpg

CBAM 的 attention 机制由两部分组成. 它的主要机制可以用下面的公式 1 来概括:

CBAM%2Fform1.jpg

两者机制的基本实现如下图 2 所示:

CBAM%2Ffig2.jpg

首先是 channel attention module, 该模块的思想和 SE-Block 类似, 都是强调 ‘what’ is meaningful given an input image. 利用了通道间的关系来使用 attention. 和 SE-Block 不同的是, 作者不仅使用了 Global Average Pooling, 同时还使用了 Global Max Pooling. channel attention module 的实现和作用机制可以用下面的公式 2 来概括:

CBAM%2Fform2.jpg

接下来是 Spatial attention module, 和 channel attention module 不同的是, Spatial attention module 是在 channel 维度上进行 pooling 的, 这样, 最终生成的特征图谱的深度就会变成 1. 从直观感受上作者可以看出, Different from the channel attention, the spatial attention focuses on ‘where’ is an informative part. 这一 attention 模块的实现和作用机制可以用下面的公式 3 来概括:

CBAM%2Fform3.jpg

作者建议 CBAM 插入到 backbone 网络的 basic block 部分, 如下图 3 所示.

CBAM%2Ffig3.jpg

实验

部分实验结果如下所示, 可以看出 CBAM 还有有效果的, 只是作者没有进行 BAM 和 CBAM 的对比实验. 个人觉得, CBAM 和 BAM 的 attention 思想是相同的, 只不过是在具体实现时的作用位置和作用顺序有所区别而已. 可以尝试自己做下实验来看看这两种 attention 方法的优劣.

CBAM%2Ftab1.jpg

CBAM%2Ftab2.jpg

CBAM%2Ftab3.jpg

CBAM%2Ftab4.jpg