ShuffleNet V1

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

1 摘要

我们引入了一种名为ShuffleNet的极其计算高效的CNN架构,该架构专为计算能力非常有限的移动设备而设计。新架构利用两个新的操作,逐点组卷积和通道交换,在保持准确性的同时大大降低了计算成本。ImageNet分类和MS COCO对象检测的实验证明了ShuffleNet优于其他结构的性能,例如:在40 MFLOP的计算预算下,在ImageNet分类任务上比最近的MobileNet 取得了更低的Top-1错误率。在基于ARM的移动设备上,ShuffleNet实现了比AlexNet大约快13倍的实际速度,同时保持了相近的精度。

2 简介

构建越来越大的卷积神经网络(CNN)是解决主要视觉识别任务的主要趋势。最准确的CNN通常有数百个层和数千个通道,因此需要以数十亿的FLOP进行计算。本报告研究了相反的例子:在数十或数百MFLOP的非常有限的计算预算中追求最佳准确度,专注于无人机,机器人和智能手机等常见移动平台。请注意,许多现有论文专注于剪枝,压缩或低位表示“基本”网络架构。在这里,我们的目标是探索专为我们所需的计算范围而设计的高效基本架构。

我们注意到最先进的基本架构,如Xception和ResNeXt 在极小的网络中变得效率较低,因为代价高昂的密集1×1卷积。我们提出使用逐点的组卷积来减少1×1卷积的复杂度。 为了克服组卷积所带来的副作用,我们提出了一种新颖的通道打乱功能,以帮助信息流过特征频道。基于这两种技术,我们构建了一个名为ShuffleNet的高效架构。与VGG、ResNet、ResNext等流行结构相比,对于给定的计算复杂度预算,我们的ShuffleNet允许使用更多的特征映射通道,这有助于编码更多信息,对于非常小的网络的性能尤为关键。

我们在具有挑战性的ImageNet分类和MS COCO物体检测任务上评估我们的模型。一系列对照实验表明了我们所采用的设计原则的有效性以及取得了比其他结构更好的性能。与最先进的架构MobileNet [12]相比,ShuffleNet实现了卓越的性能,例如:在40 MFLOP级别下,ImageNet top-1错误率降低7.8%。

我们还研究了真实硬件的加速。基于ARM的现成计算核心,与AlexNet相比,ShuffleNet模型实现了13倍的实际加速(理论加速比为18倍),同时保持了相当的精度。

3 相关工作

高效模型设计:最近几年,深度神经网络在计算机视觉任务中取得了成功,其中模型设计起着重要的作用。在嵌入式设备上运行高质量深度神经网络的需求日益增长,这促进了对高效模型设计的研究。例如,与简单的堆叠卷积层相比,GoogLeNet 以更低的复杂度增加了网络的深度。SqueezeNet在保持准确性的同时显着降低了参数和计算量。ResNet 利用高效的瓶颈结构来实现令人印象深刻的性能。SENet 引入了一个架构单元,以较低的计算成本提升性能。NASNet采用强化学习和模型搜索来探索有效的模型设计。移动NASNet模型与ShuffleNet模型实现了相当的性能(26.0%@ 564 MFLOPs与26.3%@ 524 MFLOPs的ImageNet 分类错误率)。但其并未报告再极小模型的结果(例如复杂度小于150 MFLOP),也未评估移动设备上的实际部署时间。

组卷积:组合卷积的概念,最初在AlexNet中引入,用于在两个GPU上分发模型,在ResNeXt已经很好地证明了它的有效性。在Xception中提出的深度可分离卷积概括了Inception系列中可分离卷积的思想。最近,MobileNet 利用深度分离卷积并在轻量级模型中获得最好的结果。我们的工作以一种新颖的形式推广了组卷积和深度可分离卷积。

通道shuffle操作:尽管CNN库cuda-convnet支持“随机稀疏卷积”层,这相当于随机的通道shuffle后跟一个组卷积层,但是在我们的知识方面,通道shuffle操作的想法在以前的有效模型设计工作中很少被提及。这种“随意shuffle”操作具有不同的目的,后来很少被研究。最近,另一项并发工作[41]也将这一想法用于两阶段卷积,但并没有专门研究通道shuffle本身的有效性及其在微小模型设计中的应用。

