Squeeze-and-Excitation Networks(SENet)
论文地址:https://arxiv.org/abs/1709.01507
主要思想:
提出SE block
优点:
增强特征通道
论文内容如下:
-X : input data输入数据
-F tr : convolutional operator卷积算子
如上图,实现se,共有三部分,压缩,激励,加权。
首先输入数据,进行卷积操作,这个公式得出特征图的值。
卷积核参数乘输入数据。
vc表示第c个卷积核,xs表示第s个输入。Ftr得到的U就是Figure1中的左边第二个三维矩阵,也叫tensor,或者叫C个大小为H*W的feature map。而uc表示U中第c个二维矩阵,下标c表示channel。
可视化为图:
首先我们输入一张彩色图片,假设图片尺寸为4*4*3(H'=4,w'=4,c'=3),经过一个卷积操作Ftr(卷积核为2),后变成3*3*3(H=3,W=3,C=3)
压缩过程:这一步的结果相当于表明该层C个feature map的数值分布情况,或者叫全局信息。把每个input feature map的spatial dimension 从H * W 挤压到1。一般是通过global average pooling完成的,Squeeze操作,我们顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。它表征着在特征通道上响应的全局分布,而且使得靠近输入的层也可以获得全局的感受野,这一点在很多任务中都是非常有用的。(论文中的为了解决利用通道依赖性的问题,考虑输出特征中每个通道的信号。每一个学习到的滤波器都有一个局部的接收场,因此,每个单元的滤波器都有一个局部接受场,因此,每个单元的转化的输出U无法利用该区域以外的上下文信息。为了缓解这个问题,作者将全局性的空间信息挤压到通道描述中。这是通过使用全局平均集合来产生通道统计。形式上,一个统计量z∈RC是通过收缩U的空间维度H×W来生成的。这样,z的第c个元素是通过上图方式计算的。)
这里的uc是学习到的特征图,代入公式
通过全局平均池化来完成,将每个通道的H*W个像素值压缩为一个实数,公式如下得到Z1=5/9, Z2=5/3, Z3=4/9,得到一组1*1*3的实数。
(压缩可以看成是在全局上提取特征信息的通道,在乎特征通道之间的关系,而不是特征之间的关系)
接下来进行第二步excitation激励操作,将这组1*1*3的实数先降维到1*1*(3/r),再升维到1*1*3,最后经过Sigmoid激活函数归一化为一组0~1的实数,这组0~1的实数就对应了每个通道的重要性,1为很重要,0为不重要,将得到的实数乘到之前feature map上对应通道的每个像素值。
(论文中的描述:为了利用在挤压过程中汇总的信息,我们在它之后进行了第二个操作,旨在以充分捕捉渠道方面的依赖性。为了实现这一为了实现这一目标,该函数必须满足两个标准:首先,它必须是灵活的(特别是,它必须有能力学习渠道之间的非线性互动)其次,它必须学习一种非互斥关系,因为我们第二,它必须学习一种非相互排斥的关系,因为我们希望确保允许多种渠道的强调(而不是强制进行一次激活)。为了满足这些标准,我们选择采用一个简单的门控机制,并采用sigmoid激活。)
再次描述激励操作。
Excitation: 如图的绿框。通过一个bottleneck结构来捕捉channel的inter-dependency,从而学到channel的scale factor(或者说是attention factor) 。上面采用两层全连接,第一层全连接单元个数为c/16,主要是为了压缩参数的如下,
c. * c/r + c/r * c = 2c2/r = 2c^2/r
只用一层全连接参数的话参数个数:
c * c = c ^ 2
reduction ratio rr 降维比例
W1的维度是C/r * C,这个r是一个缩放参数,在文中取的是16,这个参数的目的是为了减少channel个数从而降低计算量。又因为z的维度是11C,所以W1z的结果就是11C/r;然后再经过一个ReLU层,输出的维度不变;然后再和W2相乘,和W2相乘也是一个全连接层的过程,W2的维度是C*C/r,因此输出的维度就是11C;最后再经过sigmoid函数,得到s。
在得到s之后,就可以对原来的tensor U操作了,就是图中的公式。就是channel-wise multiplication。uc是一个二维矩阵,sc是一个数,也就是权重,因此相当于把uc矩阵中的每个值都乘以sc。对应论文中的Fscale。(也就是Reweight的操作。将Excitation的输出的权重看做是特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定。即实现attention机制。)
论文中把原有的网络加上SE block后叫做SENets.
在resnet中加入SE。下图是SE-ResNet, 可以看到SE module被apply到了residual branch上。我们首先将特征维度降低到输入的1/r,然后经过ReLu激活后再通过一个Fully Connected 层升回到原来的维度。这样做比直接用一个Fully Connected层的好处在于:1)具有更多的非线性,可以更好地拟合通道间复杂的相关性;2)极大地减少了参数量和计算量。然后通过一个Sigmoid的门获得01之间归一化的权重,最后通过一个Scale的操作来将归一化后的权重加权到每个通道的特征上。在Addition前对分支上Residual的特征进行了特征重标定。如果对Addition后主支上的特征进行重标定,由于在主干上存在01的scale操作,在网络较深BP优化时就会在靠近输入层容易出现梯度消散的情况,导致模型难以优化。
总结:
为了深刻理解,本博客结合了理论,数学公式及编码,所以有重复内容。