ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

Abstract

  • 我们介绍了一种名为ShuffleNet的极其计算高效的CNN架构,该架构专为计算能力非常有限的移动设备而设计。新架构采用了两种新的操作,逐点组卷积和通道切换,大大降低了计算成本,同时保持了准确性。ImageNet分类和MS COCO物体检测的实验证明了ShuffleNet优于其他结构的优越性能,例如: 在40MFLOP的计算预算下,其在ImageNet分类任务中比MobileNet的TOP-1(绝对7.8%)的错误率还低。在基于ARM的移动设备上,ShuffleNet实现了比AlexNet大约13倍的实际加速,同时保持了相当的精度。

Introduction

  • 构建越来越大的卷积神经网络(CNN)是解决主要视觉识别任务的主要趋势。最准确的CNN通常具有数百个层和数千个通道,因此需要以数十亿Flops计算。本报告研究了相反的极端:在数十或数百MFLOP的非常有限的计算预算中追求最佳精度,专注于无人机,机器人和智能手机等常见移动平台。请注意,许多现有工作集中在表示“基本”网络架构的修剪,压缩或低位。 在这里,我们的目标是探索一种高效的基本架构,专为我们所需的计算范围而设计。
  • 我们注意到最先进的基本架构,如Xception和ResNeX在极小的网络中变得不那么有效,因为昂贵的密集1×1卷积。我们建议使用逐点组卷积来降低1×1卷积的计算复杂度。 为了克服群体卷积带来的副作用,我们提出了一种新颖的渠道shuffle操作来帮助跨越特征通道的信息。 基于这两种技术,我们构建了一个名为ShuffleNet的高效架构。 与流行结构相比,对于给定的计算复杂度预算,我们的ShuffleNet允许更多的特征映射通道,这有助于编码更多信息,对于非常小的网络的性能尤其重要。
  • 我们根据具有挑战性的ImageNet分类和MS COCO物体检测任务评估我们的模型。 一系列对照实验表明了我们的设计原则的有效性以及比其他结构更好的性能。与最先进的架构MobileNet相比,ShuffleNet以显着的优势实现了卓越的性能,例如: 在40 MFLOP级别下,ImageNet top-1错误绝对降低7.8%。

Related Work

  • 最近几年,深度神经网络在计算机视觉任务中取得了成功[21,36,28],其中模型设计起着重要作用。在嵌入式设备上运行高质量深度神经网络的需求日益增长,这促进了对高效模型设计的研究。例如,与简单地堆叠卷积层相比,GoogLeNet [33]以更低的复杂度增加了网络的深度。 SqueezeNet [14]在保持精度的同时显着降低了参数和计算量。 ResNet [9,10]利用高效的瓶颈结构来实现令人印象深刻的性能。SENet [13]引入了一种架构单元,可以以较低的计算成本提升性能。
  • 组合卷积的概念首先在AlexNet [21]中引入,用于在两个GPU上分布模型,已经很好地证明了它在ResNeXt中的有效性[40]。 Xception [3]中提出的深度可分卷积概括了初始序列[34,32]中可分离卷积的思想。 最近,MobileNet [12]利用深度可分离卷积并在轻量级模型中获得最先进的结果。 我们的工作以一种新颖的形式概括了群卷积和深度可分卷积。
  • 尽管CNN库cuda-convnet [20]支持“随机稀疏卷积”层,这相当于随机信道shuffle,然而据我们所知,在高效模型设计的前期工作中很少提及信道shuffle操作的想法。 一组卷积层。 这种“随机shuffle”操作具有不同的目的,后来很少被利用。 最近,另一项并发工作[41]也将这一想法用于两阶段卷积。 然而,[41]没有专门研究通道shuffle本身的有效性及其在微小模型设计中的应用。
  • 该方向旨在加速推理,同时保持预训练模型的准确性。 修剪网络连接[6,7]或通道[38]可减少预训练模型中的冗余连接,同时保持性能。 在文献中提出量化[31,27,39,45,44]和因子分解[22,16,18,37]以减少计算中的冗余以加速推断。 在不修改参数的情况下,FFT [25,35]和其他方法[2]简单的优化卷积算法在实践中减少了时间消耗。 蒸馏[11]将知识从大型模型转移到小型模型中,这使得培训小型模型变得更加容易。

Approach

  • 现代卷积神经网络[30,33,34,32,9,10]通常由具有相同结构的重复构建块组成。 其中,最先进的网络,如Xception [3]和ResNeXt [40],将高效的深度可分离卷积或群组卷积引入构建块,以在表示能力和计算成本之间取得良好的折衷。 然而,我们注意到两种设计都没有完全考虑1×1卷积(在[12]中也称为逐点卷积),这需要相当大的复杂性。 例如,在ResNeXt [40]中,只有3×3层配备了组卷积。 因此,对于ResNeXt中的每个残差单位,逐点卷积占据乘法 - 加法的93.4%(基数= 32,如[40]中所建议的)。 在微小的网络中,昂贵的逐点卷积导致有限数量的信道满足复杂性约束,这可能会显着损害准确性。
  • 为了解决这个问题,一个简单的解决方案是在1×1层上应用通道稀疏连接,例如组卷积。 通过确保每个卷积仅在相应的输入通道组上操作,组卷积显着降低了计算成本。 但是,如果多个组卷积堆叠在一起,则会产生一些影响:某些通道的输出仅来自一小部分输入通道。 图1(a)示出了两个堆叠的组卷积层的情况。 很明显,某一组的输出仅与该组内的输入有关。 此属性阻止通道组之间的信息流并削弱表示。
  • 如果我们允许组卷积从不同的组获得输入数据(如图1(b)所示),输入和输出通道将完全相关。 具体而言,对于从前一组图层生成的特征图,我们可以首先将每个组中的通道划分为多个子组,然后在下一层中为每个组提供不同的子组。 这可以通过信道shuf fl e操作有效和优雅地实现(图1(c)):假设具有g组的卷积层,其输出具有g×n个信道; 我们首先将输出通道尺寸重新整形为(g,n),转置然后将其作为下一层的输入进行反复处理。 请注意,即使两个卷数具有不同的组数,该操作仍然有效。 此外,信道shuffle也是可区分的,这意味着它可以嵌入到网络结构中以进行端到端训练。
  • 利用通道Shuffle操作,我们提出了一种专为小型网络设计的新型ShuffleNet单元。我们从图2(a)中的瓶颈单元[9]的设计原理出发。 这是一个残余块。 在其剩余分支中,对于3×3层,我们在瓶颈特征图上应用计算经济的3×3深度卷积[3]。然后,我们用逐点组卷积替换第一个1×1层,然后进行信道shuffle操作,形成一个ShuffleNet单元,如图2(b)所示。第二个逐点组卷积的目的是恢复通道维度以匹配快捷方式路径。为简单起见,我们不会在第二个逐点图层之后应用额外的通道shuffle操作,因为它会产生无法比较的分数。 批量归一化(BN)[15]和非线性的使用类似于[9,40],除了我们在[3]建议的深度卷积之后不使用ReLU。对于使用步幅应用ShuffleNet的情况,我们只做两个修改(见图2(c)):( i)在快捷方式路径上添加3×3平均池; (ii)用通道级联替换元素加法,这使得很容易扩大通道维度而几乎没有额外的计算成本。
  • 由于具有通道shuffle的逐点组卷积,可以有效地计算ShuffleNet单元中的所有组件。与ResNet [9](瓶颈设计)和ResNeXt [40]相比,我们的结构在相同设置下的复杂性较低。此外,在ShuffleNet中,深度卷积仅在瓶颈特征图上执行。 尽管深度卷积通常具有非常低的理论复杂度,但我们发现难以在低功率移动设备上有效地实现,这可能是由于与其他密集操作相比较差的计算/存储器访问率。 在[3]中推断出了这样的回退,它有一个基于TensorFlow的运行时库[1]。 在ShuffleNet单元中,我们故意仅在瓶颈上使用深度卷积,以尽可能地防止开销。
  • 基于ShuffleNet单元,我们在表1中提出了整体ShuffleNet架构。建议的网络主要由一组ShuffleNet单元组成,分为三个阶段。每个阶段的第一个构建块应用stride = 2。 阶段中的其他超参数保持不变,并且对于下一阶段,输出通道加倍。与[9]类似,我们将每个Shuf fl eNet单元的瓶颈通道数设置为输出通道的1/4。 我们的目的是提供尽可能简单的参考设计,尽管我们发现进一步的超参数调整可能会产生更好的结果。在ShuffleNet单元中,G组控制点向卷积的连接稀疏度。表1探讨了不同的组数,我们调整了输出通道,以确保总体计算成本大致不变(~140 mFlops)。显然,对于给定的复杂度约束,较大的组数会产生更多的输出通道(从而产生更多的卷积滤波器),这有助于编码更多的信息,但由于相应的输入通道有限,这也可能导致单个卷积滤波器的性能下降。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值