CBAM:Convolutional Block Attention Module
通过空间全局池化生成通道注意力,通过通道全局池化生成空间注意力,并且分别使用最大池化和平均池化去生成2次注意力矩阵
什么是CBAM(Convolutional Block Attention Module)?
- 通过设计通道注意力模块(Channel Attention Module,CAM) 空间注意力模块(SAM) ,分别进行通道与空间上的赋权
- 两个注意力矩阵都是通过池化实现,比如输入特征 CHW 的注意力矩阵,如果求取通道注意力,通过全局池化去掉 HW;如果求空间注意力,在通道维度上进行池化去掉 C,这有别于其他求取空间注意力的方式,因为很多都是直接 1 x 1 卷积去掉通道 C 的
CBAM的通道注意力模块(Channel Attention Module,CAM) ?
- 通道注意力机制和 SENet 相同,但是具体操作与 SENet 略有不同,不同部分用红色进行了标记
- 首先,将输入的特征图F(H×W×C)分别经过基于H和W两个维度全局最大池化全局平均池化,得到两个1×1×C的特征图
- 然后,将两个特征图送入一个共享权值的双层神经网络(MLP)学习通道间依赖关系,两层神经层之间通过压缩比 r 实现降维
- 最后,将MLP输出的特征进行基于element-wise的加和操作,再经过sigmoid激活操作,生成最终的通道加权,即M_c
CBAM的空间注意力模块(Spartial Attention Module,SAM) ?
- 通道注意力模块输出的特征图F‘作为本模块的输入特征图。 首先,基于channel这个维度进行最大池化和平均池化操作,得到两个H×W×1 的特征图
- 然后,将两个特征图基于通道维度进行 concat;再然后使用7×7卷积核 (padding=3)进行通道降维,降维得到单通道的特征图,即 H×W×1
- 最后,经过sigmoid学习空间元素之间的依赖关系,生成空间维度的权重,即M_s