模型加速:该方向旨在保持预训练模型的准确率的情况下加速模型的推理速度。对预训练模型修剪网络连接或通道可在保持性能的情况下减少冗余连接。量化和因子分析被提出以减少计算中的冗余实现推理速度的加速。在不修改参数的情况下,FFT和其他方法实现的优化的卷积算法减少了实际的时间消耗。蒸馏将大型模型中的知识转化为小型模型,这使得训练小模型变得更加容易。

4 方法

4.1 组卷积中的channel shuffle

现代卷积神经网络通常由具有相同结构的重复构建块组成。其中,最先进的网络,如Xception和ResNeXt,将有效的深度可分离卷积或组卷积引入构建块,在表示能力和计算成本之间取得了良好的折衷。然而,我们注意到两种设计都没有完全考虑1×1卷积(也称为逐点卷积)具有相当复杂的性能。例如,在ResNeXt 中,只有3×3层使用了组卷积。对于ResNeXt中的每个残差单位,逐点卷积占据了93.4%的乘法 - 加法(基数= 32,如ResNext中所建议的那样)。在微小的网络中,计算昂贵的逐点卷积必须使用有限数量的通道道以满足复杂性约束,但这可能会严重损害准确性。

ShuffleNet V1_第1张图片
为解决该问题,一个直接的解决方案是使用通道稀疏连接,例如在 1 × 1 1 \times 1 1×1卷积上也使用组卷积。通过确保每个卷积仅在相应的输入通道组上操作,组卷积显着降低了计算成本。但是,如果多组卷积相互叠加,则会产生一种副作用:来自某个通道的输出仅来自一小部分的输入通道。图1(a)示出了两个堆叠的组卷积层的情况。很明显,某一组的输出仅与该组内的输入有关。此特性阻碍了通道组之间的信息流通,弱化了模型的表示能力。

如果我们允许组卷积从不同的组获得输入数据(如图1(b)所示),输入和输出通道将完全相关。具体来说,对于从前一组图层生成的特征图,我们可以先将每个组中的通道划分为多个子组,然后在下一层中为每个组提供不同的子组。通过通道shuffle操作可以有效和优雅地实现这一点(图1(c))。假设一个由g个组构成一个卷积层,其输出有g×n个通道。我们首先将输出通道尺寸reshape为(g,n),转置然后将其展平为下一层的输入。请注意,即使两个卷积具有不同的组数,该操作仍然有效。此外,channel shuffle也是可微的,这意味着它可以嵌入网络结构中进行端到端的训练。

channel shuffle操作可以构建具有多个组卷积层的更强大的结构。在下一小节中,我们将介绍一个带有channel shuffle和组卷积的高效网络单元。

4.2 ShuffleNet unit

ShuffleNet V1_第2张图片
利用channel shuffle操作,我们提出了一种专为小型网络设计的新型ShuffleNet单元。我们从图2(a)中ResNet的瓶颈单元的设计原理入手。这是一个残差块。**在其残差分支中,对于3×3层,我们在瓶颈特征图上应用计算量较小的3×3深度卷积。然后,我们用逐点组卷积替换第一个1×1层,然后进行channel shuffle操作,形成一个ShuffleNet单元,如图2(b)所示。第二个逐点组卷积的目的是恢复通道维度以匹配直连路径。**为简单起见,我们不会在第二个逐点卷积层之后应用额外的channel shuffle操作。批量归一化(BN)和非线性的使用类似于ResNet和ResNext,除了我们遵从Xception的建议在深度分离卷积之后不使用ReLU。对于ShuffleNet应用stride减小feature map空间尺寸的情况,我们只做两次修改(见图2(c)):(i)在直连通道上添加3×3的平均池化;(ii)用通道级联替换元素加法,这使得很容易扩大通道维度而几乎没有额外的计算成本

