CBAM: Convolutional Block Attention Module

1. 前言

这篇论文来自于ECCV 2018.
这里有我在MxNet下的实现
https://github.com/JunrQ/backbones
随着ResNet,Inception等网络结构的出现,人们边热衷于寻找更加高效,有效的网络结构。这篇论文就是在网络结构上的一种尝试。

它依然采用了block的形式,但是在每一个block上进行更加细致的设计来使得网络的结构更加合理有效。

2. 结构

整体的结构如下图:


结构

作者采用了类似于人类attention,也就是注意力的机制,对一个特征矩阵进行重新构造。注意力机制其实并不复杂,就是采用一种可以学习的方式来对特征重新赋予权重,权重高的特征就是注意力的注意点。

3. 注意力

从上面的结构图可以看到,一个特征经过一个Channel Attention Module和一个Spatial Attention Module被重新构造,输出了一个精修过的特征矩阵。

3.1 通道注意力

首先是通道注意力,我们知道一张图片经过几个卷积层会得到一个特征矩阵,这个矩阵的通道数就是卷积层核的个数。那么,一个常见的卷积核经常达到1024,2048个,并不是每个通道都对于信息传递非常有用了的。因此,通过对这些通道进行过滤,也就是注意,来得到优化后的特征。
主要思路就是:增大有效通道权重,减少无效通道的权重。

公式如下:


cn atten

结构如下:


cn atten

在通道维度上进行全局的pooling操作,再经过同一个mlp得到权重,相加作为最终的注意力向量(权重)。
这里非常像SENet,SENet在很多论文中都被证实对效果有提升,这里的区别是,SENet采用的是平均值的pooling,这篇论文又加入了最大值pooling。作者在论文中,通过对比实验,证实max pooling提高了效果。

注意这里的mlp的中间层较小,这个可能有助于信息的整合。

3.2 空间注意力

论文中,作者认为通道注意力关注的是:what,然而空间注意力关注的是:Where
公式如下:

sp atte

结构如下:


sp atte

同样适用了avg-pooling和max-pooling来对信息进行评估,使用一个7*7的卷积来进行提取。

注意权重都通过sigmoid来进行归一化。

3.3 模型

下图是一个将论文的方法应用到ResNet的例子:


Res

将模型应用到每一个ResNet block的输出上。

你可能感兴趣的:(CBAM: Convolutional Block Attention Module)