ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices(2017)



原文链接

Abstract

我们介绍了一种极具计算效率的CNN架构,名为ShuffleNet,它是专门为计算能力非常有限(例如,10-150 MFLOPs)的移动设备设计的。新架构采用了点群卷积和通道shuffle两种新的运算,在保持精度的同时大大降低了计算成本。在ImageNet分类和MS COCO目标检测上的实验表明,在40 MFLOPs的计算预算下,ShuffleNet在ImageNet分类任务上的top-1误差(绝对7.8%)比最近的MobileNet[12]要低。在基于arm的移动设备上,ShuffleNet比AlexNet实现了约13倍的实际加速,同时主要保持相当的精度

1. Introduction

构建更深更大的卷积神经网络(cnn)是解决主要视觉识别任务的主要趋势[21,9,33,5,28,24]。最精确的cnn通常有数百层和数千个通道[9,34,32,40],因此需要数十亿FLOPs的计算。在这里,我们的目标是探索一种高效的基本架构,专门为我们所需的计算范围而设计

我们注意到,最先进的基础架构,如Xception[3]和ResNeXt[40],在极小的网络中变得效率较低,因为昂贵的密集1 × 1卷积。我们提出使用点群卷积来降低1 × 1卷积的计算复杂度为了克服群卷积带来的副作用,我们提出了一种新的通道shuffle操作,以帮助信息在特征通道之间流动基于这两种技术,我们构建了一个称为ShuffleNet的高效架构。与[30,9,40]等流行结构相比,对于给定的计算复杂度预算,我们的ShuffleNet允许更多的特征映射通道,这有助于编码更多的信息,对非常小的网络的性能尤其重要

我们在具有挑战性的ImageNet分类[4,29]和MS COCO目标检测[23]任务上评估了我们的模型。一系列的控制实验表明了我们的设计原理的有效性和优于其他结构的性能。与最先进的架构MobileNet[12]相比,ShuffleNet的性能显著提高,例如,在40 MFLOPs的级别上,ImageNet top-1误差绝对降低了7.8%

我们还研究了实际硬件上的加速,即现成的基于ARM的计算核心。与AlexNet相比,ShuffleNet模型实现了~ 13倍的实际加速(理论加速为18倍)[21],同时保持了相当的准确性

2. Related Work(稍微了解)

高效的模型设计
过去几年,深度神经网络在计算机视觉任务中取得了成功[21,36,28],其中模型设计起着重要作用。在嵌入式设备上运行高质量深度神经网络的需求日益增长,这鼓励了对高效模型设计的研究[8]。例如,与简单地堆叠卷积层相比,GoogLeNet[33]以更低的复杂度增加了网络的深度。SqueezeNet[14]在保持精度的同时显著减少了参数和计算量ResNet[9,10]利用高效的瓶颈结构实现了令人印象深刻的性能。SENet[13]引入了一种架构单元,可以在很小的计算成本下提高性能

与我们同时,最近的一项工作[46]采用强化学习和模型搜索来探索有效的模型设计。所提出的移动NASNet模型与对应的ShuffleNet模型实现了相当的性能(ImageNet分类误差26.0% @ 564 MFLOPs vs. 26.3% @ 524 MFLOPs)。但是[46]没有报告在极其微小的模型上的结果(例如复杂性小于150 MFLOPs),也没有评估移动设备上的实际推理时间

群卷积
群卷积的概念最初是在AlexNet[21]中引入的,用于将模型分布在两个gpu上,在ResNeXt[40]中已经很好地证明了它的有效性。Xception[3]中提出的深度可分离卷积推广了Inception中可分离卷积的思想[34,32]。最近,MobileNet[12]利用深度可分离卷积,在轻量级模型中获得了最先进的结果。我们的工作以一种新的形式推广了群卷积和深度可分卷积

通道洗牌操作
据我们所知,尽管CNN库cuda-convnet[20]支持“随机稀疏卷积”层,这相当于随机通道洗牌后再加上一个群卷积层,但在之前关于高效模型设计的工作中很少提到通道洗牌操作的思想。这种“随机洗牌”操作有着不同的目的,后来很少被利用。最近,另一项并行研究[41]也采用了这一思想用于两阶段卷积。然而,[41]并没有专门研究通道洗牌本身的有效性及其在微型模型设计中的使用

模型加速
这个方向旨在加速推理,同时保持预训练模型的准确性。修剪网络连接[6,7]或通道[38]可以在保持性能的同时减少预训练模型中的冗余连接。文献中提出了量化[31,27,39,45,44]和因式分解[22,16,18,37]来减少计算中的冗余,加快推理速度。在不修改参数的情况下,由FFT[25,35]等方法[2]实现的优化卷积算法在实践中减少了时间消耗。蒸馏[11]将知识从大模型转移到小模型,这使得训练小模型更容易

3. Approach

3.1. Channel Shuffle for Group Convolutions

