ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

Abstract

  • 目前,神经网络架构设计主要由计算复杂度的间接度量(即FLOP)引导。然而,直接度量(例如,速度)还取决于诸如存储器访问成本和平台特性之类的其他因素。 因此,这项工作建议评估目标平台上的直接度量,而不仅仅考虑FLOP。基于一系列对照实验,这项工作为高效的网络设计提供了几个实用指南。因此,提出了一种称为ShuffleNet V2的新架构。全面的消融实验验证了我们的模型在速度和准确度方面是最先进的。

Introduction

  • 为了测量计算复杂性,广泛使用的度量是浮点运算的数量,或FLOPs1。 但是,FLOP是间接指标。  它是我们真正关心的直接度量的近似值,但通常不等同,例如速度或延迟。 在以前的作品[17,18,14,19]中已经注意到这种差异。 例如,MobileNet v2 [14]比NASNET-A [9]快得多,但它们具有可比较的FLOP。 这种现象在图1(c)(d)中进一步说明,它表明具有相似FLOP的网络具有不同的速度。 因此,使用FLOP作为计算复杂性的唯一指标是不充分的,并且可能导致次优设计。ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
  • 间接(故障)和直接(速度)指标之间的差异可归因于两个主要原因。首先,对速度有相当大影响的几个重要因素没有被触发器考虑在内。其中一个因素是内存访问成本(MAC)。在某些操作(如组卷积)中,这种成本占运行时的很大一部分。它可能是具有强大计算能力的设备(如GPU)的瓶颈。在网络体系结构设计过程中,不应简单地忽略这一成本。另一个是平行度。在相同的触发器下,一个高度并行的模型可能比另一个高度并行的模型快得多。
  • 其次,具有相同FLOP的操作可能具有不同的运行时间,具体取决于平台。 例如,张量分解广泛用于早期工作[20,21,22]以加速矩阵乘法。 然而,最近的工作[19]发现[22]中的分解在GPU上甚至更慢,尽管它将FLOP降低了75%。 我们调查了这个问题并发现这是因为最新的CUDNN [23]库专门针对3×3转换而优化。 我们当然不能认为3×3转换比1×1转速慢9倍。
  • 通过这些观察,我们提出应该考虑两个原则来实现有效的网络架构设计。 首先,应该使用直接度量(例如,速度)而不是间接度量(例如,FLOP)。 其次,应在目标平台上评估此类指标。

Practical Guidelines for Efficient Network Design

  •  输入图像大小为224×224。 每个网络随机初始化并评估100次。 为了开始我们的研究,我们分析了两个最先进的网络的运行时性能,ShuffleNet v1 [15]和MobileNet v2 [14]。 它们在ImageNet分类任务上都非常高效和准确。 它们广泛用于移动设备等低端设备。 虽然我们只分析这两个网络,但我们注意到它们代表了当前的趋势。 其核心是组卷积和深度卷积,它们也是其他最先进网络的关键组件,如ResNeXt [7],Xception [12],MobileNet [13]和CondenseNet [16]。
  • 整个运行时被分解用于不同的操作。我们注意到FLOPs度量仅考虑卷积部分。 虽然这部分耗费大部分时间,但其他操作包括数据I / O,数据shuffle和元素操作(Add Tensor,ReLU等)也占用了相当多的时间。 因此,FLOP对实际运行时的估计不够准确。
  • 等通道宽度可最大限度地降低内存访问成本:现代网络通常采用深度可分离卷积[12,13,15,14],其中逐点卷积(即1×1卷积)占复杂性的大部分[15]。 我们研究了1×1卷积的核心形状。 形状由两个参数指定:输入通道c1和输出通道c2的数量。 设h和w为特征映射的空间大小,1×1卷积的FLOP为ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
  • 为简单起见,我们假设计算设备中的高速缓存足够大以存储整个特征映射和参数。 因此,存储器访问成本(MAC)或存储器访问操作的数量是ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design。 注意,这两个术语分别对应于输入/输出特征映射和内核权重的存储器访问。
  • ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
  • 因此,MAC具有FLOP给出的下限。 当输入和输出通道的数量相等时,它达到下限。结论是理论上的。 实际上,许多设备上的缓存都不够大。 此外,现代计算库通常采用复杂的阻塞策略来充分利用缓存机制[24]。 因此,实际MAC可能偏离理论MAC。 为了验证上述结论,如下进行实验。 通过重复堆叠10个构建块来构建基准网络。 每个块包含两个卷积层。 第一个包含c1输入通道和c2输出通道,否则包含第二个。
  • 过多的群组卷积会增加MAC:群组卷积是现代网络架构的核心[7,15,25,26,27,28]。 它通过将所有信道之间的密集卷积改变为稀疏(仅在信道组内)来降低计算复杂度(FLOP)。 一方面,它允许在给定固定FLOP的情况下使用更多信道,并增加网络容量(从而提高精度)。 然而,另一方面,增加的信道数导致更多的MAC。正式地,遵循G1和Eq中的符号。 1,1×1组卷积的MAC和FLOP之间的关系是:
  • ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
  • 其中g是组的数量,ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design是FLOP。 很容易看出,给定固定输入形状ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design和计算成本B,MAC随着g的增长而增加。在确定总FLOP时,不同的组编号。 很明显,使用较大的组号会显着降低运行速度。 例如,使用8组比使用GPU上的1组(标准密集卷积)慢两倍,而ARM上则慢30%。 这主要是由于MAC的增加。 我们注意到我们的实现已经过专门优化,并且比按小组计算卷积更快。因此,我们建议应根据目标平台和任务仔细选择组号。 使用大的组号是不明智的,因为这可以使用更多的通道,因为快速增加的计算成本可以轻易地超过准确度增加的好处。
  • 网络碎片降低了并行度:在GoogLeNet系列[29,30,3,31]和自动生成的体系结构[9,11,10]中,在每个网络块中广泛采用“多路径”结构。 使用了许多小型运算符(这里称为“碎片运算符”)而不是几个大运算符。 例如,在NASNET-A [9]中,碎片运算符的数量(即一个构建块中的单个卷积或池化操作的数量)为13.相比之下,在ResNet [4]等常规结构中,此数字为2或3。尽管这种分散的结构已被证明对准确性有益,但它可能会降低效率,因为它对GPU等具有强大并行计算能力的设备不友好。 它还引入了额外的开销,例如内核启动和同步。为了量化网络碎片如何影响效率,我们评估了一系列具有不同程度碎片的网络块。 具体而言,每个构建块由1至4个1×1个卷积组成,它们按顺序或并行排列。 块结构如附录所示。 每个块重复堆叠10次。 表3中的结果表明,碎片会显着降低GPU上的速度,例如: 4片段结构比1片段慢3倍。 在ARM上,速度降低相对较小。
  • 元素操作是不可忽视的:如图2所示,在像[15,14]这样的轻量级模型中,元素操作占用了相当多的时间,尤其是在GPU上。 这里,元素操作符包括ReLU,AddTensor,AddBias等。它们具有小的FLOP但是相对较重的MAC。 特别地,我们还将深度卷积[12,13,14,15]视为元素运算符,因为它还具有高MAC / FLOP比率。为了验证,我们在ResNet [4]中尝试了“瓶颈”单元(1×1转换,然后是3×3转换,然后是1×1转换,具有ReLU和快捷连接)。 ReLU和快捷操作将分别删除。 表4中报告了不同变体的运行时间。在删除ReLU和快捷方式后,我们观察到GPU和ARM都获得了大约20%的加速。
  • 基于上述指南和实证研究,我们得出结论,一个有效的网络架构应该1)使用“平衡”卷积(等通道宽度); 2)注意使用群组卷积的成本; 3)降低碎片程度; 4)减少元素操作。 这些理想的属性取决于超出理论FLOP的平台特性(例如内存操作和代码优化)。 它们应该用于实际的网络设计。
  • 轻量级神经网络体系结构的最新进展主要基于触发器的度量,不考虑上述特性。例如,shuffleNet v1[15]严重依赖于组卷积(对g2)和瓶颈(对g1)。mobilenet v2[14]使用了一个违反g1的反向瓶颈结构。它在“厚”特征图上使用纵向卷积和relus。这违反了G4。自动生成的结构[9,11,10]非常零碎,违反了G3。

