一、前言
在该paper中,作者认为通过对feature通道之间相互关系进行建模,可以提高网络的表示能力,因此提出了Squeeze-and-Excitation的模块。该模块可以方便地嵌入到已有的卷积神经网络。
代码地址为:https://github.com/hujie-frank/SENet
二、实现细节
Squeeze-and-Excitation实际上是自适应channel权重,其实现思想和deformable conv的有点相似之处。
先来看一下论文中给出的SE block示意图;
其中X->U就是一系列卷积操作,不用管;
1、Squeeze部分——F_sq操作
由于带有局部感受野的卷积操作使得输出U无法感知其视野之外的信息,而这对于底层layer更加明显;因此作者采用了全局池化来融合spatial information,这样就可以感觉全局信息;
简单的说,就是在U-(b,h,w,c)上应用全局池化F_sq,得到(b,1,1,c)的features,这样每个channel上的点就具有整个spatial信息了_
注意:这里全局空间池化,可以替换为替他策略,只要可以结合spatial information就可以了,比如fc、conv等;
2、Excitation部分——F_ex操作
Excitation就是产生channel的自适应权重;使用简单函数来交互Squeeze结果各个channel之间的信息;
该Excitation函数有两个要求:
(1)必须是灵活的——可以学习channel之间的非线性依赖关系;
(2)学习的channel依赖关系必须是非互斥的;这是因为不同channel之间并不是互相排斥的,甚至是对于信息的表达式互相促进的(不可以用softmax之类的);
论文中使用fc1、RELU、fc2、sigmiod来进行通道信息融合;fc1输出为(b,1,1,c/r),起到降维作用,r就是降维率;RELU起到非线性激活的作用;fc2恢复原来channel数,经过sigmiod函数使得其数值限制在0-1之间,最终输出就是(b,1,1,c),该feature中的数值就代表每个channel的权重或者说是信息的重要性;
最终的F_scale操作就是将各channal层权重作用到U上,即每个channel上的点乘以对应的预测的权重;
Figure2和Figure3是应用SE后的结构示意图;
下表是ResNet-50、SE-ResNet-50、SE-ResNeXt-50结构:
三、讨论
下面是论文中不同SE模块对于不同类别的激活情况统计;
从上图中的Excitation的输出来看,比较符合认知的:lower layer features are typically more general (i.e. class agnostic in the context of classification) while higher layer features have greater specificity.
在论文中的第4节中讨论了加入SE模块后模型的计算复杂性;其SE增加的额外参数如下:
其中S为stage,Ns为该stage中SE数量,r为通道减少率,Cs为传入SE的通道数;
作者指出相对于ResNet-50,SE-ResNet-50只是增加了10%的参数;而删除最后一个SE后,其参数只是增加了4%,而top-1 error只是增加不再0.1%;该现象也可以从figure 5中的e、f中得到佐证;各类之间的权重分布是相似的,只是在f上幅值有所不同,因此最后的两个SE并不是很重要。
四、总结
Squeeze-and-Excitation思想是自适应channel权重,对于目标重要的channel权重高,不重要的channel权重小,进而实现一种attention机制,使模型能关注有效信息。
SE模块中使用sigmoid直接与输入feature相乘,感觉会使得feature数值整体降低,最多是拉开了不同channel的差距。——这可能是结合了BN,所以才可以与sigmoid结果相乘吧。。