机器学习论文笔记(五):Squeeze-and-Excitation Networks

机器学习论文笔记(五):Squeeze-and-Excitation Networks

arxiv:https://arxiv.org/abs/1709.01507
代码地址:https://github.com/hujie-frank/SENet
PyTorch代码地址:https://github.com/miraclewkf/SENet-PyTorch

简介:

Sequeeze-and-Excitation(SE) block是feature map前面的加的一个(魔改)的优化子结构,通过这个这个东西,我们可以调节学习特征权重,给fileter加上一个attention机制(在conv的时候,我的理解是在fileter上加一个weight)增加了可接受范围内的计算量

主要包含Squeeze和Excitation两部分,scale就是融合一下

前戏:

我们抽象一层conv——>Ftr : X → U, X ∈ RH′×W′×C′,U ∈ RH×W×C, Ftr是传统的卷积结构,X和U是Ftr的输入(C’xH’xW’)和输出(CxHxW),
卷积操作,Vc表示第c个卷积核,Xs表示第s个输入,U就是上图中的左边第二个三维矩阵,也叫tensor(张量),或者叫C个大小为H*W的feature map。而Uc表示U中第c个二维矩阵,下标c表示channel。这些是本来就有的东西

改进:squeeze and excitation

SENet增加的部分是U后的结构:对U先做一个Global Average Pooling(压缩)得到一个1* 1 * C的vector,(就将H* W* C的输入转换成1* 1* C的输出,对应Figure1中的Fsq操作。为什么会有这一步呢?这一步的结果相当于表明该层C个feature map的数值分布情况,或者叫全局信息)。

然后再通过给这个vector通过两次全连接后relu得到s(FC+relu+FC:Excitation)
s的维度是1*1*C,C表示channel数目。这个s其实是本文的核心,它是用来刻画tensor U中C个feature map的权重。而且这个权重是通过前面这些全连接层和非线性层学习得到的,因此可以end-to-end训练。这两个全连接层的作用就是融合各通道的feature map信息,因为前面的squeeze都是在某个channel的feature map里面操作。

(都是为什么是两个FC???)加上weight,再用sigmoid(elf-gating mechanism)映射会高维空间。

scale:


uc是一个二维矩阵(相当于一层feature map),sc是一个数,也就是权重,因此相当于把uc矩阵中的每个值都乘以sc。对应Figure1中的Fscale。
这种结构的原理是想通过控制scale的大小,把重要的特征增强,不重要的特征减弱,从而让提取的特征指向性更强。(实现attention)

实际操作:

在Inception中加入SE block的情况,这里的Inception部分就对应第一张图中的Ftr操作。


在ResNet中添加SE block的情况。

residual相当于前面的Ftr,相当于给残差块里面的feature map加上 attention


从什么两个example可以看出SE-block其实是很万能的,但是实际上
–>有人会说卷积训练出的权值就含有了scale的成分在里面,也利用了通道间的相关性,为啥还要多个SE Block?
ans:
那是因为这种卷积有空间的成分在里面,为了排除空间上的干扰就得先用GAP压缩成一个点后再作卷积,压缩后因为没有了Height、Width的成分,这种卷积就是全连接了。
上图最下面的结构,SE模块和传统的卷积间采用并联而不是串联的方式,这时SE利用的是Ftr输入X的相关性来计算scale,X和U的相关性是不同的,把根据X的相关性计算出的scale应用到U上明显不合适。
知乎大佬提出的疑问问题链接

总结:这篇paper反映了作者代码实现功底包括炼丹能力很强,很明显看得出来是炼丹的过程中发现的奇淫巧技,然后试了一下效果很牛逼,说明对网络的底层实现这一块做的很透彻,才能针对性的在feature map上加上attention的机制,其实无论是attention还是conv还是AP这种很平常见的东西,组起来了都是牛逼。

你可能感兴趣的:(论文笔记)