Squeeze-and-Excitation Networks(SENet) 学习笔记

1. 简介

作者提出了一个SE块的概念,它是根据channel之间的相关性来进行显式建模,从而实现自适应地channel-wise上的特征响应,把重要的特征进行强化、不重要的特征进行抑制来提升准确率。

2. 网络结构

Squeeze-and-Excitation Networks(SENet) 学习笔记

FtrF_tr是传统的卷积结构,输入为H×W×CH'\times W'\times C'XX,和H×W×CH\times W\times CUU

SENet增加的是UU后面的部分:首先对UU进行一个Global Average Pooling,即图中的Fsq()F_sq(·),作者称之为Squeeze,得到一个1×1×C1 \times 1 \times C的数据。

接着是两个全连接层,即图中的Fex(,W)F_{ex}(·,W),作者称之为Excitation。

最后用sigmoid进行归一化,把这个值作为scale乘到UUCC 个通道上,作为下一级的输入。

下面来看一些细节。

2.2.1 FtrF_tr

uc=vcX=s=1Cvcsxsu_c=v_c*X=\sum_{s=1}^{C'}{v_c^s*x^s}

很简单的一个传统卷积。

2.2.2 Squeeze

zc=Fsq(uc)=1H×Wi=1Hj=1Wuc(i,j)z_c=F_{sq}(u_c)=\frac{1}{H \times W} \sum_{i=1}^H \sum_{j=1}^W{u_c(i,j)}

就是一个简单的global average pooling,将所有点的信息都平均成了一个值。这一步的意义在于,得到的1×1×C1 \times 1 \times C的数据代表着CC个feature map的数值分布情况(scale),是一个全局信息。

2.2.3 Excitation

s=Fexz,W=σ(g(z,W))=σ(W2δ(W1z))s=F_{ex}{z,W}=\sigma(g(z,W))=\sigma(W_2\delta(W_1z))

W1W_1W2W_2为两个全连接,W1W_1的shape为Cr×C\frac{C}{r}\times Crr是一个缩放参数,作者经过多次试验取了16,经过W1zW_1z这样一个全连接层操作,得到一个1×1×Cr1 \times 1 \times \frac{C}{r}的数据,把CC维降到了Cr\frac{C}{r}维,并经过一个ReLU函数。

同理,经过一个shape为C×CrC \times \frac{C}{r}W2W_2之后,恢复为一个1×1×C1 \times 1 \times C的数据,并经过一个sigmoid函数。

  • 为什么要加两个全连接层?

    是为了利用通道间的相关性来训练出真正的scale。前面的squeeze输出都是基于某个channel的feature map,而真正的scale应该基于全部的数据集,需要融合各个通道的feature map信息。

    这个s其实是本文的核心,它是用来刻画tensor U中C个feature map的权重。而且这个权重是通过前面这些全连接层和非线性层学习得到的,因此可以end-to-end训练。

2.2.4 Fscale(,)F_{scale}(·,·)

x~=Fscale(uc,sc)=scuc\tilde{x}=F_{scale}(u_c,s_c)=s_cu_c

ucu_c是一个二维矩阵,scs_c是一个权重,把ucu_c中的每个值都乘以scs_c得到带权重的输出。

3. 将SENet插入到其他网络中

Squeeze-and-Excitation Networks(SENet) 学习笔记