美文网首页机器学习
SENet(Squeeze-and-Excitation Net

SENet(Squeeze-and-Excitation Net

作者: ce0b74704937 | 来源:发表于2019-06-27 14:07 被阅读0次

《Squeeze-and-Excitation Networks》这篇文章在17年就发布在axiv上了,最近一次修改是2019年五月,最近看用的人还是蛮多的,可能是因为效果好而且使用简单吧。

该网络其实可以理解为一个网络中的插件,可以和各种网络配合,如最基础的卷积层,resnet,inception等等。下面来看看它的实现原理。

一、SE块(SQUEEZE-AND-EXCITATION BLOCKS)

SE模块是在一个我们称为F_{tr}的变化上建立的,其中F_{tr}的输入为X\in R^{H'\times W'\times C'},输出为U\in R^{H\times W\times C}
为了便于理解,我们可以将变换F_{tr}看成是一个简单的卷积操作,用式子V=[v_1,v_2,...,v_C]表示,其中v_c表示第c个卷积核。那么输出U=[u_1,u_2,...,u_C]能用下式表示:
u_c=v_c*X=\sum^{C'}_{s=1}v^{s}_{c}*x^{s}
上式中*表示卷积,v_c=[v^{1}_{c}, v^{2}_{c},...,v^{C'}_{c}]X=[x^{1}, x^{2},...,x^{C'}],且u_c\in R^{H\times W}v^{s}_{c}是一个2D空间卷积,这里为了简化没有体现出bias。这里通过卷积层的建模,使得通道间的卷积特征有了一些隐形的提取过程。为了让通道间的特征更好的利用全局信息,在提取到的特征U被送入下一层前,我们提出了两步操作,分别称为squeeze和excitation。

上述公式看起来很麻烦,SE blocks可以很形象用下图表示:


图1.png

下面来分别介绍一下squeeze和excitation操作。

1.1 Squeeze:: Global Information Embedding

因为每个卷积提取到的特征都是一个局部特征,或者说是个局部的感受野,因此特征U是不能利用感受野外的一些信息。

为了缓解这个问题,我们提出了squeeze操作。它其实就是对提取到的特征,在每个通道上执行全局平均池化(global average pooling)。用公式表示,z\in R^C是对特征U在空间维度H\times W执行全局平均池化后的结果。对于z的每一个元素表示如下:
z_c=F_{sq}(u_c)=\frac{1}{H\times W}\sum^{H}_{i=1}\sum^{W}_{j=1}u_c(i,j)

1.2 Excitation: Adaptive Recalibration

为了利用squeeze操作的信息和利用通道间的信息依赖,我们接下来使用excitation操作来完成,而且这个操作需要满足两个条件:第一,操作灵活能够获得通道间的非线性关系;第二,学到的关系不一定是互斥的,因为我们希望多个通道特征被加强,而不是像one-hot那种形式,只加强某一个通道特征。

为了满足这两个条件我们采用下式的变换形式:
s = F_{ex}(z, W) = \sigma(g(z, W)) = \sigma(W_2\delta(W_1z))
上式中,\sigma表示sigmoid函数,\delta表示relu函数,W_1\in R^{\frac{C}{r}\times C}W_2\in R^{C\times\frac{C}{r}}。因为excitation操作有两个全连接层,为了简化操作引入了参数r,r是用来减少全连接层维度的。

得到s后,可以通过下式得到SE block的最终输出
\tilde{x}_c=F_{scale}(u_c,s_c)=s_{c}u_{c}
\tilde{X}=[\tilde{x}_1, \tilde{x}_2, ...,\tilde{x}_C]
从上式可以看出F_{scale}就是通道上的乘积,u_c\in R^{H\times W}

上述就是SE block的原理,可以看出SE block其实就是一个自注意力(self-attention)的函数。

二、实例化(Instantiations)

之前说是SE block非常的方便,下面来看看SE block怎么应用到各种网络中。

对于VGG来说,可以把每个卷积看成是一个F_{tr}变换就可以了。

对于Inception networks来说,可以把一整个Inception module当作是一个F_{tr}变换,加入SE block就可以得到SE-Inception network了,如下图表示。

图2.png

对于residual networks来说,非直连部分可以当作是一个F_{tr}变换,如下图所示。

图3.png

可以看出SE block应用起来很方便,像其他的网络,如Mobilenet、Sufflenet、ResNeXt 等可以作类似的应用。

三、模型的复杂度

拿ResNet-50和SE-ResNet-50对比来说,如果输入的是224\times 224大小的图像,ResNet-50一次前向需要∼3.86 GFLOPs大小的计算量。对于SE-ResNet-50,里面的r取16,需要∼3.87 GFLOPs的计算量,可以看出只增加了0.26%的计算量。但是这时候的效果和ResNet-101差不多,效果如下表所示

表.png

在实际的计算中,对于一台8 NVIDIA Titan X的服务器,当batch设为256时,ResNet-50一次前向和后向的时间是190ms,而SE-ResNet-50需要209ms。推断过程中,对于cpu来说,大小为224\times 224的图像ResNet-50需要164ms,SE-ResNet-50需要167ms。

对于SE导致的参数量的计算如下公式表示
\frac{2}{r}\sum^{S}_{s=1}N_s\cdot C^2_s
上式中r是为了减少复制度的超参数,S是网络中stage的个数(可以看resnet的结构,一个stage由几个blockneck组成),C_s表示输出的通道数,N_s表示第s个stage中block的个数。这里没有计算bias,认为在FC层中,可以忽略不计。
SE-ResNet-50网络中相对于ResNet-50引入了∼2.5 million的参数,而原始ResNet-50就有∼25 million参数量。

相对于增加的效果,增加的参数量和计算量都是可以接受的。

SENet基本就这些内容,文章还有很多实验结果可以查看原文详细了解。

欢迎加入Object Detection交流,群聊号码:910457072

相关文章

网友评论

    本文标题:SENet(Squeeze-and-Excitation Net

    本文链接:https://www.haomeiwen.com/subject/euplcctx.html