Squeeze-and-Excitation Networks
1 介绍
CNN网络的表达能力可以被加强,这可能需要结合一些学习的机制。例如Inception架构结合了多尺度处理。而最近的工作想要对空间依赖更好的建模,在网络里引入空间注意力。
和空间依赖不同,本文搞了个SE模块,主要想对卷积特征图,不同通道间的依赖进行建模,然后提高表达能力。为了这个目的,本文提出了一种可以加强有用特征,抑制无用信息的机制,也就是特征的重新校准。
2 相关工作
主要看SE做了什么方面的工作,包括显式建模通道间的关系,不引入新的超参数,有轻量门机制,增强了网络的表达能力。
进一步理解的话,实际上SE完成了一种学习方法,学什么东西的呢?学的是不同通道的重要程度,并且用一个可观测的数字-权重-来表达出来,最后返回到原始各个通道上。
3 SE Block
这里整个Block结构如下所示:
3.1 具体结构
实际上分为三步:
1)利用
F
t
r
F_{tr}
Ftr将原始尺寸的图片
X
X
X变为特征图
U
U
U,目的是为了在
U
U
U中体现通道之间的依赖性,以便后续处理。
F
t
r
F_{tr}
Ftr在论文中的公式体现如下:
u
c
=
v
c
∗
X
=
∑
s
=
1
C
′
v
c
s
∗
x
s
(1)
u_c = v_c*X=\sum_{s=1}^{C'}{v_c^s*x^s}\tag1
uc=vc∗X=s=1∑C′vcs∗xs(1)
其中
∗
*
∗代表卷积操作,实际上,上述
X
X
X到
U
U
U的过程在代码里就对应两层卷积,卷积核的尺寸就是
x
∗
y
∗
C
′
∗
C
x*y*C'*C
x∗y∗C′∗C。因为卷积的过程已经对原图的通道进行了加和处理,所以最终得到的特征图既包含空间信息,也包含通道依赖。
2)为了从上述特征图中单独剥离通道依赖信息,产生通道描述子,进行了下一步squeeze操作。这部操作文中简单的使用了计算均值的方式:
z
c
=
F
s
q
(
u
c
)
=
1
H
×
W
∑
i
=
1
H
∑
j
=
1
W
u
c
(
i
,
j
)
(2)
z_c=F_{sq}(u_c)=\frac{1}{H×W}\sum_{i=1}^{H}\sum_{j=1}^{W}u_c(i,j)\tag2
zc=Fsq(uc)=H×W1i=1∑Hj=1∑Wuc(i,j)(2)
3)第三步是比较关键的重校正部分,简单来说就是通过学习卷积核权重参数,最后获得通道的重要性,同时赋予通道权重。这里要满足两个条件:必须灵活,学到非线性条件;必须学一个非互斥的关系,也就是与one-hot相反,不是只能存在某个通道,其他通道就没用了,这里允许强调多个通道的重要性。根据这两条,最终的数学形式如下:
s
=
F
c
x
(
z
,
W
)
=
σ
(
W
2
δ
(
W
1
z
)
)
(3)
s=F_{cx}(z,W)=\sigma(W_2\delta(W_1z))\tag3
s=Fcx(z,W)=σ(W2δ(W1z))(3)
其中
W
1
W_1
W1,
W
2
W_2
W2是两个全连接层,尺寸分别为
C
r
∗
C
\frac{C}{r}*C
rC∗C和
C
∗
C
r
C*\frac{C}{r}
C∗rC用于先降维后升维,
δ
\delta
δ代表Relu,
σ
\sigma
σ代表sigmoid函数。
经过上述三步后得到的s即每个通道对应的权重,块的最终输出由
s
s
s和特征图
U
U
U决定:
x
c
~
=
F
s
c
a
l
e
(
u
c
,
s
c
)
=
s
c
u
c
(4)
\widetilde{x_c}=F_{scale}(u_c,s_c)=s_cu_c\tag4
xc
=Fscale(uc,sc)=scuc(4)
其中,
s
c
s_c
sc为常数,
x
c
~
\widetilde{x_c}
xc
为单通道的输出结果。
整个Block结构,本质上引入了基于输入的动态特性,不局限于局部感受野。
3.2 实例化
文章将SE模块加入Inception和Resnet两个基础结构中构建SENets(下图),作者说在很多网络上都进行了相似的操作,细节描述只给了ResNet-50和ResNeXt-50的。
在后文6.5也进行了ablation实验(不知道怎么翻译合适,就是类似控制变量法)进而观察在不同位置添加SE Block对网络表现的影响。
4 模型复杂度
设置了一堆参数,总结来说:
1)加了SE模块的ResNet-50计算量比原网络多了0.26%,一次前向反向传播时间为209ms,原网络为190ms。效果优于ResNet-101原始网络。
2)参数主要来源于FC层,额外参数量为:
2
r
∑
s
=
1
S
N
s
C
s
2
(5)
\frac{2}{r}\sum_{s=1}^SN_sC_s^2\tag5
r2s=1∑SNsCs2(5)
其中,S表示阶段数(我理解是上式中
C
C
C参数不同的块有多少组),
N
s
N_s
Ns表示上述每个组里面的块的数量(这一组块的
C
C
C应该都相同),
C
s
C_s
Cs表示输出通道数。
最终计算SE-ResNet-50额外引入了250w左右的参数,相比原始增加了约10%。这些参数大多数来自最后一阶段,这一阶段对应的通道维数最大。
后文作者会对此进行讨论,说明移除这一阶段的SE Block可以使参数量大幅减少,而性能不会降低很多。
5 实验
主要比较在具体任务中,SE Block的作用。
这部分主要就是原文的表2-9,图4。大概就是表达SE加的好,而且在各种task,backbone和datasets上的表现具有一致性。
最后的表9表明作者的网络在某些条件下并不能达到SOTA,但是或许可以通过和已经SOTA的网络结合来进一步提高效果,文章称SE具有互补性。
6 Ablation
这部分对应原文的表格是10-15。
6.1 r
这里的r是3.1出现的超参数,主要能够调节模型复杂度和精确度的平衡性。
对比后的结论是,取得特别小会造成模型参数量大幅上升,而对精度的收益并不大。最后取16。
6.2 squeeze
这部分操作只尝试了平均池化和最大池化,因为效果不错也没换别的,平均池化效果稍微好一点。
6.3 excition
这部分非线性操作尝试了Relu,tanh,sigmoid,Relu明显效果很差,而sigmoid效果很好,作者认为这部分的选择对SE的效果影响较大。
6.4 stage
这里的stage可以指公式(5)中的s,在不同阶段加SE都会产生不同程度的改进,且不同阶段间的作用是互补的。
6.5 SE Block组合方法
主要对比了三种加SE的方式(在ResNet里):
1)残差前SE
2)Relu后SE
3)SE和残差并行
4)把SE放到残差单元的3*3卷积后面
如下图所示:
只有上图(d)这种效果变差,其他都持平或改善。
7 SE的作用
本来以为这部分没什么用,但是看到了其他笔记下面的评论其实有一部分问题在这里有说,所以还是记录一下。
7.1 squeeze的作用
这部分做了一个叫做NoSqueeze的模块,但实际上squeeze和excition都动了,不仅移除了池化层,而且把全连接FC换成了1*1的卷积。
这两个操作就只能让每个通道含有局部输出的信息,不能代表全局空间,也就是没有考虑全局感受野。
7.2 excition的作用
这部分是取了四类图片采样,每次在sigmoid激活后看一下输出,也就是归一化后的通道权重。详细结果看下面这个图。
观察到在靠前的阶段,图片通道的激活输出还很接近。
在稍微后一点阶段,不同类别的激活输出逐渐可以看出区别来。(重校准)
但是在最后的阶段,也就是5_2开始,突然呈现饱和状态,而后激活输出的分布基本相同,只是在尺度上略有不同。
这里印证了上面第四章所说的,最后一阶段的Block并不具备重校准的作用,删掉可以减少大量参数,性能不会产生很多影响。
最后这部分我是觉得没太理解的。
最后如果SE就停在5_2会怎么样呢,还能不能分类了呢,在5_3只是尺度不同,用这层做权重最后也能成功吗?如果网络变深了,又怎么保证一定是最后一层SE会发生这种现象呢,如果在中间层就开始饱和无法重校准,那后面层就全不加SE了?
而且为什么会出现倾向饱和的这个趋势也很不解,总之最后这步实验感觉还要再查点别的资料看看。
- excition的作用