[Attention]SE-Net论文讲解

[Attention]SE-Net论⽂讲解
转⾃两篇解析,第⼀篇作者本⼈的解析,第⼆篇某位博主的解析
常立欣⽂章1:徐玉凤
编者按:Momenta Paper Reading致⼒于打造⼀个⾃动驾驶学术前沿知识的分享沟通平台,深⼊浅出让你轻松读懂AI。本次我们分享的编者按:
主题是ImageNet冠军模型SENet。
论⽂链接:
GitHub:
在CVPR 2018上,有⼀篇来⾃Momenta的⾼级研发⼯程师胡杰及其所在WMW团队的⽂章——获得ImageNet冠军的模型SENet。以下是对胡杰本⼈关于⽂章分享的整理。
我是Momenta⾼级研发⼯程师胡杰,很⾼兴可以和⼤家分享我们的SENet。借助我们提出 SENet,我们团队(WMW)以极⼤的优势获得了最后⼀届ImageNet 2017竞赛 Image Classification任务的冠军。下
⾯我将介绍我们提出的SENet,论⽂和代码会在公布在arXiv上,欢迎⼤家follow我们的⼯作,并给出宝贵的建议和意见。
我们从最基本的卷积操作开始说起。近些年来,卷积神经⽹络在很多领域上都取得了巨⼤的突破。⽽卷积核作为卷积神经⽹络的核⼼,通常被看做是在局部感受野上,将空间上(spatial)的信息和特征维度上(channel-wise)的信息进⾏聚合的信息聚合体。卷积神经⽹络由⼀系列卷积层、⾮线性层和下采样层构成,这样它们能够从全局感受野上去捕获图像的特征来进⾏图像的描述。
然⽽去学到⼀个性能⾮常强劲的⽹络是相当困难的,其难点来⾃于很多⽅⾯。最近很多⼯作被提出来从空间维度层⾯来提升⽹络的性能,如Inception结构中嵌⼊了多尺度信息,聚合多种不同感受野上的特征来获得性能增益;在Inside-Outside⽹络中考虑了空间中的上下⽂信息;还有将Attention机制引⼊到空间维度上等等。这些⼯作都获得了相当不错的成果。
我们可以看到,已经有很多⼯作在空间维度上来提升⽹络的性能。那么很⾃然想到,⽹络是否可以从其他层⾯来考虑去提升性能,⽐如考虑
SENet)。在我们提出的结构
Squeeze-and-Excitation Networks(简称SENet
特征通道之间的关系?我们的⼯作就是基于这⼀点并提出了Squeeze-and-Excitation Networks
惠州学院西湖论坛中,Squeeze和Excitation是两个⾮常关键的操作,所以我们以此来命名。我们的动机是希望显式地建模特征通道之间的相互依赖关系。另外,我们并不打算引⼊⼀个新的空间维度来进⾏特征通道间的融合,⽽是采⽤了⼀种全新的“特征重标定”策略。具体来说,就是通过学习的⽅式来⾃动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有⽤的特征并抑制对当前任务⽤处不⼤的特征。
上图是我们提出的SE模块的⽰意图。给定⼀个输⼊x,其特征通道数为c_1,通过⼀系列卷积等⼀般变换后得到⼀个特征通道数为c_2的特征。与传统的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 、SE-ReNeXt、SE-Inception-ResNet-v2等等。
从上⾯的介绍中可以发现,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模块⽽导致额外的参数和计算量的增长微乎其微。
在训练中,我们使⽤了⼀些常见的数据增强⽅法和Li Shen提出的均衡数据策略。为了提⾼训练效率,我们使⽤了我们⾃⼰优化的分布式训练系统ROCS, 并采⽤了更⼤的batch-size 和初始学习率。所有的模型都是从头开始训练的。
接下来,为了验证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。
上图展⽰了ResNet-50和ResNet-152以及它们对应的嵌⼊SE模块的⽹络在ImageNet上的训练过程,可以明显看出加⼊了SE模块的⽹络收敛到更低的错误率上。
另外,为了验证SE模块的泛化能⼒,我们也在除ResNet以外的结构上进⾏了实验。从上表可以看出,将SE模块嵌⼊到ResNeXt、BN-Inception、Inception-ResNet-v2上均获得了不菲的增益效果。由
此看出,SE的增益效果不仅仅局限于某些特殊的⽹络结构,它具有很强的泛化性。
上图展⽰的是SE嵌⼊在ResNeXt-50和Inception-ResNet-v2的训练过程对⽐。
在上表中我们列出了⼀些最新的在ImageNet分类上的⽹络的结果。其中我们的SENet实质上是⼀个SE-ResNeXt-152(64x4d),在ResNeXt-152上嵌⼊SE模块,并做了⼀些其他修改和训练优化上的⼩技巧,这些我们会在后续公开的论⽂中进⾏详细介绍。可以看出SENet获得了迄今为⽌在single-crop上最好的性能。
最后,在ILSVRC 2017竞赛中,我们的融合模型在测试集上获得了2.251% Top-5错误率。对⽐于去年第⼀名的结果2.991%,我们获得了将近25%的精度提升。
------------------------------------------------
知乎机构号:,打造⾃动驾驶⼤脑。
基于深度学习的环境感知、⾼精度地图、驾驶决策技术,让⽆⼈驾驶成为可能。
他有个二弟汉寿亭侯
知乎专栏:,集聚⾃动驾驶知名⼤咖的前沿知识分享平台,欢迎申请加⼊或直接投稿。
⽂章2:
queeze-and-Excitation(SE) block并不是⼀个完整的⽹络结构,⽽是⼀个⼦结构,可以嵌到其他分类或检测模型中,作者采⽤SENet block和ResNeXt结合在ILSVRC 2017的分类项⽬中拿到第⼀,在ImageNet数据集上将top-5 error降低到2.251%,原先的最好成绩是2.991%。
作者在⽂中将SENet block插⼊到现有的多种分类⽹络中,都取得了不错的效果。SENet的核⼼思想在于通过⽹络根据loss去学习特征权重,使得有效的feature map权重⼤,⽆效或效果⼩的feature map权重⼩的⽅式训练模型达到更好的结果。当然,SE block嵌在原有的⼀些分类⽹络中地增加了⼀些参数和计算量,但是在效果⾯前还是可以接受的。
也许通过给某⼀层特征配备权重的想法很多⼈都有,那为什么只有SENet成功了?个⼈认为主要原因在于权重具体怎么训练得到。就像有些是直接根据feature map的数值分布来判断;有些可能也利⽤了loss来指导权重的训练,不过全局信息该怎么获取和利⽤也是。
Figure1表⽰⼀个SE block。主要包含Squeeze和Excitation两部分,接下来结合公式来讲解Figure1。
⾸先Ftr这⼀步是转换操作(严格讲并不属于SENet,⽽是属于原⽹络,可以看后⾯SENet和Inception及ResNet⽹络的结合),在⽂中就是⼀个标准的卷积操作⽽已,输⼊输出的定义如下表⽰。
那么这个Ftr的公式就是下⾯的公式1(卷积操作,vc表⽰第c个卷积核,xs表⽰第s个输⼊)。
Ftr得到的U就是Figure1中的左边第⼆个三维矩阵,也叫tensor,或者叫C个⼤⼩为H*W的feature map。⽽uc表⽰U中第c个⼆维矩阵,下标c表⽰channel。
接下来就是Squeeze操作,公式⾮常简单,就是⼀个global average pooling:
江西医学院学报
因此公式2就将H W C的输⼊转换成11C的输出,对应Figure1中的Fsq操作。为什么会有这⼀步呢?这⼀步的结果相当于表明该层C个feature map的数值分布情况,或者叫全局信息。
再接下来就是Excitation操作,如公式3。直接看最后⼀个等号,前⾯squeeze得到的结果是z,这⾥先⽤W1乘以z,就是⼀个全连接层操作,W1的维度是C/r * C,这个r是⼀个缩放参数,在⽂中取的是16,这个参数的⽬的是为了减少channel个数从⽽降低计算量。⼜因为z的维度是11C,所以W1z的结果就是11C/r;然后再经过⼀个ReLU层,输出的维度不变;然后再和W2相乘,和W2相乘也是⼀个全连接层的过程,W2的维度是C*C/r,因此输出的维度就是11C;最后再经过sigmoid函数,得到s。
也就是说最后得到的这个s的维度是11C,C表⽰channel数⽬。这个s其实是本⽂的核⼼,它是⽤来刻画tensor U中C个feature map的权重。⽽且这个权重是通过前⾯这些全连接层和⾮线性层学习得到的,因此可以end-to-end训练。这两个全连接层的作⽤就是融合各通道的feature map信息,因为前⾯的squeeze都是在某个channel的feature map⾥⾯操作。
在得到s之后,就可以对原来的tensor U操作了,就是下⾯的公式4。也很简单,就是channel-wise multiplication,什么意思呢?uc是⼀个⼆维矩阵,sc是⼀个数,也就是权重,因此相当于把uc矩阵中的每个值都乘以sc。对应Figure1中的Fscale。
了解完上⾯的公式,就可以看看在实际⽹络中怎么添加SE block。Figure2是在Inception中加⼊SE block的情况,这⾥的Inception部分就对应Figure1中的Ftr操作。
Figure3是在ResNet中添加SE block的情况。
看完结构,再来看添加了SE block后,模型的参数到底增加了多少。其实从前⾯的介绍可以看出增加的参数主要来⾃两个全连接层,两个全连接层的维度都是C/r * C,那么这两个全连接层的参数量就是2*C^2/r。以ResNet为例,假设ResNet⼀共包含S个stage,每个Stage包含N个重复的residual block,那么整个添加了SE block的ResNet增加的参数量就是下⾯的公式:
除了公式介绍,⽂中还举了更详细的例⼦来说明参数增加⼤概是多少百分⽐:In total, SE-ResNet-50 introduces 2.5 million additional parameters beyond the 25 million parameters required by ResNet-50, corresponding to a 10% increase in the total number of parameters。⽽且从公式5可以看出,增加的参数和C关系很⼤,⽽⽹络越到⾼层,其feature map的channel个数越多,也就是C越⼤,因此⼤部分增加的参数都是在⾼层。同时作者通过实验发现即便去掉最后⼀个stage的SE block,对模型的影响也⾮常⼩(<0.1% top-1 error),因此如果你对参数量的限制要求很⾼,倒是可以这么做,毕竟具体在哪些stage,哪些block中添加SE block都是⾃由定义的。
Table2是将SE block添加到ResNet,ResNeXt和Inception三个模型中的效果对⽐,数据集都是ImageNet,可以看出计算复杂度的增加并不明显(增加的主要是全连接层,全连接层其实主要还是增加参数量,对速度影响不会太⼤)。
既然是冠军算法,⽂中也介绍了当时取得冠军时的算法⼤致组成:Our winning entry comprised a small ensemble of SENets that employed a standard multi-scale and multi-crop fusion strategy to obtain a 2.251% top-5 error on the test set.This result represents a 25% relative improvement on the winning entry of 2016 (2.99% top-5 error). 也就是说其实是多模型做了融合。

本文发布于:2024-09-21 20:33:36,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/223043.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:特征   通道   模型   参数   维度   权重
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议