Squeeze-and-Excitation Networks

Paper

近些年来,卷积神经网络在很多领域都取得了巨大的突破。而卷积核作为卷积神经网络的核心,通常被看做是在局部感受野上,将空间上(spatial)的信息和特征维度上(channel-wise)的信息进行聚合的信息聚合体。卷积神经网络由一系列卷积层、非线性层和下采样层构成,这样它们能够从全局感受野上去捕获图像的特征来进行图像的描述。

然而去学到一个性能非常强劲的网络是相当困难的,其难点来自很多方面。最近很多工作呗提出来从空间维度层面来提升网络的性能,如Inception结构中嵌入了多尺度信息,聚合多种不同感受野上的特征来获得性能增益;在Inside-Outside网络中考虑了空间中的上下文信息;还有将Attention机制引入到空间维度上等等。这些工作都获得了相当不错的成果。

可以看到,已经有很多工作在空间维度上来提升网络的性能。那么很自然的想到,网络是否可以从其他层面来考虑去提升性能,比如考虑特征通道之间的关系?论文作者的工作就是基于这一点提出了Squeeze-and-Excitation Networks(简称SEnet)。在提出的结构中,Squeeze和Excitation是两个非常关键的操作,所以作者以此来命名。作者的动机是希望显示地建模特征通道之间的相互依赖关系。另外,并不打算引入一个新的空间维度来进行特征通道间的融合,而是采用了一种全新的“特征重标定”策略。具体来说,就是通过学习的方式来自动获取到每个通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征。

上图是作者提出的SE模块的示意图。给定一个输入X,其特征通道数为c1,通过一系列卷积等一般变换后得到一个特征通道数为c2的特征。与传统的CNN不一样的是,接下来通过三个操作来重标定前面得到的特征。

首先试Squeeze操作,顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个实数,这个实数某种程度上具全局的感受野,并且输出的维度和输入的特征通道数相匹配。它表征着在特征通道上响应的全局分布,而且使得靠近输入的层也可以获得全局的感受野,这一点在很多任务中是非常有用的。

其次是Excitation操作,它是一个类似于循环神经网络中门的机制。通过参数来为每个特征通道生成权重,其中参数被学习用来显示地建模特征通道间的相关性。

最后是一个Reweight的操作,我们将Excitation的输出的权重看做是经过特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定。

上左图是将SE模块嵌入到Inception结构的一个示例。方框旁边的维度信息代表改成的输出。这里我们使用global average pooling作为Squeeze操作。紧接着两个Fully Connected层组成一个Bottleneck结构去建模通道间的相关性,并输出和输入特征同样数目的权重。首先将特征维度降低到输入的1/16,然后经过ReLu激活后再通过一个Fully Connected层升回到原来的维度。这样比直接用一个Fully Connected层的好处在于1).具有更多的非线性,可以更好的拟合通道间复杂的相关性;2).极大的减少了参数量和计算量。然后通过sigmoid的门获得0~1之间归一化的权重,最后通过一个Scale的操作来将归一化后的权重加权到每个通道的特征上。

除此之外,SE模块还可以嵌入到含有skip-connections的模块中。上右图是将SE嵌入到ResNet模块中的例子,操作过程基本和SE-Inception一样,只不过是在Addition前对分支上的Residual的特征进行了重标定。如果对Addition后主分支上的特征进行重标定,由于在主干上存在0~1的scale操作,在网络较深BP优化时就会在靠近输入层容易出现梯度消散的情况,导致模型难以优化。

目前大多数的主流网络都是基于这两种类似的单元通过repeat方式叠加来构造的。由此可见,SE模块可以嵌入到现在几乎所有的网络结构中。通过在原始网络结构中的building block单元中嵌入SE模块,我们可以获得不同种类的SENet。如SE-BN-Inception,SE-ResNet等

从上面的介绍中可以发现,SENet构造非常简单,而且很容易被部署,不需要引入新的函数或者层。除此之外,它还在模型和计算复杂度上具有良好的特性。拿ResNet-50和SE ResNet-50对比举例来说,SE ResNet-50相对于ResNet-50有着10%模型参数的增长。额外的模型参数都存在于Bottleneck设计的两个Fully Connected中,由于ResNet结构中最后一个stage的特征通道数目为2048,导致模型参数有着较大的增长,实验发现移除掉最后一个stage中3个build block上的SE设定,可以将10%参数量的增长减少到2%,此时模型的精度几乎没有损失。

另外,由于在现有的GPU实现中,都没有对global pooling和较小计算量的Fully Connected进行优化,这导致了在GPU上的运行时间SE-ResNet-50相对于ResNet-50有着约10%的增长。尽管如此,其理论增长的额外计算量仅仅不到1%,这与其在CPU运行时间上的增长相匹配(~2%)。可以看出,在现有网络架构中嵌入SE模块而导致额外的参数和计算量的增长微乎其微。

接下来,为了验证SENets的有效性,我们将在ImageNet数据集上进行实验,并从两个方面来进行论证。一个是性能的增益Vs.网络的深度;另一个是将SE嵌入到现有的不同网络中进行结果对比。另外也会展示在ImageNet竞赛中的结果。

首先,来看一下网络的深度对SE的影响。上表分别展示了ResNet-50,ResNet-101,ResNet-152和嵌入SE模型的结果。第一栏Original是原作者实现的结果,为了进行公平的比较,作者团队在ROCS上重新进行了实验得到Our re-implementation的结果(ps.作者团队实现的精度往往比元paper要高一些)。最后一栏SE-module是指嵌入了SE模块的结果,它的训练参数和第二栏Our re-implementation一致。括号中的红色数值是指相对于Our re-implementation的精度提升的幅值。

从上表可以看出,SE-ResNets在各种深度上都远远超过了其对应的没有SE的结构的版本的精度,这说明无论网络的深度如何,SE模块都能够给网络带来性能上的增益。值得一提的是,SE-ResNet-50可以达到和ResNet-101;更甚,SE-ResNet-101远远地超过了更深的ResNet-152。

该论文的总体技术思路

作者提出了一种新的网络模型设计角度——即通道关系,从这个角度出发作者提出了一种新的网络结构单元,作者称之为“Squeeze-and-Excitation”网络块。作者的定位是通过精确的建模卷积特征各个通道之间的作用关系来改善网络模型的表达能力。为了达到这个期望,作者提出了一种能够让网络模型对特征进行校准的机制,使网络从全局信息出发来选择性的放大有价值的特征通道并且抑制无用的特征通道。

作者构建SE网络模块进行特征调整的过程如下图1所示,特征U首先通过一个Squeeze操作,将特征图聚合获得维度为W*H的特征图以此作为特征描述器,经过池化操作将各个特征图的全局感受野的空间信息置入到特征图中这个特征图成为descriptor(描述器),而后面的网络层就能够根据这个descriptor特征图获得全局感受野的信息--这就是整个Squeeze操作。随后再接着进行Excitation操作,在Excitation操作中,每层卷积操作之后都接着一个样例特化(sample-specific)激活函数,基于通道之间的依赖关系对每个通道过一种筛选机制(self-gating-mechanism)操作,以此来对各个通道进行权值评比(excitation),特征图组U在经过这种筛选机制对feature maps中的特征图进行权值评估(excitation)后就是SE网络模块的最终输出了,之后在将这些特征图组作为后续网络层的输入。整个SE网络模型通过不断堆叠SE网络模块进行构造,SE网络模块能够在一个网络模型中的任意深度位置进行插入和替换,SE网络模块可以随意在网络层任意插入而自动适应网络模型的需求。SE网络模块能够以一种未知的方式(因为现在神经网络的具体原理机制还是黑匣子)对特征组进行权值奖惩,加强了所在位置的特征图组的表达能力,在之后的网络层,SE网络模块不断的特化,并且以一个高度特化类别的方式在所在不同深度的SE网络模块的输入进行相应,因此在整个网络模型中,特征组图的调整的优点能够通过SE网络模块不断地累计。

注意力与门控机制(Attention and gating mechanisms)

广泛的讲,注意力(Attention)可以被看作一个工具,它用于将可用处理资源的分配偏向一个输入信号量中的最有价值的信息进行分配,注意力(Attention)机制在神经元科学中是一个具有相当的研究历史的领域,在近年来的研究工作中,在图像标题和唇语领域注意力(Attention)机制被应用于高效的聚合多模块数据的应用,这也展现了它的可应用性,在这些应用中,它一般被用于多个模块之间在一层或多层表示的更高维抽象信息表示的调整。在门机制的研究领域中,Highway网络使用了一种门机制来调节shortcut conection,以帮助非常深的网络模型进行学习。SE网络模块的提出就是一种轻量级的门机制,针对特征图通道中的关系以一种高效的计算方式进行建模并在网络中被设计用于增强网络模块的表达能力。

压缩奖惩网络模块(Squeeze-Excitation Blocks)

Squeeze-and-Excitation网络模块是一种能够对任意输入信息:进行构造的运算单元。公式中的Ftr表示标准的卷积操作符,V=[v1,v2,....,vc]表示学习的卷积核集合。vc表示第c个卷积核参数。将卷积操作Ftr的输出表示为U=[u1,u2,....,uc],此处整个式子计算为:

此处*操作符表示卷积操作(为了简化符号表示,此处省略了偏置项参数),式中是一个二维空间卷积,vc表示他的每个通道作用于X的对应的通道特征图。因为如上所示的输出是由所有通道之和产生的,通道之间的依赖关系隐藏在vc中,但这些依赖关系也和卷积核捕捉的特征图组空间关系相纠缠。作者的目标是确保网络能够利用增加网络本身对有价值信息的敏感性以使得这些有价值的信息在之后的网络层中能够得到利用,而没有什么用的特征信息则被舍弃。为了达到对通道之间的依赖关系进行精确建模以校准卷积核操作这个期望,作者提出的方案分为两步,分别是Squeeze和Excitation。

(1)Squeeze:Globa Information Embedding

为了解决利用通道之间的依赖关系的问题,作者首先考虑了在输出特征组图中各个通道的信号量本身的问题,由于每个学习好的卷积核都是以一个局部感受野的方式进行卷积因此在经过SE网络模块转换之后的输出U的各个数据单元不能利用数据单元以外的纹理信息。这个问题在较浅的网络层的时候感受野还很小的时候最为严重。为了解决这个问题,作者提出了压缩(Squeeze)全局空间信息成一个通道描述器(个人认为这里的意思就是将一个通道特征图中的整个图中位置的信息相融合,避免对通道进行权值评估时由于卷积核尺寸问题造成的局部感受野提取信息范围太小参考信息量不足使得评估不准确),这个squeeze过程通过一个全局平均池化层来实现以产生通道的统计信息,统计信息是通过缩放U的尺度W*H产生的。此处z的第c个元素计算过程如下图所示:

输入U可以被认为是一组局部描述器集合对整幅通道图的描述信息,为了简化运算,作者使用了全局平均池化替代更复杂的方法。

(2)奖惩:自适应校准(Excutation:Adaptive Recalibration)

在上一步Squeeze操作获得的信息的基础上,作者以捕捉通道的依赖关系为目的进行了第二步操作,为了达到期望,第二步的函数应该满足两个标准:首先,它必须灵活(它尤其应该能够捕捉通道之间的非线性相互作用关系),其次它必须能够在多个通道在经过多次激活函数情况下学习多个通道之间非互斥关系。为了满足这些标准,作者借助了sigmoid激活函数使用了一种简单的门机制进行操作,对数据的具体运算如下式所示:

式中δ是进行线性激活函数操作,以及。为了防止模型变得复杂并且考虑到泛化因素,作者围绕非线性设置了两层全连接层(其实无所谓全连接还是卷积层,因为这里特征图的空间维度经过Global-Average-Pooling层已经是1*1了)来作为瓶颈对门机制进行参数化。最终整个网络模块的输出在经过rescaling操作。

