Squeeze-and-Excitation Networks
论文链接: https://arxiv.org/abs/1709.01507
一、 Problem Statement
本论文关注channel之间的关系,提出了一个新的结构单元,SE block。 这个SE block可以自适应地重新校准通道特征响应, 这样就网络就可以学习使用全局信息来选择性地强调信息性特征,并抑制不太有用的特征。
二、 Direction
提出了一个新的结构单元: SE block。其分为两个部分,squeeze operation和excitation operation。
三、 Method
先来看一下这个结构:
从上图可以看到,一个输入 X ∈ R H ′ × W ′ × C ′ X \in \R^{H' \times W' \times C'} X∈RH′×W′×C′ 通过一个卷积变换 F t r F_{tr} Ftr,输出了 U ∈ R H × W × C U \in \R^{H \times W \times C} U∈RH×W×C。 转换为数学公式为:
u
c
=
v
c
∗
X
=
∑
s
=
1
C
′
v
c
s
∗
x
s
u_c = v_c * X = \sum_{s=1}^{C'}v_c^s * x^s
uc=vc∗X=s=1∑C′vcs∗xs
其中
∗
*
∗表示卷积操作,
v
c
v_c
vc是卷积核。可以看到输出
u
c
u_c
uc是通过所有通道数相加的结果,它们通道数之间的关系没有很好的被利用。
因此,我们期望通过显式建模channel interdependencies来增强卷积特征的学习,从而使网络能够提高其对信息特征的敏感性,这些信息特征可通过后续转换加以利用。 因此我们想提供一个访问global infomation的途径,并且重新校准filters的响应。
1. Squeeze: Global Information Embedding
每个学习到的kernel filters都是作用在局部感受野上,因此输出 U U U的每个单元就不能利用该区域之外的信息。为了解决这个问题,作者提出了squeeze操作,将全局空间信息压缩到信道描述符(channel descriptor)中。 也就是通过global average pooling操作,生成一个channel-wise statistics。
z c = F s q ( u c ) = 1 H × W ∑ i = 1 H ∑ j = 1 W u c ( i , j ) z_c = F_{sq}(u_c) = \frac{1}{H \times W} \sum_{i=1}^H \sum_{j=1}^W u_c(i,j) zc=Fsq(uc)=H×W1i=1∑Hj=1∑Wuc(i,j)
其中 z c ∈ R C z_c \in \R ^C zc∈RC就是statistic
2. Excitation: Adaptive Recalibration
把压缩好的信息利用起来,就到了第二步: Excitation Operation,这个步骤需要获取channel-wise dependencies。为了实现这个目标,需要满足两个标准:
- flexible, 它必须能够学习通道之间的非线性相互作用。
- 学习到的是non-mutually-exclusive relationship。也就是说,它必须学习一种非互斥关系,因为我们希望确保允许强调多个渠道(而不是强制实施一个one-hot activation)。
因此,选择使用一个简单的gating mechanism和sigmoid激活:
s
=
F
e
x
(
z
,
W
)
=
σ
(
g
(
z
,
W
)
)
=
σ
(
W
2
δ
(
W
1
z
)
)
s = F_{ex}(z, W) = \sigma(g(z, W)) = \sigma(W_2 \delta(W_1z))
s=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z))
这里的 δ \delta δ是ReLU 激活函数, W 1 ∈ R C r × C W_1 \in \R^{\frac{C}{r} \times C} W1∈RrC×C 和 W 2 ∈ R C × C r W_2 \in \R^{C \times \frac{C}{r}} W2∈RC×rC, r r r是reduction ratio。
为了限制模型复杂度和泛化性,这个gating mechanism使用两个full-connected(FC) layer和两个激活函数来实现。
所以最后block的输出为:
x
~
c
=
F
s
c
a
l
e
(
u
c
,
s
c
)
=
s
c
u
c
\tilde{x}_c = F_{scale}(u_c, s_c) = s_c u_c
x~c=Fscale(uc,sc)=scuc
也就是得出来的 s c s_c sc与输出 u c u_c uc进行一个channel-wise multiplication,最后得出结果。
SE block 本质上,引入了以输入为条件的动态,可以被视为引入了通道上的自我注意力。
也来看一下引入的额外的参数量:
2
r
∑
s
=
1
S
N
s
⋅
C
s
2
\frac{2}{r} \sum_{s=1}^S N_s \cdot C_s^2
r2s=1∑SNs⋅Cs2
其中,
r
r
r是reduction ratio,
S
S
S是stage的个数,
N
s
N_s
Ns是每个stage重复block的个数。
3. 如何引入模块
上图演示了如何插入到Inception 和 ResNet网络中。SE block可以放在其他位置,作者做实验表明,SE block对于放置的位置是robust的。
四、 Conclusion
引入了通道的注意力机制,一个即插即用提升精度的模块。