SENet的提出动机非常简单,传统的方法是将网络的Feature Map等权重的传到下一层,SENet的核心思想在于建模通道之间的相互依赖关系,通过网络的全局损失函数自适应的重新矫正通道之间的特征相应强度。
SENet由一些列SE block组成,一个SE block的过程分为Squeeze(压缩)和Excitation(激发)两个步骤。其中Squeeze通过在Feature Map层上执行Global Average Pooling得到当前Feature Map的全局压缩特征向量,Excitation通过两层全连接得到Feature Map中每个通道的权值,并将加权后的Feature Map作为下一层网络的输入。
网络的左半部分是一个传统的卷积变换,忽略掉这一部分并不会影响我们的SENet的理解。我们直接看一下后半部分,其中 U 是一个 的Feature Map, 是图像的尺寸, 是图像的通道数。
经过 Squeeze操作后,图像变成了一个 的特征向量,特征向量的值由 确定。经过 后,特征向量的维度没有变,但是向量值变成了新的值。这些值会通过和 的 得到加权后的 。 和 的维度是相同的。
1、 squeeze
Squeeze部分的作用是获得Feature Map U 的每个通道的全局信息嵌入(特征向量)。在SE block中,这一步通过VGG中引入的Global Average Pooling(GAP)实现的。也就是通过求每个通道 的Feature Map的平均值:
通过GAP得到的特征值是全局的
2、excitation
Excitation部分的作用是通过学习 中每个通道的特征权值,要求有三点:
- 要足够灵活,这样能保证学习到的权值比较具有价值;
- 要足够简单,这样不至于添加SE blocks之后网络的训练速度大幅降低;
- 通道之间的关系是non-exclusive的,也就是说学习到的特征能够激励重要的特征,抑制不重要的特征。
根据上面的要求,SE blocks使用了两层全连接构成的门机制(gate mechanism)。门控单元 (即图1中 的特征向量)的计算法方式表示为: