论文

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. SAP SD之如何配置发票分割开票
  2. python selenium --处理下拉框
  3. hihoCoder 1312:搜索三·启发式搜索(A* + 康托展开)
  4. [原创] 域模式下的ASP.NET 发邮件代码
  5. 史上最全Java面试266题:算法+缓存+TCP+JVM+搜索+分布式+数据库
  6. SQL Server 2005将某些数据库行为设置为与指定的 SQL Server 版本兼容
  7. 雷军宣布:启动小米成立以来最大组织架构变革(附内部邮件原文)
  8. 相邻省份最多的省区_拉萨万达广场开业 实现中国大陆省份全覆盖
  9. P.Laguna/AUTOMATIC DETECTION OF WAVE BOUNDARIES IN MULTILEAD ECG SIGNALS VALIDATION WITH THE CSE DB
  10. Java权限管理系统之代码实现(二)
  11. 金融市场联动相关、风险测度、风险溢出 Copula、CoVaR、Garch、DCC、藤Vine、BEKK、SV、ECM
  12. 教务管理系统 php源码,优索教务管理系统 v9.3.2
  13. Jackson 学习笔记 XML转JSON
  14. matlab哪些教材好,新手入门,恳请推荐一本matlab好教材
  15. 黄金面试技巧|应届生求职必备
  16. DhtmlxGrid第一次接触,jsp页面
  17. 物种多样性学习之Beta多样性
  18. HTTP状态码 - 维基百科,自由的百科全书
  19. Python开发一个炸金花小游戏,注意别玩上瘾了
  20. 桶内蓝色红色颜料比例

热门文章

  1. 使用WinPcap抓包分析网络协议
  2. Flexigid Options
  3. java .jar怎么打开_jar文件怎么打开,小编教你如何打开jar文件
  4. 使用STS创建Spring boot project报错:Project build error: Non-resolvable parent POM for
  5. TensorFlow中的设备管理——Device的创建与注册机制
  6. rz/sz:工作原理
  7. 操作系统--进程管理1--单个CPU情况
  8. XML编程总结(七)——使用XPath对象查询xml文档
  9. BoneCP主要配置参数
  10. CSS background-position用法