该算法在2017年ILSVRC分类比赛中取得第一名的成绩,并且所提出的结构可以很容易的移植到其他网络中,因此值得学习。
0. 摘要
卷积神经网络是基于卷积操作的,卷积就是通过融合局部感受野内空间维度和特征维度的信息来提取包含信息的特征。为了提高网络的表征能力,几个最新的方法都显示出加强空间编码的作用。在本文中,我们关注的是通道(特征)间的关系,并提出一种全新的结构单元,我们称之为“压缩并激活”(Squeeze-and-Excitation,SE)块,其能够通过对通道间的相关性进行显式建模,以自适应地重新标定通道维度上的特征响应。(本质上就是对各个特征图赋予权重,不再是简单的相加,而是加权求和)。我们证实了通过堆叠这些块,我们可以很轻松的构建一个SENet网络结构,并且泛化到更具挑战性的数据集中。关键的是,我们发现SE块可以明显提高当前最先进算法的表现,而且只会增加很少的运算量。
1.介绍
卷积神经网络已经被证实是解决各种视觉任务的有效模型。对于每个卷积层,一系列的滤波器学习去表达输入通道之间的局部空间联系。换句话说,卷积滤波器试图通过融合局部感受野内空间维度和特征维度的信息来实现有用的信息聚合。通过堆叠一系列穿插着非线性激活函数和下采样的卷积层,CNNs能够捕获全局感受野上的分层特征来作为有力的图像描述。最新的研究表明,通过增加有助于获得空间相关性的学习机制可以明显提高网络的效果,并且不需要增加额外的监督。Inception结构显示通过在模块中增加多尺度流程可以达到很高的精度。更多的研究都在探索建立更好的空间相关性模型或者融合空间注意(attention)机制。
本文中,我们研究了结构设计的另一个方面——通道关系(特征关系),通过引入了一个全新的结构单元。我们的目标是通过建立卷积特征之间的相关性的模型来提高网络的表征能力。为了实现这一目标,我们提出了一种允许网络进行特征重标定的机制,借此网络可以学习如何利用全局信息,有选择的加强一些信息量大的特征而忽视一些无用的特征。
图1.SE结构块
SE块的基本结构如图1所示,对于所有的转化Ftr:X→U,(X是输入的图形,U是提取的特征),我们都可以建立对应的SE块去对特征进行重计算。特征U首先经过一个压缩操作,将空间维度H*W的特征图聚合成一个特征描述符。这个描述符包含了通道维度上特征响应的全局分布情况,使较低级别的层也可以获得来自网络的全局感受野的信息。接下来是激活过程,用一个样例特化(sample-specific)的激活函数,通过基于通道相关性的门限机制(self-gating mechanism)学习控制每个通道的激活情况(有的通道权重值大,有的通道小)。每个特征图U都将重新赋予权重并得到SE块输出,可以直接输入到下一层。
通过简单的堆叠SE结构块就能得到一个SE网络。SE块也可以用于其他结构中任意深度的原始模块。然而,因为结构块的模板是分类的,这表示为了适应网络的需要,在不同的深度他的表现也不同。在较早的层中(靠近输入的层),他以类无关(class agnostic)的方式学习直接的信息特征,提高可共享的低层级的表征能力。在后面的层中,SE块变得更加专门化,并以高类别具体化(class-specific)的方式响应不同的输入。最终,SE块产生的特征重标定的益处可在整个网络中累积。
新的CNN网络结构的发展是个极具挑战性的任务,尤其是涉及到超参数和层级配置的选择。相反的,SE块的设计十分简单,并且可以直接应用于现有的结构,可以通过用SE块直接代替现有模块。不仅如此,根据第四节的表述,SE块只是稍微增加了模型的复杂度和计算成本。
2.相关研究
深度结构,VGGNet和Inception模型验证了增加网络深度的好处。批量规范化(BN)通过插入调节输入和稳定学习过程的单元改善了梯度传播。ResNets显示使用基于恒等映射(identity-based)的跨越链接的深度学习网络具有很好的效果。Highway网络采用了门限机制来调节捷径连接(shortcut connnection)。重构各层网络之间的连接已被证实能够有效提高深层网络的学习和表征能力。
另一条研究思路是寻找方法去调整网络的模块化部分的功能形式。分组卷积(grouped convolution)可以用于增加基数(一组变换的大小)。多分枝卷积(Multi-branch convolution)可以使卷积算子更加灵活。最近一种采用自动方式学习的组成具有很好的表现。跨通道(cross-channnel)的相关性被映射为新的特征组合,要么独立于空间结构,要么用1*1的标准卷积核与之相连。这些工作大部分关注如何减少模型和计算的复杂度,这反映了一个假设即通道间的关系可以用一个局部感受野上的实例化不可知(instance-agnostic)的函数组合来描述。相反,我们提出一个单元,其可以使用全局信息来显式地建立通道间动态的,非线性的相关性模型,这能够简化学习过程并有效提高网络的表征能力。
注意力和门限机制,广义上讲,注意力可以被看作一种工具,它能够把可用的处理资源更多分配给输入信号中包含信息量最大的部分。这种机制的好处已经在一系列任务中被证实了,从图像的定位和理解到基于序列的模型。它通常是结合了门限函数(如softmax或者sigmoid)和序列技术(sequential techniques)。最近的研究表明它具有解决图像注释和唇语阅读的能力。在这些应用中,它通常用在顶部的一层或多层中,用来表示高度抽象的模态间的适应度。Wang等人引入了一个使用沙漏模型的有效的trunk-and-mask 注意力机制。这种高容量的单元被插入到深度残差网络的中间层之间。相反,我们提出的SE块是一种轻量级的门限机制,专门用于建立计算高效的通道维度上的关系模型,并设计用来提高网络中基础模块的表征能力。
3.压缩和激发块
SE是一个可由任意给定的变换组成的计算单元。简单来说,我们称
Ftr
F
t
r
是卷积算子。令
V=[v1,v2,...vc]
V
=
[
v
1
,
v
2
,
.
.
.
v
c
]
代表用于学习的卷积核,其中
vc
v
c
代表第
c
c
个卷积核的参数,我们把的输出写为
U=[u1,u2,...uc]
U
=
[
u
1
,
u
2
,
.
.
.
u
c
]
,其中:
式中 ∗ ∗ 表示卷积运算,和 X=[x1,x2,...xc] X = [ x 1 , x 2 , . . . x c ] (为了简化符号表示,忽略了偏置量), vsc v c s 是二维空间卷积核,因此表示作用在对应通道 X X 上的一个单通道。因为输出是对所有通道求和,因此通道间的相关性隐藏在 vc v c 中,但这些相关性与卷积得到的空间相关性纠缠在一起。我们的目标是增强网络对于含信息量多的特征的敏感度,使他们能被接下来的变换利用,并且抑制无用的特征。我们利用建立通道间相关性的显式模型去重标定滤波器响应,在他们被输入下面的变换之前,这个过程分成两部:压缩和激发。SE机构模块如图1所示。
3.1 压缩:嵌入全局信息
为了解决通道间相关性的利用问题,我们首先输出特征图中每个通道的信号。每个卷积核都是作用在局部感受野上,这导致每个变换输出
U
U
的单元不能利用这个范围之外的环境(上下文)信息。这个问题在感受野很小的较低层级中更加严重。
为了减轻这个问题,我们将全局空间信息压缩成一个通道描述符。利用全局平均池化得到一个通道维度(特征维度)上的统计数据。统计值是压缩具有空间维度
H×W
H
×
W
的
U
U
得到的:
3.2 激发:自适应重标定
为了能够利用压缩操作得到的聚合信息,我们下一步的目标是完整捕获通道维度上的依赖性。为了实现这个目标,这个函数必须具有满足两个标准:第一,他必须足够灵活(尤其是能够学习通道间非线性的相互作用);第二,他必须能够学习一个非互斥(non-mutually-exclusive)的关系,因为我们希望确保多个通道都能被强调,这与独热激活(one-hot activation)方式相反。为了满足这两个标准,我们选择了一个带有sigmoid激活函数的简单的门限机制:
讨论 这个激活函数的作用是根据输入特征的描述符 z z 来给每个通道赋予权重。
就这一点而言,SE块本质上引入了对输入的动态适应性,这有助于增强特征区分能力。
3.3 举例:SE-Inception和SE-ResNet
SE块可以直接应用到AlexNet或VGGNet上。SE块的灵活性意味着它可以直接应用于标准卷积之外的变换。为了说明这一点,我们通过向最新的复杂结构中插入SE块搭建了SENet。
对于非残差网络,例如Inception网络,SE块通过用变换去替换整个Inception模块(如图2所示)来构建网络。通过对网络中的每个模块都做这种改变,我们构建了SE-Inception网络。除此之外,SE块也足够灵活可以应用于残差网络。图3显示了SE-ResNet的结构。此处,SE块的变换
Ftr
F
t
r
用来代替残差模块中的非恒等分支(non-identity branch)。
图2 SE-Inception网络结构
图3 SE-ResNet网络结构
压缩和激发都作用在求和之前的恒等分支。SE-ResNet-50和SE-ResNeXt-50的结构如表1所示。表1
fc
f
c
括号里的数字表示使用SE模块中两个全连接层的输出维度
4.模型和计算复杂度
为了将SE块在实践中可用,必须在模型复杂度和效果之间提供有效的均衡,这对于模型的拓展性是很重要的。我么设置降维比率
r
r
为16在所有的实验中。为了说明模块的计算代价,我们以ResNet-50和SE-ResNet-50为例做一个比较,SE-ResNet-50的准确率比ResNet-50高,甚至比更深层的网络ResNet-101还要高(如表2所示)。ResNet-50对于一幅224*224的输入图像做一次前向计算大约需要计算~3.86GFLOPs(每秒十亿次浮点数运算)。每个SE块在压缩步骤中使用全局均值池化,在激发步骤中使用两个小型全连接层,后面跟随一个运算量很小的通道维度的调整操作。总计起来,SE-ResNet-50需要~3.87GFLOPs与对应的ResNet-50相比增加了0.26%。
表2 错误率与复杂度比较,original代表算法作者的实验结果,re-implementation代表本文复现该算法的实验结果,SENet代表增加了SE块的网络的实验结果,括号里是错误率下降值,+号表示该模型是在测试集中非黑名单的数据集上评估的,这可以稍微改善结果,VGG-16和SE-VGG-16是用批量规范化方式训练的。
下面,我们考虑由于引入SE块增加的参数量。他们全部包含在门限机制的两个全连接层里,占整个网络参数的很小一部分。更精确的说,增加的参数数量如下:
5.实现
每一层网络和它对应的SE块是按照相同的最优化方案训练的。在ImageNet上训练的过程中,我们按照按照标准的训练流程,将输入图片随机裁剪成224*224像素大小,并做随机的水平翻转。输入图像通过减去通道均值进行均一化。除此之外,我们采用了数据平衡策略进行小批量采样。使用同步SGD进行优化,动量为0.9,小批量尺寸为1024。初始学习率是0.6,每30个周期降低10倍。所有的模型都从零开始训练100个周期。
原文链接:https://arxiv.org/abs/1709.01507
代码链接:https://github.com/hujie-frank/SENet