Introduction
人们已经证明卷积网络可以有效地解决诸多计算机视觉任务。在网络的每一个卷积层上,每个输入通道都有一组滤波器来表示附近空间连接的模式 — 通过局部感受野将 spatial 和 channel-wise 的信息融合起来。通过交错地使用一系列的卷积层,非线性函数以及下采样算子,CNN 可以输出图像的特征,这些特征能很好地捕捉到各层级的模式,进而获得全局理论上的感受野。计算机视觉的主旨就是要找到更有效的特征,它能够准确描述图像的特质,这些特质对于给定的任务是非常显著的,进而提升模型表现。神经网络在计算机视觉领域应用广泛,是目前的核心前沿。最近的研究表明,我们可以通过在网络中加入学习机制来增强 CNN 输出的特征表示,该学习机制能帮助获取各特征之间的空间关系。这其中的一个方法就是,在网络模块中融合多尺度训练来提升模型表现。进一步的工作就是能更好地对空间依赖关系进行建模,在网络的结构中融合空间注意力机制。
在这篇论文中,我们从另一个方面探索网络结构设计 — 各通道之间的关系。我们引入了一个新的结构单元,称作 Squeeze-and-Excitation(SE) 模块,目的是通过对卷积特征的各通道间关系建模,进而提升网络输出特征的质量。最后,我们提出了一个新的机制,它允许网络进行特征校准,学习使用全局信息来选择性地关注富信息的特征,同时抑制没用的特征。
SE 构建模块的结构如图1所示。对于给定的变换 F t r F_{tr} Ftr,即一个卷积,我们将输入 X X X 映射到特征图 U ∈ R H × W × C U \in \mathbb{R}^{H\times W\times C} U∈RH×W×C,我们构建一个相应的 SE 模块来执行特征校准。特征 U U U 首先经过一个 squeeze 操作,通过在空间维度 ( H × W ) (H\times W) (H×W) 上聚合特征图的方式产生一个通道描述器。这个描述器的作用就是输出 channel-wise 特征响应在全局分布的 embeddings,使得全局感受野的信息可以在所有的层上都可以使用。聚合完了之后,就是 excitation 操作,就是一个简单的 self-gating 机制,将 embeddings 作为输入,输出一组逐通道的 modulation 权值。这些权值然后用到特征图 U U U 上来产生 SE 模块的输出,然后直接输入后续的网络层中。

