美文网首页
ShuffleNet V2

ShuffleNet V2

作者: Valar_Morghulis | 来源:发表于2022-05-23 09:38 被阅读0次

本文介绍轻量卷积网络的经典之作,ShuffleNet V2,发表于2018年7月,ECCV2018。

ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

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

作者:Ningning Ma(共同一作), Xiangyu Zhang(共同一作), Hai-Tao Zheng, Jian Sun

摘要:目前,神经网络体系结构设计主要由计算复杂性的emph{间接}度量来指导,即FLOPs。然而,速度等直接指标也取决于其他因素,如内存访问成本和平台特性。因此,这项工作建议评估目标平台上的直接度量,而不仅仅考虑FLOPs。基于一系列的控制实验,这项工作导出了几个有效网络设计的实用指南。因此,提出了一种新的体系结构,称为ShuffleNet V2。综合烧蚀实验证明,我们的模型在速度和精度方面是最先进的。

1. 引言

深度卷积神经网络(CNN)的体系结构已经发展了多年,变得更加精确和快速。自AlexNet[1]的里程碑式工作以来,ImageNet分类精度已通过新结构得到显著提高,其中包括VGG[2]、GoogLeNet[3]、ResNet[4,5]、DenseNet[6]、ResNeXt[7]、SE Net[8]和自动架构搜索[9,10,11]。

除了准确性之外,计算复杂性也是另一个重要的考虑因素。现实世界的任务通常旨在通过目标平台(如硬件)和应用场景(如自动驾驶要求低延迟)在有限的计算预算下获得最佳精度。这推动了一系列朝着轻量级架构设计和更好的速度精度权衡方向发展的工作,包括Exception[12]、MobileNet[13]、MobileNet V2[14]、ShuffleNet[15]和CondenceNet[16],仅举几例。分组卷积和深度卷积是这些工作的关键。

为了衡量计算复杂性,一个广泛使用的指标是浮点运算的数量,即FLOPs1。然而,FLOPs是一个间接指标。这是一个近似值,但通常不等同于我们真正关心的直接指标,例如速度或延迟。在之前的工作中已经注意到这种差异[17、18、14、19]。例如,MobileNet v2[14]比NASNET-A[9]快得多,但它们的FLOPs率相当。这一现象在图1(c)(d)中得到了进一步的示例,图1(c)(d)显示了具有类似FLOPs的网络具有不同的速度。因此,使用FLOPs作为计算复杂性的唯一度量是不够的,可能导致次优设计。

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

其次,根据平台的不同,使用相同FLOPs的操作可能有不同的运行时间。例如,张量分解在早期的工作中被广泛使用[20,21,22],以加速矩阵乘法。然而,最近的工作[19]发现[22]中的分解在GPU上甚至更慢,尽管它减少了75%的FLOPs率。我们研究了这个问题,发现这是因为最新的CUDNN[23]库专门针对3×3 conv进行了优化。我们不能肯定3×3 conv比1×1 conv慢9倍。

根据这些观察结果,我们提出了有效的网络架构设计应考虑两个原则。首先,应该使用直接度量(例如速度),而不是间接度量(例如FLOPs)。其次,应在目标平台上评估此类指标。

在这项工作中,我们遵循这两个原则,并提出了一种更有效的网络架构。在第2节中,我们首先分析了两个具有代表性的最先进网络的运行时性能[15,14]。然后,我们推导出了四条高效网络设计准则,这些准则不仅仅考虑FLOPs。虽然这些指南与平台无关,但我们在两个不同的平台(GPU和ARM)上进行了一系列受控实验,并进行了专门的代码优化,以确保我们的结论是最先进的。

在第3节中,我们根据指南设计了一种新的网络结构。由于其灵感来自ShuffleNet[15],因此被称为ShuffleNet V2。通过第4节中的综合验证实验,证明它比之前两种平台上的网络都更快、更准确。图1(a)(b)给出了比较的概述。例如,考虑到4000万次浮点运算的计算复杂性预算,ShuffleNet v2的精度分别比ShuffleNet v1和MobileNet v2高3.5%和3.7%。

2 高效网络设计实用指南

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

–GPU。使用单个NVIDIA GeForce GTX 1080Ti。卷积库是CUDNN 7.0[23]。我们还激活了CUDNN的benchmarking功能,分别为不同的卷积选择最快的算法。

–ARM。高通Snapdragon 810。我们使用高度优化的基于Neon的实现。单个线程用于评估。

其他设置包括:打开全部优化选项(例如,用于减少小操作开销的张量融合)。输入图像大小为224×224。每个网络随机初始化并评估100次。使用平均运行时间。

为了启动我们的研究,我们分析了两种最先进网络的运行时性能,即ShuffleNet v1[15]和MobileNet v2[14]。它们在ImageNet分类任务上都是高效和准确的。它们都广泛用于低端设备,如手机。虽然我们只分析这两个网络,但我们注意到它们代表了当前的趋势。其核心是组卷积和深度卷积,这也是其他最先进网络的关键组件,如ResNeXt[7]、Exception[12]、MobileNet[13]和CondenceNet[16]。

整个运行时针对不同的操作进行分解,如图2所示。我们注意到,FLOPs度量只考虑卷积部分。虽然这部分占用了大部分时间,但其他操作,包括数据I/O、data shuffle和元素操作(AddTensor、ReLU等)也占用了大量时间。因此,FLOPs对实际运行时间的估计不够准确。

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

G1)相等的通道宽度将内存访问成本(MAC)降至最低。现代网络通常采用深度可分离卷积[12,13,15,14],其中pointwise convolution(即1×1卷积)占了大部分复杂性[15]。我们研究了1×1卷积的核形状。形状由两个参数指定:输入通道c1和输出通道c2的数量。设h和w为特征映射的空间大小,1×1卷积的FLOPs为B=hwc_1c_2

为了简单起见,我们假设计算设备中的缓存足够大,可以存储整个特征映射和参数。因此,内存访问成本(MAC)或内存访问操作的数量是\text{MAC} = hw(c_1 + c_2) + c_1c_2。请注意,这两项分别对应于输入/输出特征映射和核权重的内存访问。

根据均值不等式,我们得到

\text{MAC} \ge 2\sqrt{hwB} + \frac{B}{hw}.    (1)

因此,MAC有一个由FLOPs给出的下限。当输入和输出通道数相等时,达到下限。

结论是理论性的。实际上,许多设备上的缓存不够大。此外,现代计算库通常采用复杂的blocking策略,以充分利用缓存机制[24]。因此,实际MAC可能会偏离理论MAC。为了验证上述结论,进行了如下实验。通过重复堆叠10个构建块来构建基准网络。每个块包含两个卷积层。第一个包含c_1输入通道和c_2输出通道,第二个则反过来。

表1通过改变比率c_1:c_2来报告运行速度,同时固定总的FLOPs。很明显,当c_1:c_2接近1:1时,MAC变得更小,网络评估速度更快。

G2)过度的组卷积会增加MAC。    分组卷积是现代网络体系结构的核心[7,15,25,26,27,28]。它通过将所有通道之间的密集卷积更改为稀疏(仅在通道组内)来降低计算复杂度(FLOPs)。一方面,它允许在给定固定FLOPs的情况下使用更多通道,并增加网络容量(从而提高精度)。然而,另一方面,通道数量的增加会导致更多MAC。

形式上,根据G1和等式1中的符号,1×1组卷积的MAC和FLOPs之间的关系为:

\text{MAC} = hw(c_1 + c_2) + \frac{c_1 c_2}{g} 
= hwc_1 + \frac{Bg}{c_1}  + \frac{B}{hw}(2)

其中g是组数,B=hwc_1c_2/g是FLOPs。很容易看出,给定固定的输入形状c_1 \times h \times w和计算成本B,MAC随着g的增长而增加。

为了研究实际应用中的影响,通过叠加10个逐点分组卷积层(pointwise group convolution layers)来构建基准网络。表2报告了在固定总FLOPs时使用不同组的运行速度。很明显,使用大量组数会显著降低运行速度。例如,在GPU上使用8组比使用1组(标准密集卷积)慢两倍多,在ARM上慢30%。这主要是由于MAC的增加。我们注意到,我们的实现经过了专门的优化,比逐组计算卷积要快得多。

因此,我们建议根据目标平台和任务仔细选择组数。仅仅因为这样可以使用更多的通道,使用大量的组是不明智的,因为快速增长的计算成本很容易超过精度提高的好处。

(编者注:G2中的组卷积应该是指分组的1x1卷积,而不是深度卷积,并且该工作没有涉及分组的3x3卷积的组数和延迟的关系)

G3)网络碎片化降低了并行度。    在GoogLeNet系列[29,30,3,31]和自动生成架构[9,11,10]中,每个网络块中都广泛采用了“多路径”结构。使用了很多小操作符(这里称为“分段操作符”),而不是几个大操作符。例如,在NASNET-A[9]中,分段操作符的数量(即一个构建块中的单个卷积或池操作的数量)是13。相反,在ResNet等常规结构中,这个数字是2或3。

虽然这种分散的结构有利于提高准确性,但它可能会降低效率,因为它对GPU等具有强大并行计算能力的设备不友好。它还引入了额外的开销,如内核启动和同步。

为了量化网络碎片如何影响效率,我们评估了一系列具有不同碎片程度的网络块。具体而言,每个构建块由1到4个1×1卷积组成,这些卷积按顺序或并行排列。块体结构如附录所示。每个块重复堆放10次。表3中的结果表明,碎片化显著降低了GPU上的速度,例如,4片段结构比1片段慢3倍。在ARM上,速度降低相对较小。

G4)元素级操作不容忽视。

如图2所示,在像[15,14]这样的轻量级模型中,元素操作占用了大量时间,尤其是在GPU上。这里,元素级操作符包括ReLU、AddTensor、AddBias等。它们有较小的FLOPs,但MAC相对较重。特别地,我们还将深度卷积[12,13,14,15]视为一种元素操作,因为它也具有很高的MAC/FLOPs比。

为了验证,我们在ResNet中试验了“瓶颈”单元(1×1 conv,然后是3×3 conv,然后是1×1 conv,带有ReLU和快捷连接)。将分别删除ReLU和快捷方式操作。表4中报告了不同变体的运行时间。我们观察到,在删除ReLU和快捷方式后,GPU和ARM上都获得了大约20%的加速比。

结论和讨论

基于上述指导原则和实证研究,我们得出结论,一个高效的网络体系结构应该1)使用“平衡”卷积(相等的通道宽度);2)意识到使用组卷积的成本;3)降低碎片化程度;4)减少元素操作。这些理想的特性取决于平台特性(如内存操作和代码优化)这超出了理论上的FLOPs。在实际的网络设计中,应考虑这些因素。

轻量级神经网络结构的最新进展[15,13,14,9,11,10,12]主要基于FLOPs的度量,没有考虑上述属性。例如,ShuffleNet v1[15]严重依赖于组卷积(违反G2)和瓶颈状构建块(违反G1)。MobileNet v2[14]使用了一个违反G1的反向瓶颈结构。它使用深度卷积和依赖于“厚”特征图。这违反了G4。自动生成的结构[9,11,10]高度碎片化,违反G3。

3 ShuffleNet V2:一种高效的体系结构

ShuffleNet v1回顾[15]。ShuffleNet是一种最先进的网络体系结构。它被广泛应用于低端设备,如手机。它激励着我们的工作。因此,本文首先对其进行了回顾和分析。

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

如第2节所述,pointwise group convolutions和瓶颈结构都会增加MAC(G1和G2)。这一成本不容忽视,尤其是对于轻型模型。此外,使用过多的组违反了G3。快捷连接中的元素级“添加”操作也是不可取的(G4)。因此,为了获得高的模型容量和效率,关键问题是如何在没有密集卷积和太多组的情况下保持大量等宽的通道。

(编者注:G2中的组卷积应该是指分组的1x1卷积,而不是深度卷积,并且该工作没有设计分组的3x3卷积的组数和延迟的关系)

Channel Split和ShuffleNet V2    为了达到上述目的,我们引入了一个简单的操作符,称为Channel Split。如图3(c)所示。在每个单元开始时,输入特征的通道数c将被分成两个分支c - c’c’。遵循G3,一个分支为identity。另一个分支由三个具有相同输入和输出通道的卷积组成,以满足G1。这两个1×1卷积不再是分组卷积,这与[15]不同。这部分是为了遵循G2,部分是因为拆分操作已经生成了两个组。

在卷积之后,这两个分支被拼接起来。因此,通道数保持不变(G1)。然后,使用与[15]中相同的““channel shuffle”操作来启用两个分支之间的信息通信。

shuffle后,下一单元开始。请注意,ShuffleNet v1[15]中的“相加”操作已不存在。像ReLU和深度卷积这样的元素操作只存在于一个分支中。此外,三个连续的元素级操作“Concat”、“Channel Shuffle”和“Channel Split”被合并为一个元素级操作。根据G4,这些变化是有益的。

对于空间下采样,该单位略有修改,如图3(d)所示。删除通道拆分操作符。因此,输出通道的数量增加了一倍。

提议的构建块(c)(d)以及由此产生的网络被称为ShuffleNet V2。基于以上分析,我们得出结论,这种架构设计是高效的,因为它遵循了所有的指导原则。

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

网络精度分析    ShuffleNet v2不仅高效,而且准确。有两个主要原因。首先,每个构建块的高效性允许使用更多的特征通道数和更大的网络容量。

其次,在每个块中,一半的特征通道(当c’=c/2时)直接穿过该块并进入到下一个块。这可以被视为一种特征重用,其精神与DenseNet[6]和CondenceNet[16]相似。

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

在ShuffleNet V2中,很容易证明第i个构建块和第i+j个构建块之间的“直接连接”通道数是r^jc,其中r=(1-c’)/c。换句话说,特征重用量随两个块之间的距离呈指数衰减。在距离较远的块之间,特征重用变得更弱。对于r=0.5,图4(b)绘制了与(a)类似的可视化效果。注意,(b)中的模式类似于(a)

因此,ShuffleNet V2的结构通过设计实现了这种类型的特征重用模式。与DenseNet[6]一样,它具有重复使用特征以获得高精度的优点,但与前面分析的结果相比,它的效率要高得多。表8中的实验验证了这一点。

4    实验

我们的消融实验是在ImageNet 2012分类数据集上进行的[32,33]。按照惯例[15,13,14],相比之下,所有网络都有四个计算复杂度级别,即大约40、140、300和500+MFLOP。这种复杂性在移动场景中很常见。其他超参数和协议与ShuffleNet v1完全相同[15]。

我们将其与以下网络架构进行比较[12,14,6,15]:

–ShuffleNet v1[15]。在[15]中,比较了一系列组号g。建议g=3在精度和速度之间有更好的权衡。这也符合我们的观察结果。在这项工作中,我们主要使用g=3。

–MobileNet v2[14]。它优于MobileNet v1[13]。为了进行全面的比较,我们在原始论文[14]和我们的重新引用中都报告了准确性,因为[14]中的一些结果不可用。

–Xception[12]。原始的Xception模型[12]非常大(FLOPs>2G),这超出了我们的比较范围。最近的工作[34]提出了一种改进的轻量级Xception结构,它在准确性和效率之间显示了更好的权衡。因此,我们将与此变体进行比较。

–DenseNet[6]。原始工作[6]只报告了大型模型的结果(FLOPs>2G)。为了进行直接比较,我们按照表5中的架构设置重新实现它,其中阶段2-4中的构建块由DenseNet块组成。我们调整通道的数量以满足不同的目标复杂性。

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

精度与FLOPs。很明显,提议的ShuffleNet v2模型比所有其他网络的性能都要好2个百分点,尤其是在计算预算较小的情况下。此外,我们还注意到,MobileNet v2在40 MFLOPs级别上执行池操作,图像大小为224×224。这可能是由于通道太少造成的。相比之下,我们的模型没有这个缺点,因为我们的高效设计允许使用更多通道。此外,虽然我们的模型和DenseNet[6]都重用了功能,但我们的模型效率要高得多,如第3节所述。.

表8还将我们的模型与其他最先进的网络进行了比较,包括CondenceNet[16]、IGCV2[27]和IGCV3[28]。我们的模型在各种复杂度级别上都表现得更好。

推理速度vs.FLOPs/精度。对于四种精度较高的体系结构,ShuffleNet v2、MobileNet v2、ShuffleNet v1和Exception,我们比较了它们的实际速度与FLOPs,如图1(c)(d)所示。附录表1提供了关于不同分辨率的更多结果。

ShuffleNet v2显然比其他三种网络更快,尤其是在GPU上。例如,在500次浮点运算时,ShuffleNet v2比MobileNet v2快58%,比ShuffleNet v1快63%,比Exception快25%。在ARM上,ShuffleNet v1、Xception和ShuffleNet v2的速度相当;然而,MobileNet v2的速度要慢得多,尤其是在较小的FLOPs上。我们认为这是因为MobileNet v2具有更高的MAC(见第2节中的G1和G4),这在移动设备上非常重要。

与MobileNet v1[13]、IGCV2[27]和IGCV3[28]相比,我们有两个观察结果。首先,尽管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可以与其他技术相结合,进一步提高性能。当配备挤压和激励(SE)模块[8]时,ShuffleNet v2的分类精度提高了0.5%,但代价是速度上有一定的损失。块体结构如附录图2(b)所示。结果如表8(底部部分)所示。

推广到大型模型。虽然我们的主要消融是针对轻量场景进行的,但ShuffleNet v2可用于大型模型(例如,FLOPs≥ 2G)。表6比较了50层ShuffleNet v2(详见附录)与ShuffleNet v1[15]和ResNet-50[4]的对应版本。ShuffleNet v2仍以2.3GFLOPs的速度优于ShuffleNet v1,并以40%的FLOPs率超过ResNet-50。

对于非常深的ShuffleNet v2(例如,超过100层),为了更快地收敛,我们通过添加剩余路径(详情见附录)略微修改了基本ShuffleNet v2单元。表6显示了配备SE[8]组件的164层ShuffleNet v2模型(详情见附录)。与之前最先进的模型相比,它获得了更高的精度[8],而FLOPs次数要少得多。

目标检测

为了评估泛化能力,我们还测试了COCO目标检测任务。我们使用最先进的轻型探测器——光头RCNN[34]——作为我们的框架,并遵循相同的训练和测试协议。只有骨干网络被我们的网络所取代。模型在ImageNet上进行预训练,然后在检测任务上进行微调。对于训练,我们在COCO中使用train+val集,minival集中的5000幅图像除外,并使用minival集进行测试。精度指标为COCO标准mmAP,即方框IoU阈值下的平均地图,从0.5到0.95。

ShuffleNet v2与其他三种轻型模型进行了比较:Exception[12,34]、ShuffleNet v1[15]和MobileNet v2[14]在四个复杂程度上。表7中的结果表明,ShuffleNet v2的性能最好。

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

我们还对GPU上的运行时间进行了基准测试。为了公平比较,批大小设置为4以确保GPU的充分利用。由于数据复制(分辨率高达800×1200)和其他检测特定操作(如PSRoI池[34])的开销,不同模型之间的速度差距小于分类。尽管如此,ShuffleNet v2仍优于其他版本,例如,比ShuffleNet v1快约40%,比MobileNet v2快16%。

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

5结论

我们建议网络架构设计应考虑速度等直接指标,而不是像FLOPs这样的间接指标。我们提出了实用指南和一种新的体系结构,ShuffleNet v2。综合实验验证了新模型的有效性。我们希望这项工作能够启发未来的网络架构设计工作,使其具有平台意识和更实用性。

相关文章

网友评论

      本文标题:ShuffleNet V2

      本文链接:https://www.haomeiwen.com/subject/iqyfprtx.html