Squeeze-and-Excitation Networks(SENet)
- 论文题目:Squeeze-and-Excitation Networks
- 发表会议:CVPR
- 发表时间:2018
- 论文单位及作者:
- Momenta(一家著名自动驾驶公司):Jie Hu
- University of Oxford:Li Shen、Samuel Albanie、Gang Sun、Enhua Wu
摘要
- 背景介绍:CNN的核心是卷积操作,是通过局部感受野的方式来融合空间维度和通道维度的特征的,针对空间维度的特征提取方法已经被广泛研究。
- 本文工作:本篇论文则把研究重点放在通道维度上,探索通道之间的关系,并提出SE Block(Squeeze-and-Excitation Module),它可以自适应的调整通道维度上的特征。
- 研究成果:SE Block可嵌入堆叠在很多经典的神经网络中如Inception Module、ResNet等构成SENet,在多个数据集上表现良好,能够在仅需增加少量参数的条件下大幅度提升精度。
- 比赛结果:在ILSVRC-2017分类挑战赛上获得冠军,将top-5 error降低至2.251%,相对于2016的冠军下降了大约25%。
1.近年相关研究
1.1 CNN模型的实用性
从2012年AlexNet横空出世,一直到后来的ZFNet、VGG,增加网络深度可以显著提高特征学习的表示质量,到后来引入Inception模块堆叠的GoogLeNet-v1,通过调节输入到每一层的分布,BN层(批归一化)的引入加快了深度网络的训练学习,增加了学习过程中的稳定性,再到后来引入基于跳跃连接残差学习的ResNet、ResNeXt、以及Inception与残差结合的GoogLeNet-v4,CNN已经被证明是解决各种视觉任务的有效模型。
CNN是这样运作的:在网络的每个卷积层中,通过一组滤波器(也即多个卷积核)在局部感受野内将空间和通道信息融合在一起,通过一系列层操作(卷积层、激活函数层、池化层等),能够生成我们所要提取的层级特征。
计算机视觉领域中,最值得研究的热点就是如何去找到更强大的特征表示,这个强大的特征表示体现在:我们直奔主题,直接去提取对于给定任务最重要的图像特征,而其余对任务的价值意义不大的特征,可以直接剔除掉,这样可能会需要一个额外的机制/模块去进行设计,也许会增加一些模块的参数,但性能的提高或许会是很大幅度的。
最近的研究表明,我们可以考虑将参数学习机制嵌入到网络中来增强CNN产生的特征表示,能够帮助网络捕捉到特征之间存在的空间相关性(Inception堆叠嵌入的GoogLeNet系列就是一个很好的例子,能够多尺度提取特征并进行融合,这是一种针对空间维度的方法)。
1.2 深层次体系结构的探索
- VGG:增加网络深度可以显著提高特征学习的表示质量
- Inception结构:多尺度卷积及融合,提取特征
- Batch Normalization(BN批归一化):加快深度网络训练学习,增加学习过程中的稳定性
- ResNet:引入跳跃连接加深学习过程
- Highway Network:引入一种门控机制来调节信息流。
- 分组卷积(ResNeXt):让网络学习到不同的特征,获取更丰富信息,提高学习变换基数的流行方法。
- Network in Network(NIN):采用1*1卷积,舍弃FC层,压缩特征图厚度,大大减少网络参数
以往在研究通道之间关系时,采用的都是局部信息,而本文提出的方法采用全局方法进行通道特征信息的提取。
1.3 注意力机制
注意力机制(Attention Mechanism):来源于对人类视觉的研究。人眼的视觉范围其实是很大的,但是我们不能够将所有的信息都囊括在我们的视觉系统中,我们人类对于信息的处理也是有一定的限制的,所以说人类视网膜不同的部位具有不同的信息处理能力,也即不同部分的敏锐度不同,人类视网膜中央凹部位具有最高的敏锐度。为了合理利用有限的视觉信息处理资源,人类需要选择视觉区域中的特定部分,然后重点去关注他。比如说,我们在影院看电影时我们会重点关注此时正在播放的屏幕窗口范围内的视觉,而会忽视掉窗口之外的其他背景等信息,这就是注意力机制的一个体现。从计算机的角度来看,可以解释为将可用计算资源的分配偏向信号中最有用的部分的一种手段。
注意力机制最早用于自然语言处理(NLP)的领域,后来在计算机视觉(CV)领域也得到了广泛的应用。(比如,序列学习;图像理解、定位;图像描述;唇语识别任务)
相关研究1:STNet
实际上,在SENet这篇论文之前,就有很多对注意力机制的相关研究。首先是STNet,Spatial-Transform Net 空间变换网络,考虑到CNN对平移不变性支持不足,因此设计一个空间变换模块来变换特征图,使CNN可以适应更多变换,例如放大、旋转、平移等,空间变换模块通过将上图中手写的形变的、位置偏离的、有一些噪点的符号图像给他变换到图像中间区域的位置,这样就可以提高对图形变换的鲁棒性。
下图是变换的原理,对特征图通过特征定位(Localisation net)、网格生成(Grid generator)对特征图的像素点进行网格对应,然后采样(Sample)得到变换后的图像,这是主要针对空间维度上考虑,并进行设计的。
相关研究2:Attention ResNet
第二个相关研究就是残差注意力网络的设计,这是一种使用注意力机制的卷积神经网络,可以以端到端的训练方式与最新的前馈网络体系结构相结合,通过堆叠注意力模块构建,这些模块会生成注意力感知功能。如上图左面的部分,网络对给出的特征图进行一系列的另一个网络层的操作,得到一些权重用于注意力机制,然后再与原来的特征图进行乘法操作,从而加强对重要特征部分的关注度;而右面的部分是热气球图像的不同注意类型的示例。我们会发现,天空注意力的mask会减少背景响应,而气球实例的mask会突出显示气球的底部,这也就体现了可以在不同的注意力模块中捕获不同类型的关注点。
这种机制的实现就是通过与残差结构相结合而提出的残差注意力模块,它是采用自下而上、自上而下的前向Attention机制,在原有网络基础上,新增了一个Mask分支来计算权重,提取带有注意力权重的特征图,并进行单独训练,同样,与右分支卷积得到的特征图做乘法运算,增强有意义的特征,而抑制无意义的信息。同时也借鉴了ResNet恒等映射的思想,M(x)为0时,该层处理后的输入就等于T(x),这样就能够很容易的将模型的深度达到很深的层次,并且具有非常好的性能,如下图所示:
相关研究3:CBAM
CBAM:Convolutional block attention module。
我们知道CNN的核心是卷积操作,是通过局部感受野的方式来融合空间和通道维度的特征的,针对空间维度的特征提取方法其实很早在 GoogLeNet 中 Inception 模块中多尺度特征提取再融合这个过程就有所体现了,而针对通道维度的注意力机制才从 SENet 这里开始引入研究。ECCV(欧洲计算机视觉国际会议) 2018年又提出了卷积块的注意力模块,提出了通道维度和空间维度两种方式下进行注意力机制的获得。
以上就是注意力机制比较具有代表性的相关研究。
注意力机制,我理解应该是一种通过提高关注度进而提高效率的方法,可理解为将最有意义的部分给予更多“关注”。
这篇论文提出的SE块其实就引入了注意力机制,着重于通过以计算有效的方式对各个通道之间的关系进行建模来增强网络的表示能力。
2.Squeeze-and-Excitation 结构
本文针对另一个角度——通道维度,进行了研究,引入了新的体系结构单元:Squeeze-and-Excitation Module(SE块),也可以理解为一种机制,其目的是通过显式地建模其卷积特征的通道之间的相互依赖性,从而提高网络特征表示的质量。那么怎么提高呢?就是令网络对传统CNN得到的特征图进行一个“重新校准”,也就是对原来特征图上的特征点进行权重的重新分配,有选择性的加强重要信息特征的权重,同时抑制重要程度不高的信息特征。
上图就是SE Block的结构图,以下是各部分的操作:
- F t r F_{tr} Ftr:传统的一系列卷积变换等。
- F s q F_{sq} Fsq:Squeeze(挤压)操作,将 C × W × H C \times W \times H C×W×H的特征图U的空间维度(高和宽)压缩至 1 × 1 1\times1 1×1,得到 1 × 1 × C 1\times1\times C 1×1×C的特征向量,利用1个像素来表示一个通道,也即压缩成了1个实数,因此它在某种程度上是具有全局感受野的。
- F e x F_{ex} Fex:Excitation(激励)操作,可理解为一种自门控机制,通过学习参数 W W W来为每个特征通道生成一个代表注意力程度的权重值,将嵌入作为输入并产生每个通道对应权重的集合
- F s c a l e F_{scale} Fscale:通过控制scale的大小,把重要的特征增强,不重要的特征减弱,从而让提取的特征指向性更强,得到如图颜色深浅程度不一的特征图(颜色分布代表分配给特征重要程度的不同)
目前来看,提出并设计出一个新的CNN架构是很难的,尤其是前几年涌现出那么多性能还不错的网络模型,通常需要选择许多新的超参数和层配置。相比之下,SE块的结构很简单,并且可以直接在现有的最新技术体系结构中使用,从而可以有效地提高性能,同时在计算上也很轻巧,并且在模型复杂性和计算负担上仅增加了一点点。
2.1 传统transformation( F t r F_{tr} Ftr)
- 输入: X ∈ R H ′ × W ′ × C ′ X\in R^{H^{'}\times W^{'}\times C^{'}} X∈RH′×W′×C′
- 输出: U ∈ R H × W × C U\in R^{H\times W\times C} U∈RH×W×C
- 滤波器集合 V = [ V 1 , V 2 , . . . , V c ] V=[V_1,V_2, ... ,V_c] V=[V1,V2,...,Vc]:前面学习到的滤波器参数, V c V_c Vc表示第c个滤波器参数
- ∗ * ∗:卷积操作
- V c s V_c^s Vcs:二维空间核,作用于输入 X X X对应通道的卷积核
- s s s:输入的个数
对于一个 C × W × H C\times W\times H C×W×H的输入 X X X,在经过 F t r F_{tr} Ftr卷积操作之后,得到的输入 U c U_c Uc(也就是 C C C 个大小为 H × W H\times W H×W 的特征图)。
2.2 Squeeze:Global Information Embedding( F s q F_{sq} Fsq)
这个地方的操作就和传统卷积操作得不一样了,说到我们目前传统的卷积方式,是通过固定大小的卷积核在图像上进行滑动,那么每个学习过特征的卷积核都有一个局部感受野,因此每个卷积单元只能够关注到它所在区域内的空间信息,这样的话,这个感受野区域之外的上下文信息就无法利用,卷积核只是在一个局部空间内进行操作, 输出特征图就很难获得足够的信息来提取通道之间的关系,为缓解这个问题,这里的 F s q F_{sq} Fsq操作就是将包含全局信息的 W × H × C W\times H\times C W×H×C 的特征图直接压缩成一个 1 × 1 × C 1\times 1\times C 1×1×C的特征向量上,即一个具有全局感受野的实数,通过使用按通道的全局平均池化来实现,屏蔽掉空间上的分布信息,更好的利用通道间的相关性。
- 将上一步卷积后的输出 U U U按其空间维度( W × H W\times H W×H)进行空间尺寸缩小
- 输出的维度和输入的特征通道数相匹配(C)
- z c z_c zc:经Squeeze操作对 u c u_c uc进行全局平均池化(GAP)得到的特征信息分布的局部描述算子,可以理解为在该层得到的C个feature map(特征图)的数值分布情况
2.3 Excitation:Adaptive Recalibration( F e x F_{ex} Fex)
再接下来就是Excitation操作,为了获取通道之间的信息,加入Excitation部分,能够完全捕获通道之间的相关性。
为了达到这个目的,我们需要考虑两个条件:
- 第一:它必须是灵活、泛化的(特别是它必须能够学习通道之间的非线性交互关系)
- 第二:它必须学习一个非互斥的关系。
我个人理解的话,感觉第二个条件应该是一种要求非独占的机制,这里很像one-hot向量转换到分布式特征向量的表示过程,这里不进行一次热激活,而允许强调多个通道的不同重要程度,因为我们不光要学习特征,还要学习通道之间信息的相关性。
为了满足这两个条件,这篇论文这里采用两个全连接层+两个激活函数组成的结构输出和输入特征同样数目的权重值,也就是每个特征通道的权重系数。
- 第一个FC层:ReLU
- 第二个FC层:Sigmoid
整个Excitation操作就是:由Squeeze操作得到的特征图 z z z进行一系列非线性映射,最后得到每一个通道对应的权重参数,为每个特征通道生成一个代表注意力程度的权重值,就如下图所示,由原本全为白色的 C C C个通道的特征,得到带有不同深浅程度的颜色的特征向量,也就是不同的重要程度。
上图红色框内即为Excitation操作,流程图下面是该步操作的公式:
- δ \delta δ:ReLU 函数
- σ \sigma σ:Sigmoid 函数
直接看公式的最右边,其实就是输入 z z z 经过两个FC层加激活函数,最终得到权重参数 s s s。
【注】注意这里有一个参数 reduction ratio(缩减率) r r r ,为了限制模型复杂度和辅助泛化,需要在全连接层操作过程中对模型参数量进行控制,具体细节会在后面的图中继续解释。
这个得到的
s
s
s 其实才是本文的核心,才是注意力机制的体现,它是用来刻画输出
U
U
U 中 C 个feature map 的权重,而且这个权重是通过前面这些全连接层和非线性层学习得到的,因此可以进行端到端训练。这两个全连接层的作用就是融合前面Squeeze针对各通道操作得到的特征信息。
2.4 Scale:Reweight( F s c a l e F_{scale} Fscale)
最后是Scale操作,将前面得到的注意力权重加权到每个通道的特征上。论文中采用乘法,逐通道乘以权重系数,在通道维度上引入attention机制,也就是把当前得到的带有注意力的权重参数渲染到原来的特征图 U U U上,得到 X ~ \tilde{X} X~,将原本全为白色的注意力权重变为不同颜色的状态,也就代表着不同程度的重要性,对于某些颜色较深的attention map,神经网络就会重点关注这些特征通道,也即提升对当前任务有用的特征通道,并且抑制对当前任务用处不大的特征通道,这样就对原始特征进行了重标定。
公式
F
s
c
a
l
e
(
u
c
,
s
c
)
F_{scale}(u_c,s_c)
Fscale(uc,sc) 即为特征映射
u
c
u_c
uc和标量
s
c
s_c
sc(这里由于是
1
×
1
1\times1
1×1可看做标量)之间的对应通道乘积操作。
2.5 SE-Inception 和 SE-ResNet
上图展示了SE Block在Inception结构中和ResNet结构中分别进行嵌入后的结构与原始结构的不嵌入的结构。
可以看到 SE Block 是即插即用的,可以将SE块集成到很多网络结构中,比如VGG,甚至是一些更复杂的结构如Inception、ResNet等。
这里详细说一下其中SE块的过程:
-
首先由 Inception结构 或 ResNet结构处理后的 C × W × H C \times W \times H C×W×H特征图开始,通过Squeeze操作对特征图进行全局平均池化(GAP),得到 1 × 1 × C 1\times1\times C 1×1×C 的特征向量
-
紧接着两个 FC 层组成一个 Bottleneck(瓶颈) 结构去建模通道间的相关性:
- 经过第一个FC层,将特征维度降低到原来输入的 1 r \frac{1}{r} r1 ,然后通过ReLU的非线性激活,到达第二个FC层
- 经过第二个FC层,再将特征通道数升回原来的维度,最后经过Sigmoid激活函数,得到带有注意力机制的权重参数
-
最后通过一个 Scale 的操作来将归一化后的权重加权到每个通道的特征上。
以上就是整个详细的过程
这里注意,前面用ReLU激活,后面为什么要改用Sigmoid呢?而且,为什么要用两个FC层而不用一个FC层解决呢?还有,那个特征降维的参数 reduction ratio 的作用是怎样的,这样做有这样几个好处:
- 具有更多的非线性,可以更好地拟合通道间复杂的相关性。
- 极大地减少了参数量和计算量:降维参数 r r r 用于控制第一个FC层中的神经元个数,在论文中也是经过多次对比实验得出 r = 16 r=16 r=16 时,模型得到的效果是最好的。
- 由于Sigmoid函数图像的特点,它的值域在0—1之间,那么这样很符合概率分布的特点,最后能够获得 在0—1 之间归一化的权重参数,这样的话再通过乘法逐通道加权到先前的特征图上,使得有用的信息的注意力更趋向于1,而没有用的信息则更趋向于0,得到最后带有注意力权重的特征图。
3.一系列实验及结果分析
3.1 模型之间的对比实验
如果将SE模块嵌入到 Inception 或 ResNet 等模块中,模型的参数变化导致的计算量的变化我们是需要考虑的,要权衡精度与复杂度。
如上图是在一些主流模型和一些轻量化模型中加入SE块后与原始的一些对比实验结果。其中:
- original:原始论文中所描述的实验结果
- re-implementation:作者重新对原始论文的网络进行重新复现得到的实验结果(这里由于经过多年发展,很多小trick得以用在训练学习中以提升精度,而且有些当年论文中采用的方法现在也许不适用,所以最终实验结果会和原始论文有一些出入)
- SENet:加入SE模块的实验结果
注意下面几个评价指标:
- top-1 error:对一个图片,如果概率最大的是正确答案,才认为正确
- top-5 error:对一个图片,如果概率前五中包含正确答案,即认为正确
- GFLOPs / MFLOPs:用于衡量模型计算复杂度,
1
G
F
L
O
P
s
=
1
0
9
F
L
O
P
s
1GFLOPs=10^9 FLOPs
1GFLOPs=109FLOPs(10亿次浮点运算)、
1
M
F
L
O
P
s
=
1
0
6
F
L
O
P
s
1MFLOPs=10^6 FLOPs
1MFLOPs=106FLOPs
- FLOPS:每秒浮点运算次数,用于衡量硬件设备的运算速度
- FLOPs: 浮点运算数,用于衡量模型计算复杂度
在Image-1K数据集上的实验结果与分析:
- SE-Module均带来了不同程度的性能提升
- 以ResNet-50为例,原始网络在单次前向传播中需要大约 3.86 GFLOPs,而将缩减比率 r 设置为16时,发现SE-ResNet-50需要约 3.87 GFLOPs,相对增加0.26%,但精度提升得很多,实际上接近了需要约 7.58 GFLOPs 的更深的ResNet-101网络的精度
- SE-ResNet-50精度与ResNet-101差不多,但是GFLOPs少了一半
- SE-Module与网络深度带来的提升是互补的
- 非残差结构的模型上(如 VGG、Inception),同样有提升
- 在轻量化模型(如 MobileNet、ShuffleNet)上性能也有提升
3.2 加入SE块后参数量变化分析:以ResNet-50为例
由于SE块中的操作主要的附加参数都来自于Excitation操作中门控机制的两个全连接层,具体来分析,这些FC层的权重参数引入的总数为:
2
r
∑
s
=
1
S
N
s
C
s
2
\frac{2}{r}\sum_{s=1}^{S}N_sC_s^2
r2s=1∑SNsCs2
C
×
C
r
+
C
r
×
C
=
2
C
2
r
C\times \frac{C}{r}+\frac{C}{r}\times C=\frac{2C^2}{r}
C×rC+rC×C=r2C2
- 公式理解:上面公式下面的图是两个FC层中特征维度的变化:
- 一个Block块中的参数量增加为 2 C 2 r \frac{2C^2}{r} r2C2
- 一个Stage阶段中有N个Block
- 一个模型中有S个Stage
- r r r:缩减比率reduction ratio r,控制第一个FC层神经元个数,通常为16,r越大,带来的参数量就越少
- S S S:表示阶段stage,不同stage分开计算,因为不同stage特征通道数是不一样的
- N s N_s Ns:第S个stage有多少个Building Block重复堆叠
- C s C_s Cs:第S个stage的Building Block中的特征图有多少个通道(输出通道维度)
下图是ResNet-50与SE-ResNet-50以及SE-ResNeXt-50之间结构的对比,我们以ResNet-50为例对额外增加的参数进行定量计算,这里 r = 16 r=16 r=16:
对于ResNet-50:
- N 1 = 3 , N 2 = 4 , N 3 = 6 , N 4 = 3 N_1=3,N_2=4,N_3=6,N_4=3 N1=3,N2=4,N3=6,N4=3
- C 1 = 256 , C 2 = 512 , C 3 = 1024 , C 4 = 2048 C_1=256,C_2=512,C_3=1024,C_4=2048 C1=256,C2=512,C3=1024,C4=2048
总的参数增加量为:
2
r
∑
s
=
1
S
N
s
C
s
2
=
2
16
(
3
∗
25
6
2
+
4
∗
51
2
2
+
6
∗
102
4
2
+
3
∗
204
8
2
)
\frac{2}{r}\sum_{s=1}^{S}N_sC_s^2=\frac{2}{16}(3*256^2+4*512^2+6*1024^2+3*2048^2)
r2s=1∑SNsCs2=162(3∗2562+4∗5122+6∗10242+3∗20482)
=
2
16
(
131072
+
1048576
+
6291456
+
12582912
)
=\frac{2}{16}(131072+1048576+6291456+12582912)
=162(131072+1048576+6291456+12582912)
=
2
16
(
20054016
)
=
2
,
506
,
752
≈
2.5
m
i
l
l
i
o
n
=\frac{2}{16}(20054016)=2,506,752\approx2.5million
=162(20054016)=2,506,752≈2.5million
发现和论文中所描述的是一致的。
3.3 SENet与ResNet、ResNeXt、Inception精度对比
整个训练过程中,加入SE块后的 top-1 error 随着epoch的不断增加下降的趋势都是基本一致的,保持一致的性能提升现象。
3.4 多个数据集上的实验
进一步验证SE块的有效性,本文在多个数据集上如CIFAR-10/100、Places 365 和 COCO进行实验,加入SE,性能均获得提升
4.Ablation Study
Ablation Study(消融实验) 是在研究模型有效性中很重要的一种实验研究方法,比如我们提出了某种结构,我们想要知道这个新提出的结构是否有利于最终的性能提升,那就要将去掉该结构的网络与加上该结构的网络所得到的结果进行对比,其实就可以理解为控制变量法,这里又进行了一系列实验,对一些参数及结构的选择等问题进行了实验探究。
4.1 实验一: r r r 的选择
Reduction Ratio, r r r直接影响SE Block的参数量和计算量, r r r越大,参数越少,这里通过下图实验就发现了 r = 16 r=16 r=16时既能保证参数量少的情况下又能得到高精度的性能,得到很好的权衡:
4.2 实验二:Squeeze操作中选择何种池化方式
传统的池化方法一般是 最大池化 和 平均池化,在本文中,经过分别采用Max Pooling 和 Average Pooling 的对照实验,得出 Avg 的效果要比 Max 要好,因而在Squeeze操作中最终采用了全局平均池化(GAP)。
4.3 实验三:FC层激活函数的选择
实验分别采用ReLU、Tanh、Sigmoid函数进行实验对比,发现:
- 用Tanh替换Sigmoid时,性能会下降
- 用ReLU替换Sigmoid时,性能会显著下降
在设计尺度变换的时候,建议尝试Sigmoid激活函数,根据函数特点,0~1的区间可以更好的区分哪部分更重要,哪部分不重要,也就是更好的去界定注意力机制所说的重要程度。
4.4 实验四:SE嵌入阶段的选择
结论:
- 各Stage单独加入SE模块,发现均能提升精度
- 所有Stage均加入模块发现,仍旧能够提升精度
因此,SE模块是普适性的模块,可以嵌入网络的任意阶段。
4.5 实验五:SE嵌入位置的选择
我们发现,针对Residual Block,有四种嵌入方式可以选择:
结论:SE嵌入不同位置,精度差别不是很大,表现出SE模块具有很强的鲁棒性。
4.6 实验六:Squeeze中GAP的重要性
对比实验:
- NoSqueeze:将池化层移除,并将Excitation的FC层替换为 1 × 1 1\times1 1×1卷积来实现特征变换( 1 × 1 1\times1 1×1卷积缺乏对空间维度信息的处理(融合、整合))
结论:
- 缺乏Squeeze,精度会下降
- 全局信息对网络性能的提升起着很大作用
4.7 实验七:Excitation的作用
我们知道,在论文中,Excitation这一操作是从前面得到的带有全局信息的特征图上进行两个FC层的非线性操作,最终得到带有注意力机制的权重参数。这里对这些权重参数进行一系列实验针对不同阶段探究来证明体现注意力机制的有效性。
- 研究方法:通过观察Excitation最终输出的权重向量的分布,看方差的情况,方差越大,表明网络越有选择性。
- 实验方法:观察各个Stage最后一个Block的Excitation的权重分布,观察对于不同类别标签是否有高低不同的分布。
结论1:在前三个Stage中(
N
1
=
3
,
N
2
=
4
,
N
3
=
6
N_1=3,N_2=4,N_3=6
N1=3,N2=4,N3=6)表现出较大的方差,Excitation的输出的确具有特征的选择性。
结论2:在最后一个Stage(
N
4
=
3
N_4=3
N4=3)中的后两个Block的方差较小,因此这里可以认为已经没有了注意力的功能,可以剔除掉SE Block,以节省参数量。
总的来说,我们会发现,在靠前一些的层,如 SE_2_3、SE_3_4看出,不同类别在靠前层的时候,分布基本是一样的、重合的,这表明在网络早期的阶段,通道的特征信息是比较低级的,在不同类别间是共享的;而越往后会发现:不同类别间的分布开始有些不一样了,越靠后的特征,越具有类别差异,即特征开始有针对性的偏向了某个类别,一直到SE_5_1这个阶段为止,到了后面 SE_5_2 和 SE_5_3 阶段,这个时候就与之前的分布不一样了,各通道之间的差异性越来越小,就不再具有了注意力。
所以总结成一句话就是:越靠前的层的特征越普遍,越靠后则越特殊。
另外,文章又从另一角度,对同一类别中的分布差异进行探究:
对同一类别间样本分布进行统计,并观察均值和方差,会发现:
- 同一类别间的和不同类别的分布趋势变化是一致的
- 最后一个block发现std很大,表明网络学会利用SE block来提高其区分性能
从上图中我们可以看出类间和类内中的分布都是随着网络深度的不断加深变得更有分化的趋势。随着网络变深,方差一直在变大。在最后的一个Stage,类内的方差较大,也表明了网络是有选择性的。
总结
本文整体上其实没有提出一个新的网络模型,而是相当于提出了一个即插即用的高性能小插件,所提出的SE模块能够生成通道维度的权重向量,用于特征“重构”,实现强调重要特征,忽略不重要特征,增强模型表征能力,提高模型性能的目的。这里也大概总结几个要点:
- 如今在网络模型的框架发展已经基本固定时,可考虑从细节入手,比如加个额外的模块结构等等。
- 注意力机制在CV领域中,其实还是使计算资源偏向那些有价值有意义的图像特征,进而高效得提取重要性高的特征,减少参数,加快计算,提升分类、检测、分割等任务的精度。
- 论文中设计了一系列实验来验证SE Block的有效性,特别是Ablation Study(消融研究)方法十分值得借鉴学习,就当是控制变量法来理解就可以。
- 是否可以考虑对不同层的Reduction ratio r r r设置不一样的值,或者考虑设置更优的Reduction ratio r r r,例如用RNN来自动搜索。
- 一个描述实验结果的小trick吧。多个对比实验的精度没有明显差异时,可考虑从另外一个角度描述。比如说这里说SE有很好的鲁棒性。
- 越靠前的层的特征越普遍,越靠后则越特殊,比如前面的层学习到边缘、颜色块儿等特征,后面学习到物体的整体特征。
- 训练技巧:为了让训练和测试保持一致,在最后几个epoch的时候,冻结住BN层的参数。
- 论文中得到的一个训练技巧:Batch size越大,学习率也可以越大,但普通的我们也许没有那么大的GPU可以满足,所以该结论仅为经验而已,如果哪天有条件了可以尝试一下。