论文

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×33\times33×3卷积进行了特别优化。作者无法肯定地认为3×33\times33×3卷积比1×11\times11×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×224224\times224224×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_Xception, 13_MobileNetV1, 15_ShuffleNet, 14_MobileNetV2】,其中按点卷积(例如,1×11\times11×1卷积)占据了大部分的复杂度【15_ShuffleNet】。作者研究了1×11\times11×1卷积的卷积核形状。其形状是有两个参数指定的:输入通道数c1c_1c1​和输出通道数c2c_2c2​。设hhh和www为特征图的空间大小,则1×11\times11×1卷积的FLOPs为B=hwc1c2B=hwc_1c_2B=hwc1​c2​。
  为了简化,文章认为在计算设备中的缓存空间足以存储整个特征图和参数。因此,MAC (memory access cost)或者说内存访问操作数为,MAC=hw(c1+c2)+c1c2\text{MAC}=hw(c_1 + c_2)+c_1c_2MAC=hw(c1​+c2​)+c1​c2​。注意,这里的c1,c2c_1,c_2c1​,c2​分别对应输入/输出特征图和kernel权重的内存访问操作。
  由均值不等式可知,则有
MAC≥2hwB+Bhw\text{MAC}\geq 2\sqrt{hwB}+\frac{B}{hw} MAC≥2hwB​+hwB​
  因此,MAC的下界由FLOPs给出。当输入输出的通道数相等时会达到下界。
  这项结论是理论性的。实际上,许多设备的cache(缓存)不是足够大的。此外,现今的计算库通常采用复杂的阻塞策略来充分利用缓存机制【24_DistributedDL2016】。因此,实际的MAC可能会偏离理论值。为了验证上述结论,文章进行了一项如下的实验:通过重复堆叠 10 个构建的blocks来构成一个基准网络;每个block包含两个卷积层;第一个卷积层包含c1c_1c1​个输入通道和c2c_2c2​个输出通道,第二个卷积层的通道数则相反(input: c2c_2c2​, output: c1c_1c1​)。
  表格1显示了在不同c1:c2c_1:c_2c1​:c2​比例而固定整体FLOPs条件下的运行速度。

可以清楚地看到,当c1:c2c_1:c_2c1​:c2​接近于1:11:11: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×11\times11×1组卷积MAC与FLOPs间的关系为
MAC=hw(c1+c2)+c1+c2g=hwc1+Bgc1+Bhw\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​+c1​Bg​+hwB​​
其中,ggg为分组数量,B=hwc1c2B=hwc_1c_2B=hwc1​c2​为FLOPs。可以看到,在给定输入形状c1×h×wc_1\times h \times wc1​×h×w和计算成本BBB时,MAC会随着ggg增长而变大。
  为了探究以上准则的实际影响,本文构建了一项基准网络,该网络由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×11\times11×1卷积构成,以顺序或并行排列。其块结构在附录中说明。每个块重复10次。表3中结果显示了碎片化会降低GPU上的速度,例如:4-fragment结构比1-fragment结构慢3倍。在ARM上,速度降低则相对较小。
  G4)Element-wise操作的影响不可忽略。如图2所示,