通过简单地堆叠 SE 模块我们就可以构建一个 SE 网络(SENet)。而且,这些SE模块可以替换神经网络一定深度范围内的原来的模块。尽管构建模块是通用的,但它在不同的深度所发挥的作用是不同的。在前面的层,它以 class-agnostic 方式输出富信息的特征,加强共享的低级别特征表示。在后面的层,SE 模块变得更具针对性,以 class-specific 方式对不同的输入进行响应。最后,SE 模块所带来的特征校准优势就能在网络中逐渐显现出来。
CNN 结构的设计和发展是一个复杂的工程任务,需要调许多的超参数和层配置。但是SE 模块的结构就简单的多,可以直接用在目前 state of the art 的结构中,直接将它们中的模块替换为 SE 模块,性能可以得到有效提升。SE 模块在计算上也是轻量级的,只稍微地增加了模型复杂度和算力成本。
我们设计了多个 SENets,在 ImageNet 上进行了大量的实验。我们同样在其他的数据集上进行了实验,结果证明 SENets 并不限定在某一任务的数据集上。通过利用 SENets,我们在 ILSVRC 2017 分类任务上排名第一。我们最优的模型 ensemble 在测试集上获得了 2.251 % 2.251\% 2.251% 的 top-5 错误率,比上一年的冠军模型提升了约 25 % 25\% 25%。
2. Related Work
Deeper Architecture
VGGNets 和 Inception 模型证明网络深度的增加能够显著地提升网络要学习的特征的质量。通过正则化每一层的输入分布,Batch Normalization 使得深度网络的学习过程更加稳定,输出的结果更加平滑。基于这些工作,ResNet 证明我们可以通过基于恒等映射的 skip 连接,学习更深,更强大的网络。Highway Networks 提出了一个 gating 机制,控制 shortcut 连接上的信息流。有了这些工作,人们又重新构造了网络层之间的连接,使网络的学习能力和特征表示能力有了显著的提升。
另一个研究方向就是,提升网络内各计算单元的功能形式。Grouped 卷积可以提升学到的变换的 cardinality。通过多分支卷积我们可以获得更多灵活的操作,这些操作可以看作 grouping 操作的扩展。在之前的工作中,跨通道关联通常映射为一个新的特征组合,不管它们是独立的空间结构,还是通过 1 × 1 1\times 1 1×1卷积结合起来。这些研究着重关注在如何小型化模型,降低计算复杂度,反映出的一个假设就是,通道间的关系可以表述为 instance-agnostic 函数的组合。但是,我们认为,利用全局信息,通道间非线性的依赖关系可以使学习过程变得容易,极大地增强网络表示能力。
Algorithmic Architecture Search
另一些研究则想要摒弃人为的模型结构设计,让模型去自动地学习网络结构。这个领域中早期的大多数工作都是在 neuro-evolution community 内进行的,通过进化方法构建方法去搜索网络拓扑结构。尽管很消耗算力,进化搜索方法也取得了一些显著的成就,比如在序列模型中找到好的记忆细胞,在大型的图像分类任务上学习复杂的结构。人们后来想要降低这些方法的算力开支,基于 Lamarckian inheritance 和可微结构搜索提出了有效的替换方案。
通过将结构搜索表达为超参优化,随机搜索,以及其它的基于模型的优化技巧,Deeparchitect 也可用于解决此问题。人们又提出了两个可行的结构搜索方法,即在可能的模型结构上进行拓扑选取,和直接进行模型结构预测。后来又有人通过增强学习获得了更强大的模型结构。SE 模块可以在这些搜索算法中用作为一个原子构建模块。
Attention and Gating Mechanisms
注意力机制就是,我们在分配可用的计算资源时,更偏向那些富信息的信号。注意力机制在许多任务上都有使用,如序列学习,图像中的定位和理解,图像配字幕,以及唇读等。在这些应用中,注意力机制位于一层或多层网络之后,作为一个操作符使用,体现更高级别的抽象。我们的SE模块由一个轻量级 gating 机制构成,以一种高效的计算方式对各通道的关系进行建模,着重增强网络的表现能力。
3. SQUEEZE-AND-EXCITATION BLOCKS
一个 SE模块就是一个计算单元,由 F t r F_{tr} Ftr映射构成,输入是 X ∈ R H ′ × W ′ × C ′ X\in \mathbb{R}^{H' \times W'\times C'} X∈RH′×W′×C′,输出是 U ∈ R H × W × C U\in \mathbb{R}^{H\times W\times C} U∈RH×W×C。我们用 F t r F_{tr} Ftr作为卷积操作符,用 V = [ v 1 , v 2 , . . . , v C ] V=[v_1,v_2,...,v_C] V=[v1,v2,...,vC]表示学到的滤波核集合, v C v_C vC表示第 c c c个滤波器的参数。我们可以将输出写为 U = [ u 1 , u 2 , . . . , u C ] U=[u_1,u_2,...,u_C] U=[u1,u2,...,uC],
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 1 , v c 2 , . . . , v c C ′ ] v_c=[v_c^1, v_c^2,...,v_c^{C'}] vc=[vc1,vc2,...,vcC′], X = [ x 1 , x 2 , . . . , x C ′ ] X=[x^1, x^2,...,x^{C'}] X=[x1,x2,...,xC′], u c ∈ R H × W u_c\in \mathbb{R}^{H\times W} uc∈RH×W。 v c s v_c^s vcs 是一个二维的空间核,代表 v c v_c vc的一个通道,在对应的 X X X通道上使用。为了简化写法,bias 项被省略了。因为输出是由所有的通道加和形成,通道之间的依赖关系就隐式地包含在了 v c v_c vc里面,但是和滤波器捕捉到的局部空间关系缠绕在了一起。由卷积内的通道关系本身就很隐晦而且只针对局部(除了最上面的那一层)。我们希望通过显式地对通道关系建模来增强卷积特征的学习,这样模型就可以对那些富信息的特征更加敏感,然后交给后面的层运算来处理。因此,我们想要它能获取全局信息,通过两个步骤来重新校准滤波器响应,即 squeeze 和 excitation。SE 模块的结构如图1所示。
3.1 Squeeze: Global Information Embedding
为了探索通道间的依赖关系,我们首先考虑了输出特征中的各通道的信号。每一个学到的滤波器都用一个局部感受野运算,这样输出 U U U中的每个单元就无法获取该区域外的全局信息。
为了弥补这个问题,我们建议在每个 channel descriptor 中压缩(squeeze)全局空间信息。通过全局 average pooling 输出 channel-wise statistics。通过在空间维度 H × W H\times W H×W上收缩 U U U 产生一个 statistic z ∈ R C z\in \mathbb{R}^{C} z∈RC,这样 z z z中第 c c c个元素计算如下:
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)
讨论。输出 U U U可以看作为由一组局部描述器组成的集合,它们的 statistics 对于整张图片都富有表现力。这些特征在之前的特征工程领域是很常用的。我们选择了最简单的聚合技巧,global average pooling,其它更复杂的策略也可以在这里使用。
3.2 Excitation: Adaptive Recalibration
为了使用 squeeze 运算中聚合的信息,我们在其后使用了 excitation 操作,目的是充分地捕捉各通道间的依赖关系。为了达到这个目的,该函数必须满足两个条件:首先,它必须足够灵活,要能够学习各通道间的非线性关系;其次,它要能学习非互斥的关系,因为我们想要强调多个通道,而非只有一个被激活。为了满足这些条件,我们使用了一个简单的 gating 机制,有一个 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_1 z)) s=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z))
δ \delta δ就是ReLU 函数, W 1 ∈ R C r × C W_1\in \mathbb{R}^{\frac{C}{r}\times C} W1∈RrC×C, W 2 ∈ R C × C r W_2 \in \mathbb{R}^{C\times \frac{C}{r}} W2∈RC×rC。为了限制模型的复杂度,增强其泛化能力,我们将 gating 机制进行了参数化,在非线性函数两端分别使用一个全连接层,构成bottleneck。也就是,一个reduction ration 为 r 的降维层,一个 ReLU 和随后的一个升维层,将维度恢复到原来输出 U U U 的维度。最后模块的输出通过激活函数 s s s 对 U U U 进行 rescale 获取:
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
X ~ = [ x ~ 1 , x ~ 2 , . . . , x ~ C ] \tilde X = [\tilde x_1, \tilde x_2, ..., \tilde x_C] X~=[x~1,x~2,...,x~C], F s c a l e ( u c , s c ) F_{scale}(u_c, s_c) Fscale(uc,sc) 代表标量 s c s_c sc 和特征图 u c ∈ R H × W u_c\in \mathbb{R}^{H\times W} uc∈RH×W 逐通道的相乘。
讨论。Excitation 操作符将输入 descriptor z z z 映射到一个通道权值集合。SE 模块内在地在输入上加入了 dynamics,该 dynamics 由输入决定,可以看作为在通道上的 self-attention 函数,这些通道的关系并不局限于局部感受野。


