ShuffleNet V2

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

1 摘要

目前,神经网络架构设计主要由计算复杂度的间接度量(FLOP — 乘加数)引导。然而,直接度量(例如,速度)还取决于诸如存储器访问成本和平台特性等其他因素。因此,本文评估目标平台上的直接度量,而不仅仅考虑FLOP。基于一系列对照实验,本文为有效的网络设计提供了几个实用指南。因此,提出了一种称为ShuffleNet V2的新架构。全面的对比实验验证了我们的模型在速度和准确性权衡方面是最先进的。

2 简介

深度卷积神经网络(CNN)的体系结构已经发展了多年,变得更加准确和快速。自AlexNet的里程碑工作以来,ImageNet分类的准确性通过使用新的结构的得到了显著改善,包括VGG,GoogLeNet,ResNet,DenseNet,ResNeXt ,SE-Net和自动架构搜索[9,10,11],仅举几例。

除了准确性,计算复杂性是另一个重要考虑因素。现实世界任务通常旨在由目标平台(例如,硬件)和应用场景(例如,自动驾驶需要低延迟时间)给出的有限计算资源下获得最佳准确度。这激发了一系列针对轻量级架构设计和更好的速度 - 准确性权衡的工作,包括Xception,MobileNet,MobileNet V2 ,ShuffleNet和CondenseNet。组卷积和深度分离卷积在这些工作中至关重要。

为了测量计算复杂性,广泛使用的度量是浮点运算或FLOP的数量。但是,FLOP是间接指标。它是我们真正关心的直接度量 — 例如速度或延迟的近似值,但通常不等同。前面有的论文也注意到了间接度量和直接度量的不同。例如,MobileNet v2比NASNET-A [9]快得多,但它们具有可比较的FLOP。图1(c)(d)进一步简化了这种现象,表明具有相似FLOP的网络具有不同的速度。因此,使用FLOP作为计算复杂性的唯一度量是不够的,并且可能导致次优设计

间接(FLOP)和直接(速度)指标之间的差异可归因于两个主要原因。首先,FLOP没有考虑几个对速度有相当大影响的重要因素。一个因素是存储器访问成本(MAC)在诸如组卷积的某些操作中,这种成本占运行时的很大一部分。它可能是具有强大计算能力的设备(例如GPU)的瓶颈。在网络架构设计期间,不应忽略此成本。另一个是并行化程度。在相同的FLOP下,具有高并行度的模型可能比具有低并行度的模型快得多。

其次,具体取决于部署平台,具有相同FLOP的操作可能具有不同的运行时间。例如,张量分解广泛用于早期工作[20,21,22]以加速矩阵乘法。然而,最近的工作[19]发现[22]中的分解在GPU上甚至更慢,尽管它将FLOP降低了75%。我们调查了这个问题并发现这是因为最新的CUDNN [23]库专门针对3×3卷积而优化。我们不能想当然的认为3×3卷积比1×1卷积慢9倍。

通过这些观察,我们建议应该考虑两个原则来进行有效的网络架构设计。首先,应该使用直接度量(例如,速度)而不是间接度量(例如,FLOP)。其次,应在目标平台上评估此类指标。

在这项工作中,我们遵循这两个原则,并提出一个更有效的网络架构。在第2节中,我们首先分析了两个具有代表性的最先进网络ShuffleNet V1和MobileNet V2的运行时性能。然后,我们推出了四个有效网络设计指南,这些指南不仅仅考虑了FLOP。虽然这些指南与平台无关,但我们会执行一系列受控实验,以便在两个不同平台(GPU和ARM)上通过专用代码优化对其进行验证,从而确保我们的结论是最先进的。

在第3节中,根据指南,我们设计了一个新的网络结构。由于受到ShuffleNet V1的启发,它被称为ShuffleNet V2。通过第4节中的综合验证实验证明,它比以前的网络在两个平台上都更快,更准确。图1(a)(b)给出了比较的概述。例如,考虑到40M FLOP的计算复杂度预算,ShuffleNet v2分别比ShuffleNet v1和MobileNet v2精确3.5%和3.7%。

