论文地址:Selective Kernel Networks

简介

本文提出了一种在CNN网络中动态选择的机制,让每一个神经元可以根据输入信息自动调整感受野大小。作者设计了一个网络模块,称为Selective Kernel Unit,以此来实现这个目的。
作者这样设计的原因是在视觉皮质层中,同一个神经元对同一块区域有着不同大小的感受野,也就是说同一个神经元对于同一个输入信息可以同时提取到不同范围的信息。之前也有过比较出名的工作做过类似的尝试,比如InceptionNet(见下图),便是对同一个输入层做不同kernel size的卷积,然后concat到一起作为输出实现不同大小感受野。
【论文阅读】Selective Kernel Networks
另外作者还提出,一个神经元的感受野的大小并不是固定的,而是随着**信号调整的(这里我理解为前一层的输出信号,不知道对不对)。而Inception网络对于不同感受野的feature map只是做了线性聚合,可能不足以完全发挥神经元的适应能力。
【论文阅读】Selective Kernel Networks
因此,作者提出了一种可以实现适应性变化感受野的网络模块,Selective Kernel,这个模块分为三个部分:

  • Split 将输入信息使用不同size的核进行卷积
  • Fuse 将多个卷积结果进行聚合
  • Select 根据聚合后的feature map判断各个支路组合时的权重

相关工作

多分支网络
  • Highway networks
  • ResNet(分支是identity mapping)
  • shake-shake networks
  • FractalNet
  • InceptionNet
    作者提到自己网络的灵感来源于InceptionNet,但是有两点不同:一是没有很复杂的自定义结构,二是加入了适应性选择机制。
分组卷积/深度分离卷积/空洞卷积
  • 分组卷积
    • ResNeXt
    • IGCV1 IGCV2 IGCV3
  • 深度分离卷积
    • Xception
    • MobileNet
    • ShuffleNet
注意力机制

注意力机制可以将feature中信息量最大的部分权重加大,同时压缩没有什么用的部分。近年来多用于人物re-ID、图像修复、文本抽象化等工作中。(这部分不太了解,就不细说了)

动态卷积
  • Spatial Transform Networks
  • Action Convolution
  • Deformable CNN

Selective Kernel Unit

【论文阅读】Selective Kernel Networks
上图展示的是一个完整的Selective Kernel单元,输入feature map XX,分别两个3×33\times35×55\times5两个卷积核得到两个不同感受野的feature map U~\widetilde{U}U^\widehat{U},将两个feature map做element-wise聚合得到feature map UU
U=U~+U^(1) U = \widetilde{U} + \widehat{U} \tag{1}
UU的每一个通道做全局平均池化,得到一个通道分离的统计信息:
sc=Fgp(Uc)=1H×Wi=1Hj=1WUc(i,j)(2) s_c=\mathcal{F_{gp}}(U_c) = \frac{1}{H \times W}\sum^H_{i=1}\sum^W_{j=1}U_c(i, j) \tag{2}
将这个统计信息经过一个fc、一个BN、一个ReLU得到一个压缩的feature:
z=Ffc(s)=δ(B(Ws))(3) z=\mathcal{F_{fc}}(s)=\delta(\mathcal{B}(Ws)) \tag{3}
这里关于zz的通道数的选择,作者提出了一种计算方式
d=max(C/r,L)(4) d = \max(C/r, L) \tag{4}
其中LL取经验值32,大家可以做一下不同的尝试。
接下来就要计算各个feature map的权重了,计算公式如下:
ac=eAczeAcz+eBcz,bc=eBczeAcz+eBcz(5) a_c=\frac{e^{A_cz}}{e^{A_cz}+e^{B_cz}}, b_c=\frac{e^{B_cz}}{e^{A_cz}+e^{B_cz}} \tag{5}
其中A,BRC×dA,B\in\mathbb{R}^{C\times d}AcA_c表示AA的第cc行,aabb分别表示U~\widetilde{U}U^\widehat{U}的soft attention vector(?)。
于是,两个分支聚合就可以写成:
Vc=acU~c+bcU^c,ac+bc=1(6) V_c=a_c \cdot \widetilde{U}_c + b_c \cdot \widehat{U}_c, a_c + b_c = 1 \tag{6}

完整网络

【论文阅读】Selective Kernel Networks
SK单元中有三个超参数需要预设:

  • M 分支个数,也就是不同感受野的个数
  • G 分组卷积的组数
  • r 计算通道缩减时候的缩减系数

作者实验后的取值:[M,G,r]=[2,32,16][M, G, r] = [2, 32, 16]
作者首先使用SK模块替换到了ResNeXt模型中,因为该模型中用到了group convolution,而且计算量也不大,实验证明,参数量大概提升了10%,计算量提高了5%,看来影响不是特别大。

实验对比

ResNeXt

【论文阅读】Selective Kernel Networks

ShuffleNet

【论文阅读】Selective Kernel Networks

不同感受野,以及是否使用SK

【论文阅读】Selective Kernel Networks

文中网络结构的第二个分支使用的卷积核

【论文阅读】Selective Kernel Networks

方案有效性验证

为了验证自己的方案确实在网络中起到了效果,作者使用了不同尺度的输入,并对网络中的SK层做了可视化,对比了在物体检测任务中,输入物体大小不同会引起单元中attention怎样的变化:
【论文阅读】Selective Kernel Networks

总结

本文作者根据人体视觉神经的原理,提出了网络自适应调整感受野大小的方案,并通过Selective Kernel Unit的方式实现,即使用不同感受野的卷积核处理输入数据,并通过soft attention的方式计算多个分支的聚合权重。这个单元应用在已有的SOTA模型的轻量模型上面,都对效果有一定程度的提升,同时没有增多很多的参数量和计算量。

相关文章: