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=vcX=s=1Cvcsxs(1)
其中 ∗ * 代表卷积操作,实际上,上述 X X X U U U的过程在代码里就对应两层卷积,卷积核的尺寸就是 x ∗ y ∗ C ′ ∗ C x*y*C'*C xyCC。因为卷积的过程已经对原图的通道进行了加和处理,所以最终得到的特征图既包含空间信息,也包含通道依赖。

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=1Hj=1Wuc(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 rCC C ∗ C r C*\frac{C}{r} CrC用于先降维后升维, δ \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=1SNsCs2(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的作用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值