ShuffleNet V2_第1张图片

3 高效网络设计实用指南

我们的研究是在两个广泛采用的硬件上进行的,为CNN库进行工业级优化。我们注意到我们的CNN库比大多数开源库更高效。因此,我们确保我们的观察和结论对于工业实践具有可靠性和重要性。

  • GPU:使用单个NVIDIA GeForce GTX 1080Ti。卷积库是CUDNN 7.0。我们还激活了CUDNN的基准测试功能,分别为不同的卷积选择最快的算法。
  • ARM:Qualcomm Snapdragon 810。我们使用高度优化的基于Neon的实现。单个线程用于评估。

其他设置包括:打开完全优化选项(例如张量融合 — 用于减少小操作的开销)。输入图像大小为224×224。每个网络随机初始化并评估100次。使用平均运行时间。为了开始我们的研究,我们分析了两个最先进的网络,ShuffleNet v1和MobileNet v2的运行时性能。它们在ImageNet分类任务上都非常高效和准确。它们广泛用于移动设备等低端设备。虽然我们只分析这两个网络,但我们注意到它们代表了当前的趋势。其核心是组卷积和深度卷积,它们也是其他最先进网络的关键组件,如ResNeXt,Xception ,MobileNet 和CondenseNet 。

ShuffleNet V2_第2张图片
整个运行时间被分解为不同的操作,如图2所示。我们注意到FLOPs度量仅考虑卷积部分。虽然这部分消耗的时间最多,但其他操作包括数据I / O,数据混洗和逐元素操作(AddTensor,ReLU等)也占用了相当多的时间。因此,FLOP对实际运行时间的估计不够准确。

