轻量级网络之ShuffleNet
原论文——ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
介绍
目前深度学习网络已经取得很大的成功,但是模型参数巨大,计算量以GFLOPs计,导致难以应用到手机等嵌入设备中。因此有许多学者研究如何在适当的MFLOPs下取得好的效果,大致有几个方向:剪枝(pruning),量化(quantization,低维表达),蒸馏(distill)和网络结构的优化,而shufflenet旨在优化网络基础结构。
论文提出了一种新的轻量级网络架构ShuffleNet,包括了两个新的操作operations: pointwise group convolution and channel shuffle,减少计算的同时保持好的准确率。
方法
在讲shufflenet前先回顾下深度可分离卷积和分组卷积:
Depthwise Separable Convolution (Preliminary)
深度可分离卷积由MobileNet提出,主要用于降低传统卷积的计算复杂度。如下图,(a)为标准卷积操作,(a) (c) 为深度可分离卷积,它将标准卷积分为了两步:
(1) Depthwise Convolution, 用跟输入的channel一样大小的M个卷积核,分别于输入的map对应的channel进行卷积操作;
(2) Pointwise Convolution,标准的1×1卷积,做通道融合变换。
Group Convolution (Preliminary)
论文中提到的分组卷积有ResNeXt和Xception,这里就不列出来了,本质就是将channel通道分组,分别做卷积,以减少计算复杂度(后面会涉及)。
Channel Shuffle for Group Convolution
如下图,(a)是分组卷积,分为三组,然后分别卷积。这里就会出现一个问题,每个组之间是独立的,没有信息交流,传递的,因此,基于此问题论文提出了channel shuffle的操作,将组之间的特征进行交换(shuffle),使得每个组包含了其他组的特征,如图(b)和(c)所示。
实现:假设一个g个group的卷积层输出为g x n个channels, 首先reshape为大小(g, n),然后转置为(n, g),最后reshape为gn维。这样每个组的n channels里就会有其他组的特征。这种实现非常简单,可适用于不同channel大小,并且是可导的。
ShuffleNet Unit
图(a)是resnet的bottleneck block,其中3x3卷积被替换为depthwise conv (DWConv);(b) 1x1卷积替换为group conv(GConv), 加channel shuffle;(c) 为下采样时采用的结构。
复杂度:c × h × w, bottleneck channel 为m的Resnet Block, 复杂度为 . shufflenet为 FLOPs,可见很大地减少了计算量。
Architechture
下图为shufflenet结构,并列举了在140MFLOPs下的不同group g 的channel大小,可见g越大,有较大的channels去保存信息,从而提高准确率。
Experiment
论文首先验证group conv带来的作用,如下图所示,g=8/7时分类误差是最小的。
接着验证shuffle的作用,如下表,可见channel shuffle起到了一个很大的作用。
和其他结构如vgg,resnet等的对比:
和mobilenet对比
在目标检测任务上:
总结
论文使用了channel shuffle的group conv,降低了计算量,提高了精度。但是,作者在shufflenet v2把group conv给否定了,为什么呢?答案就在我的下一篇解读轻量级网络之ShuffleNet v2。