[重读经典论文]SENet——ILSVRC收官之作
1. 前言
SENet由Momenta公司,在论文《Squeeze-and-Excitation Networks》提出,核心是SE block,它通过对特征通道间的相关性进行建模,把重要的特征进行强化来提升准确率。
作者采用SENet block和ResNeXt结合在ILSVRC 2017(最后一届)的分类项目中拿到第一,在ImageNet数据集上将top-5 error降低到2.251%,比2016年的第一名还要低25%。
2. 主要思想
在看一张图片的时候,实际上并不会对图片中出现的所有事物都有一样的关心程度,二是有重点的,从而会关注特定的区域,忽略无关区域。在CV领域中,我们知道卷积网络提取出的feature map,每个通道往往代表一种模式,而传统的卷积神经网络中对这些模式都是同等对待的,并没有加上注意力。
作者的动机是希望显式地建模特征通道之间的相互依赖关系。另外,作者并未引入新的空间维度来进行特征通道间的融合,而是采用了一种全新的「特征重标定」策略。具体来说,就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。通俗的来说SENet的核心思想在于通过网络根据loss去学习特征权重,使得有效的feature map权重大,无效或效果小的feature map权重小的方式训练模型达到更好的结果。
3. SE模块
如上图所示就是一个SE Block,名字中的S表示Squeeze,E表示Excitation。
其中Ftr是一个变换,譬如若干个提取特征的卷积层(这部分不属于SE block),输出U,形状为H*W*C。
然后对U进行”Squeeze”操作,即Fsq,这里将U进行全局平均池化(Global Average Pooling),输出1*1*C。
然后进行“Excitation”操作,即Fex,这一步,目的是提取通道之间的依赖关系,因此有两个原则,一是学习到通道之间的非线性,二是学习的关系不是互斥的,因为这里允许多channel的特征,而不是one-hot形式。
因此作者先接一个神经元个数为C/r(r是缩放因子)的全连接层,然后通过Relu进行激活,然后再接第二个神经元个数为C的全连接层,然后对每个输出进行Sigmod操作,输出权重,具体结构可看第4节中实例化后的block结构。
这个过程,可以用下面的公式表示:
这里的结构是一个bottleneck,通过缩减因子r(参数量2*C*C/r),相对直接接两个C个参数的全连接层(参数量C*C)来说,参数量变成了原来的2/r倍,这里r是个超参数,作者通过实验证明r=16是一个权衡性能和计算复杂度后的较佳选择。
最后在将这些权重作为每个通道的权重因子,与原来的输入U直接相乘,就是最后的输出。
总的来说,SE Block首先对卷积得到的特征图进行Squeeze操作,得到channel级的全局特征,然后对全局特征进行Excitation操作,学习各个channel间的关系,得到不同channel的权重。最后进行Scale操作,即将得到的不同channel的权重乘以原来的特征图得到最终特征。本质上,SE Block是在channel维度上做attention或者gating操作。这种注意力机制让模型可以更加关注信息量最大的channel特征,而抑制那些不重要的channel特征。另外一点是SE Block是通用的,这意味着其可以嵌入到现有的网络框架中。
4. 融合其他模块
SE模块的结构,让它能够很容易就嵌入到其他模块当中,作者将SE模块分别嵌入到Inception模块和ResNet模块中,如下图所示:
SE-Inception模块在Inception模块输出后进行嵌入,SE-ReNet模块在卷积的分支输出后进行嵌入。
那么到底引入了SE模块之后增加了多少参数量呢?以ResNet为例,假设ResNet一共包含S个stage,每个Stage包含N个重复的residual block,那么整个添加了SE block的ResNet增加的参数量就是下面的公式:
C表示SE模块的输入和输出的通道数,以ResNet为例,如果全部stage都加,大概增加10%的参数量,但是后面作者发现最后两个stage加不加影响不大,最后去掉这两个stage的SE模块,总体增加4%左右的参数。
测试阶段,增加大概0.26%的计算量,训练阶段,由于GPU可能没有优化GAP操作,因此要慢一些,在CPU上则差不多。
5. 测试
作者也将SE模块迁移到ResNeXt, MobileNet和ShuffleNet中,然后在ImageNet2012数据集上进行训练和验证集上测试,结果如下表所示:
分别是原论文中的数据,原模型复现的数据,及加了SE模块的数据,可以发现加了SE模块后,性能提升,而且计算量只增加了一点点。
6. 总结
SENet把重要通道的特征强化,非重要通道的特征弱化,得到了很好的效果,这是一种全新的思路,在这个方向上将来可能会有更多的成果。
7. 参考
[1] 【CV中的注意力机制】SENet
[2] 解读Squeeze-and-Excitation Networks(SENet)
[3] SENet(Squeeze-and-Excitation Networks)算法笔记
(完)