SENet(Squeeze-and-ExcitationNetworks)算法笔记
Sequeeze-and-Excitation(SE)block并不是⼀个完整的⽹络结构,⽽是⼀个⼦结构,可以嵌到其他分类或检测模型中,作者采⽤SENet
block和ResNeXt结合在ILSVRC2017的分类项⽬中拿到第⼀,在ImageNet数据集上将top-5error降低到2.251%,原先的最好成绩是
2.991%。
作者在⽂中将SENetblock插⼊到现有的多种分类⽹络中,都取得了不错的效果。SENet的核⼼思想在于通过⽹络根据loss去学习特征权
重,使得有效的featuremap权重⼤,⽆效或效果⼩的featuremap权重⼩的⽅式训练模型达到更好的结果。当然,SEblock嵌在原有的⼀
些分类⽹络中不可避免地增加了⼀些参数和计算量,但是在效果⾯前还是可以接受的。
也许通过给某⼀层特征配备权重的想法很多⼈都有,那为什么只有SENet成功了?个⼈认为主要原因在于权重具体怎么训练得到。就像有些
是直接根据featuremap的数值分布来判断;有些可能也利⽤了loss来指导权重的训练,不过全局信息该怎么获取和利⽤也是因⼈⽽异。
Figure1表⽰⼀个SEblock。主要包含Squeeze和Excitation两部分,接下来结合公式来讲解Figure1。
⾸先Ftr这⼀步是转换操作(严格讲并不属于SENet,⽽是属于原⽹络,可以看后⾯SENet和Inception及ResNet⽹络的结合),在⽂中就
是⼀个标准的卷积操作⽽已,输⼊输出的定义如下表⽰。
那么这个Ftr的公式就是下⾯的公式1(卷积操作,vc表⽰第c个卷积核,xs表⽰第s个输⼊)。
Ftr得到的U就是Figure1中的左边第⼆个三维矩阵,也叫tensor,或者叫C个⼤⼩为H*W的featuremap。⽽uc表⽰U中第c个⼆维矩阵,
下标c表⽰channel。
接下来就是Squeeze操作,公式⾮常简单,就是⼀个globalaveragepooling:
因此公式2就将HWC的输⼊转换成11C的输出,对应Figure1中的Fsq操作。为什么会有这⼀步呢?这⼀步的结果相当于表明该层C个
featuremap的数值分布情况,或者叫全局信息。
再接下来就是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其实是本⽂的核⼼,它是⽤来刻画tensorU中C个featuremap的权
重。⽽且这个权重是通过前⾯这些全连接层和⾮线性层学习得到的,因此可以end-to-end训练。这两个全连接层的作⽤就是融合各通道的
featuremap信息,因为前⾯的squeeze都是在某个channel的featuremap⾥⾯操作。
在得到s之后,就可以对原来的tensorU操作了,就是下⾯的公式4。也很简单,就是channel-wimultiplication,什么意思呢?uc是⼀
个⼆维矩阵,sc是⼀个数,也就是权重,因此相当于把uc矩阵中的每个值都乘以sc。对应Figure1中的Fscale。
了解完上⾯的公式,就可以看看在实际⽹络中怎么添加SEblock。Figure2是在Inception中加⼊SEblock的情况,这⾥的Inception部分
就对应Figure1中的Ftr操作。
Figure3是在ResNet中添加SEblock的情况。
看完结构,再来看添加了SEblock后,模型的参数到底增加了多少。其实从前⾯的介绍可以看出增加的参数主要来⾃两个全连接层,两个全
连接层的维度都是C/r*C,那么这两个全连接层的参数量就是2*C^2/r。以ResNet为例,假设ResNet⼀共包含S个stage,每个Stage包
含N个重复的residualblock,那么整个添加了SEblock的ResNet增加的参数量就是下⾯的公式:
除了公式介绍,⽂中还举了更详细的例⼦来说明参数增加⼤概是多少百分⽐:Intotal,SE-ResNet-50introduces2.5millionadditional
parametersbeyondthe25millionparametersrequiredbyResNet-50,correspondingtoa10%increainthetotalnumber
ofparameters。⽽且从公式5可以看出,增加的参数和C关系很⼤,⽽⽹络越到⾼层,其featuremap的channel个数越多,也就是C越
⼤,因此⼤部分增加的参数都是在⾼层。同时作者通过实验发现即便去掉最后⼀个stage的SEblock,对模型的影响也⾮常⼩(<0.1%top-
1error),因此如果你对参数量的限制要求很⾼,倒是可以这么做,毕竟具体在哪些stage,哪些block中添加SEblock都是⾃由定义的。
Table2是将SEblock添加到ResNet,ResNeXt和Inception三个模型中的效果对⽐,数据集都是ImageNet,可以看出计算复杂度的增加
并不明显(增加的主要是全连接层,全连接层其实主要还是增加参数量,对速度影响不会太⼤)。
既然是冠军算法,⽂中也介绍了当时取得冠军时的算法⼤致组成:OurwinningentrycompridasmallenmbleofSENetsthat
employedastandardmulti-scaleandmulti-cropfusionstrategytoobtaina2.251%sult
reprentsa25%relativeimprovementonthewinningentryof2016(2.99%top-5error).也就是说其实是多模型做了融合。
⽽在融合的多个模型之中:Oneofourhigh-performingnetworksisconstructedbyintegratingSEblockswithamodified
ResNeXt,也就是Table3中最后⼀⾏的SENet!具体⽽⾔是在64*4d的ResNeXt-152⽹络中引⼊了SEblock。⽽这个ResNeXt-152是
在ResNeXt-101的基础上根据ResNet-152的叠加⽅式改造出来的,因为原来的ResNeXt⽂章中并没有提到152层的ResNeXt,具体改
造可以看⽂章的附录,附录的⼀些细节可以在以后应⽤中参考。从Table3可以看出即便是单模型,SENet的效果也⽐其他算法要好。
另外前⾯提到过在SEblock中第⼀个全连接层的维度是C/r*C,这个r在⽂中取的是16,作⽤在于将原来输⼊是11C的featuremap缩减
为11C/r的featuremap,这⼀就降低了后⾯的计算量。⽽下⾯的Table5则是关于这个参数r取不同值时对结果和模型⼤⼩的影响。
最后,除了在ImageNet数据集上做实验,作者还在Places365-Challenge数据集上做了对⽐,更多实验结果可以参看论⽂。
附:看了下caffe代码(.prototxt⽂件),和⽂章的实现还有些不⼀样。下图是在Inception中添加SENet的可视化结果:SE-BN-
Inception,在Inception中是在每个Inception的后⾯连上⼀个SENet,下图的上⾯⼀半就是⼀个Inception,下⾯⼀半就是⼀个SENet,然
后这个SENet下⾯⼜连着⼀个新的Inception。
注意看这个SENet的红⾊部分都是⽤卷积操作代替⽂中的全连接层操作实现的,本质上没有什么区别。具体来说,inception_3a_11_down
是输出channel为16的11卷积,其输⼊channel是256,这也符合⽂中说的缩减因⼦为16(256/16=16);⽽inception_3a_11_up是
输出channel为256的11卷积。其它层都和⽂中描述⼀致,⽐如inception_3a_global_pool是averagepooling,inception_3a_prob是
sigmoid函数。
SE-ResNet-50的情况也类似,如下图。在ResNet中都是在Residualblock中嵌⼊SENet。下图最左边的长条连线是原来Residualblock
的skipconnection,右下⾓的conv2_2_global_pool到conv2_2_prob以及左边那条连线都是SENet。不过也是⽤两个1*1卷积代替⽂中
的两个全连接层。
本文发布于:2022-12-31 22:40:36,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/68274.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |