①前言
上个月看了一篇比较火的论文<Squeeze-and-Excitation Networks>,今天和大家一起分享一下。为什么上个月看的论文这个月才分享呢,因为我比较喜欢鲁迅的散文<朝花夕拾>。
②ILSVRC分类任务
这篇文章的中心思想SE网络奠定了2017年的ILSVRC分类任务的submission。并且将Top5的误差减小到2.251%,将2016年的冠军成绩提高了将近25%。
③SE block
SEblock结构图如下图所示:
SE block主要由三部分构成,Squeeze操作,Excitation操作,Fscale操作。
首先,Ftr把输入的X映射为特征图U,Ftr可以是一个最常见的卷积操作或者其他操作。
其次,Squeeze操作对U进行一个全局的池化操作,比如最大池化或者平均池化(WxH空间范围内进行池化),产生一个embedding(1x1xC)。
再次,Excitation操作将上面产生的embedding进行一系列非线性映射(比如FC+RELU+FC),最后跟一个sigmoid得到每个通道的权重。
最后,将上面得到的每个通道的权重作用于U,对每个通道的U进行加权求和。至此,就完成了整个SE block的映射。
核心思想是不同通道的权重应该自适应分配,由网络自己学习出来的,而不是像Inception net一样留下过多人工干预的痕迹。
④Squeeze Operator
如下图所示,在Resnet-50上测试了不同的全局池化方法对最终效果的影响。
从上图可以看出,最大池化和平均池化同样有效,但是平均池化比最大池化的效果稍微好一点点。虽然作者其实是采用最大池化的,本人认为最大池化有时候会受到一些不良数据的干扰,而平均池化更能够反映出统计上的规律。但是无论怎么样,从上图可以间接看出SEblock是非常鲁棒的,无论选择哪种池化方法,最终效果应该都不会差距太大。
⑤Excitation Operator
如下图所示,在Resnet-50上测试了不同的非线性对最终效果的影响。
从上图可以看出,将非线性映射sigmoid替换成tanh在效果上变得稍微差了一点点,但是还不明显。但是如果替换成Relu的话,效果就大打折扣,甚至都低于Resnet-50的baseline了。所以说在Excitation部分根据网络的结构和对项目的理解,慎重选择一种激励函数非常重要。
⑥Different stages
如下图所示,在Resnet-50上测试了不同的stages加入SE block对最终效果的影响。
从上图可以看出,在不同的stages上加入SE block都能够带来效果上收益。并且在不同的stages上的收益还可以形成互补,不冲突和不相互抑制。所以我们可以在不同的stages上加入SE block然后累积得到效果收益。
⑦Inregration strategy
如下图所示,在Resnet-50上我们可以在不同的位置插入SE block。
目前主流的几种方法如上图所示。SE-PRE是在residual unit之前插入,如上图c所示。SE-POST是在residual summation之后插入,如上图d所示。SE-Identity是在identity connection这个分支上插入,如上图e所示。
不同的插入位置造成的效果收益也不尽相同。如下表所示:
从表中可以看出,SE-PRE, SE-Identity , SE-Standard都表现得不错,而SE-POST在效果上表现得有点不尽如人意了。
总结:SE_BLOCK在不同位置插入resnet网络中具有比较强得鲁棒性。但是也不是随心所欲想在哪里插入都可以的。比如SE-POST造成效果下降的情况说明必须打入敌军内部,人家都summation完了,residual unit都结束了你才插入就没什么意义了。
下表是SE_BLOCK的另外一种变种的情况:
这种变种属于直捣黄龙,直接把SE_BLOCK和residual unit 融合成为一部分,直接放在了residual unit 内部,具体是放在了3x3 conv layer的后面。
小结:从上表可以看出,这样放的话由于3x3 conv layer 有更少的通道数,所以造成了SE_BLOCK参数的减少。我们用更少的参数得到了相对靠谱的分类准确率,这在实际工程中是对准确率和速度的一种很好的trade off。
⑧Effect of Squeeze
如下表所示,在Resnet-50上测试了Squeeze和NoSqueeze对最终效果的影响。
我们首先把pooling层移除。其次用一个1x1的卷积层替换原来的FC层。我们把替换之后的结构叫做NoSqueeze。NoSqueeze保留了原本特征图的空间结构。从表中我们可以看出全局信息对于效果提升有着重要影响。相比于Resnet-50,加了SE block的网络只有少量的计算量增加但是带来了有效的效果提升,所以这是值得的。
⑨Role of Excitation
为了提供excitation功能的一个清晰认知图像,作者研究了SE_Resnet50的数据分布。这个数据分布主要从3个角度来考察,一是不同的类经过Excitation之后的数据分布,二是在不同的网络深度下数据分布的差异,三是同一个类中不同图片的数据分布变化。
首先我们来看看不同的类的数据分布情况。
如下图所示,在Resnet-50上测试了不同的class在不同的网络深度下由于SE block的影响产生的不同数据分布情况。
从上图可以看出,不同的class的数据分布在浅层网络中的数据分布非常相似,比如SE_2_3.这说明了在网络的浅层部分各个类之间共享了某种特征通道的重要性,还没有产生分化。但是在网络更深处,不同的class之间的数据分布表现出了class_specific(类别特异性),比如SE_4_6和SE_5-1。
其次,我们再看看在网络最后的stage中SE block的一些反常表现。
如下图所示,SE_5-2中各个类别最后的激活值都几乎接近于同一个value,曲线都几乎重合了。SE_5-3后面紧接着一个pooling层和一个分类层。
在SE_5-2中曲线几乎重合,在SE_5-3中各个类虽然不重合,但是变化趋势几乎一模一样,唯一的区别无非就是scale尺度缩放上的一些区别罢了。从这个现象我们猜想,在网络的最后stage中SE block对于网络的重新校准已经没有早期stage的SE block那么重要了。在实际工程中,我们可以移除last stage的SE网络来减少计算量同时又几乎不会带来效果精度上的下降。
最后我们再看看同一个类中不同图片的数据分布变化。如下图所示,作者以2个class为例子,展示了在一个类中的平均值和标准差随着不同的channel和不同的网络depth的变化。
从上图中我们可以看出类间和类内中数据分布都是随着网络depth不断变化的。随着网络变深,方差一直变大,也就是类内和类间都产生了分化性,这是网络鉴别能力提高的一种表现。特别在SE-5-1中方差已经变得可观。由此我们可以大胆猜想,类内实例差异性的不断提高满足了不断增长的类间差异性的需求。换句话说,类内的分化能力的提高最终也促进了类间分化能力的提高。
这篇论文还讲了很多细节,但是本文到此为止,否则作者的网络是收敛了,我怕我这篇文章无法收敛了。不说了,我去加班了!失陪了先!
公众号:facefinetune
发现更多精彩
关注公众号