ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
Abstract
作者在本文中提出了一个极其高效的CNN结构,叫做 ShuffleNet,它特别为算力有限的移动端设备设计(比如 10 − 150 M F L O P s 10-150MFLOPs 10−150MFLOPs)。新的架构使用了2个新的操作,即 pointwise group 卷积和 channel shuffle,在保持准确率的同时极大地降低了计算量。在 ImageNet 的分类任务和 MS COCO 目标检测任务上的实验证明 ShuffleNet 的表现优于其它结构,在ImageNet分类任务上的 t o p − 1 top-1 top−1错误率为 7.8 % 7.8\% 7.8%,低于最近的 MobileNet,计算量为 40 M F L O P s 40 MFLOPs 40MFLOPs。在ARM端移动设备上,ShuffleNet 相较于 AlexNet 速度提升了13倍,而且准确率差不多。
1. Introduction
构建更深更大的卷积网络是解决视觉识别任务的主流趋势。最准确的CNN通常有数百层以及数千个通道,计算量能达到数十亿的 FLOPs。这份论文则探讨了它的另一个极端:利用极其有限的算力(几十或几百个 MFLOPs)来获得最优的准确率,关注在常用的移动平台上,如机器人、无人机、智能手机等。目前很多论文都关注于如何在主干网络中进行剪枝、压缩和low-bit表示。这里我们意图探索一个非常高效的网络结构,满足算力极其有限的情况。
我们发现 state of the art 的主干网络模型如 Xception 和 ResNeXt 在小型网络中就变得不那么高效了,主要原因是它有密集的 1 × 1 1\times 1 1×1卷积。我们提出使用 pointwise group convolutions 来降低 1 × 1 1\times 1 1×1卷积的的计算复杂度。为了克服 group convolution 带来的副作用,我们设计了一个新的 channel shuffle 操作,帮助信息在各特征通道间流转。基于这两个设计,我们构建了一个非常高效的网络结构 — ShuffleNet。与主流网络结构相比,在给定算力的情况下,ShuffleNet 能呈现更多的特征图通道,有助于编码更多的信息,这对小型网络的表现至关重要。
我们在 ImageNet 分类任务和MS COCO 目标检测任务上进行了评测。一系列的实验证明了 ShuffleNet 的高效率和优异的性能。和 MobileNet相比,ShuffleNet 有明显的优势,在 ImageNet 上的 top-1 错误率要比 MobileNet 低 7.8 % 7.8\% 7.8%,计算量仅为 40 M F L O P s 40 MFLOPs 40MFLOPs。
我们同样在硬件上进行了测试(基于ARM的计算核)。ShuffleNet 模型在 AlexNet基础上取得了13倍的加速,而准确率一样。
2. Related Work
Efficient Model Designs
过去几年我们见证了神经网络在计算机视觉领域的成功,模型设计扮演着至关重要的作用。在嵌入式设备上也可以跑大模型的需求,驱使人们去研究设计高效的模型。例如,GoogLeNet 增加了网络的深度,但它的计算复杂度并不高,它没有简单地堆叠网络层。SqueezeNet极大地减少了参数个数和计算量,并没有影响准确率。ResNet 利用高效的 bottleneck 结构获得了优异的表现。SENet 引入了一个新的结构单元,以极小的算力代价提升了模型的表现。另一组研究团队则利用增强学习和模型搜索方法来探索高效的模型设计。移动端的 NASNet模型取得了与我们的 ShuffleNet 差不多的性能表现(在 ImageNet 分类任务上的错误率为: 26.0 % @ 564 26.0\% @564 26.0%@564 MFLOPs vs. 26.3 % @ 524 26.3\%@524 26.3%@524 MFLOPs)。但是他们并没有报告该设计在小模型上的情况(计算复杂度低于 150 150 150 MFLOPs),也没有在移动设备上测试实际推理时间。
Group Convolution
Group convolution 的概念首先出现在 AlexNet(关于如何在两块GPU上分布模型),在 ResNeXt论文中则证明了它的有效性。在 Inception 系列论文中,Xception中的深度可分离卷积推广了可分离卷积的想法。最近,MobileNet 利用深度可分离卷积,在所有的轻量级网络中取得了 state of the art 的成绩。本篇论文则以一种新颖的方式阐述了 group convolution 和深度可分离卷积。
Channel Shuffle Operation
据我们所知,channel shuffle 的想法在之前的关于高效模型设计的论文中很少有被提到,尽管CNN库 “cuda-convnet” 支持 “random sparse convolution” 层,它等价于random channel shuffle 加一个 group convolution 层。这个 random shuffle 操作有着其它的目的,此后并没有得到深究。最近,另一篇论文 “Interleaved group convolutions for deep neural networks” 在一个双阶段卷积中采取了此想法。但是,该论文并没有探究 channel shuffle 的效率,也没有尝试在小型模型设计使用它。
Model Acceleration
它的目的就是在保持预训练模型的准确率同时,加速推理。裁剪网络的连接或通道可以减少预训练网络中冗余的连接,而保持其准确率。人们又提出了量化和分解来降低计算的冗余,加速推理。FFT无需改动参数,使用优化后的卷积算法降低时间消耗。蒸馏法是从大网络中往小网络转移知识,使得小网络训练变得简单。
3. Approach
3.1 Channel Shuffle for Group Convolutions
目前的卷积网络通常由多个重复的模块构成,这些模块的结构一样。State of the art 的网络如 Xception 和 ResNeXt 在构建模块中使用高效的深度可分离卷积或 group convolutions,很好地平衡了模型的表现能力与计算成本。但是,我们注意到这些设计并没有完全利用 1 × 1 1\times 1 1×1卷积(也被称为 pointwise convolution),反而它们需要消耗大量的算力。例如,在 ResNeXt 中只有 3 × 3 3\times 3 3×3卷积层使用了 group convolution。结果就是,在 ResNeXt 的每个残差单元中,pointwise convolution 占据了 93.4 % 93.4\% 93.4%的乘加运算(mult-adds)。在小型网络中,昂贵的 pointwise convolutions 导致通道个数非常有限,很快就达到复杂度的上限,极大地影响了准确率。
对于这个问题,直接的解决方案就是在 1 × 1 1\times 1 1×1卷积层应用 channel sparse connections,例如 group convolutions。确保每个卷积仅在对应的输入通道 group 上操作,group convolution 极大地降低了计算量。但是,如果有多个 group convolutions 堆在一起使用,就会产生副作用:特定通道的输出是由输入通道的很小一部分产生。图1(a)展示了两个堆叠的 group convolution 层。很清楚,某一group的输出只和该 group 的输入有关系。这个特点就阻碍了不同 channel groups 之间的信息流转,弱化了模型表达能力。
如果我们允许 group convolution 从不同的 groups 中获取输入数据(如图1(b)所示),那么输入和输出通道就会被充分地关联起来。对于前面 group 层产生的特征图,我们可以首先将每个 group 的通道划分为若干个 sub-groups,然后用不同的 sub-groups 将每个 group 输入进下一层网络。这个可以通过 channel shuffle 操作非常高效而优美地实现:假设一个卷积层有 g g g个 groups,它的输出有 g × n g\times n g×n个通道;我们首先将输出通道维度 reshape 为 ( g , n ) (g, n) (g,n),进行 transpose,然后 flatten 作为下一层的输入。注意,该操作仍然有效,尽管两个卷积有不同个数的 groups。而且,channel shuffle 是可微的,也就是说它可以嵌入在网络中进行端到端的训练。
Channel shuffle 操作使得我们可以用多个 group convolutions 构建一个强大的网络结构。下一章节,我们将介绍一个包含 channel shuffle 和 group convolution 的高效的网络单元。
3.2 ShuffleNet Unit
利用 channel shuffle 操作,我们提出了一个新的 ShuffleNet 单元,专门为小型网络设计。我们从图2(a) 中的 bottleneck unit 的设计出发。它是一个残差模块。在残差分支中,对于 3 × 3 3\times 3 3×3卷积层,我们在 bottleneck 特征图上使用一个节约算力的 3 × 3 3\times 3 3×3深度卷积。然后我们将第一个 1 × 1 1\times 1 1×1的卷积层替换为 pointwise group convolution 和一个 channel shuffle 操作,形成 ShuffleNet 单元,如图2(b)所示。第二个 pointwise group convolution 的目的就是恢复通道维度,与 shortcut path 匹配。为了简洁性,我们在第二个 pointwise group convolution层后没有使用 channel shuffle 操作。BN及非线性函数的使用和 ResNet 中类似,除了我们没有在深度卷积后使用 ReLU。至于 ShuffleNet 与 stride 一起使用,我们只做了两处改动:
- 在 shortcut path 上增加了一个 3 × 3 3\times 3 3×3 average pooling 层;
- 将 element-wise addition 替换为 channel concat,仅需一点额外的成本即可以增大通道的维度。
由于 pointwise group convolution 和 channel shuffle,ShuffleNet 模块中所有的组件都可以高效地计算。和 ResNet 和 ResNeXt 相比,我们结构的复杂度较低。例如,给定输入大小为 c × h × w c\times h\times w c×h×w和 bottleneck 通道 m m m,ResNet 单元需要 h w ( 2 c m + 9 m 2 ) hw(2cm + 9m^2) hw(2cm+9m2) FLOPs,ResNeXt 需要 h w ( 2 c m + 9 m 2 / g ) hw(2cm + 9m^2/g) hw(2cm+9m2/g) FLOPs,而ShuffleNet 只需要 h w ( 2 c m / g + 9 m ) hw(2cm/g + 9m) hw(2cm/g+9m) FLOPs, g g g表示卷积 groups 的个数。换句话说,在给定的计算成本范围内,ShuffleNet 可以使用更宽的特征图。我们发现这对小网络非常重要,因为小网络处理信息的通道个数一般很少。
此外,ShuffleNet 的 depthwise 卷积只在 bottleneck 特征图上操作。尽管 depthwise 卷积通常有着非常深的理论复杂度,我们发现它很难在算力弱的移动设备上有效实现,这可能是由于和其它密集的操作相比,它较差的 computation/memory access ratio 造成。这个缺点在论文 Xception 中也有提到,有一个基于 TensorFlow 的运行时库。在 ShuffleNet 模块中,我们故意地只在 bottleneck 中使用了 depthwise 卷积,为了尽可能地减少计算成本。
3.3 Network Structure
在 ShuffleNet unit 的基础上,我们在表1中呈现了整个 ShuffleNet 结构。该网络主要由一组 ShuffleNet units 构成,它们可划分为3个 stages。每个stage 中的第一个构建模块使用 s t r i d e = 2 stride = 2 stride=2。Stage 中其它的超参数保持一致,对于下一个 stage,该 stage 的输出通道数翻一倍。对于每个 ShuffleNet unit,Bottleneck 通道数设为它输出通道数的 1 / 4 1/4 1/4。我们的初衷是提供一个尽可能简单的网络方案,尽管进一步的调参会让网络的结果更优。
在 ShuffleNet unit中,group 的个数 g g g 控制着 pointwise 卷积的连接稀疏度。表1探索了不同 group 个数,而且我们调整了输出通道来保证整体计算成本不变( 140 ~140 140MFLOPs)。很明显,group个数越大,产生输出通道(因而更多的卷积滤波器)就越多。这有助于编码更多的信息,尽管它可能因为对应的输入通道受限而导致单独卷积滤波器的退化。在下一章节中,我们会探讨不同计算条件下 group 个数的影响。
如果要将网络按照某个复杂度来设计,我们只要在通道个数上乘以一个缩放因子 s s s。例如,在表1中我们将网络表示为 ShuffleNet 1 × 1\times 1×,那么ShuffleNet s × s\times s×就表示在 ShuffleNet 1 × 1\times 1× 中放大滤波器的个数 s s s倍,因此整个的复杂度就会变为ShuffleNet 1 × 1\times 1×的 s 2 s^2 s2倍。
4. Experiments
Pls read paper for more details.