现代卷积神经网络[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)显示了两个堆叠的群卷积层的情况。很明显,某个组的输出只与组内的输入相关。此属性阻止信道组和弱ens表示之间的信息流

两个堆叠群卷积的信道洗牌。GConv代表群卷积。A)两个具有相同组数的堆叠卷积层。每个输出通道只与组内的输入通道相关。无交叉谈 ;b) GConv2在GConv1之后采集不同组的数据时,输入输出通道完全相关;C)与b)使用通道洗牌的等效实现。

如果我们允许群体卷积从不同的群体中获取输入数据(如图1 (b)所示),则输入和输出通道将完全相关。具体来说,对于前一层生成的特征图,我们可以先将每一层的通道划分为若干个子组,然后再为下一层的每个组提供不同的子组。这可以通过通道洗牌操作(图1 ©)高效而优雅地实现:假设一个卷积层具有g个组,其输出具有g × n个通道;我们首先将输出通道维度重塑为(g,n),转置然后将其平坦化,作为下一层的输入。请注意,即使两个卷积有不同数量的组,该操作仍然有效。此外,信道洗牌也是可微的,这意味着它可以嵌入到网络结构中进行端到端训练
通道洗牌操作使得用多组卷积层构建更强大的结构成为可能

3.2. ShuffleNet Unit

利用通道洗牌操作的优势,我们提出了一种专门为小型网络设计的新颖的ShuffleNet单元。我们从图2 (a)中的瓶颈单元[9]的设计原理出发,它是一个残块。在其残差分支中,对于3 × 3层,我们对瓶颈特征映射应用计算经济的3 × 3深度卷积[3]。然后,我们用点向群卷积替换第一个1 × 1层,然后进行通道洗牌操作,形成一个ShuffleNet单元,如图2 (b)所示。第二次点向群卷积的目的是恢复通道维度以匹配捷径路径。为了简单起见,我们没有在第二个逐点层之后应用额外的通道洗牌操作,因为它会导致类似的分数。批归一化(batch normalization, BN)[15]和非线性的使用与[9,40]类似,只是我们没有像[3]建议的那样在深度卷积后使用ReLU。对于使用stride应用ShuffleNet的情况,我们只需做两处修改(见图2 ©):(i)在快捷路径上增加一个3 × 3的平均池化;(2)用通道级联代替逐元素的加法,方便地扩大通道尺寸,增加的计算成本很少

a)深度卷积瓶颈单元9[3,12];b)带点群卷积(GConv)和信道shuffle的ShuffleNet单元;c)步幅= 2的ShuffleNet单元

利用点群卷积和信道shuffle,可以有效地计算ShuffleNet单元中的所有分量。与ResNet9和ResNeXt[40]相比,我们的结构在相同设置下具有更低的复杂性。例如,给定输入大小c × h × w和瓶颈通道m, ResNet单元需要hw(2cm + 9m 2)个FLOPs, ResNeXt有hw(2cm + 9m 2 /g)个FLOPs,而我们的ShuffleNet单元只需要hw(2cm/g + 9m)个FLOPs,其中g表示卷积的组数。换句话说,给定计算预算,ShuffleNet可以使用更宽的特征映射。我们发现这对于小型网络至关重要,因为小型网络通常没有足够的通道来处理信息

此外,在ShuffleNet中,深度卷积仅对瓶颈特征映射执行尽管深度卷积通常具有非常低的理论复杂度,但我们发现它很难在低功耗的移动设备上有效地实现,这可能是由于与其他密集操作相比,计算/内存访问比更差。在[3]中也提到了这样的缺点,它有一个基于TensorFlow[1]的运行时库。在ShuffleNet单元中,我们故意只在瓶颈上使用深度卷积,以尽可能地避免开销

3.3. Network Architecture

基于ShuffleNet单元,我们在表1中给出了整个ShuffleNet架构。所提出的网络主要由一堆分为三个阶段的ShuffleNet单元组成。每个阶段中的第一个构建块以stride = 2应用。一级内的其他超参数保持不变,下一级的输出通道增加一倍。与[9]类似,我们将每个ShuffleNet单元的瓶颈通道数设置为输出通道数的1/4我们的目的是提供一个尽可能简单的参考设计,尽管我们发现进一步的超参数调优可能会产生更好的结果
在ShuffleNet单元中,群数g控制着点向卷积的连接稀疏性。表1探讨了不同的组数,我们调整了输出通道,以确保总体计算成本大致不变(约140 MFLOPs)。显然,对于给定的复杂性约束,更大的组数导致更多的输出通道(因此更多的卷积过滤器),这有助于编码更多的信息尽管由于相应的输入通道有限,它也可能导致单个卷积过滤器的性能下降

为了将网络定制为所需的复杂性,我们可以简单地对通道数量应用比例因子s。例如,我们将表1中的网络表示为“ShuffleNet 1x”,那么“ShuffleNet sx”意味着将ShuffleNet 1x中的过滤器数量缩放s倍,因此总体复杂度大约是ShuffleNet 1x的s^2倍

4. Experiments







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值