在像【15_ShuffleNet, 14_MobileNetV2】轻量级模型中,element-wise操作占用了大量时间,尤其是在GPU上。这里的element-wise操作包括ReLU、AddTensor和AddBias等。它们的FLOPs较小但MAC较大。具体来说,本文也将 depthwise convolution当作element-wise算子,因其也有很高的MAC/FLOPs比。
  为进行验证,本文用ResNet[4_ResNet]中的“bottleneck”单元(1×11\times11×1卷积接3×33\times33×3卷积接1×11\times11×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指标而并没有考虑以上性质。举例来说,ShuffleNetV1【15_ShuffleNet】重度依赖于组卷积(违背G2)和bottleneck形式的构建块(违背G1)。MobileNetV2【14_MobileNetV2】使用 inverted bottleneck structure结构违背了G1。它还在“thick”特征图上使用了深度卷积和ReLU,这违背了G4。自动生成结构【9_NASNET, 11_Real2019RegularizedNAS, 10_Liu2018ProgressiveNAS】都高度碎片化而违背了G3

3 ShuffleNetV2:一个高效的架构

回顾ShuffleNetV1【15_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©所示。在每个单元的起始,输入的ccc个特征通道被分成两个分支c−c′c-{c}'c−c′和c′{c}'c′。根据G3,一个分支保持为恒等映射。另一个分支有三个输入输出通道相等的卷积构成,以满足G1。其中的两个1×11\times11×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/2c′=c/2。整体的网络结构与ShuffleNetV1【15_ShuffleNetV1】相似,其信息由表5所示。

这里只有一个不同之处:在Global-Averaged-Pooling之前加入了一个额外的1×11\times11×1卷积来融合特征,此项在ShuffleNetV1中是没有的。与【15_ShuffleNetV1】相似,每个block的通道数进行了调整来产生不同复杂度的网络,记为0.5×0.5\times0.5×和1×1\times1×等。
  网络精度分析 ShuffleNetV2不仅是高效的,而且精度高。这里有两个原因。首先,每个构建块都十分高效,可以使用更多的特征通道和更大的网络容量。
  其次,在每个构建块中,一半的特征通道(c′=c/2{c}'=c/2c′=c/2时)会直接通过当前block并进入下一个block。这里可以当作是一种特征复用,与DenseNet【6_DenseNet】和CondenseNet【16_CondenseNet】中的想法类似。
  对于DenseNet【6_DenseNet】中,为了分析其中特征复用的模式,图4(a)中画出了层之间权重的l1l1l1范数。

可以看到相邻层之间的连接比其它更强一些。这表示所有层之间的 dense connection会有冗余。近期的CondenseNet【16_CondenseNet】也支持了本文的观点。
  在ShuffleNetV2中,容易证明第iii与i+ji+ji+j层“直接相连”的通道数为rjcr^jcrjc,且r=(1−c′/c)r = (1-{c}'/c)r=(1−c′/c)。也就是说,复用特征的数量会随着两个blocks间的距离以指数级下降。在相距较远的blocks之间,特征复用会变得很小。图4(b)绘制了跟(a)中类似的可视化,这里r=0.5r=0.5r=0.5。注意(b)中的模式与(a)相似。
  因此,ShuffleNetV2在设计上实现了这种形式的特征复用。与DenseNet【6_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】:

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

    本文调整了网络的通道数以满足不同的目标复杂度。

  表8总结了所有的实验结果。本文将从不同角度对这些结果进行分析。

Accuracy vs. FLOPs:可以看到本文提出的ShuffleNetV2模型大幅度超越了所有其它的网络模型,尤其是在计算成本较低的条件下。此外,本文注意到MobileNetV2在40MFLOPs级别、图像尺寸224×224224\times224224×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}FLOPs≥2G)表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}ShuffleNetV2≥MobileNetV2>ShuffleNetV1>Xception,而检测精度的排序变成了ShuffleNetV2>Xception≥ShuffleNetV1≥MobileNetV2\text{ShuffleNetV2}> \text{Xception} \geq\text{ShuffleNetV1}\geq\text{MobileNetV2}ShuffleNetV2>Xception≥ShuffleNetV1≥MobileNetV2。这表明Xception在检测任务上表现良好。这可能是由于Xception构建块的感受野要大于同类模型(7比3)。受此启发,本文也增大了ShuffleNetV2的感受野,在每个构建块的第一个pointwise卷积之前引入了一个额外的3×33\times33×3卷积。这种变体被记作ShuffleNetV2∗ShuffleNetV2^{\ast}ShuffleNetV2∗。在增加少许FLOPs的情况下,它能进一步提高精度。
  本文还对 GPU 上的运行时间进行了基准测试。为了公平比较,批量大小设置为4,以确保充分利用GPU。由于数据复制(分辨率高达800×1200800\times1200800×1200)和其它检测特定操作(如PSRoIPooling~PSRoI~Pooling PSRoI Pooling[34_Light_Head_RCNN])的开销,不同模型间的速度差异要小于分类任务。仍然,ShuffleNetV2超越了其它模型,例如:比ShuffleNetV1快大约40%,以及比MobileNetV2快大约16%。
  除此之外,变体模型ShuffleNetV2*有着最高的精度并且仍然比其它方法要快。

