敞开生长之旅!这是我参加「日新方案 12 月更文应战」的第3天,点击查看活动概况。

  • 摘要
  • 1、介绍
  • 2、高效网络规划的有用辅导思想
    • G1-相同巨细的通道数能够最小化 MAC
    • G2-分组数太多的卷积会添加 MAC
    • G3-网络碎片化会下降并行度
    • G4-逐元素的操作不行忽视
  • 3、ShuffleNet V2:一个高效的架构
  • 4、试验
  • 5、定论
  • 6,个人考虑
  • 参阅资料

近期在研究轻量级 backbone 网络,咱们所了解和工业界能布置的网络有 MobileNet V2ShuffleNet V2RepVGG 等,本篇博客是对 ShuffleNet v2 论文的个人了解剖析。本文的参阅资料是自己对网络上资料进行查找和挑选出来的,质量相对较高、且对本文有参阅含义的文章。ShuffleNet v2 论文最大的奉献在于看到了 GPU 访存带宽(内存拜访价值 MAC)关于模型推理时刻的影响,而不仅仅是模型复杂度,也便是 FLOPs 和参数量 Params 关于推理时刻的影响,并由此提出了 4 个轻量级网络规划的原则和一个新颖的 卷积 block 架构-ShuffleNet v2。

摘要

当时,神经网络结构的规划基本由间接的核算复杂度主导,例如 FLOPs,可是直接的衡量如速度,还取决于其他要素,例如内存的获取损耗和渠道特性。因而,咱们将运用直接的规范衡量,而不仅仅是 FLOPs。因而本文主张直接在方针渠道上用直接衡量进行测验。依据一系列操控条件试验,作者提出了规划高效网络结构的一些有用辅导思想,并据此提出了一个称之为 ShuffleNet V2 的新结构。归纳的比照试验证明了作者的模型在速度和准确性上获得了最佳的平衡(state-of-the-art)。

1、介绍

为了衡量核算复杂度,一个广泛选用的衡量办法是浮点运算的次数 FLOPs,可是,它是一个间接的衡量,是对咱们真正关怀的直接衡量比方速度或许时延的一种近似估量。在曾经的工作中,这种不一致现已被学者们所发现,比方 MobileNet v2 要比 NASNET-A 快许多,可是它们两者具有差不多的 FLOPs。

轻量级网络论文-ShuffleNet v2 详解

图 1 中在 GPUARM 两个渠道上,具有相同 FLOPs 的模型运转速度也会相差许多。因而只用 FLOPs 来衡量核算复杂度是不充分的,也会导致得不到最优的网络规划。

导致这种不一致的首要有两个原因:一是影响速度的几个重要要素只经过 FLOPs 是考虑不到的,比方 MAC(Memory Access Cost)和并行度;二是具有相同 FLOPs 的模型在不同的渠道上或许运转速度不相同。 因而,作者提出了规划有用网络结构的两个原则。一是用直接衡量来衡量模型的功能,二是直接在方针渠道上进行测验。

2、高效网络规划的有用辅导思想

首先,作者剖析了两个经典结构 ShuffleNet v1 和 MobileNet v2 的运转时刻。ARM 和 GPU 渠道的详细运转环境如下图所示。

轻量级网络论文-ShuffleNet v2 详解

轻量级网络论文-ShuffleNet v2 详解

从图 2 能够看出,尽管以 FLOPs 衡量的卷积占有了大部分的时刻,但其他操作也耗费了许多运转时刻,比方数据输入输出、通道打乱和逐元素的一些操作(张量相加、激活函数)。因而,FLOPs 不是实践运转时刻的一个准确估量。

  1. G1:相同巨细的通道数能够最小化 MAC
  2. G2:太多的分组卷积会添加 MAC。
  3. G3:网络碎片化会削减并行度。
  4. G4:逐元素的操作不行忽视。

G1-相同巨细的通道数能够最小化 MAC

现代的网络如 Xception [12], MobileNet [13], MobileNet V2 [14], ShuffleNet [15] 都选用了深度可分离卷积,它的点卷积(即 111\times 1 卷积)占有了大部分的核算复杂度(ShuffleNet 有剖析)。假定输入特征图巨细为 h∗w∗c1h*w*c_1,那么卷积核 shape 为 (c2,c1,1,1)(c_2, c_1, 1, 1),输出特征图长宽不变,那么 111 \times 1 卷积的 FLOPsB=hwc1c2B = hwc_{1}c_{2}

