ShuffleNetV2论文译读笔记

论文

Ma, Ningning, et al. “Shufflenet v2: Practical guidelines for efficient cnn architecture design.” Proceedings of the European conference on computer vision (ECCV). 2018.

摘要

目前,神经网络的架构设计大多时有非直接的计算复杂度指标来引导的,例如:FLOPs。然而,对于速度这样的直接指标则还需要取决于其它的因素,例如:内存访问开销和平台特性。因此,本文提出在目标平台上进行评价的直接指标,比仅仅考虑FLOPs更好。基于一系列实验,本文总结出多个用于高校网络设计的指导原则。相应地,提出一种新的网络架构,称之为ShuffleNetv2。验证性的消融实验证明提出的模型在速度和精度的均衡性上达到了SOTA。

1 引言

  CNN的架构在多年的发展中,变得更加准确和快速。自从AlexNet【1_AlexNet】里程碑式的出现,ImageNet分类准确率在新型架构上获得了巨大提升,其中包括VGG【2_VGG】、GoogLeNet【3_GoogLeNet】、ResNet【4_ResNet, 5_Identity_Mappings】、DenseNet【6_DenseNet】、ResNeXt【7_ResNeXt】和SE-Net【8_SE-Net】,以及自动神经架构搜索(NAS)【9_NASNET, 10_Liu2018ProgressiveNAS, 11_Real2019RegularizedNAS】等模型。
  除了准确率,计算复杂度也是另一个重要的考量。现实任务常常旨在给定计算预算下获得最佳的精度,即给定目标平台(例如:硬件设备)和应用场景(例如:自动驾驶要求低时延)。这种目标激发了一系列致力于轻量级架构以及更好的速度-精度均衡性,包括Xception【12_Xception】、MobileNet【13_MobileNet】、MobileNetV2【14_MobileNetV2】、ShuffleNet【15_ShuffleNet】和CondenseNet【16_CondenseNet】等模型。分组卷积和Depth-Wise-Convolution在这些工作中都表现的十分重要。
  为了衡量计算复杂度,一个广泛使用的指标是浮点运算次数,即FLOPs。然而,FLOPs是一种非直接的指标,是对直接指标例如速度和时延的近似,且并不是等价的,而直接指标才是真正需要关心的。这样的差异性已经在之前的工作【17_2017LearningECNN, 18_2016LearningSS, 14_MobileNetV2, 19_2017ChannelPruning】中被注意到了。例如:MobileNetV2【14_MobileNetV2】是一种比NASNET-A【9_NASNET】快很多的网络,但是它们的FLOPs相当。图1©(d)进一步地说明了这种现象,展示出FLOPs相似的网络具有不同的速度。
在这里插入图片描述
因此,使用FLOPs作为计算复杂度的唯一指标是不足的,并且会导致次优的设计。
  间接指标(FLOPs)和直接指标(速度)之间的差异来源于两个主要原因。第一,FLOPs未能考虑到几种对速度影响极大的因素。一种因素就是内存访问开销(memory access cost, MAC)。这种开销在某些操作上会占用大块的运行时间,例如Group-Convolution。它也会成为高功率设备的瓶颈,例如GPU。这种开销不应当在网络架构设计中被简单地忽略。另一种因素是并行度。在FLOPs相同的情况下,一个具有高并行度的模型会比另一个低并行度模型要快很多。
  其次,FLOPs相同的操作可能会有不同的运行时间,这取决于运算平台。举例来说,在早期工作中张量分解【20_2014SpeedingConv, 21_2015EfficientApproximations, 22_Zhang2016AcceleratingCNN】被广泛使用来加速矩阵乘法。然而,近期的文献发现【22_Zhang2016AcceleratingCNN】中的张量分解甚至在GPU上更慢,尽管它减少了75%的FLOPs。作者调研了这个问题并发现这是由于最新的CUDNN库【23_cuDNN】已经为 3 × 3 3\times3 3×3卷积进行了特别优化。作者无法肯定地认为 3 × 3 3\times3 3×3卷积比 1 × 1 1\times1 1×1卷积的计算慢9倍。
  有了这些观察发现,作者提出两项设计高效网络的原则。第一,直接指标(如:速度)应当被用于替代间接指标(如:FLOPs)。第二,这种指标需要在目标平台上评价。
  在本文中,作者遵循了这两项原则提出一种更加高效的网络架构。在第2章中作者首先分析了两种代表性SOTA网络【15_ShuffleNet, 14_MobileNetV2】的计算性能。然后,作者推想了思想高效网络设计的准则。尽管这些准则是无关平台的,作者进行了一系列控制性实验在GPU和ARM上验证了这些准则,并且进行了专门的代码优化,确保得出的结论是最新的。
  在第3章中,通过上述准则,作者设计了一种新的网络架构。由于受到ShuffleNet【15_ShuffleNet】的启发,此网络称为ShuffleNetv2。理解性验证实验证实ShuffleNetv2证实比之前的网络模型在两种平台上都更快更准,第4章图1(a)(b)中给出了总体的对照数据。
