轻量级网络之ShuffleNet

论文:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Device

论文链接:https://arxiv.org/abs/1707.01083

代码:

  • Caffe

算法详解:

ShuffleNet是Face++提出的一种针对移动设备的轻量级网络,专注于设计更好的模型,直接提高性能,而不是加速或转换现有模型。这篇文章可以和ResNet,以及同是轻量级网络的SqueezeNet, Xception和MobileNet对照着看,因为有类似的思想。

ResNet网络用残差来构成一个极深的深度神经网络,并使用bottleneck(用多个小卷积替代一个大卷积),以减少计算和参数量;SqueezeNet网络基本单元采用了模块化卷积,即Fire module(包括1x1卷积核的squeeze层,以及混合使用1x1和3x3卷积核的expand层);Xception是google继Inception后提出的对Inception v3的一种改进,主要采用depthwise separable convolution来替换原来Inception v3中的卷积操作;MobileNet主要基于流线型架构(streamlined),使用深度可分离卷积(depthwise separable convolutions,即Xception变体结构)来构建轻量级深度神经网络。

ShuffleNet网络主要使用pointwise group convolution和channel shuffle两种特殊处理方式,达到保证准确率的同时,减少计算量。网络结构如下图所示:

轻量级网络之ShuffleNet_第1张图片

图(a)表示一个带有depthwise convolution(简称DW)的bottleneck单元,如Resnet;图(b)表示基本的ShuffleNet单元,其包含pointwise group convolution (GConv) 和channel shuffle操作;图(c)表示stride=2的ShuffleNet单元。

pointwise group convolution,其实是卷积核为1*1的group convolution操作。group convolution即分组卷积,最早见于AlexNet,在AlexNet中被用来切分网络,使其在2个GPU上并行运行。group conv还可实现通道之间的稀疏连接,假设channel=N,则group conv的具体操作为:

(1)将channel分为M份,则每个group对应N/M个channel;

(2)各个group卷积完成后进行concat,也就是按channel合并,作为这一层的输出channel;

从上图可以看出,论文中其实还使用了深度可分分离卷积(depthwise separable convolution),详细可参考MobileNet。

pointwise group convolution可降低计算量,但是group与group之间几乎没有联系,降低了通道之间的信息流通,从而影响网络的准确率,于是作者又提出了channel shuffle来加强group之间的联系。

channel shuffle如下图所示,也就是将每个group分成几个subgroup,然后将不同group的subgroup作为一个新的group,从而使得新的group带有之前所有group的特征信息。

轻量级网络之ShuffleNet_第2张图片

 下图是ShuffleNet的网络结构,和ResNet类似。ShuffleNet包括3个stage,其中每个stage用ShuffleNet unit代替原来的Residual block,组数g控制了pointwise convolutions的稀疏性。随着g的变化,控制输出通道数的大小使得计算花销保持不变(140 MFLOPs)。显然,对于给定的复杂度约束,较大的组数会导致更多的输出通道(从而产生更多卷积滤波器),这有助于编码更多的信息,然而组数越多会使得每组的通道数减少,也可能导致单个卷积滤波器的性能下降。

轻量级网络之ShuffleNet_第3张图片

实验结果:

轻量级网络之ShuffleNet_第4张图片

可以看出,ShuffleNet性能和速度还不错。

总结:

ShuffleNet的核心就是用pointwise group convolution,channel shuffle和depthwise separable convolution代替ResNet block的相应层构成了ShuffleNet uint,达到了减少计算量和提高准确率的目的。其中pointwise group convolution和depthwise separable convolution主要减少了计算量,channel shuffle实现了跨组信息交换,提高了识别率。

个人观点,有不当的地方还请指正。

你可能感兴趣的:(轻量级网络)