Squeeze-and-Excitation Networks
Squeeze-and-Excitation Networks(SENet)是CVPR2018公布的一种全新的图像识别结构,它通过对特征通道间的相关性进行建模,把重要的特征进行强化来提升准确率。是目前流行的一种子结构
SQUEEZE-AND-EXCITATION BLOCKS
上图是SE-block 结构,$F_t$是卷积结构,$X$和$U$是卷积操作的输入与输入,SE-block对$U$进行了加权的重标定. 其中包含 $F_s$ 和 $F_e$ 操作(由于公式编辑器的原因,用$t$代替$tr$, $s$ 代替$sq$、 $e$代替$ex$).
Squeeze: Global Information Embedding
对于squeeze部分,作者提出将全局空间信息 squeeze 为 channel 描述子,通过使用全局平均池化(GAP)来生成 channel-wise 的统计 $z$.
$$z_c = F_s(U_c) = \frac{1}{H ✖️ W}\sum^H_i\sum^W_j u_c(i,j)$$
Excitation: Adaptive Recalibration
为了利用 squeeze 模块获得信息,旨在完全获取 channel-wise 级的依赖关系. 作者认为自适应重标定需要满足以下两个准则:
- 能够学得各个 channel 之间的非线性相互关系
- 必须学的是非互斥得关系,因为可以有多个 channel 被强调,而不是 one-hot 激活
$$s = F_e(z, W) = \sigma(g(z, W)) = \sigma(W_2\delta(W_1z))$$
$W_1$, $W_2$为全连接, $\delta$ 为 relu 激活. 对于激励模块,作者首先使用一个全连接层对 GAP 结果以 $\frac{C}{r}$降维, 然后接 relu 激活函数学习非线性相关性,之后再跟一个全连接恢复 channel 维度.
usage
- SE-block 可用于分类与检测. 对于标准网络结构如VGGNet,SE-block 可以用在每一个卷积+非线性操作之后. $Fig.2$和$Fig.3$分别是SE-Inception module和SE-Resnet module.
- ratio. 在ImageNet上,作者得到的最佳ratio为16,可做相对参考
简单代码(keras)
def squeeze_excitation_layer(x, ratio, out_dim):
squeeze = GlobalAveragePooling2D()(x)
excitation = Dense(units=out_dim // ratio)(squeeze)
excitation = Activation('relu')(excitation)
excitation = Dense(units=out_dim)(excitation)
excitation = Activation('sigmoid')(excitation)
excitation = Reshape((1, 1, out_dim))(excitation)
scale = multiply([x, excitation])
return scale