在这里插入图片描述
举例来说,在计算复杂性预算为40M-FLOPS的情况下,ShuffleNetv2比ShuffleNetv1和MobileNetV2的准确率高3.5%和3.7%。
16_CondenseNet

2 高效网络设计的实用准则

本文的研究在两个广泛使用的硬件上展开,使用了产业级优化的CNN库。作者注意到使用的CNN库比多数开源的库更加高效。因此,作者确信实验的观察和结论对产业实践是可靠且关键的。

  • GPU。NVIDIA-GeForce-GTX-1080Ti单张显卡。卷积库是cuDNN-7.0【23_cuDNN】。作者还激活了cuDNN的基准测试功能来分别为不同卷积选择最快的算法。
  • ARM。高通骁龙810处理器。作者使用了高效优化的基于Neon库的实现。在评测时使用单线程。

  其它设置包括:开启所有的优化选项(例如:张量融合,用于减少小型操作的负载)。输入图像大小为 224 × 224 224\times224 224×224。每个网络都进行了随机初始化并将测试100次。运行时间取平均数。
  在开始研究时,作者分析了两个SOTA网络的运行时性能,即:ShuffleNetv1【15_ShuffleNetv1】和MobileNetV2【14_MobileNetV2】。它们都是非常高效并且在ImageNet分类任务上精度很高。它们都是可以在边缘设备如手机上广泛使用。尽管作者仅分析了这两种网络,他们也注意到它们代表了当前的趋势。正如它们的核心是group-convolution和depth-wise-convolution,这些也是其它SOTA网络的关键组件,如:ResNeXt【7_ResNeXt】、Xception【12_Xception】、MobileNet【13_MobileNet】和CondenseNet【16_CondenseNet】。
  整体运行时间被分解成几个不同的操作,如图2所示。
在这里插入图片描述
作者注意到FLOPs指标仅考虑了卷积部分。尽管这部分需要消耗大部分实践,包括数据IO、数据Shuffle和元素级操作(AddTensor和ReLU等)的其它操作也占据了相当多的时间。因此,FLOPs不足以来准确地来衡量实际运行时间。
  基于这个发现,作者从不同方面进行了具体的运行时间(或速度)分析并推论出一些高效网络架构设计的实用准则。
  G1)相同通道宽度可最小化MAC(memory access cost)。最新的网络经常会使用深度可分离卷积(depthwise separable convolutions)【12_Xception13_MobileNetV1, 15_ShuffleNet14_MobileNetV2】,其中按点卷积(例如, 1 × 1 1\times1 1×1卷积)占据了大部分的复杂度【15_ShuffleNet】。作者研究了 1 × 1 1\times1 1×1卷积的卷积核形状。其形状是有两个参数指定的:输入通道数 c 1 c_1 c1和输出通道数 c 2 c_2 c2。设 h h h w w w为特征图的空间大小,则 1 × 1 1\times1 1×1卷积的FLOPs为 B = h w c 1 c 2 B=hwc_1c_2 B=hwc1c2
  为了简化,文章认为在计算设备中的缓存空间足以存储整个特征图和参数。因此,MAC (memory access cost)或者说内存访问操作数为, MAC = h w ( c 1 + c 2 ) + c 1 c 2 \text{MAC}=hw(c_1 + c_2)+c_1c_2 MAC=hw(c1+c2)+c1c2。注意,这里的 c 1 , c 2 c_1,c_2 c1,c2分别对应输入/输出特征图和kernel权重的内存访问操作。
  由均值不等式可知,则有
