【论文学习】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

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

1. Abstract

作者介绍了一种运算极其高效的CNN架构,ShuffleNet。ShuffleNet主要应用在计算能力有限的移动设备上(如10-150MFLOPs)。ShuffleNet主要采用两种新的操作:逐点组卷积(pointwise group convolution)和通道重组(channel shuffle),这两种操作在保证准确度的同时能够大幅度地减少运算代价。作者在ImageNet分类数据集和MS COCO的目标检测数据集上进行实验。实验结果表明ShuffleNet比其他的网络结构的性能要好(比如,在ImageNet分类任务上,40MFLOPs的运算限制时,top-1的错误率比MobileNet要低7.8%)。作者在ARM移动设备进行的实验发现ShuffleNet与AlexNet相比在保证准确度的同时实现了13倍的加速。

2. Motivation(problem + key insight)

解决当前主流的计算机视觉任务的主要趋势就是建立层次更深、更大的卷积神经网络,这样网络的准确率会增加。通常,准确率较高的CNN网络的通道数多达几百个甚至是上千。由此引发的问题是:运算代价极高。小型网络在移动设备上的准确率较低。ShuffleNet就是通过提出一种新的网络结构,可以应用在运算受限的移动设备上,可以在期望的运算范围内保证高效和高准确度。
像Xception和ResNeXt这样的当前最先进的网络引入深度可分离卷积(depthwise separable convolutions)或者组卷积(group convolutions)来权衡表征容量和运算代价,但是这两种方法都没有充分考虑1*1的卷积,然而1*1卷积占据了很大一部分的运算。比如在ResNeXt中,只有3*3卷积应用了组卷积,1*1卷积占据了93.4%的multiplication-adds,因而在小型网络中,运算量庞大的逐点卷积导致其精度下降。
为了解决这个问题,作者应用了通道稀松连接,比如组卷积方式,在1*1卷积上也是,即逐点组卷积。组卷积的概念首先在AlexNet中提出,为了解决在两个GPU上训练模型,后来在ResNeXt中应用。逐点组卷积是组卷积和深度可分离卷积综合应用的一种新形式。但是由于组卷积会带来一个副作用:一个组的输出仅和这个组的输入有关,这阻碍了组与组之间的信息交流,也使得特征表示减弱。
为了减弱组卷积带来的副作用,作者提出了通道重组的方法。通道重组就是由之前层生成的feature map在进入下一层之前首先把通道分进几个子组(subgroup),然后用不同的子组填满每个组。假设一个卷积层有g个组,则输出有g*n个通道(文中没有给出n的含义,应该是每个group的通道数)。而且,通道重组是可微的,这就意味着这种方法可以应用到网络结构中。具体实现如图1。
【论文学习】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices_第1张图片

3. Network Design

ShuffleNet的两个核心操作是逐点组卷积和通道重组,在网络设计中关键的一步是组卷积的通道重组,实现和图1类似。
ShuffleNet的核心设计是ShuffleNet unit。ShuffleNet unit专门为小型网络设计。具体设计见图2。ShuffleNet unit的设计由bottleneck unit而来。(a)中是ResNet的bottleneck unit,只是把其中的3*3 Conv换成了3*3 DWConv,在1*1 Conv和3*3 DWConv后都紧跟一个BN和ReLU,最后接一个1*1 Conv,经过BN的结果进行Add操作,最终输出前再经过一个ReLU。而ShuffleNet unit如(b),把所有的1*1 Conv变成1*1 GConv,即pointwise group convolution,第二个逐点组卷积是为了恢复通道的维度,以匹配捷径;在第一个1*1 GConv后接BN和ReLU;在进入3*3 DWConv前经过一次channel shuffle操作,最后1*1 GConv经过BN的结果进行Add操作,同样经过ReLU输出结果。(c)中在shortcut path中添加了一个3*3 average pooling,设置stride=2,最后的Add操作也改成了concat(极联)操作,即按channel合并。
【论文学习】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices_第2张图片
在ShuffleNet中,深度可分离卷积只在bottleneck feature maps上发挥作用,因为深度卷积尽管理论复杂度很低,但是很难在移动设备上实现。
ShuffleNet架构建立在ShuffleNet unit之上。见表1。网络主要由一堆分为三个阶段的ShuffleNet units组成。每个阶段的第一个building block的stride=2。在同一个阶段的其他超参数是一样的。在ShuffleNet units中,组数g控制着逐点卷积的稀疏程度。很明显,组数越多,输出通道数越多,卷积核越多,编码信息越多,在实验中也会发现一定的运算限制下,性能越好。
【论文学习】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices_第3张图片

4. Experiment

作者在ImageNet 2012分类数据集上进行模型评估,大部分的训练设置和超参数都和ResNeXt相同,只是weight decay设置为4e-5而不是1e-4,使用线性learning rate策略(从0.5下降到0);数据处理使用不太具有侵略性的规模增强。

4.1 Ablation Study

4.1.1 Pointwise Group Convolution

首先是逐点组卷积。作者比较了组数分贝为1-8的8组实验结果。组数为1,即没有使用逐点组卷积。而且,作者把网络的宽度拓展为3种不同的复杂度,分别比较相应性能。表2为实验结果。从实验结果来看,使用组卷积的模型(g>1)性能要比没有使用组卷积的模型(g=1)好,且复杂度越小,性能差距就越大。这是很容易理解的。因为在一定的复杂度限制时,组卷积操作会产生更多的特征图通道,信息编码也会更多;另一方面,更小的网络可以从较大的特征图中获益更多,因而复杂度越小,使用组卷积和不使用组卷积之间的性能差距也会更大。对于某些模型(如,ShuffleNet 0.5x),当组数相对较大(g=8)时,分类性能达到饱和,甚至可能会下降。这是因为组数的增加(特征图宽度增加),每个卷积核的输入通道变少,这可能会损害表征容量。
【论文学习】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices_第4张图片

4.1.2 Channel Shuffle vs. No Shuffle

通道重组是使信息可以跨通道交流。表3比较了进行了通道重组操作以及没有进行通道重组操作的ShuffleNet结构(组数分别为3和8)的实验结果。很明显通道重组操作在不同的运算复杂度下都提升了分类得分。当组数很大(g=8)的时候,性能提升尤为明显。
【论文学习】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices_第5张图片

4.2 Comparison with Other Structure Units

作者比较了同样的运算限制下ShuffleNet和其他的一些网络结构(VGG、ResNet、Xception、ResNeXt)。VGG和Xception都是使用相似的网络结构,VGG-like和Xception-like。作者使用了一个两层的3*3卷积作为基本的building block并在每个卷积后增加一个Batch Normalization建立VGG-like;ResNet中的bottleneck ratio设置为1:4;作者除去了ShuffleNet中的逐点组卷积和通道重组并且设置组数为1,由此建立Xception-like;ResNeXt中cardinality=16,bottleneck ratio=1:2。比较结果在表4中显示。实验结果显示在不同的复杂度时,ShuffleNet比大多数网络的性能都要好。在实验中,作者发现特征图通道越多,分类的准确性就越高。
【论文学习】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices_第6张图片
和GoogleNet以及Inception系列模型的比较结果在表6中显示。很难在小型网络中生成这些网络,因为Inception的原始设计中的超参数太多了。作者比较的是复现的PVANET(使用Inception unit的一个轻量级网络)。复现的PVANET(224*224输入大小)分类错误率29.7%,运算限制为557MFLOPs,ShuffleNet 2x(g=3)分类错误率为26.3%,运算限制为524MFLOPs。
【论文学习】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices_第7张图片

4.3 Comparison with MobileNets and Other Frameworks

MobileNets采用深度可分离卷积,主要应用在移动或嵌入式设备上,实现了小型网中当前最先进的结果。
表5比较了不同的复杂度水平下ShuffleNet和MobileNet分类结果得分。很明显ShuffleNet性能要优于MobileNet。ShuffleNet架构中有50层,MobileNet有28层,作者同样在26层的架构中尝试了ShuffleNet(表5中的ShuffleNet 0.5x shallow(g=3)),结果仍然比相应的MobileNet要好,这说明,ShuffleNet的高效性主要来自它的高效结构而不是其深度
【论文学习】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices_第8张图片

4.4 Generalization Ability

作者在MS COCO目标检测数据集上评估generalization ability。表7中展示训练以及在两种输入分辨率上的比较结果。ShuffleNet 2x和MobileNet的复杂度相似(524 vs. 569 MFLOPs),在两种分辨率上,ShuffleNet 2x性能超过MobileNet很多。ShuffleNet 1x和MobileNet在600分辨率上结果相似,但是复杂度减少了4倍。作者推测这种性能的显著提升是由于ShuffleNet的简单架构设计。
【论文学习】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices_第9张图片

4.5 Actual Speedup Evaluation

作者在一个ARM设备上检测ShuffleNet模型的实际速度。在ARM设备上不适合选择较大的组数(g=4或g=8),在目前的实现中并不高效。在表8中g=3,因为g=3时在准确度和实际运行时间中有一个较好的折中。由于内存访问和其他的限制,作者发现复杂度每下降4倍,就会有2.6倍的运行加速。而且,和AlexNet相比,ShuffleNet 0.5x不仅实现了相似的分类准确度,还实现了13倍的实际加速。
【论文学习】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices_第10张图片

你可能感兴趣的:(论文学习,深度学习,计算机视觉)