当前位置:   article > 正文

SE-Net整理阅读

se-net

写在前面

最近算是好不容易抽时间把这SE-Net论文看完了,总体来说收获还是很多的,以下是自己的一些理解和整理。


SE-Net的整体思路

  1. 引入了注意力的思想,即对于每个通道,用一个权重来表示该通道在下一阶段的重要性;
  2. 做成了一个插入式的模块,十分方便与各个基础网络的结合。

 

Introduction部分

这部分作者总结了CNN神经网络效果显著的原因:原文如下:

At each convolutional layer in the network, a collection of filters expresses neighbourhood spatial connectivity patterns along input channels—fusing spatial and channel-wise information together within local receptive fields. By interleaving a series of convolutional layers with non-linear activation functions and downsam- pling operators, CNNs are able to produce robust represen- tations that capture hierarchical patterns and attain global theoretical receptive fields. Recent research has shown that these representations can be strengthened by integrating learning mechanisms into the network that help capture spatial correlations between features. One such approach, popularised by the Inception family of architectures [5], [6], incorporates multi-scale processes into network modules to achieve improved performance. Further work has sought to better model spatial dependencies [7], [8] and incorporate spatial attention into the structure of the network [9].

总结起来如下:

  1. 滤波器(filter)通过局部的感受野将特征图的空间(spatial)和深度(depth-wise)上的信息进行融合;
  2. 通过一系列的卷积层来学习层级的样式(pattern)和全局的感受野;
  3. 通过将学习机制整合到网络中可以增强这些表达能力,这有助于捕获特征之间的空间相关性;

SE模块

论文提出了一个SE(Squeeze-and-Excitation)模块,该模块主要的功能是对各个通道进行权重的分配,就像Attention一样,帮助网络把重要的特征信息学习到。
整体的框图如下:
在这里插入图片描述
其中X指输入,U是主干网络每一层卷积层的输出, X ~ \tilde{X} X~表示结合了权重之后最终的输出。
 

Squeeze操作

该操作是利用全局的池化,将大小为 C × H × W C×H×W C×H×W的输入特征综合为 C × 1 × 1 C×1×1 C×1×1的特征描述(description),对于一张特征图来说,计算如下(后面作者对比了到底是选择平均池化还是最大池化)。
在这里插入图片描述

 

Excitation操作

经过上述的Squeeze操作后,网络仅仅得到了一个全局描述,这个描述并不能作为该通道的权重。
因此作者提出Excitation操作,该操作主要的目的是比较全面的获取到通道级别的依赖。同时应该满足灵活和能够学习非互斥强调的能力。
基于上述的目的和要求,该操作包含了两个全连接层和Sigmoid激活函数。全连接层能够很好的融合全部的输入特征信息,而Sigmoid函数也能够很好的将输入映射到0~1区间。
该操作的公式如下:
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))
其中z为Squeeze操作获得的全局描述, δ \delta δ表示Relu函数,保证输出为正, W 1 , W 2 W_1, W_2 W1,W2为两个全连接层,其中 W 1 ∈ R C r × C W_1 \in \R^{\frac{C}{r}×C} W1RrC×C, W 2 ∈ R C × C r W_2 \in \R^{C×\frac{C}{r}} W2RC×rC,其中 r r r为缩放参数,主要用于减轻网络的计算复杂度和参数量。后面作者也对该参数进行了一些尝试。

 

融合操作

网络经过上述Excitation之后,就获得了输入特征图U的各个通道的权重,剩下的就是将权重和原始的特征融合了,就是简单的乘法运算:
X ~ = F s c a l e ( u c , S c ) = S c ∗ U c \tilde{X}=F_{scale}(u_c,S_c)=S_c *U_c X~=Fscale(uc,Sc)=ScUc

实验部分

作者最后将SE模块添加在一些现有的主干网络中进行了实验,实验效果上看还是非常好的,不愧是2017的冠军啊!
下图是SE模块在ResNet中的添加方式:
在这里插入图片描述

下面是一些对比结果
在这里插入图片描述
可以看到效果非常的显著,不过也可以看到,在把模块放在轻量级网络中的时候,Parameter的数量增加的还是挺多的,个人感觉主要因为轻量级网络中的层数比较多,因此模块插入的数量也比较多,但是精度上确实提升了很多。

关于增加的参数量和计算量

因为整个模块仅仅添加了两个全连接层,所以参数的增加很明显只有
P a r a m = 2 r ∑ s = 1 S N s C s 2 Param = \frac{2}{r} \sum_{s=1}^S N_s C_s^2 Param=r2s=1SNsCs2
其中r为缩放参数, N s N_s Ns为s层重复的次数,C_s为s层的通道数。
作者在论文中并没有对增加的计算量进行量化,仅仅给出了一些数据,其中个差别体现在上面的对比表中,整体来说增加的计算负担不是很高。

 

超参数部分

放缩系数 r r r

对于该系数的选择,作者使用SE-ResNet-50做了实验,数据如下:
在这里插入图片描述
可以看到选择16算是精度和复杂度之间的平衡。

 

Squeeze操作

作者对比了平均池化和最大池化,数据如下,发现平均池化是比较合适的。
在这里插入图片描述
 

Excitation操作

作者对比了不同的激活函数,最终选择Sigmoid函数作为激活函数。
在这里插入图片描述
 

SE模块的添加在网络的不同层级

作者依旧以ResNet为实验对象,发现在每个层级添加SE模块的表现是最好的。
在这里插入图片描述
 

SE模块的放置位置

作者同时做了一些SE模块放置位置不同的实验,测试如下
在这里插入图片描述
在这里插入图片描述
同时,作者还做了一个实验,就是将SE模块放在bottleneck结构中的3×3卷积之后,结果如下:
在这里插入图片描述
整体上看,由于bottleneck结构中的通道数比较少,因此参数量减少了很多,但是对与精度的提升确实没有带来很大的提升。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/290938
推荐阅读
相关标签
  

闽ICP备14008679号