MAC ≥ 2 h w B + B h w \text{MAC}\geq 2\sqrt{hwB}+\frac{B}{hw} MAC2hwB +hwB
  因此,MAC的下界由FLOPs给出。当输入输出的通道数相等时会达到下界。
  这项结论是理论性的。实际上,许多设备的cache(缓存)不是足够大的。此外,现今的计算库通常采用复杂的阻塞策略来充分利用缓存机制【24_DistributedDL2016】。因此,实际的MAC可能会偏离理论值。为了验证上述结论,文章进行了一项如下的实验:通过重复堆叠 10 个构建的blocks来构成一个基准网络;每个block包含两个卷积层;第一个卷积层包含 c 1 c_1 c1个输入通道和 c 2 c_2 c2个输出通道,第二个卷积层的通道数则相反(input: c 2 c_2 c2, output: c 1 c_1 c1)。
  表格1显示了在不同 c 1 : c 2 c_1:c_2 c1:c2比例而固定整体FLOPs条件下的运行速度。
在这里插入图片描述
可以清楚地看到,当 c 1 : c 2 c_1:c_2 c1:c2接近于 1 : 1 1:1 1:1时,其MAC变小而网络推理速度加快。
  G2)过度的组卷积会增加 MAC(Memory Access Cost)。Group convolution是现今网络架构【7_ResNeXt, 15_ShuffleNet, 25_DeepRoots, 26_IGCNet, 27_IGCV2, 28_IGCV3】的核心组件。它将通道间的密集卷积变成稀疏卷积(仅在通道组内卷积),从而减少了计算复杂度(FLOPs)。首先,它可以在固定FLOPs下使用更多的通道数,而提升网络容量(从而提升准确性)。另一方面,不过,增加的通道数会导致更多的MAC(Memory Access Cost)。
  遵照G1和Eq.1中的符号, 1 × 1 1\times1 1×1组卷积MAC与FLOPs间的关系为
MAC = h w ( c 1 + c 2 ) + c 1 + c 2 g = h w c 1 + B g c 1 + B h w \begin{aligned} \text{MAC} &=hw\left(c_1+c_2\right) +\frac{c_1+c_2}{g}\\ &=hwc_1+\frac{Bg}{c_1} + \frac{B}{hw} \end{aligned} MAC=hw(c1+c2)+gc1+c2=hwc1+c1Bg+hwB
其中, g g g为分组数量, B = h w c 1 c 2 B=hwc_1c_2 B=hwc1c2为FLOPs。可以看到,在给定输入形状 c 1 × h × w c_1\times h \times w c1×h×w和计算成本 B B B时,MAC会随着 g g g增长而变大。
  为了探究以上准则的实际影响,本文构建了一项基准网络,该网络由10个 pointwise group convolution layers堆叠而成。表2展示了在固定FLOPs总数下不同组数的运行速度。
在这里插入图片描述
可以看到,使用大的组数会严重降低运行速度。举例来说,使用8个groups会比使用1个group(标准dense卷积)在GPU上慢两倍、在ARM上速度降低多达30%。这主要是由于MAC变多了。本文注意到这里的代码实现已经经过特别的优化,并且比单纯一组一组计算卷积要快上许多。
  因此,作者建议:组数应当根据目标平台和任务来具体调整。通用的方法是使用大的组数,从而可以用更多的通道,因为精度提升的收益很容易被计算成本的显著上升抵消。
  G3)网络分块会降低并行程度。在GoogLeNet系列【29_Residual_Connections, 30_Rethink_Inception, 3_GoogLeNet, 31_BN】和自动生成架构【9_NASNET, 11_Real2019RegularizedNAS, 10_Liu2018ProgressiveNAS】,一种“多分支”结构白广泛用于上述每个网络block中。许多微型算子(这里统称为“碎片算子”)被用于替换多个大型算子。例如,在NASNET-A【9_NASNET】中碎片算子的数量(如在一个building-block中单个卷积或池化操作的数量)为13。相对而言,在像ResNet【4_ResNet】这样的经典结构中,碎片算子数为2或3。
  尽管碎片化结构已经显示出对精度是有益的,但它仍然会降低效率,因为他对GPU 等具有强并行计算能力的设备不友好。它还引入了额外的开销,例如:kernel启动和同步。
  为了量化网络碎片化如何影响效率,本文在不同程度碎片化情况下评测了一系列网络块。具体来说,每个构建块由1到4个 1 × 1 1\times1 1×1卷积构成,以顺序或并行排列。其块结构在附录中说明。每个块重复10次。表3中结果显示了碎片化会降低GPU上的速度,例如:4-fragment结构比1-fragment结构慢3倍。在ARM上,速度降低则相对较小。
  G4)Element-wise操作的影响不可忽略。如图2所示,
在这里插入图片描述
在像【15_ShuffleNet14_MobileNetV2】轻量级模型中,element-wise操作占用了大量时间,尤其是在GPU上。这里的element-wise操作包括ReLU、AddTensor和AddBias等。它们的FLOPs较小但MAC较大。具体来说,本文也将 depthwise convolution当作element-wise算子,因其也有很高的MAC/FLOPs比。
  为进行验证,本文用ResNet[4_ResNet]中的“bottleneck”单元( 1 × 1 1\times1 1×1卷积接 3 × 3 3\times3 3×3卷积接 1 × 1 1\times1 1×1卷积,并带有ReLU和短连接)进行实验。ReLU和Shortcut操作都分别被移除了。不同变体的运行时间显示在表4中。
在这里插入图片描述
可以看到在ReLU和Shortcut被移除后,GPU和ARM上都有约20%的加速。
  结论和探讨。基于以上的准则和实验探究,本文得出了如下结论,一个高效的网络架构应当(1)使用“"balanced”卷积(相同通道宽度);(2)考虑使用组卷积的计算量;(3)减少碎片化的程度;和(4)减少element-wise操作。这些理想的性质取决于超出理论FLOPs的平台特性(例如内存操作和代码优化)。在实际网络设计中应考虑到它们。
  最近在轻量化神经网络架构的进展【15_ShuffleNet, 13_MobileNetV1, 14_MobileNetV2, 9_NASNET, 11_Real2019RegularizedNAS, 10_Liu2018ProgressiveNAS, 12_Xception】大多数基于FLOPs指标而并没有考虑以上性质。举例来说,ShuffleNetV115_ShuffleNet】重度依赖于组卷积(违背G2)和bottleneck形式的构建块(违背G1)。MobileNetV214_MobileNetV2】使用 inverted bottleneck structure结构违背了G1。它还在“thick”特征图上使用了深度卷积和ReLU,这违背了G4。自动生成结构【9_NASNET, 11_Real2019RegularizedNAS, 10_Liu2018ProgressiveNAS】都高度碎片化而违背了G3

3 ShuffleNetV2:一个高效的架构

回顾ShuffleNetV115_ShuffleNetV1】。ShuffleNetV1是一个领先的网络架构。它广泛应用于低端设备例如手机设备中。ShuffleNetV1启发了本文的工作,因此,首先对其回顾和分析。
  由【15_ShuffleNetV1】可知,轻量级网络最主要的问题是在给定计算资源下(FLOPs)只能支持有限的特征通道数。为了在不严重提高FLOPs的情况下提升通道数,【15_ShuffleNetV1】采用了两项技术:pointwise组卷积和bottleneck-like结构。然后引入一种“Channel Shuffle”操作来使不同组的通道间进行信息交换,从而提升精度。其构建块如图3(a)(b)所示。
在这里插入图片描述
  如第2章描述的那样,逐点组卷积和bottleneck结构会提高MAC数(G1G2)。这个开销是无法忽略的,尤其是对轻量级模型。而且,过多使用组操作违背G3。Shortcut连接中的element-wise的“Add”操作也是不够好的(G3)。因此,为了实现更大的模型容量和效率,关键的问题是如何在不使用密集卷积和太多组操作的情况下,维持数量多且宽度等效的通道数。
  Channel Split和ShuffleNetV2为了以上目标,本文引入了一种简单的算子称为 Channel Split。其结构如图3©所示。在每个单元的起始,输入的 c c c个特征通道被分成两个分支 c − c ′ c-{c}' cc c ′ {c}' c。根据G3,一个分支保持为恒等映射。另一个分支有三个输入输出通道相等的卷积构成,以满足G1。其中的两个 1 × 1 1\times1 1×1卷积不再是group-wise的,与【15_ShuffleNetV1】不同。这部分满足了G2,这里说部分是因为前面的split操作已经生成了两个groups。
  在卷积之后,两个分支被concatenated起来。于是,通道数保持不变(G1)。之后同样地使用跟【15_ShuffleNetV1】相同的“Channel Shuffle”操作来进行两个分支之间的信息交换。
  在shuffle之后,下一个单元开始。注意这里不再有ShuffleNetV1【15_ShuffleNetV1】中的“Add”操作。像ReLU和Depth