基于这一观察,我们从几个不同方面对运行时间(或速度)进行了详细分析,并为有效的网络架构设计推导出一些实用指南。

  • G1:相等的通道宽度可最大限度地降低内存访问成本(MAC):现代网络通常采用深度可分离卷积,其中逐点卷积(即1×1卷积)占复杂性的大部分。我们研究了1×1卷积的核心形状。形状由两个参数指定:输入通道的数量c1和输出通道的数量c2。设h和w为特征映射的空间大小,1×1卷积的FLOP为B = h * w * c1 * c2。
    为简单起见,我们假设计算设备中的高速缓存足够大以存储整个特征映射和参数。因此,存储器访问成本(MAC)或存储器访问次数是MAC = hw(c1 + c2)+ c1c2。注意,这两项分别对应于输入/输出特征映射和内核权重的存储器访问次数。
    根据均值不等式,我们有
    ShuffleNet V2_第3张图片因此,MAC具有FLOP给出的下限。当输入和输出通道的数量相等时,它达到下限
    结论是理论上的。实际上,许多设备上的缓存都不够大。此外,现代计算库通常采用复杂的阻塞策略来充分利用缓存机制。因此,实际MAC可能偏离理论MAC。为了验证上述结论,进行了如下实验。通过重复堆叠10个构建块来构建基准网络。每个块包含两个卷积层。第一个包含c1输入通道和c2输出通道,否则包含第二个。
    表1通过在固定总FLOP的同时改变c1:c2的比率来报告运行速度。很明显,当c1:c2接近1:1时,MAC变小,网络评估速度更快。
    ShuffleNet V2_第4张图片
  • G2:过多的组卷积会增加MAC:组卷积是现代网络架构的核心。它通过将所有信道之间的密集卷积改变为稀疏(仅在信道组内)来降低计算复杂度(FLOP)。一方面,它允许在给定固定FLOP的情况下使用更多信道,并增加网络容量(从而提高精度)。然而,另一方面,增加的信道数导致更多的MAC。
    正式地,遵循G1和公式(1)中的符号,1×1组卷积的MAC和FLOP之间的关系是:
    ShuffleNet V2_第5张图片其中g是组的数量, B = h w c 1 c 2 / g B = hwc_1c_2/g B=hwc1c2/g是FLOP。很容易看出,给定固定输入形状c1×h×w和计算成本B,MAC随着g的增长而增加
    为了研究实践中的影响,通过堆叠10个逐点组卷积层来构建基准网络。表2报告了使用具有相同的总FLOP时不同组大小的模型的运行速度。很明显,使用大的组数会显著降低运行速度。例如,使用8个组比使用GPU上的1个组(标准密集卷积)慢两倍,而ARM上则慢30%。这主要是由于MAC的增加。我们的实现已经过专门优化,并且比按小组计算卷积更快。
    ShuffleNet V2_第6张图片因此,我们建议应根据目标平台和任务仔细选择组数目。轻易使用大的组号是不明智的,虽然这可以使用更多的通道,但是快速增加的计算成本可以轻易地超过准确度增加带来的好处。
  • G3:网络碎片降低了并行度:在GoogLeNet系列和自动生成的体系结构[9,11,10]中,每个网络块都广泛采用了一种“多路径”结构。许多小型操作(这里称为“碎片操作”)被用来代替几个大的操作。例如,在NASNET-A中,碎片运算符的数量(即一个构建块中的单个卷积或池化操作的数量)为13。相比之下,在ResNet等常规结构中,此数字为2或3。
    虽然这种碎片结构已被证明有利于提升准确性,但它可能会降低效率,因为它对具有强大并行计算能力的设备(如GPU)不友好。它还引入了额外的开销,例如内核启动和同步。
    为了量化网络碎片如何影响效率,我们评估了一系列具有不同碎片程度的网络块。特别是,每一个基础块都由1到4个 1 x 1 1 x 1 1x1卷积组成,所不同的是排列方式为顺序排列还是并行排列。块结构如附录所示。每个块重复堆叠10次。表3中的结果表明,碎片程度在GPU上显著降低了速度,例如: 4片段结构比1片段慢3倍。在ARM上,速度降低相对较小。
    ShuffleNet V2_第7张图片ShuffleNet V2_第8张图片
  • G4:逐元素操作的执行时间是不可忽略的:如图2所示,在像ShuffleNet V1和MobileNet V2这样的轻量级模型中,逐元素操作占用了相当多的时间,尤其是在GPU上。这里,逐元素运算包括ReLU,AddTensor,AddBias等。它们具有小的FLOP但是相对较重的MAC。特别地,我们还将深度分离卷积视为逐元素运算符,因为它也具有高的MAC / FLOP比。
    为了验证,我们在ResNet中尝试了“瓶颈”单元(1×1卷积后跟3×3卷积,然后是1×1卷积,带有ReLU和直连通道)。ReLU和直连通道将分别删除。表4中报告了不同变体的运行时间。在删除ReLU和直连通道后,我们观察到在GPU和ARM上都获得了大约20%的加速。
    ShuffleNet V2_第9张图片
  • 结论和讨论:基于上述指导原则和研究,我们得出结论:有效的网络架构应该:
    1)使用“平衡卷积"(相等的通道宽度);
    2)注意使用组卷积的成本;
    3)降低碎片程度;
    4)减少逐元素操作。
    这些理想的属性取决于超出理论FLOP的平台特性(例如内存操作和代码优化)。它们应该被用于实际的网络设计。
    轻量级神经网络架构[15,13,​​14,9,11,10,12]的最新进展主要基于FLOP的度量,并未考虑上述这些特性。例如,ShuffleNet v1严重依赖于组卷积(违反了G2)和瓶颈式网络块(违反了G1)。MobileNet v2 使用了违反G1的反向瓶颈结构。它在“thick”特征图上使用深度分离卷积和ReLU,这违反了G4。自动生成的结构[9,11,10]高度碎片化并违反了G3。

4 ShuffleNet V2:一种高效的架构

回顾下ShuffleNet v1。 ShuffleNet是一种先进的网络架构,它广泛应用于移动设备等低端设备,它激发了我们的工作。因此,首先对其进行审查和分析。