论文中 FLOPs 的核算是把乘加当作一次浮点运算的,所以其实等效于咱们一般了解的 MACs 核算公式。

简略起见,咱们假规划算设备的缓冲足够大能够存放下整个特征图和参数。那么 111 \times 1 卷积层的内存拜访价值(内存拜访次数)为 MAC=hwc1+hwc2+c1c2=hw(c1+c2)+c1c2MAC = hwc_1 + hwc_2 + c_{1}c_{2} = hw(c_{1} + c_{2}) + c_{1}c_{2},等式的三项别离代表输入特征图、输出特征图和权重参数的价值。由均值不等式,咱们有:

MAC=hw(c1+c2)+c1c2=(hw)2(c1+c2)2+Bhw≥(hw)2(4c1c2)+Bhw≥2hwB+Bhw\begin{aligned} MAC &= hw(c_{1} + c{2}) + c_{1}c_{2} \\ &= \sqrt{(hw)^{2}(c_{1} + c_{2})^{2}} + \frac{B}{hw} \\ &\geq \sqrt{(hw)^{2}(4c_{1}c_{2})}+ \frac{B}{hw} \\ &\geq 2\sqrt{hwB} + \frac{B}{hw} \\ \end{aligned}

由均值不等式,可知当 c1=c2c_1 = c_2 时,(c1+c2)2=4c1c2(c_{1} + c_{2})^{2} = 4c_{1}c_{2},即式子 (c1+c2)2(c_{1} + c_{2})^{2} 取下限。即当且仅当 c1=c2c_{1}=c_{2}111 \times 1 卷积输入输出通道数相等)时,MAC 获得最小值。可是这个定论只是理论上建立的,实践中缓存容量或许不够大,缓存战略也因渠道各异。所以咱们进一步规划了一个比照试验来验证,试验的基准的网络由 10 个卷积 block 组成,每个块有两层卷积,第一个卷积层输入通道数为 c1c_{1} 输出通道数为c2c_{2},第二层与第一层相反,然后固定总的 FLOPs 调整c1:c2c_{1}:c_{2}的值测验实践的运转速度,成果如表 1 所示:

轻量级网络论文-ShuffleNet v2 详解

能够看到,当比值挨近 1:1 的时候,网络的 MAC 更小,测验速度也最快。

G2-分组数太多的卷积会添加 MAC

分组卷积是现在轻量级网络结构(ShuffleNet/MobileNet/Xception/ResNeXt)规划的核心,它经过通道之间的稀少衔接(也便是只和同一个组内的特征衔接)来下降核算复杂度。一方面,它答应咱们运用更多的通道数来添加网络容量进而进步准确率,但另一方面随着通道数的增多也对带来更多的 MAC

针对 111 \times 1 的分组卷积,咱们有:

分组卷积 FLOPs 的核算公式,我写的 MobileNet v1 论文详解 有给出推导。

B=h∗w∗1∗1∗c1g∗c2g∗g=hwc1c2g\begin{aligned} B = h \ast w \ast 1 \ast 1 \ast \frac{c_1}{g} \ast \frac{c_2}{g} \ast g = \frac{hwc_{1}c_{2}}{g} \end{aligned}
MAC=hw(c1+c2)+c1c2g=hwc1+Bgc1+Bhw\begin{aligned} MAC = hw(c_{1} + c_{2}) + \frac{c_{1}c_{2}}{g} = hwc_{1} + \frac{Bg}{c_1}+\frac{B}{hw}\end{aligned}

固定 c2g\frac{c_2}{g} 的比值,又由于输入特征图 c1hwc_{1} \times h \times w 固定,然后也就固定了核算价值 BB,所以可得 上式中 MACMACgg 成正比的联系。

其间 BB 是卷积层的浮点运算次数(FLOPs),gg 是分组卷积的组数,能够看到,假如给定输入特征图尺度(shapec1hwc_{1} \times h \times w 和核算价值 BB,则 MACMAC 与组数 gg 成正比。本文经过叠加 10 个分组点卷积层规划了试验,在确保核算价值(FLOPs)相同的情况下选用不同的分组组数测验模型的运转时刻,成果如下表 2 所示。

轻量级网络论文-ShuffleNet v2 详解

很明显运用分组数多的网络速度更慢,比方 分为 8 个组要比 1 个组慢得多,首要原因在于 MAC 的添加 。因而,本文主张要依据硬件渠道和方针使命谨慎地挑选分组卷积的组数,不能简略地由于能够进步准确率就挑选很大的组数,而忽视了内存拜访价值(MAC)的添加。

G3-网络碎片化会下降并行度

GoogLeNet 系列和自动搜索得到的网络架构中,每个网络的 block 都选用多分支(multi-path)结构,在这种结构中多选用小的算子(fragmented operators 支路算子/碎片算子)而不是大的算子,block 中的每一个卷积或许池化操作称之为一个 fragmented operator。如 NASNET-A[9]网络的碎片算子的数量(即一个 building block 的单个卷积或池化操作的总数)为 13。相反,在 ResNet[4] 这样的规范网络中,碎片算子的数量为 2 或许 3。

Residual Block 有两种,basic blockbottleneck block 的残差结构。fragment,翻译过来便是割裂的意思,能够简略了解为网络的单元或许支路数量。

尽管曩昔的论文现已表明,这种 fragmented structure(碎片化/支路结构)能够进步模型的准确性,可是其会下降功率,由于这种结构 GPU 对并行性强的设备不友好。并且它还引进了额外的开支,如内核启动和同步。

kernel launching and synchronization. synchronization:同步支路结构分支之间的同步。network fragmentation 我翻译为网络碎片化。

为了量化网络碎片化(network fragmentation)怎么影响功率,咱们点评了一系列具有不同碎片化程度(degree of fragmentation)的网络块(network blocks)。详细来说,比照试验试验的每个构建块由 1 到 4 个 顺序或并行结构的1×1 卷积层组成。The block structure 如附录图1所示。

轻量级网络论文-ShuffleNet v2 详解

每个 block 重复堆叠 10 次。表 3 的成果表明,碎片化会下降 GPU 的速度,例如 4-fragment 比 1-fragment 结构慢约 3 倍。可是在 ARM 上,fragmentation 对速度的影响速会比 GPU 相对较小些。

轻量级网络论文-ShuffleNet v2 详解

G4-逐元素的操作不行忽视

如图 2 所示,例如 MobileNet v2ShuffleNet v1 这样的轻量级模型中,按元素操作(element-wise)会占用很多时刻的,尤其是在 GPU 渠道上。

在咱们的论文中,逐元素算子包含 ReLUAddTensorAddBias 等,它们的 FLOPs 相对较小,可是 MAC 较大。特别地,咱们把 depthwise convolution 当作一个 逐元素算子(element-wise operator),由于它的 MAC/FLOPs 的比值也较高。

shortcut 操作并不能当作 element-wise 算子。

论文运用 ResNet 的 “bottleneck” 单元进行试验,其是由 111 \times 1 卷积、然后是333 \times 3 卷积,最终又是 111 \times 1 卷积组成,并带有 ReLUshortcut 衔接,其结构图如下图所示。在论文的试验中,删去 ReLUshortcut 操作,表 4 报告了不同变体 “bottleneck” 的运转时刻。咱们观察到,在删去 ReLU 和 shortcut 后,在 GPU 和 CPU 渠道都获得了 20% 的加快。

轻量级网络论文-ShuffleNet v2 详解

轻量级网络论文-ShuffleNet v2 详解

定论和评论。依据上诉 4 个辅导原则和经验研究,咱们得出高效的网络结构应该满意:

  1. 运用平衡的卷积,也便是通道数相同;
  2. 合理运用分组卷积;
  3. 削减碎片度;
  4. 削减逐元素操作。

以上 4 个理想的特点的发挥作用取决于渠道特性(例如内存操作和代码优化),这超出了论文理论上的范围,但在实践网络规划中咱们应尽量恪守这些原则。 之前轻量级神经网络体系结构的进展首要是依据 FLOPs 的衡量规范,并没有考虑上述 4 个特点。比方 ShuffleNet v1 严峻依靠分组卷积,这违反了 G2MobileNet v2 利用了回转瓶颈结构,这违反了 G1,并且在通道数较多的扩展层运用 ReLU 和深度卷积,违反了 G4NAS 网络生成的结构碎片化很严峻,这违反了 G3

3、ShuffleNet V2:一个高效的架构

重新检查 ShuffleNet v1ShuffleNet 是一个 state-of-the-art 网络,被广泛应用于低端设备中(如手机)。它启示了咱们论文中的工作,因而,它首先被检查和剖析。

依据 ShuffleNet v1,轻量级神经网络的首要应战在于,在给定预算(FLOPs)的情况下,特征图的通道数也是受限制的。为了在不明显添加 FLOPs 核算量的情况下进步通道数,ShuffleNet v1 论文选用了两种技能:逐点组卷积和类瓶颈结构(pointwise group convolutions and bottleneck-like structures.);然后引进“channel shuffle” 操作,令不同组的通道之间能够进行信息交流,进步精度。其构建模块如图 3(a)(b) 所示。

从本文 Section 2 的评论,能够知道逐点组卷积和瓶颈结构都添加了 MAC( G2G1 )。这个成本不行忽视,特别是关于轻量级模型。别的,运用太多分组也违反了 G3shortcut connection 中的逐元素加法(element-wise “Add”)操作也不行取 (G4)。因而,为了完成较高的模型容量和功率,要害问题是怎么坚持很多且相同宽的通道,一起没有密布卷积也没有太多的分组

怎么坚持很多且相同宽的通道,一起没有密布卷积也没有太多的分组,这句话比较难了解。我的了解:1,卷积 block 里边的卷积层通道多且相同宽的通道的,意味着两个衔接的卷积层的通道数要多且相等。2,这儿密布卷积是指 111\times 1 卷积。3,运用分组卷积时,分组数 group 不宜过多,那就意味着 DW 卷积的输入通道数要较小。

ShuffleNet v2 的通道拆分。在 ShuffleNet v1 block的基础上,ShuffleNet v2 block 引进通道分割(Channel Split)这个简略的算子来完成上述意图,如图 3(c) 所示。在每个单元 (block) 的开始,咱们将输入特征图的 cc 个通道切分成 (split) 两个分支 (branches):c−c′c-c^{‘} 个通道和 c′c^{‘} 个通道。依据 G3 网络碎片尽或许少,其间一个分支坚持不变(shortcut connection),别的一个分支包含三个通道数相同的卷积来满意 G1。和 v1 不同,v2 block 的两个 111 \times 1 卷积不再运用分组卷积,一部分原因是为了满意 G2,别的一部分原因是一开始的通道切分 (split)操作现已完成了分组作用。

最终,对两个分支的成果进行拼接(concatnate),这样关于卷积 block 来说,输入输出通道数是相同的,契合 G1 原则。和 ShuffleNet v1 相同都运用通道打乱(channel shuffle)操作来确保两个分支的信息进行交互

ResNet 的 basic block 和 bottleneck block 也是这样规划的,契合 G1 原则。

轻量级网络论文-ShuffleNet v2 详解

通道打乱之后的输出,便是下一个单元的输入。ShuffleNet v1 的 “Add” 操作不再运用,逐元素操作算子如:ReLUDW 卷积 只存在于在右边的分支。与此一起,咱们将三个连续的逐元素操作算子:拼接(“Concat”)、通道打乱(“Channel Shuffle”)和通道拆分(“Channel Split”合并成一个逐元素算子。依据 G4原则,这些改动是有利的。

针对需求进行空间下采样的 block,卷积单元(block)进行了修改,通道切分算子被移除,然后 block 的输出通道数变为两倍,详细信息如图 3(d) 所示。

图 3(c)(d) 显现的卷积 block叠加起来即组成了最终的 ShuffleNet v2 模型,简略起见,设置 c′=c/2c^{‘} = c/2,这样堆叠后的网络是类似 ShuffleNet v1 模型的,网络结构详细信息如表 5 所示。v1 和 v2 block 的差异在于, v2 在大局均匀池化层(global averaged pooling)之前添加了一个 111 \times 1 卷积来混合特征(mix up features),而 v1 没有。和 v1 相同,v2 的 block 的通道数是依照 0.5x 1x 等比例进行缩放,以生成不同复杂度的 ShuffleNet v2 网络,并标记为 ShuffleNet v2 0.5、ShuffleNet v2 1 等模型。

注意:表 5 的通道数规划是为了操控 FLOPs,需求调整通道数将 FLOPs 与之前工作对齐然后使得比照试验公正,没有运用 2^n 通道数是由于其与精度无关。

轻量级网络论文-ShuffleNet v2 详解

依据前文的剖析,咱们能够得出此架构遵从一切原则,因而非常高效。

网络精度的剖析ShuffleNet v2 不仅高效并且精度也高。有两个首要理由:一是高效的卷积 block 结构答应咱们运用更多的特征通道数,网络容量较大。二是当 c′=c/2c^{‘} = c/2时,一半的特征图直接经过当时卷积 block 并进入下一个卷积 block,这类似于 DenseNetCondenseNet 的特征重复利用。

DenseNet 是一种具有密布衔接的卷积神经网络。在该网络中,任何两层之间都有直接的衔接,也便是说,网络每一层的输入都是前面一切层输出的并集,而该层所学习的特征图也会被直接传给其后边一切层作为输入。

在 DenseNet 论文中,作者经过画不同权重的 L1 范数值来剖析特征重复利用的形式,如图 4(a)所示。能够看到,相邻层之间的关联性是远远大于其它层的,这也便是说一切层之间的密布衔接或许是多余的,最近的论文 CondenseNet 也支持这个观点。

轻量级网络论文-ShuffleNet v2 详解

在 ShuffleNet V2 中,很容易证明,第 ii 层和第 i+ji+j 层之间直接相连的特征图通道数为 rjcr^{j}c,其间 r=(1−c′)/cr=(1−c^{‘})/c。换句话说,两个 blocks 之间特征复用的数量是随着两个块之间的间隔变大而呈指数级衰减的。相距远的 blocks,特征重用会变得很弱小。

图 4 的两个 blocks 之间关联性的了解有些难。

因而,和 DenseNet 相同,Shufflenet v2 的结构经过规划完成了特征重用形式,然后得到高精度,并具有更高的功率,在试验中现已证明了这点,试验成果如表 8 所示 。

轻量级网络论文-ShuffleNet v2 详解

4、试验

精度与 FLOPs 的联系。很明显,咱们提出的 ShuffleNet v2 模型很大程度上优于其他网络,特别是在小的核算量预算情况下。此外,咱们也注意到 MobileNet v2 模型在 图像尺度为224224224 \times 224 和模型核算量为 40 MFLOPs 量级时体现欠安,这或许是由于通道数太少的原因。相比之下,咱们的规划的高效模型能够运用更多的通道数,所以并不具备此缺点。别的,如 Section 3 评论的那样,尽管咱们的模型和 DenseNet 都具有特征重用功能,可是咱们的模型功率更高。

推理速度和 FLOPs/Accuracy 的联系。本文比较了 ShuffleNet v2、MobileNet v2、ShuffleNet v1 和 Xception 四种模型的实践推理速度和 FLOPs的联系,如图 1(c)(d) 所示,在不同分辨率条件下的更多成果在附录表 1 中供给。

尽管 MobileNet v1 的精度体现欠安,可是其速度快过了 SHuffleNet v2等网络。咱们以为是由于 MobileNet v1 契合本文主张的原则(比方 G3 原则, MobileNet v1 的碎片化程度少于 ShuffleNet v2)。

与其他办法的结合。ShuffleNet v2 与其他办法结合能够进一步进步功能。当运用 SE 模块时,模型会损失一定的速度,但分类的精度会进步 0.5%。卷积 block 的结构如附录 2(b)所示,比照试验成果在表 8 中。

轻量级网络论文-ShuffleNet v2 详解

Sequeeze-and-Excitation(SE) block 不是一个完整的网络结构,而是一个子结构(卷积 block),通用性较强、即插即用,能够嵌到其他分类或检测模型中,和 ResNextShuffleNet v2 等模型结合。SENet 首要是学习了 channel 之间的相关性,挑选出了针对通道的注意力,稍微添加了一点核算量,可是作用比较好。SE 其 block 结构图如下图所示。

轻量级网络论文-ShuffleNet v2 详解

大型模型通用化(Generation to Large Models)。尽管本文的消融(ablation)试验首要是针对轻量级网络,可是 ShuffleNet v2 在大型模型(FLOPs≥2GFLOPs \geq 2G)的体现上也丝毫不差劲。表6 比较了50 层的 ShuffleNet v2ShuffleNet v1ResNet50ImageNet 分类试验上的精度,能够看出同等 FLOPs=2.3G 条件下 ShuffleNet v2 比 v1 的精度更高,一起和 ResNet50 相比 FLOPs 削减 40%,可是精度体现更好。试验用的网络细节参阅附录表2

轻量级网络论文-ShuffleNet v2 详解

关于很深的 ShuffleNet v2 模型(例如超过 100 层),咱们经过添加一个 residual path 来轻微的修改基本的 block 结构,来使得模型的练习收敛更快。表 6 供给了 带 SE 模块的 164 层的 ShuffleNet v2 模型,其精度比当时最高精度的 state-of-the-art 模型 SENet 精度更高,一起 FLOPs 更少。

方针检测使命点评。为了点评模型的泛化功能,咱们运用 Light-Head RCNN 作为方针检测的结构,在 COCO 数据集上做了比照试验。表 7 的试验成果表明模型在 4 种不同复杂度条件下, ShuffleNet v2 做 backbone 的模型精度比其他网络更高、速度更快,全面逾越其他网络。

轻量级网络论文-ShuffleNet v2 详解

Table 7: Performance on COCO object detection. The input image size is 800 1200. FLOPs row lists the complexity levels at 224 224 input size. For GPU speed evaluation, the batch size is 4. We do not test ARM because the PSRoI Pooling operation needed in [34] is unavailable on ARM currently. 比较检测使命的成果(表 7),发现精度上 ShuffleNet v2 > Xception ≥ ShuffleNet v1 ≥ MobileNet v2。 比较分类使命的成果(表 8),精度等级上 ShuffleNet v2 ≥ MobileNet v2 > ShuffeNet v1 > Xception

轻量级网络论文-ShuffleNet v2 详解

5、定论

咱们主张关于轻量级网络规划应该考虑直接 metric(例如速度 speed),而不是间接 metric(例如 FLOPs)。本文提出了有用的原则和一个新的网络架构-ShuffleNet v2。归纳试验证了咱们模型的有用性。咱们希望本文的工作能够启示未来的网络架构规划能够更注重渠道特性和有用性。

这儿的直接 metric,能够是inference time or latency,也能够是模型推理速度 speed,其含义都是相同的。

6,个人考虑

剖析模型的推理功能得结合详细的推理渠道(常见如:英伟达 GPU、移动端 ARM CPU、端侧 NPU 芯片等),目前已知影响推理功能的要素包含: 算子核算量 FLOPs(参数量 Params)、算子内存拜访价值(访存带宽)。但相同硬件渠道、相同网络架构条件下, FLOPs 加快比与推理时刻加快比成正比。

举例:关于 GPU 渠道,Depthwise 卷积算子实践上是运用了很多的低 FLOPs、高数据读写量的操作。这些具有高数据读写量的操作,加上 GPU 的访存带宽限制,使得模型把很多的时刻糟蹋在了从显存中读写数据上,导致 GPU 的算力没有得到“充分利用”。定论来历知乎文章-FLOPs与模型推理速度。

最终,目前 AI 练习体系现已有了一个公认的点评规范和渠道-MLPerf,可是 AI 推理体系的点评,目前还没有一个公认的点评目标。Training 体系的功能能够运用“到达特定精度的时刻”这个简略的规范来衡量。但 Inference 体系却很难找到一个简略的目标,LatencyThroughputPowerCost 等等,哪个目标合适呢?目前没有统一的规范。

参阅资料

  1. Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution
  2. 分组卷积和深度可分离卷积
  3. 了解分组卷积和深度可分离卷积怎么下降参数量
  4. 深度可分离卷积(Xception 与 MobileNet 的点滴)
  5. MobileNetV1代码完成
  6. 轻量级神经网络:ShuffleNetV2解读
  7. ShufflenetV2_高效网络的4条有用原则
  8. ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
  9. MobileNetV2: Inverted Residuals and Linear Bottlenecks
  10. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
  11. Squeeze-and-Excitation Networks