3.3 Instantiations
SE模块可以整合进标准的网络结构中,如VGGNet,放在每个卷积后的非线性函数后面。而且,SE模块的灵活性意味着它可以直接代替标准卷积使用。为了证明这一点,我们在复杂的网络中加入了SE 模块,设计了SENets。
我们首先考虑在 Inception 网络中加入 SE 模块。这里,我们将 F t r F_{tr} Ftr变换当作一整个 Inception 模块,然后在每一个 module中都这么做,我们就得到了 SE-Inception 网络。SE 模块也可以直接和残差网络一起使用,如图3所示,描述了SE-ResNet 模块。这里,SE模块的函数变换 F t r F_{tr} Ftr作为残差module中的非恒等分支使用。我们在与恒等分支相加之前使用 Squeeze 和 excitation。SENet 更具体的例子如表1所示,描述了 SE-ResNet-50 和 SE-ResNeXt-50 网络。
SE 模块灵活的本质使得我们可以在其它的网络结构中使用它。因此,作者在6.5节提供了详细的 ablation 实验来探索不同的结构设计。


4. Model and Computation Complexity
为了让SE模块能够实际地使用,它必须在提升性能和增加模型复杂度中取得一个很好的平衡。为了解释该模块的复杂度,我们考虑用 ResNet-50 和 SE-ResNet-50 作比较。在大小为 224 × 224 224\times 224 224×224的输入图像上,ResNet-50 在一次前向传播中需要 3.86 GFLOPs。每个SE模块都在 squeeze 阶段使用了一个 global average pooling 操作,在 excitation 阶段使用两个小的全连接层,随后是一个成本较低的 channel-wise scaling 操作。在聚合步骤,当 reduction ratio r r r 设为16,SE-ResNet-50 需要3.87 GFLOPs,相较于原来的 ResNet-50 提升了 0.26 % 0.26\% 0.26%。但是 SE-ResNet-50 超过了 ResNet-50,达到了 ResNet-101 网络的准确率,而 ResNet-101 需要 7.58 GFLOPs。
在 ResNet-50,一次前向传播和反向传播需要190ms,而 SE-ResNet-50 需要 209ms,训练的 minibatch size 为256(在8张英伟大 Titan X GPUs上)。我们认为这个 overhead 是合理的,未来可以通过 GPU 在 global pooling 和 inner-product 操作的优化而降低。我们也在嵌入式设备的CPU上对推理时间进行了 benchmark:对于一个 224 × 224 224\times 224 224×224输入图像,ResNet-50 需要164ms,而 SE-ResNet-50 需要167ms。我们认为,这个额外的计算开支可以通过性能的提升而弥补。
我们接下来考虑了SE模块中额外的参数带入情况。这些额外的参数都是由 gating 机制中两个全连接层导致的,因而只占整个网络的一小部分。这俩全连接层带来的权值参数个数如下:
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 的个数,一个stage表示在一个空间维度的特征图上操作的 SE 模块集合。 C s C_s Cs表示输出通道的维度, N s N_s Ns表示stage s s s 中重复的模块个数。SE-ResNet-50 在 ResNet-50 的2500万个参数基础上引入了 250万个额外的参数,增加了 10 % 10\% 10%。在实际中,这些参数中的绝大多数都来自于网络的最后一层,excitation 操作是在最大数量的通道上进行。但是,我们发现SE模块中这个成本较高的 final stage 可以被去除,只会带来一点精度的降低(在 ImageNet 上 < 0.1 % <0.1\% <0.1% top-5 error),而相应的参数则减少了 4 % 4\% 4%。
4. Experiments
Pls read paper for more details.