根据ShuffleNet v1所述,轻量级网络面临的主要挑战是,在给定的计算预算(FLOP)下,只能使用有限数量的特征信道。为了在不显着增加FLOP的情况下增加通道数,在ShuffleNet v1中采用了两种技术:逐点组卷积和瓶颈状结构。然后引入“channel shuffle”操作以实现不同信道组之间的信息通信并提高准确性。构建块如图3(a)(b)所示。

ShuffleNet V2_第10张图片如第2节所述,逐点组卷积和瓶颈结构都会增加MAC(G1和G2)。这个成本是不可忽视的,特别是对于轻量级的模型。此外,使用太多组违反了G3。在直连通道中进行逐元素相加的操作也是不合需要的(G4)。因此,为了实现高模型容量和效率,关键问题是如何保持大量且同样宽的信道,既没有密集卷积也没有太多组

Channel Spilt 和 ShuffleNet V2:为了达到上述目的,我们引入了一个名为channel split的简单运算符。如图3(c)所示。在每个单元的开始处,c个特征通道的输入被分成两个分支,分别具有 c − c ′ c-c^{'} cc c ′ c^{'} c个通道。按照G3,一个分支是恒等函数。另一个分支由三个卷积组成,这三个卷积具有相同的输入和输出通道以满足G1。不同于ShuffleNet V1,两个1×1的卷积不再是分组的了。这部分是为了遵循G2,部分原因是拆分操作已经产生了两个组。

卷积后,两个分支连接在一起。因此,通道数保持不变(G1)。然后使用与ShuffleNet V1中相同的“channel shuffle“操作来实现两个分支之间的信息通信。

shuffle后,进入了下一个网络块。请注意,ShuffleNet v1中的“Add“操作不再存在。ReLU和depthwise convolutions等元素操作仅存在于一个分支中。此外,三个连续的元素操作,”Concat“,“Channel Shuffle”和”Channel Split“,合并为单个逐元素操作。根据G4,这些更改是有益的。

对于空间下采样,该单元稍作修改,如图3(d)所示。删除了通道拆分运算符。因此,输出通道的数量加倍。

建议的构建块(c)(d)以及由此产生的网络称为ShuffleNet V2。基于上述分析,我们得出结论,该架构设计高效,因为它遵循所有准则。

重复堆叠构建块以构建整个网络。为简单起见,我们设置 c ′ = c / 2 c^{'} = c/2 c=c/2。整体网络结构类似于ShuffleNet v1,并总结在表5中。只有一个区别:在全局平均池化之前添加额外的1×1卷积层以混合特征,这在ShuffleNet v1中是不存在的。与ShuffleNet v1类似,缩放每个块中的通道数以生成不同复杂度的网络,标记为0.5×,1×等。

ShuffleNet V2_第11张图片网络准确率分析:ShuffleNet v2不仅高效,而且准确。主要有两个原因。首先,每个构建块的高效率使得能够使用更多的特征信道和更大的网络容量。
其次,在每个块中,一半的特征通道(当 c ′ = c / 2 c^{'} = c/2 c=c/2时)直接通过该块并入下一个块。这可以被视为一种特征重用,与DenseNet和CondenseNet类似。

ShuffleNet V2_第12张图片
在DenseNet中,为了分析特征重用模式,绘制了层间权重的l1范数,如图4(a)所示。很明显,相邻层之间的连接比其他层更强。这意味着所有层之间的密集连接可能引入冗余。最近的CondenseNet也支持这一观点。

在ShuffleNet V2中,很容易证明第 i i i个和第 ( i + j ) (i + j) (i+j)个构建块之间的直接连接的“通道”的数量是 r j c r^jc rjc,其中 r = 1 − c ′ / c r =1-c^{'}/c r=1c/c(这里不应该有括号吧)。换句话说,特征重用量随着两个块之间的距离增大而呈指数级衰减。在远程块之间,特征重用变得更弱。对于r = 0.5,图4(b)绘制了与(a)中类似的可视化图。注意(b)中的模式类似于(a)。

因此,ShuffleNet V2的结构设计实现了这种类型的特征重用模式。与DenseNet一样,它具有高精度特征重用的类似优点,但如前所述,它的效率更高。这在实验中得到验证,见表8。

5 实验

我们的对比实验在ImageNet 2012分类数据集上执行。按照惯例,相比之下,所有网络都有四个级别的计算复杂度,即大约40,140,​​300和500+ MFLOPs。这种复杂性是移动场景的典型值。其他超参数和协议与ShuffleNet v1完全相同。

我们将与以下网络架构进行比较:

  • ShuffleNet v1:在ShuffleNet v1中,比较了一系列组号g。最后建议g = 3在准确度和速度之间有更好的权衡。,这也符合我们的观察。在本文中,我们主要使用g = 3。
  • MobileNet v2 :它比MobileNet v1更好。为了全面比较,我们报告了原始论文和我们重新实现的准确性,因为原始论文中的一些结果不可用。
  • Xception:原始Xception模型[12]非常大(FLOP> 2G),这超出了我们的比较范围。最近的工作[34]提出了一种改进的轻量级Xception结构,它显示了准确性和效率之间更好的权衡。所以,我们与这个变体进行比较。
  • DenseNet:原始论文仅报告大型模型的结果(FLOP> 2G)。为了直接比较,我们按照表5中的体系结构设置重新实现它,其中阶段2-4中的构建块由11个DenseNet块组成。我们调整通道数以满足不同的目标复杂性。

表8总结了所有结果。我们从不同方面分析这些结果。

ShuffleNet V2_第13张图片准确率 vs. FLOPs:很明显,所提出的ShuffleNet v2模型在很大的范围内表现优于所有其他网络,特别是在较小的计算预算下。此外,我们注意到MobileNet v2使用224×224大小的图像在40 MFLOP级别上效果很差,这可能是由于频道太少造成的。相比之下,我们的模型没有这个缺点,因为我们的高效设计允许使用更多的通道。此外,虽然我们的模型和DenseNet都重用了特征,但我们的模型效率更高,如第3节所述。

表8还将我们的模型与其他最先进的网络进行了比较,包括CondenseNet ,IGCV2和IGCV3。我们的模型在各种复杂程度上表现更好。

推理速度 vs. FLOPs/Accuracy:对于四个具有良好准确性的架构,ShuffleNet v2,MobileNet v2,ShuffleNet v1和Xception,我们将它们的实际速度与FLOP进行比较,如图1(c)(d)所示。附录表1提供了有关不同分辨率的更多结果。

ShuffleNet V2_第14张图片

例如,在500MFLOPs时,ShuffleNet v2比MobileNet v2快58%,比ShuffleNet v1快63%,比Xception快25%。在ARM上,ShuffleNet v1,Xception和ShuffleNet v2的速度相当;但是,MobileNet v2要慢得多,特别是在较小的FLOP上。我们认为这是因为MobileNet v2具有更高的MAC(参见第2节中的G1和G4),这在移动设备上非常重要。

与MobileNet v1,IGCV2和IGCV3相比,我们有两个观察结果。首先,尽管MobileNet v1的准确性不是很好,但它在GPU上的速度要快于所有同类产品,包括ShuffleNet v2。我们认为这是因为它的结构满足了大多数提议的指南(例如,对于G3,MobileNet v1的片段甚至比ShuffleNet v2更少)。其次,IGCV2和IGCV3很慢。这是由于使用了太多的卷积组([27,28]中的4或8)。两项意见均与我们提出的指引一致。

最近,自动模型搜索[9,10,11,35,36,37]已成为CNN架构设计的一种有前途的趋势。表8中的底部评估了一些自动生成的模型。我们发现它们的速度相对较慢。我们认为这主要是由于使用了太多碎片(见G3)。尽管如此,这一研究方向仍然很有希望。例如,如果模型搜索算法与我们提出的指南相结合,并且在目标平台上评估直接度量(速度),则可以获得更好的模型。

最后,图1(a)(b)总结了精确度与速度的结果,即直接度量。我们得出结论,ShuffeNet v2在GPU和ARM上都是最好的。

和其他模型比较:ShuffeNet v2可与其他技术相结合,进一步提升性能。当配备Squeezeand-excitation(SE)模块时,ShuffleNet v2的分类精度提高了0.5%,但代价是速度有一定的损失。块结构如附录图2(b)所示。结果显示在表8中(底部)。

ShuffleNet V2_第15张图片
泛化到大的模型:尽管我们的主要对比实验是针对轻量级情况进行的,但ShuffleNet v2可用于大型模型(例如,FLOP≥2G)。表6比较了50层ShuffleNet v2(附录中的详细信息)与ShuffleNet v1和ResNet-50的对应部分。 ShuffleNet v2在2.3GFLOPs上仍然优于ShuffleNet v1,超过ResNet-50,FLOP减少40%。
ShuffleNet V2_第16张图片ShuffleNet V2_第17张图片
对于非常深的ShuffleNet v2(例如超过100层),为了使训练更快收敛,我们通过添加残差路径稍微修改基本的ShuffleNet v2单元(详见附录)。表6显示了一个配有SE [8]组件的164层ShuffleNet v2模型(详见附录)。与先前最先进的模型相比,它获得了更高的精度[8],FLOP更少。

目标检测:为了评估泛化能力,我们还测试了COCO对象检测[38]任务。我们使用最先进的轻量级探测器Light-Head RCNN作为我们的框架并遵循相同的训练和测试协议。只有骨干网被我们的网络替换。模型在ImageNet上预先训练,然后在检测任务上进行微调。对于训练,我们使用COCO中的train + val进行训练,除了来自minival的5000张图像,并使用minival集进行测试。精度度量是COCO标准mmAP,即检测框的IoU阈值从0.5到0.95的平均mAP。

将ShuffleNet v2与其他三种轻量级模型进行比较:Xception,ShuffleNet v1 和MobileNet v2,分为四个复杂程度。表7中的结果表明ShuffleNet v2表现最佳。

ShuffleNet V2_第18张图片将检测结果(表7)与分类结果(表8)进行比较,有趣的是,在分类上,准确度等级为ShuffleNetv2≥MobileNetv2> ShuffeNet v1> Xception,而在检测时,等级变为ShuffleNet v2>Xception≥ShuffleNet v1≥MobileNetv2。这表明Xception在检测任务方面很有用。这可能是由于Xception构建块的感受域比其他对比算法(7对3)更大。受此启发,*我们还通过在每个构建块中的第一个逐点卷积之前引入额外的3×3深度卷积来扩大ShuffleNet v2的感受野。该变体表示为ShuffleNet v2 。只需几个额外的FLOP,它进一步提高了准确性

我们还在GPU上对运行时间进行基准测试。为了公平比较,批量大小设置为4以确保完全利用GPU。由于数据复制的开销(分辨率高达800×1200)和其他特定检测操作(如PSRoI Pooling),不同算法之间的速度差距小于分类的速度差距。尽管如此,ShuffleNet v2仍然胜过其他人,例如比ShuffleNet v1快40%左右,比MobileNet v2快16%。

此外,变体ShuffleNet v2 *具有最佳精度,并且仍然比其他方法更快。这激发了一个实际问题:如何增加感受野的大小,这对于高分辨率图像中的目标检测至关重要。我们将来会研究这个话题。

6 总结

我们建议网络架构设计应考虑直接度量,如速度,而不是像FLOP那样的间接度量。我们提出实用指南和新颖的架构,ShuffleNet v2。综合实验验证了我们新模型的有效性。我们希望这项工作能够激发未来的平台意识和更实用的网络架构设计工作。

本文通过理论分析和实验验证,推翻了ShuffleNet V1,MobileNet V1 V2,Xception中的很多重要结论。厉害厉害

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