由于带有channel shuffle的逐点组卷积,ShuffleNet单元中的所有组件都可以高效地进行计算。与ResNet(瓶颈设计)和ResNeXt相比,我们的结构在相同的设置下具有较小的复杂性。例如,给定输入大小c×h×w和瓶颈通道m,ResNet单元需要 h w ( 2 c m + 9 m 2 ) hw(2cm + 9m^2) hw2cm+9m2FLOP,ResNeXt需要 h w ( 2 c m + 9 m 2 / g ) hw(2cm + 9m^2 / g) hw2cm+9m2/gFLOP,而我们的ShuffleNet单元仅需要 h w ( 2 c m / g + 9 m ) hw(2cm / g + 9m) hw2cm/g+9mFLOP( 这里是不是有错误,无论逐点卷积在前还是在后,深度可分离卷积的计算量都应该是wh(9m+cm),而不是这里所写的wh(9m)),其中g表示组卷积中的组数。换句话说,给定固定的计算成本,ShuffleNet可以使用更宽的特征映射。我们发现这对小型网络至关重要,因为微型网络通常没有足够的通道来处理信息。

此外,在ShuffleNet中,深度卷积仅在瓶颈特征图上执行。尽管深度卷积通常具有非常低的理论复杂度,但我们发现很难有效地在低功率移动设备上实现,这可能是由于与其他密集操作相比更糟糕的计算/内存访问率。这种缺点也在Xception中提到,其具有基于TensorFlow的运行时库。在ShuffleNet单元中,我们故意仅在瓶颈上使用深度卷积,以便尽可能地防止过多的开销。

4.3 网络结构

ShuffleNet V1_第3张图片
基于ShuffleNet单元,我们在表1中展示了整个ShuffleNet架构。提出的网络主要由一堆ShuffleNet单元组成,分为三个阶段。每个阶段的第一个构建块使用stride = 2。同一阶段内的其他超参数保持不变,但是对于下一阶段,输出通道加倍。与ResNet类似,我们将每个ShuffleNet单元的瓶颈通道数设置为输出通道的1/4。我们的目的是提供尽可能简单的参考设计,尽管我们发现进一步的超参数调整可能会产生更好的结果。

在ShuffleNet单元中,组数量g控制逐点卷积的连接稀疏性。表1探讨了不同的组数量,我们调整了输出通道数目,以确保总体计算成本大致不变(~140 MFLOPs)。显然,对于给定的复杂性约束,较大的组数量导致更多的输出通道(因此使用了更多的卷积滤波器),这有助于编码更多信息,尽管由于相应的输入通道数的减少,也可能导致单个卷积滤波器的效果退化。在5.1.1节中,我们将研究这个数字对不同计算约束的影响。

为了将网络定制为所需的复杂度,我们可以简单地对通道数乘以比例因子 s s s。例如,我们将表1中的网络表示为“ShuffleNet 1×”,然后“ShuffleNet s×”表示将ShuffleNet 1×中的滤波器数量缩放s倍,因此整体复杂度大约是ShuffleNet 1×的 s 2 s^2 s2倍。

5 实验

我们主要在ImageNet 2012分类数据集上评估我们的模型。我们遵循ResNext中使用的大多数训练设置和超参数,但有两个例外:(i)我们将权重衰减设定为4e-5而不是1e-4且使用线性衰减学习率策略(从0.5减少到0);(ii)我们使用稍微不那么激进的比例增加来进行数据预处理。在MobeilNet中也提到了类似的修改,因为这种小型网络通常会受到欠拟合而不是过度拟合的影响。在4个GPU上训练模型进行 3 × 1 0 5 3×10^5 3×105次迭代需要1到2天,其batch大小设置为1024。为了进行基准测试,我们比较ImageNet验证集上的单一crop的Top-1的表现,即从256×输入图像中裁剪224×224中心视图来评估分类准确度。我们对所有模型使用完全相同的设置以确保公平比较。

5.1 逐项研究

ShuffleNet的核心思想在于逐点组卷积和channel shuffle操作。在本小节中,我们分别对它们进行评估。

5.1.1 逐点组卷积

为了评估逐点组卷积的重要性,我们比较了相同复杂度的ShuffleNet模型,其组数从1到8不等。如果组号等于1,则不涉及逐点组卷积,此时ShuffleNet单元变为“Xception-like”结构。为了更好地理解,我们还将网络的宽度扩展为3个不同的复杂系统,并分别比较它们的分类性能。结果如表2所示。