wise-Convolutions
的逐元素操作只会存在于一个分支中。而且,三个连续的element-wise操作,“Concat”“Channel Shuffle”和“Channel Split”会被合并到一个逐元素操作中。由G4可知这些修改都是有益的。
  对于空间下采样,此单元进行了轻微修改如图3(d)所示。
在这里插入图片描述
Channel split算子被移除了。因此,输出通道数加倍。
  本文新提出构建块(c)(d),以及构成的网络模型称为ShuffleNetV2。基于以上分析,本文总结此架构设计是十分高效的,因其符合上面所有的准则。
  在构建整个网络时构建块会被重复地堆叠。为了简化,本文设置 c ′ = c / 2 {c}'=c/2 c=c/2。整体的网络结构与ShuffleNetV1【15_ShuffleNetV1】相似,其信息由表5所示。
在这里插入图片描述
这里只有一个不同之处:在Global-Averaged-Pooling之前加入了一个额外的 1 × 1 1\times1 1×1卷积来融合特征,此项在ShuffleNetV1中是没有的。与【15_ShuffleNetV1】相似,每个block的通道数进行了调整来产生不同复杂度的网络,记为 0.5 × 0.5\times 0.5× 1 × 1\times 1×等。
  网络精度分析 ShuffleNetV2不仅是高效的,而且精度高。这里有两个原因。首先,每个构建块都十分高效,可以使用更多的特征通道和更大的网络容量。
  其次,在每个构建块中,一半的特征通道( c ′ = c / 2 {c}'=c/2 c=c/2时)会直接通过当前block并进入下一个block。这里可以当作是一种特征复用,与DenseNet【6_DenseNet】和CondenseNet【16_CondenseNet】中的想法类似。
  对于DenseNet【6_DenseNet】中,为了分析其中特征复用的模式,图4(a)中画出了层之间权重的 l 1 l1 l1范数。
在这里插入图片描述
可以看到相邻层之间的连接比其它更强一些。这表示所有层之间的 dense connection会有冗余。近期的CondenseNet【16_CondenseNet】也支持了本文的观点。
  在ShuffleNetV2中,容易证明第 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)。也就是说,复用特征的数量会随着两个blocks间的距离以指数级下降。在相距较远的blocks之间,特征复用会变得很小。图4(b)绘制了跟(a)中类似的可视化,这里 r = 0.5 r=0.5 r=0.5。注意(b)中的模式与(a)相似。
  因此,ShuffleNetV2在设计上实现了这种形式的特征复用。与DenseNet6_DenseNet】中的想法类似,它也从特征复用中获益而实现了更高的精度,但如之前分析的那样会高效很多。这一点在实验中得到了验证,如表8所示。
在这里插入图片描述

4 实验

本文的消融实验在ImageNet2012分类数据集【32_ImageNet_Database, 33_ImageNet_Challenge】上进行。按照常用的实现【15_ShuffleNetV1, 13_MobileNetV1, 14_MobileNetV2】,所有对比的网络按照计算复杂度分为四个级别,即,大约是40、140、300和500+的MFLOPs。这种复杂性对于移动场景来说是典型的。其它的超参数和设置与ShuffleNetV1【15_ShuffleNetV1】完全相同。
  本文比较了下列网络架构【12_Xception, 14_MobileNetV2, 6_DenseNet, 15_ShuffleNetV1】:

  • ShuffleNetV115_ShuffleNetV1】. 在[15_ShuffleNetV1]中,比较了一系列的组数 g g g。该文章建议 g = 3 g=3 g=3在精度和速度上有更好的均衡。这也和本文的观察一致。在本文中主要使用 g = 3 g=3 g=3
  • MobileNetV214_MobileNetV2】. 它优于MobileNetV1【13_MobileNetV1】。为了进行全面比较,本文报告了原始论文【14_MobileNetV2】中的精度和本文复现的精度,因为[14_MobileNetV2]中的某些结果无法获得。
  • Xception12_Xception】. 原始的Xception模型【12_Xception】十分巨大(FLOPs>2G),已经超出了本文的比较范围。近期的文章[34_Light_Head_RCNN]提出了改进的轻量级Xception结构,展现出在精度和效率上更好的均衡性。因此,本文会对比该变体网络。
  • DenseNet6_DenseNet】. 原始论文【6_DenseNet】仅报告了大模型(FLOPs>2G)的结果。为了直接进行对比,本文根据表5中的架构设置复现了该模型,其中Stage2-4的构建块由DenseNet-blocks组成。
    在这里插入图片描述
    本文调整了网络的通道数以满足不同的目标复杂度。

  表8总结了所有的实验结果。本文将从不同角度对这些结果进行分析。
在这里插入图片描述
Accuracy vs. FLOPs:可以看到本文提出的ShuffleNetV2模型大幅度超越了所有其它的网络模型,尤其是在计算成本较低的条件下。此外,本文注意到MobileNetV2在40MFLOPs级别、图像尺寸 224 × 224 224\times224 224×224条件下表现乏力。这可能是由于通道太少导致的。相比较而言,本文的模型并没有收到该限制的影响,因为本文提出的高效设计可以允许更大的通道数。此外,尽管本文的模型和DenseNet【6_DenseNet】都重用了特征,本文模型表现得更加高效,正如第3章提到的那样。
  表8还将本文的模型与其它SOTA的网络进行对比,包括CondenseNet【16_CondenseNet】、IGCV2【27_IGCV2】和IGCV3【28_IGCV3】。本文的模型在不同复杂度级别上始终表现更好。
Inference Speed vs. FLOPs/Accuracy:对于四种高精度的架构,ShuffleNetV2、MobileNetV2、ShuffleNetV1和Xception,本文比较了它们在不同FLOPs下的实际速度,如图1(c)(d)所示。
在这里插入图片描述
其它在不同分辨率上的结果请参见附录表1。
在这里插入图片描述
  ShuffleNetV2的速度明显比其它三种网络更快,尤其是在GPU上。举例而言,在500MFLOPs时,ShuffleNetV2比MobileNetV2快58%、比ShuffleNetV1快63%、也比Xception快25%。在ARM上,ShuffleNetV1、Xception和ShuffleNetV2的速度是相当的;然而,MobileNetV2则慢很多,尤其是在较小的FLOPs时。本文认为这是因为FLOPs的MAC较高(请参见第2章的G1G4),这一点在移动设备上影响较大。
  相比于MobileNetV1[13_MobileNetV1]、IGCV2[27_IGCV2]和IGCV3[28_IGCV3],本文有如下两个发现。首先,尽管MobileNetV1的精度不算最高,但是它在GPU上的速度要比其它模型要快,包括ShuffleNetV2。本文认为这是因为它的结构满足了本文提出的大多数准则(例如,对于G3,MobileNetV1的随便甚至比ShuffleNetV2更少)。其次,IGCV2和IGCV3的速度较慢。这是因为运用了太多卷积分组(在[27_IGCV2, 28_IGCV3]是4或8)。这两项发现都和本文提出的准则相一致。
  最近,自动模型搜索[9_NASNET, 10_Liu2018ProgressiveNAS, 11_Real2019RegularizedNAS, 35_Genetic_CNN, 36_Evolution_Image_Classifiers, 37_NAS_With_RL]已经成为CNN架构设计中十分具有前景的趋势。表8中的底部一栏评测了一些auto-generated模型。本文发现这些模型的速度较慢。本文认为这主要是因为使用了过多碎片化操作(请参见G3)。不过,这个研究方向仍然是十分具有前景的。举例来说,如果模型搜索算法可以与本文提出的准则相结合,并且可以在目标平台上评测direct-metric(速度),那么将可以获得更好的模型。
  最后,图1(a)(b)总结了不同速度下的模型精度,即 direct metric。本文总结认为ShuffleNetV2在GPU和ARM上是最优的。
