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个,并不是每个通道都对于信息传递非常有用了的。因此,通过对这些通道进行过滤,也就是注意,来得到优化后的特征。
主要思路就是:增大有效通道权重,减少无效通道的权重。
公式如下:
结构如下:
在通道维度上进行全局的pooling操作,再经过同一个mlp得到权重,相加作为最终的注意力向量(权重)。
这里非常像SENet,SENet在很多论文中都被证实对效果有提升,这里的区别是,SENet采用的是平均值的pooling,这篇论文又加入了最大值pooling。作者在论文中,通过对比实验,证实max pooling提高了效果。
注意这里的mlp的中间层较小,这个可能有助于信息的整合。
3.2 空间注意力
论文中,作者认为通道注意力关注的是:what,然而空间注意力关注的是:Where。
公式如下:
结构如下:
同样适用了avg-pooling和max-pooling来对信息进行评估,使用一个7*7的卷积来进行提取。
注意权重都通过sigmoid来进行归一化。
3.3 模型
下图是一个将论文的方法应用到ResNet的例子:
将模型应用到每一个ResNet block的输出上。