Squeeze-and-Excitation Networks的更多相关文章

  1. InsightFace源码以及pre-train模型以及使用

    一下摘自:https://blog.csdn.net/Fire_Light_/article/details/79602705 论文链接:ArcFace: Additive Angular Margi ...

  2. 论文笔记-Squeeze-and-Excitation Networks

    作者提出为了增强网络的表达能力,现有的工作显示了加强空间编码的作用.在这篇论文里面,作者重点关注channel上的信息,提出了"Squeeze-and-Excitation"(SE ...

  3. 《Self-Attention Generative Adversarial Networks》里的注意力计算

    前天看了 criss-cross 里的注意力模型  仔细理解了  在: https://www.cnblogs.com/yjphhw/p/10750797.html 今天又看了一个注意力模型 < ...

  4. SENet(Squeeze-and-Excitation Networks)算法笔记---通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征

    Momenta详解ImageNet 2017夺冠架构SENet 转自机器之心专栏 作者:胡杰 本届 CVPR 2017大会上出现了很多值得关注的精彩论文,国内自动驾驶创业公司 Momenta 联合机器 ...

  5. 论文阅读笔记六十:Squeeze-and-Excitation Networks(SENet CVPR2017)

    论文原址:https://arxiv.org/abs/1709.01507 github:https://github.com/hujie-frank/SENet 摘要 卷积网络的关键构件是卷积操作, ...

  6. Deep learning_CNN_Review:A Survey of the Recent Architectures of Deep Convolutional Neural Networks——2019

    CNN综述文章 的翻译 [2019 CVPR] A Survey of the Recent Architectures of Deep Convolutional Neural Networks 翻 ...

  7. [论文理解] Squeeze-and-Excitation Networks

    Squeeze-and-Excitation Networks 简介 SENet提出了一种更好的特征表示结构,通过支路结构学习作用到input上更好的表示feature.结构上是使用一个支路去学习如何 ...

  8. 深度学习论文翻译解析(十六):Squeeze-and-Excitation Networks

    论文标题:Squeeze-and-Excitation Networks 论文作者:Jie Hu  Li Shen Gang Sun 论文地址:https://openaccess.thecvf.co ...

  9. Effective Tensorflow[转]

    Effective TensorFlow Table of Contents TensorFlow Basics Understanding static and dynamic shapes Sco ...

随机推荐

  1. Spring Cloud在国内中小型公司用的起来吗?

    转自:http://www.cnblogs.com/ityouknow/p/7508306.html 今天吃完饭休息的时候瞎逛知乎,突然看到这个一个问题Spring Cloud在国内中小型公司能用起来 ...

  2. _T("D:\\122.txt")【字符集问题】或【类型转换问题】

    项目->属性->常规->字符集->使用多字节字符集!时用_T("Filename"), 貌似不是字符集的问题!  1.使用替换,,,后, _T(" ...

  3. Java web url 规范

    设计URI应该遵循的原则 URI是网站UI的一部分,因此,可用的网站应该满足这些URL要求 简单,好记的域名 简短(short)的URI 容易录入的URI URI能反应站点的结构 URI是可以被用户猜 ...

  4. Socket无连接简单实例

    使用无连接的套接字,我们能够在自我包含的数据包里发送消息,采用独立的读函数读取消息,读取的消息是使用独立的发送函数发送的.但是UDP数据包不能保证可靠传输,存在许多的因素,比如网络繁忙等等,都有可能阻 ...

  5. osgearth将视点绑定到一个节点上

    _manip->getSettings()->setTetherMode(osgEarth::Util::EarthManipulator:: TETHER_CENTER ); //设置_ ...

  6. CentOS安装最新版的火狐

    1. 下载最新版的火狐 Firefox-latest.tar.bz2 2.yum -y remove firefox 3.rm -rf /usr/lib/firefox      ##64位的机器为l ...

  7. RecyclerView的通用适配器,和滚动时不加载图片的封装

    对于RecyclerView我们需要使用RecyclerAdapter,使用方式与ListViewAdapter类似,具体代码大家可以在网上搜索,这里就只教大家使用封装后的简洁RecyclerAdap ...

  8. C语言分支结构之if else语句

    前面我们看到的代码都是顺序执行的,也就是先执行第一条语句,然后是第二条.第三条……一直到最后一条语句,这称为顺序结构. 但是对于很多情况,顺序结构的代码是远远不够的,比如一个程序限制了只能成年人使用, ...

  9. C++中的抽象基类示例

    抽象基类(abstract base class,ABC)例子:圆与椭圆.建立一个基类BaseEllipse,建立它的恋歌继承了Ellipse和Circle.ellipse.h #ifndef ELL ...

  10. 《C++ Primer Plus》12.6 复习各种(类和动态内存分配的)技术 笔记

    12.6.1 重载<<运算符要重新定义<<运算符,以便将它和cout一起用来显示对象的内容,请定义下面的友元运算符函数:ostream & operator<&l ...