与其它方法的适配:ShuffleNetV2可以和其它方法结合来进一步提升性能。当搭配Squeeze-and-excitation(SE)模块[8_SE-Net]时,ShuffleNetV2分类精度提升了0.5%,而速度降低一些。其block结构如附录图2(b)所示。
在这里插入图片描述
结果展示在表8中(最后一章)。
在这里插入图片描述
推广到大型网络:尽管本文主要的消融实验是在轻量化场景中展开的,ShuffleNetV2也可以用于大型模型(例如: FLOPs ≥ 2G \text{FLOPs}\geq \text{2G} FLOPs2G)表6比较了50层的ShuffleNetV2(具体请见附录)和同等参数的ShuffleNetV1[15_ShuffleNetV1]以及ResNet50[4_ResNet]。ShuffleNetV2仍然以2.3GFLOPs的参数量超越了ShuffleNetV1,并且性能优于ResNet50而参数降低40%。
  对于非常深的ShuffleNetV2(例如:超过100层),为了使训练能更快的收敛,本文轻微地修改了ShuffleNetV2的基本单元,加入了残差连接(具体请见附录)。表6展示了164层的ShuffleNetV2并搭配了SE[8_SE-Net]模块(具体请见目录)。此模型获得了很高的精度,以非常少的参数超越了之前的SOTA模型[8_SE-Net]。
目标检测:为了验证模型的泛化能力,本文也测试了COCO目标检测的任务。本文使用了SOTA的轻量级检测器—— Light-Head RCNN[34_Light_Head_RCNN]作为本文的检测框架,并遵循相同的训练和测试的流程。只有主干网络被替换为本文提出的ShuffleNetV2。模型在ImageNet上进行预训练之后在检测任务中进行微调。本文使用了COCO中train+val集来训练,除了5000来自minival集的图像,并使用minival集来测试。精度指标使用COCO标准的mAP,即:平均后的mAPs,其中box-IoU阈值范围是0.5到0.95。
  ShuffleNetV2会与其它三种轻量级模型在四种级别的复杂度上进行比较:Xception[12_Xception, 34_Light_Head_RCNN]、ShuffleNetV1[15_ShuffleNetV1]和MobileNetV2[14_MobileNetV2]。表7中的结果显示ShuffleNetV2表现最佳。
  将检测结果(表7)跟分类结果(表8)相比时,有趣地发现,分类精度的排序是 ShuffleNetV2 ≥ MobileNetV2 > ShuffleNetV1 > Xception \text{ShuffleNetV2}\geq\text{MobileNetV2}>\text{ShuffleNetV1}> \text{Xception} ShuffleNetV2MobileNetV2>ShuffleNetV1>Xception,而检测精度的排序变成了 ShuffleNetV2 > Xception ≥ ShuffleNetV1 ≥ MobileNetV2 \text{ShuffleNetV2}> \text{Xception} \geq\text{ShuffleNetV1}\geq\text{MobileNetV2} ShuffleNetV2>XceptionShuffleNetV1MobileNetV2。这表明Xception在检测任务上表现良好。这可能是由于Xception构建块的感受野要大于同类模型(7比3)。受此启发,本文也增大了ShuffleNetV2的感受野,在每个构建块的第一个pointwise卷积之前引入了一个额外的 3 × 3 3\times3 3×3卷积。这种变体被记作 S h u f f l e N e t V 2 ∗ ShuffleNetV2^{\ast} ShuffleNetV2。在增加少许FLOPs的情况下,它能进一步提高精度。
  本文还对 GPU 上的运行时间进行了基准测试。为了公平比较,批量大小设置为4,以确保充分利用GPU。由于数据复制(分辨率高达 800 × 1200 800\times1200 800×1200)和其它检测特定操作(如   P S R o I   P o o l i n g ~PSRoI~Pooling  PSRoI Pooling[34_Light_Head_RCNN])的开销,不同模型间的速度差异要小于分类任务。仍然,ShuffleNetV2超越了其它模型,例如:比ShuffleNetV1快大约40%,以及比MobileNetV2快大约16%。
  除此之外,变体模型ShuffleNetV2*有着最高的精度并且仍然比其它方法要快。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值