ShuffleNet V1_第4张图片
从结果中我们可以看出,具有组卷积(g> 1)的模型始终比没有逐点组卷积的网络表现更好(g = 1)。较小的模型往往会从群体中获益更多。例如,对于ShuffleNet 1×,最佳条目(g = 8)比对手好1.2%,而对于ShuffleNet 0.5×和0.25×,性能提升分别变为3.5%和4.4%。请注意,对于给定的复杂性约束,组卷积允许使用更多的特征映射通道,因此我们假设性能增益来自更宽的特征映射,这有助于编码更多信息。此外,较小的网络涉及更薄的特征映射,这意味着它从扩大的特征映射中获益更多。

表2还显示,对于某些模型(例如ShuffleNet 0.5×),当组数目变得相对较大时(例如,g=8),分类得分饱和甚至下降。随着组数的增加(因此更宽的特征映射),每个卷积滤波器的输入通道变得更少,这可能会损害表示能力。有趣的是,我们还注意到,对于像ShuffleNet 0.25×这样的较小网络,较大的群组数量往往能够取得更好地效果,这表明更宽的特征图为更小的模型带来了更多的好处。

5.1.2 channel shuffle vs. no shuffle

ShuffleNet V1_第5张图片
channel shuffle的目的是为多个组卷积层启用跨组的信息交流。表3比较了有/无channel shuffle的ShuffleNet结构的性能(组号设置为3或8)。评估在三个不同的复杂程度下进行。很明显,channel shuffle不断提高不同设置的分类分数。特别是,当组号相对较大(例如g = 8)时,具有channel shuffle的模型的表现明显优于不具有的模型,这表明了跨组信息交换的重要性。

5.2 和其他结构单元进行对比

VGG,ResNet,GoogleNet ,ResNeXt 和Xception中最近领先的卷积单元使用大型模型(例如≥1GFLOPs)追求最先进的结果),但不充分探索低复杂性条件下模型的性能。在本节中,我们将调查各种构建块,并在相同的复杂性约束下与ShuffleNet进行比较。

为了公平比较,我们使用如表1所示的整体网络架构。我们将阶段2-4中的ShuffleNet单元替换为其他结构,然后调整通道数以确保复杂性保持不变。我们探索的结构包括:

  • VGG式:遵循VGG网络的设计原则,我们使用两层3×3卷积作为基本构建块。与VGG不同,我们在每个卷积之后添加批量标准化层(BN层),以便更容易地进行端到端训练。
  • ResNet式:我们在我们的实验中采用了“瓶颈”设计,这在ResNet中得到了更有效的证明。与ResNet相同,瓶颈比率也是1:4。
  • Xception式:Xception中提出的原始结构涉及不同阶段的花哨设计或超参数,我们发现难以在小模型上进行公平比较。相反,我们从ShuffleNet中移除了逐点组卷积和channel shuffle操作(也相当于具有g = 1的ShuffleNet)。派生结构与Xception中的“深度可分离卷积”具有相同的概念,这里称为类似Xception的结构。
  • ResNext式:我们设置ResNext中的基数= 16和瓶颈比= 1:2的,我们还会探索其他设置,例如瓶颈比= 1:4,并得到类似的结果。

ShuffleNet V1_第6张图片
我们使用完全相同的设置来训练这些模型。结果如表4所示。我们的ShuffleNet模型在不同的复杂性下很大程度上超过了其他模型。有趣的是,我们发现了特征映射通道数和分类准确性之间的经验关系。例如,在38 MFLOP的复杂度下,类似VGG,ResNet,ResNeXt,Xception-like,ShuffleNet模型的第4阶段(见表1)的输出通道分别为50,192,192,288,576,这和准确率的增长保持了一致。由于ShuffleNet的有效设计,我们可以在给定的计算预算中使用更多的通道,因此通常可以获得更好的性能。

请注意,上述比较不包括GoogleNet或Inception系列。我们发现为小网络生成这样的Inception结构并不容易,因为Inception模块的原始设计中存在太多的超参数。作为参考,第一个GoogleNet版本以1.5 GFLOP的成本实现了31.3%的Top-1错误率(参见表6)。

ShuffleNet V1_第7张图片
更复杂的Inception版本[34,32]更准确,但是显著增加了复杂性。最近,Kim等人提出了一个名为PVANET的轻量级网络结构,它采用了Inception单元。我们重新实现的PVANET(具有224×224输入大小)具有29.7%的分类错误,计算复杂度为557 MFLOP,而我们的ShuffleNet 2x模型(g = 3)在524 MFLOP时获得26.3%(参见表6)。