ShuffleNetV2论文译读笔记相关推荐

  1. MobileNetV3论文译读笔记

    论文 Searching for MobileNetV3 摘要 本文提出了新一代的MobileNets模型,基于互补搜索技术的组合,同时这也是一种新型的架构设计.(实际上就是加入了NAS方法)Mobi ...

  2. PicoDet论文译读笔记

    PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices 摘要 在目标检测中如何实现更好的精度-速度均衡是一个具有挑战性的问题. ...

  3. LM详解 GPT3,GPT2, GPT1 论文译读

    LM详解 GPT3,GPT2, GPT1 论文译读 T5,Exploring the Limits of Transfer Learning with a Unified Text-to-Text T ...

  4. CBNetV2论文的译读笔记

    论文名称 CBNetV2: A Composite Backbone Network Architecture for Object Detection 摘要 如今性能最好的目标检测器在很大程度上依赖 ...

  5. KaimingInit论文的译读笔记

    摘要 Rectified activation units (rectifiers)(即:整流激活单元,一般就是ReLU函数,因为在本文中Kaiming还提出了PReLU,所以他这里用的是" ...

  6. MABN论文的译读笔记

    摘要 BN是深度学习领域使用最广泛的方法之一:但是其性能会因为batch-size不足而严重下降.这个缺点限制了BN在某些计算机视觉任务上的应用,例如:检测和分割,某些情况下由于内存使用的限制batc ...

  7. 【NIPS 2020】Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for...译读笔记

    论文名称 Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Dete ...

  8. 【CVPR 2021】VarifocalNet: An IoU-aware Dense Object Detector的译读笔记

    论文 VarifocalNet: An IoU-aware Dense Object Detector 摘要 准确排序大量候选框对dense检测器获得高精度是十分重要的.之前的工作使用类别分数或者类别 ...

  9. 【IEEE Transactions NNLS】DSAN: Deep Subdomain Adaptation Network for Image Classification译读笔记

    笔记 摘要 对于标注数据难以获取的目标任务来说,域自适应能够将知识从一个不同的源域中将知识迁移过来.之前的深度域自适应方法主要学习全局域漂移,即在全局上对齐源分布和目标分布,而不考虑两个同类别不同域的 ...

最新文章

  1. recover 没有捕获异常_GO语言异常处理机制panic和recover分析
  2. anaconda创建菜单失败
  3. java List集合
  4. iOS 6编程-使用Photo Library(照片库)和相机
  5. C++ Primer 5th笔记(2)chapter 2变量和基本类型:constexpr 、auto、类型别名、decltype
  6. VS2010 用WebBrowser控件 无响应
  7. mysql 查询设置调优_MySQl 查询性能优化相关
  8. igs时间和utc_UTC和GMT时间
  9. jQuery1.4新特性
  10. Java StackTraceElement toString()方法与示例
  11. 程序编译时书写Makefile注意事项一例
  12. 海口交警入驻百度地图交通云平台 市民可实时查询实景路况
  13. python 项目环境包的名称和版本导出和导入
  14. C#正则_取出标签内的内容(非贪婪)
  15. 5个层次的赚钱模式,看看你是哪一种?
  16. 美网络司令部:马上修复严重的 PAN-OS 漏洞,免遭国家黑客攻击
  17. python第二课知识点总结
  18. 人人商城数据字典---链接内容
  19. backup archivelog all not backed up;
  20. UG NX 12 布尔运算

热门文章

  1. sqlite遇到database is locked问题的完美解决
  2. 9 [面向对象]-内置方法
  3. Angular JS(二) 指令部分
  4. 读书笔记五:TCP/IP详解之RARP逆地址解析协议
  5. windows10 搜索桌面搜索功能失效的解决
  6. 数据库原理--事务(一)
  7. 6月3号=》66页-70页
  8. inputtextarea表单提示文字
  9. 【重识 HTML + CSS】网页基础知识、基本 HTML 标签
  10. 那年学过的Java笔记三核心类库三