CV 经典主干网络 (Backbone) 系列: SENet
作者:Jie Hu 等
发表时间:2017
Paper 原文: Squeeze-and-Excitation Networks
该篇是 CV 经典主干网络 (Backbone) 系列 下的一篇文章。
SENet 是最后一届 ImageNet 挑战赛(ILSVRC2017)的冠军。SENet 的核心是一种叫做 SE Block(Squeeze-and-Excitation) 的结构,其本质是在 channel 维度上做attention 或者 gating 操作,其创新点在于关注 channel 之间的关系,具体来说,就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。此外,值得一提的是 SE Block 具有通用性,可以比较方便的拓展到其他网络结构中(如 InceptionNet,ResNet等)。
作者在文中证明,加入 SE Block 后,计算量略有增加(不到1%),但是效果会更好。
1. SE Block 结构
SE Block 主要有三步,分别是 Squeeze, Excitation 和 Reweight(Scale)。
首先是 Squeeze 操作,我们顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。它表征着在特征通道上响应的全局分布,而且使得靠近输入的层也可以获得全局的感受野,这一点在很多任务中都是非常有用的。
其次是 Excitation 操作,它是一个类似于循环神经网络中门的机制。通过参数 w 来为每个特征通道生成权重,其中参数 w 被学习用来显式地建模特征通道间的相关性。
最后是一个 Reweight 的操作,我们将 Excitation 的输出的权重看做是进过特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定。
下图是将 SE Block 应用到具体网络的情况。首先使用 global average pooling 作为 Squeeze 操作。紧接着两个 Fully Connected 层组成一个 Bottleneck 结构去建模通道间的相关性,并输出和输入特征同样数目的权重。我们首先将特征维度降低到输入的 1/16,然后经过 ReLu 激活后再通过一个 Fully Connected 层升回到原来的维度。这样做比直接用一个 Fully Connected 层的好处在于:
-
具有更多的非线性,可以更好地拟合通道间复杂的相关性;
-
极大地减少了参数量和计算量。
然后通过一个 Sigmoid 的门获得 0~1 之间归一化的权重,最后通过一个 Scale 的操作来将归一化后的权重加权到每个通道的特征上。