5.3 与MobeilNet及其他网络进行比较

最近Howard等人提出了MobileNets,它主要关注移动设备的高效网络架构。MobileNet从Xception中借鉴深度可分离卷积的思想,并在小型模型上实现最先进的结果。

ShuffleNet V1_第8张图片
表5比较了各种复杂程度下的分类分数。很明显,我们的ShuffleNet模型在所有复杂性方面都优于MobileNet。虽然我们的ShuffleNet网络专为小型号(<150 MFLOP)而设计,但我们发现它在更高计算代价下仍然比MobileNet更好。例如在500 MFLOP计算量的情况下,比MobileNet 1×精确3.1%。对于较小的网络(约40 MFLOP),ShuffleNet超过MobileNet 7.8%。请注意,我们的ShuffleNet架构包含50层,而MobileNet只有28层。为了更好地理解,我们还通过删除阶段2-4中的一半块来在26层架构上尝试ShuffleNet(参见表5中的“ShuffleNet 0.5×浅(g = 3)”)。结果表明,较浅的模型仍然明显优于相应的MobileNet,这意味着ShuffleNet的有效性主要来自其有效的结构,而不是深度。

表6将我们的ShuffleNet与一些流行的网络进行了比较。结果表明,具有相似的准确性时ShuffleNet比其他网络更高效。例如,ShuffleNet 0.5×在具有可比较的分类准确率时,理论上比AlexNet快18倍。我们将在第5.5节中评估实际运行时间。

值得注意的是,简单的架构设计使得ShuffeNets能够轻松配备aqueezeNet等最新研究成果。 例如,在squeezeNet中,作者提出了实现的挤压和扩展(SE)块在大的ImageNet模型上取得了SOTA的效果。我们发现SE模块也可以ShuffleNets的骨干网络一起使用,例如,将ShuffleNet 2×的Top-1误差提升到24.7%(如表5所示)。

5.4 泛化能力

为了评估迁移学习的泛化能力,我们在MS COCO目标检测的任务上测试我们的ShuffleNet模型。我们采用Faster-RCNN 作为检测框架,并使用公开发布的Caffe代码进行默认设置的训练。与[12]类似,模型在COCO train + val数据集上训练,不包括5000个迷你图像,我们对迷你验证集进行测试。 表7显示了在两种输入分辨率下训练和评估的结果的比较。

ShuffleNet V1_第9张图片
将具有相近相似度(524 vs. 569 MFLOPS)的shuffleNet 2x模型和MobeilNet模型进行比较,我们的ShuffleNet 2×在两个分辨率上都大大超过了MobileNet;我们的ShuffleNet 1×也可以在600×分辨率下与MobileNet实现可比较的结果,但具有约4倍的复杂性降低。我们猜想这一重大收益部分归功于ShuffleNet简单的架构设计,没有复杂的结构设计。

5.5 实际速度验证

ShuffleNet V1_第10张图片
最后,我们在具有ARM平台的移动设备上评估ShuffleNet模型的实际推断速度。虽然具有较大组数(例如g = 4或g = 8)的ShuffleNets通常具有更好的性能,但我们发现它在我们当前的实现中效率较低。根据经验,g = 3通常在准确度和实际推理时间之间进行了适当的权衡。如表8所示,使用三种输入分辨率用于测试。由于存储器访问和其他开销,我们发现每4倍理论复杂度降低通常会导致我们的实现中实际加速约2.6倍。然而,与AlexNet相比,我们的ShuffleNet 0.5×模型在可比分类精度(理论上的加速比为18×)下仍能实现13倍的实际加速,这比以前的AlexNet级模型或加速方法快得多。

6 总结

本文对 1x1卷积使用分组卷积,同时使用 3x3的深度可分离卷积,同时进行channel shuffle操作以进行跨组的信息流动,在减小模型复杂度的情况下有效提升了模型的效果。实验结果表明,ShffleNet取得了比SqueezeNet和MobeilNet更好的效果和更低的处理复杂度。

你可能感兴趣的:(CNN-,分类)