深度学习,卷积网络,轻量级计算

背景

作者介绍了一种运算极其高效的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倍的加速。

方法

关于组卷积的信道重组

逐点卷积(pointwise convolution): 1*1 卷积。 在微型网络中,昂贵的逐点卷积会导致满足复杂度约束的信道数量有限,这可能会显著降低精度。

组卷积(group convolution):分组进行卷积运算。

最早见于AlexNet——2012年Imagenet的冠军方法,Group Convolution被用来切分网络,使其在2个GPU上并行运行,AlexNet网络结构如下:

【论文拆解】《ShuffleNet: An Extremely Efficient Convolutional Neural Network for
Mobile Devices》 - 图1

【论文拆解】《ShuffleNet: An Extremely Efficient Convolutional Neural Network for
Mobile Devices》 - 图2

减少参数量,分成G组,则该层的参数量减少为原来的1/G;当分组数=卷积核数=输入特征数,即为Depthwise Convolution。

副作用:每组输出只和输入有关,衰减组间通信联系。

通道重组(channel shuffle): 重组分组(group)和通道(channel),进行组卷积。

【论文拆解】《ShuffleNet: An Extremely Efficient Convolutional Neural Network for
Mobile Devices》 - 图3

带有两个组卷积的信道重组。GConv代表组卷积。A)两个具有相同组数的卷积层。每个输出通道只与组内的输入通道相关;b) GConv1之后,GConv2接受不同分组的数据时,输入输出通道完全相关;c)与b)使用信道重组的等效实现。

ShuffleNet单元

ShuffleNet的核心设计是ShuffleNet unit。ShuffleNet unit专门为小型网络设计。具体设计见下图。ShuffleNet unit的设计由bottleneck unit而来。(a)中是ResNet的bottleneck unit,只是把其中的33 Conv换成了33 DWConv,在11 Conv和33 DWConv后都紧跟一个BN和ReLU,最后接一个11 Conv,经过BN的结果进行Add操作,最终输出前再经过一个ReLU。而ShuffleNet unit如(b),把所有的11 Conv变成11 GConv,即pointwise group convolution,第二个逐点组卷积是为了恢复通道的维度,以匹配捷径;在第一个11 GConv后接BN和ReLU;在进入33 DWConv前经过一次channel shuffle操作,最后11 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》 - 图4

ShuffleNet单位,a)具有深度卷积(DWConv)的瓶颈单元;b)采用点态组卷积(GConv)和信道变换的ShuffleNet单元;c) stride = 2的ShuffleNet单位。

在ShuffleNet中,深度可分离卷积只在bottleneck feature maps上发挥作用,因为深度卷积尽管理论复杂度很低,但是很难在移动设备上实现。ShuffleNet架构建立在ShuffleNet unit之上。见下表。网络主要由一堆分为三个阶段的ShuffleNet units组成。每个阶段的第一个building block的stride=2。在同一个阶段的其他超参数是一样的。在ShuffleNet units中,组数g控制着逐点卷积的稀疏程度。很明显,组数越多,输出通道数越多,卷积核越多,编码信息越多,在实验中也会发现一定的运算限制下,性能越好。

【论文拆解】《ShuffleNet: An Extremely Efficient Convolutional Neural Network for
Mobile Devices》 - 图5

实验结果

4.1 消融实验

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》 - 图6

s x代表卷积核大小。分类错误与各种结构(%,越小的数字代表越好的性能)。

4.1.2 Channel Shuffle vs. No Shuffle

通道重组是使信息可以跨通道交流。表3比较了进行了通道重组操作以及没有进行通道重组操作的ShuffleNet结构(组数分别为3和8)的实验结果。很明显通道重组操作在不同的运算复杂度下都提升了分类得分。当组数很大(g=8)的时候,性能提升尤为明显。

【论文拆解】《ShuffleNet: An Extremely Efficient Convolutional Neural Network for
Mobile Devices》 - 图7

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。比较结果在下表中显示。实验结果显示在不同的复杂度时,ShuffleNet比大多数网络的性能都要好。在实验中,作者发现特征图通道越多,分类的准确性就越高。

【论文拆解】《ShuffleNet: An Extremely Efficient Convolutional Neural Network for
Mobile Devices》 - 图8

4.3 Comparison with MobileNets and Other Frameworks

MobileNets采用深度可分离卷积,主要应用在移动或嵌入式设备上,实现了小型网中当前最先进的结果。

下表比较了不同的复杂度水平下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》 - 图9

4.4 Generalization Ability

作者在MS COCO目标检测数据集上评估generalization ability。下表中展示训练以及在两种输入分辨率上的比较结果。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》 - 图10

4.5 Actual Speedup Evaluation

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

【论文拆解】《ShuffleNet: An Extremely Efficient Convolutional Neural Network for
Mobile Devices》 - 图11