ShuffleNet V2: an Efficient Architecture

  • ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
  • ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
  • 根据[15],轻量级网络面临的主要挑战是,在给定的计算预算(FLOP)下,只有有限数量的特征信道是可用的。 为了在不显着增加FLOP的情况下增加通道数,在[15]中采用了两种技术:逐点组卷积和瓶颈状结构。 然后引入“信道shuffle”操作以实现不同通道组之间的信息通信并提高准确性。 构建块如图3(a)(b)所示。
  • 如第2节所述,逐点组卷积和瓶颈结构都会增加MAC(G1和G2)。 这个成本是不可忽视的,特别是对于轻量级的模型。 此外,使用太多组违反了G3。 快捷方式连接中的元素方式“添加”操作也是不合需要的(G4)。 因此,为了实现高模型容量和效率,关键问题是如何保持大量且同样宽的信道,既没有密集卷积也没有太多组。
  • 为了达到上述目的,我们引入了一个名为channel split的简单运算符。 如图3(c)所示。 在每个单元的开始处,c个特征通道的输入分别被分成具有ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture DesignShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design通道的两个分支。 在G3之后,一个分支仍然是身份。 另一个分支由三个卷积组成,具有相同的输入和输出通道以满足G1。 与[15]不同,这两个1×1卷不再是分组。 这部分是为了遵循G2,部分原因是拆分操作已经产生了两个组。卷积后,两个分支连接在一起。 因此,通道数保持不变(G1)。 然后使用与[15]中相同的“信道shuffle”操作来实现两个分支之间的信息通信。
  • 在shuffling之后,下一个单元开始。 请注意,ShuffleNet v1 [15]中的“添加”操作不再存在。 像ReLU和深度卷积这样的元素操作仅存在于一个分支中。 此外,三个连续的元素操作“Concat”,“Channel Shuffle”和“Channel Split”被合并为单个元素操作。 根据G4,这些变化是有益的。对于空间下采样,该单元稍作修改,如图3(d)所示。 删除了通道拆分运算符。 因此,输出通道的数量加倍。
  • 网络准确性分析ShuffleNet v2不仅效率高,而且准确。 主要有两个原因。 首先,每个构建块的高效率使得能够使用更多的特征信道和更大的网络容量。其次,在每个块中,一半的特征通道(当c0 = c / 2时)直接通过块并加入下一个块。 这可以被视为一种特征重用,与DenseNet [6]和CondenseNet [16]中的类似精神一样。

Conclusion

  • 我们建议网络架构设计应考虑直接度量,如速度,而不是像FLOP那样的间接度量。 我们提出了实用指南和新颖的架构,Shu ffleNet v2。 综合实验验证了我们新模型的有效性。 我们希望这项工作能够激发未来的平台意识和更实用的网络架构设计工作。