Selective Kernel Networks
原文地址:Selective Kernel Networks
官方解读:SKNet——SENet孪生兄弟篇
自定义实现:ZJCV/ZCls
摘要
In standard Convolutional Neural Networks (CNNs), the receptive fields of artificial neurons in each layer are designed to share the same size. It is well-known in the neuroscience community that the receptive field size of visual cortical neurons are modulated by the stimulus, which has been rarely considered in constructing CNNs. We propose a dynamic selection mechanism in CNNs that allows each neuron to adaptively adjust its receptive field size based on multiple scales of input information. A building block called Selective Kernel (SK) unit is designed, in which multiple branches with different kernel sizes are fused using softmax attention that is guided by the information in these branches. Different attentions on these branches yield different sizes of the effective receptive fields of neurons in the fusion layer. Multiple SK units are stacked to a deep network termed Selective Kernel Networks (SKNets). On the ImageNet and CIFAR benchmarks, we empirically show that SKNet outperforms the existing state-of-the-art architectures with lower model complexity. Detailed analyses show that the neurons in SKNet can capture target objects with different scales, which verifies the capability of neurons for adaptively adjusting their receptive field sizes according to the input. The code and models are available at this https URL.
在标准卷积神经网络(CNNs)中,每层人工神经元的感受野大小相同。但是在神经科学中,视觉皮层神经元的感受野大小受刺激的调节,这个属性在构建神经网络时很少被考虑到。我们提出一种动态选择机制,允许每个神经元基于多尺度的输入信息自适应地调整其感受野大小。我们设计了一种构造块(称为选择性内核单元SKUnit),其拥有多个分支(每个分支的内核大小不同),最后通过softmax注意力进行信息融合。不同分支上各自的的关注力在融合层产生不同大小的神经元有效感受野。堆叠多个SKUnit得到最终的深度网络,称为选择性核心网络(SKNet)。在ImageNet和CIFAR基准测试中,通过实验证明,SKNet在模型复杂性较低的情况下优于现有最好的架构。详细分析表明,SKNet中的神经元可以捕捉不同尺度的目标对象,验证了神经元根据输入自适应调整感受野大小的能力。开源地址:https://github.com/implus/SKNet
解读
关于大小
我一开始理解的大小(size
)指的是卷积核的长宽,也就是\(3\times 3、5\times 5、7\times 7\)的概念,通读整篇文章后发现其写的也确实是这个意思,就是说自然神经元的突触长度会受到刺激的变化而发生改变。论文中通过多分支不同大小卷积来提取多尺度信息,然后通过注意力机制来分配不同尺度信息的权重,以此来模拟感受野大小的变化
个人看法:标准卷积的计算方式同样拥有随刺激分配权重的能力,不过相对而言其操作比较粗粒度,而SKUnit
通过多分支卷积+注意力机制的实现方式表现的的更加细粒度,从实现结果来看其提取特征的能力也比较好
关于整体架构
单个标准卷积拥有固定长宽的感受野,比如\(3\times 3, 5\times 5, 7\times 7\),可以通过堆叠卷积层的方式去获取更大的感受野,比如两个\(3\times 3\)神经元的感受野大小等同于一个\(5\times 5\)大小神经元感受野。不过这种堆叠方式(VGG-style
)设计的模型的泛化能力有限,后续模型的发展有两个方向:
InceptionNet
通过多分支(不同大小的感受野)方式来提取多尺度空间信息;ResNet
通过残差连接的方式来提取多尺度空间信息。
对于SKNet
而言,其相当于结合了多分支连接+残差连接+注意力机制
,并且通过实验证明其能够有效的提取数据信息
另外,从作者博文中提到,在ResNet
和ResNeXt
的对比过程中,分组卷积的实现一方面极大的降低了计算量;另一方面通过多分支(相同感受野大小的滤波器)的嵌入组合,能够进一步提高分类性能(侧面证明了多分支方式的有效性)
SKUnit
SKUnit(Selective Kernel Unit)
可分为3
步操作:分离(split
)、融合(fuse
)和选择(select
)
split
分离操作指的是通过多分支卷积提取多尺度空间信息,当前默认为两个分支:
- 假定输入特征图大小为\(X\in R^{H'\times W'\times C'}\)
- 执行两个分支不同大小卷积(卷积核大小分别为\(3/5\))的计算:
\[ \tilde{F}: X \rightarrow \tilde{U}\in R^{H\times W\times C}\\ \hat{F}: X \rightarrow \hat{U}\in R^{H\times W\times C} \]
其中\(H\times W\times C\)就是输出特征图大小,同时在分离操作中,论文提出:
- 使用分组或者深度卷积进行特征提取;
- 在卷积层之后添加归一化层
BN
和非线性激活函数ReLU
- \(5\times 5\)卷积核使用\(3\times 3\)大小的空洞卷积(
dilation=2
)进行替代
fuse
融合操作为了使得神经元能够自适应调整感受野大小:
- 首先执行多分支加法融合:\(U=\tilde{U} + \hat{U}\)
- 使用全局平均池化来嵌入全局信息:\(s=GlobalPool(U)\in R^{C}\),其中\(s\)的第\(c\)个通道计算如下
\[ s_{c} = F_{gp}(U_{c}) = \frac{1}{H\times W}\sum_{i=1}^{H} \sum_{j=1}^{W}U_{c}(i, j) \] * 最后使用全连接层来缩放特征维度:\(z=F_{fc}(s)=δ(B(Ws))\)
\(B\)表示批量归一化操作,\(δ\)表示ReLU函数,缩减维度\(d\)计算如下:
\[ d = max(C/r, L) \]
\(r\)表示缩减率,\(L\)表示最小\(d\)值(设为\(32\))
select
最后使用soft
注意力机制执行跨通道自适应调整空间尺度信息,其计算公式如下:
\[ a_{c} = \frac{e^{A_{c}z}}{e^{A_{c}z}+e^{B_{c}z}}, b_{c} = \frac{e^{B_{c}z}}{e^{A_{c}z}+e^{B_{c}z}} \]
其中\(z\)就是融合阶段计算得到的特征描述符,\(A, B \in R^{C\times d}\),\(a, b\)分别是选择阶段不同分支\(\tilde{U}, \hat{U}\)的软注意力向量
通过soft
注意力机制,可以保证\(a_{c}+b_{c}=1\),最后的特征图计算如下:
\[ V_{c} = a_{c}\cdot \tilde{U}_{c} + b_{c}\cdot \hat{U}_{c}, a_{c} + b_{c} = 1 \]
其中\(V = [V_{1}, V_{2}, ..., V_{c}], V_{c} \in R^{H\times W}, V\in R^{H\times W\times C}\)
超参数
SKUnit
包含3
个超参数:
- 分支数\(M\);
- 分组数\(G\);
- 缩放率\(r\)。
通常设置为\(SK[M, G, r] = SK[2, 32, 16]\)
SKNet
使用SKUnit
替代ResNeXt
中Bottleneck
块中的\(3\times 3\)卷积即可得到SKNet
具体架构
论文参考了ResNeXt
的设计架构,共实现了3
种不同:
SKNet-50:4
个阶段的块个数为[3, 4, 6, 3]
;SKNet-26:4
个阶段的块个数为[2, 2, 2, 2]
;SKNet-101:4
个阶段的块个数为[3, 4, 23, 3]
。
模型大小 vs. 时间 vs. 分类性能
ImageNet评估
训练过程设置如下:
- 数据增强:
- 随机裁剪\(224\times 224\)大小;
- 随机水平翻转;
- 逐通道减去均值;
- 损失函数:标签平滑正则化损失;
- 优化器:使用动量为
0.9
的同步SGD
; - 批量大小:
256
; - 学习率/权重衰减:
0.1/1e-4
; - 学习率调度:每
30
轮衰减一次,衰减因子为0.1
; GPU
个数:8
;- 训练论数:
100
上述设置用于训练大的模型,对于小模型,使用4e-5
大小的权重衰减,同时减少数据增强尺度。训练结果如下:
SKNet vs. ResNeXt
比较SKUnit
和不同深度/宽度/基数的ResNeXt
,结果如下:
通过提高深度(ResNeXt-50 -> ResNeXt-53
)、宽度(ResNeXt-50 -> ResNeXt-53 wider
)、基数(ResNeXt-50(32x4d) -> ResNeXt-50(36x4d)
)使得ResNeXt
拥有和SKNet-50
有相近的GFLOPs
。从实验结果看,SKNet
仍旧拥有更好的性能
SKUnit vs. SEUnit
在ShuffleNetV2
上分别嵌入SKUnit
和SEUnit
,从实验结果发现SKUnit
拥有更强的泛化能力
+SE
表示嵌入SE
模块到每个shuffle层之后;+SK
表示替代原先的\(3\times 3\)深度卷积,使用M=2
(表示使用K3
和K5
双路卷积)、r=4
以及和之前相同的分组数G
在ShuffleNetV2
的\(3\times 3\)深度卷积之后不连接ReLU
激活函数,论文同样实践了最佳的ShuffleNetV2+SKUnit
方式,发现在SKUnit
每路卷积之后同样不执行ReLU
激活函数的效果最好
消融实验
论文针对不同目标大小以及不同深度的模型架构进行了消融实验,从消融实验中观察到两个现象:
- 当输入目标变大的时候,中层的
SKUnit
会提取更多\(5\times 5\)卷积特征,这证明了感受野大小会随机目标尺度变化自适应调整; - 更高层的
SKUnit
(比如从SK_3_4 -> SK_5_3
)不再会根据目标大小变化变现出感受野变化,这表明高层卷积已经将尺度信息编码在特征向量中,与较低层的情况相比,内核大小不太重要
我没看懂这两张图???