论文:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices(CVPR 2017)
动机
嵌入式设备的计算资源十分有限,在上面运行复杂的神经网络具有较大的挑战。因此急需一种轻量级网络,对深度学习模型进行瘦身加速,但要保证一定的精度
Group Convolution
Group Convolution也就是分组卷积,按通道将特征图分组,分别进行标准卷积,最后将每组得到的特征图按通道合并,可明显减少参数及计算量,具体示意如下:
C
∗
H
∗
W
⏟
输入特征
⟹
N个C*K*K卷积核
N
∗
H
′
∗
W
′
⏟
输出特征
⏞
标准卷积
⇓
按通道划分成G组
Group Convolution
C
G
∗
H
∗
W
⏟
单组输入特征
⟹
⋮
共G组
N
G
个
C
G
*K*K卷积核
N
G
∗
H
′
∗
W
′
⏟
单组输出特征
⇓
合并G组特征图
N
∗
H
′
∗
W
′
⏟
最终输出特征
\begin{aligned} &\overbrace{ \underbrace{C*H*W}_{\text{输入特征}}\mathop{\Longrightarrow}\limits^{\text{N个C*K*K卷积核}}\underbrace{N*H^\prime*W^\prime}_{\text{输出特征}} }^{\text{标准卷积}}\\ &\qquad\Downarrow_\text{按通道划分成G组}\qquad\color{blue}\text{Group Convolution}\\ &\color{blue}\boxed{\begin{aligned} &\color{black} \underbrace{\frac CG*H*W}_{\text{单组输入特征}}\mathop{\Longrightarrow}\limits^{\text{$\frac NG$个$\frac CG$*K*K卷积核}}_{\quad\;\;\vdots\;_\text{共G组}}\underbrace{\frac NG*H^\prime*W^\prime}_{\text{单组输出特征}}\\ &\color{black} \qquad\qquad\qquad\quad\;\;\Downarrow_\text{合并G组特征图}\\ &\color{black} \qquad\qquad\qquad\; \underbrace{N*H^\prime*W^\prime}_{\text{最终输出特征}} \end{aligned}} \end{aligned}
输入特征
C∗H∗W⟹N个C*K*K卷积核输出特征
N∗H′∗W′
标准卷积⇓按通道划分成G组Group Convolution单组输入特征
GC∗H∗W⋮共G组⟹GN个GC*K*K卷积核单组输出特征
GN∗H′∗W′⇓合并G组特征图最终输出特征
N∗H′∗W′
Channel Shuffle
Group Convolution可明显减少参数和计算量,但同时也存在一定的问题,如下图(a)所示:
- 连续的Group Convolution操作后,后面学到的特征仅与前面相对应组的特征有关,这使得后面学到的特征具有一定的局限性。
为打破这种局限性,采用 channel shuffle 的方法,如图(b)、(c)所示:只需将组间特征混合一下即可
ShuffleNet Unit
ShuffleNet 的 ShuffleNet Unit 基于 MobileNets v2 的 Bottleneck Unit 【 3 】 ^{【3】} 【3】 改动,均类似于ResNet:
- 1 × 1 1\times 1 1×1卷积改用 Group Convolution,且第一个 1 × 1 1\times 1 1×1卷积后面使用 Channel Shuffle
- 中间的 3 × 3 3\times 3 3×3DWcov 就是 MobileNets v1中的 Depthwise Sparable Convolutions 【 2 】 ^{【2】} 【2】
- 注意图(c)并不是直接相加,而是合并通道
ShuffleNet结构基本与ResNet相同,每个Stage中用ShuffleNet unit代替原来的Residual block即可,这里只有三个Stage
实验
ShuffleNet 0.5× 表示 filter 个数为原来的 0.5 倍
当网络较小时,精度随Group增多升高
Channel Shuffle明显提高了分类精度
参考文献
【1】Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution
【2】MobileNets v1
【3】MobileNets v2
【4】ShuffleNet算法详解
【5】CNN模型之ShuffleNet