论文链接:https://arxiv.org/abs/1704.04861
MobileNets:适用于移动视觉应用的高效卷积神经网络
摘要 Abstruct
我们提出了一个适用于移动端与嵌入式视觉应用的高效模型 —— MobileNet。MobileNet 基于流线型结构设计,使用深度可分离卷积(Depthwise Separable Convolutions)来搭建轻量深度神经网络。我们介绍了两个简单的全局超参数(Hyperparameters),用于在延迟与精度上有效权衡。这些超参数允许模型构建者基于问题的限制来选择一个正确大小的模型。我们提供了权衡资源与精确度的广泛经验,相比其他主流模型,MobileNet 在 ImageNet 分类上有着更好的表现。我们接着演示了 MobileNet 在跨越很大范围应用的高效性,包括目标检测,细粒度分类,人脸属性与大规模地理定位。
1. 介绍 Introduction
自从 AlexNet 在 ImageNet 挑战赛:ILSVRC 2012 中获胜后推广了深层卷积神经网络,卷积神经网络在计算机视觉领域就变得无处不在。当前的总体趋势是为了达到更高的精确度而建立层次更深、更复杂的网络。然而,这些提升精确度的方法并不一定会使网络的大小与速度更加高效。在许多现实世界的应用中,比如机器人、自动驾驶汽车与增强现实技术(AR, Augmented Reality),任务识别需要在计算能力受到限制的平台上得到及时的执行。
这篇论文描述了一个有效的网络架构与两个超参数,用以构建一个很小、延迟很低的模型,以轻松匹配移动端与嵌入式视觉应用的设计需求。第二部分将回顾构建小型模型的前期工作,第三部分将描述 MobileNet 架构与两个超参数?第四部分将描述?第五部分将以总结与结论收尾。
2. 前期工作 Prior Work
近期的许多文献对建立小型高效的神经网络都体现出更高的兴趣。许多不同的方法都能被大致分类为压缩预训练网络或者直接训练小型网络。这篇论文提出了一类网络架构,允许模型开发者为他们的应用专门选择一个小型网络以匹配其资源的限制(延迟、大小)。MobileNet 主要关注于优化延迟的同时依旧能产生小型网络,而许多论文只关注于大小却没考虑速度问题。
MobileNet主要由深度可分离卷积构建,最初在 L. Sifre. Rigid-motion scattering for image classification. PhD thesis, Ph. D. thesis, 2014. 1, 3 中引入,后来在 Inception 模型中用以减少最初几层的计算能量。扁平化网络(Flattened networks)从完全分解的卷积中构建,体现出了高度分解网络的潜力。独立于当前这篇论文,分解网络(Factorized Networks)引入了一个类似的分解卷积与拓扑连接的使用。然后,Xception 网络演示了如何按比例扩大深度可分离滤波器(filter),以执行 Inception V3 网络。另一个小型网络 Squeezenet,使用瓶颈方法来设计一个很小的网络。其他减少计算量的网络还有结构化转换网络(structured transform networks)与深度卷积网(deep fried convents,不知道怎么翻,Google 给我翻了个油炸卷饼,整挺好)
一个不同的获得小型网络的方法是收缩、分解与压缩与训练网络。基于产品量化(product quantization),哈希(hashing),修剪(pruning),向量量化(vector quantization)和哈夫曼编码(Huffman coding)的压缩方法都已经有文献提出。另外,还有各种加速与训练网络的分解方法也有文献提出。另一个训练小型网络的方法蒸馏法(distillation),是使用一个较大的网络来训练较小的网络,它是我们方法的补充,在第四部分的一些用例中进行了介绍。另一个新型方法是低位网络(low bit networks)。
3. MobileNet 架构 Mobile Architecture
这一部分我们首先将介绍 MobileNet 所基于的核心层次,即深度可分离滤波器。接着,我们再描述 MobileNet 网络的结构,并以两个模型收缩超参数 —— 宽度乘数与分辨率乘数作为结论来收尾。
3.1. 深度可分离卷积 Depthwise Separable Convolution
MobileNet 模型基于深度可分离卷积,它是分解卷积的一种形式,将标准卷积分解为深度卷积和被称为逐点卷积的一个 1 * 1 卷积。对于 MobileNet 而言,深度卷积在每个输入通道上应用了一个单独的滤波器。逐点卷积接着用 1 * 1 的卷积来结合输出与深度卷积。标准卷积可以一步将输入过滤并组合为一组新的输出。深度可分离卷积将其分为两层,一层用于过滤,一层用于结合。这个分解过程极大地降低了计算量与模型的大小。数据图 2 展示了一个标准卷积 2(a) 是如何分解为一个深度卷积 2(b) 和一个 1 * 1 的逐点卷积 2(c)。
一个标准的卷积层把一个 D_F * D_F * M 的特征图(feature map)F 作为输入,生成一个 D_F * D_G * N 的特征图 G 作为输出,其中 D_F 是输入特征图正方形的宽度与高度,M 是输入通道个数(输入深度),D_G 是输出特征图正方形的宽度与高度,N 是输出通道数目(输出深度)。
文章中有一处错误,其特征图 G 的参数写的是 D_F * D_F * N,实际上为 D_G * D_G * N。
标准的卷积层由大小为 D_K * D_K * M * N 的卷积核(kernel) K 参数化,其中 D_K 表示正方形卷积核的空间维度。
假设步长为 1 并计算填充(padding),标准卷积输出特征图:
G_k_l_n = ∑(i,j,m) K_i_j_m_n * F_k+i-1_l+j-1,m (1)
标准卷积的计算代价为:
D_K * D_K * M * N * D_F * D_F
计算成本成倍地取决于输入通道数量 M,输出通道数量 N,卷积核大小 D_K * D_K 和特征图大小 D_F * D_F。MobileNet 模型就是用来解决这些术语以及它们之间的相互关系。首先,它使用深度可分离卷积来解除输出通道数量与卷积核大小之间的相互作用。
标准卷积操作具有基于卷积核的滤波特征和结合特征,从而产生新的表现。通过使用深度可分离卷积,可以将滤波和组合步骤分为两个步骤,以大幅降低计算成本。
深度可分离卷积有两层组成:深度卷积与逐点卷积。我们用深度卷积把单独的滤波器逐个应用到输入通道。逐点卷积,一个简单的 1 * 1 卷积,接着被用来创建深度层输出的线性组合。MobileNet 对两个层都使用批处理规范(batchnorm)与线性整流函数(ReLU, Rectified Linear Unit)。
每个输入通道所带有的滤波器的深度卷积可以写成:
G^_k_l_m = ∑(i, j) K^_i_j_m * F_k+i-1_l+j-1_m
其中 K^ 表示大小为 D_K * D_K * M 的深度卷积核。K^ 中的 m_th 个滤波器应用在通道 F 中的 m_th 个通道,从而产生输出特征图 G^ 的 m_th 个通道。
深度可分离卷积的计算代码为:
D_K * D_K * M * D_F * D_F
深度卷积与标准卷积相比非常高效。然而,它只过滤驶入通道,不会把它们结合成新的特征,因此还需要额外的一层,来计算通过 1 * 1 卷积的深度卷积输出的线性组合,以产生这些新特征。
深度可分离卷积代价:
D_K * D_K * M * D_F * D_F + M * N * D_F * D_F
即深度卷积与 1 * 1 逐点卷积之和。
通过把卷积压缩成滤波与结合两个步骤,我们可以降低计算量:
(D_K * D_K * M * D_F * D_F + M * N * D_F * D_F) / (D_K * D_K * M * N * D_F * D_F) = 1 / N + 1 / (D_K)^2
MobileNet 使用 3 * 3 的深度可分离卷积,标准卷积是它计算量的 8 到 9 倍,而精确度略有降低,在第四部分有所提及。
在空间维度上进行额外的分解并没有降低多少计算量,因为在深度卷积本身计算量就很低。
3.2. 网络结构与训练 Network Structure and Training
前面部分已经提到 MobileNet 结构是基于深度可分离卷积建立的,除了第一层是一个全卷积层。以这样简单的方式定义网络,我们就可以轻松地探索网络拓扑结构从而找到一个好的网络。表 1 是 MobileNet 的架构。除了最后一层为全连接层没有非线性而直接输入到 softmax 层进行分类,所有层均遵循批处理规范和非线性整流函数。数据图 3 比较了标准卷积和深度可分离卷积,二者都遵循批处理规范和非线性整流函数,在深度卷积层和第一层都能处理下采样问题。最后的平均池化层在全连接层前将空间维度减少为 1。把深度卷积和逐点卷积当作独立层计算,MobileNet 共有 28 层。
仅通过少量的乘加操作(Mult-Adds)定义网络是不够的。确保这些操作可以高效实现同样很重要。例如非结构的稀疏矩阵操作通常并不比密集矩阵操作快,除非矩阵的稀疏程度足够。我们的模型结构几乎把全部的计算复杂度放到了 1 * 1 的卷积中。这可以通过高度优化的通用矩阵乘法(GEMM)实现。卷积通常由 GEMM 实现,但也需要在称为 im2col 的内存中进行初始排序。比如,这种方法主流的 Caffe 包中就有用到。1 * 1 卷积并不要求在内存中有这种排序,并且可以直接由 GEMM 实现 —— 最优化的数值线性代数算法之一。MobileNet 在 1 * 1 卷积花费了 95% 的计算时间,以及 75% 的参数量,见表 2。几乎所有的额外参数都在全连接层。
MobileNet 模型在 TensorFlow 中使用类似于 Inception V3 的异步梯度下降(asynchronous gradient descent)的 RMSprop 进行训练。然而,与训练大型模型相反,我们使用更少的正则化(regularization)和数据增强技术(data augmentation techiniques),因为小模型不容易过拟合(overfitting)。训练 MobileNet 时,我们没有使用 side heads 或者标签平滑(label smoothing),而是通过在大型 Inception 训练中使用的限制小型 crop 的尺寸来减少图片扭曲。另外,我们发现在深度过滤器(depthwise filters)放置较少或者没有权重衰减 L2正则化(weight decay, L2 regularization)很重要,因为它们参数量很小。在下一部分的 ImageNet 基准中,所有的模型都通过相同参数进行训练,而不考虑模型大小。
3.3. 宽度乘数:精简模型 Width Multiplier: Thinner Models
尽管基本的 MobileNet 架构已经很小,延迟也很低,但特定用例或应用可能需要更小更快的模型。为了构造这些更小和更少计算代价的模型,我们引入了一个简单的参数:宽度乘数(width multiplier)α。它的作用是在为每层网络均匀减负。对于一个给定的层和宽度乘数 α,输入通道 M 变成了 αM,输出通道 N 变成了 αN。
带有宽度乘数 α 的深度可分离卷积的计算代价变成了:
D_K * D_K * αM * D_F * D_F + αM * αN * D_F * D_F
α ∈ (0, 1],典型数值为 1, 0.75, 0.5, 0.25。α = 1 是基准 MobileNet,α < 1 是减弱型(Reduced)MobileNet。宽度乘数有减少计算量和参数量的作用,大致为 α ^ 2。它可以应用于任何模型结构上,以合理的精度、延迟与大小来定义一个新的更小的模型。它用于定义需要从头开始训练的新的简化的结构。
3.4. 分辨率乘数:减少特征 Resolution Multiplier: Reduced Representation
减少神经网络计算代价的第二个超参数是分辨率参数(resolution multiplier)ρ。我们把这个参数应于在输入的图像,每个层的内部特征随后被减去相同的乘数。在实践中,我们通过设置输入分辨率来隐式设定 ρ。
我们现在可以把导出带有宽度乘数 α 和分辨率乘数 ρ 的深度可分离卷积网络核心层的计算复杂度为:
D_K * D_K * αM * ρD_F * ρD_F + αM * αN * ρD_F * ρD_F
ρ ∈ (0, 1],典型隐式设置以使网络输入分辨率是 224, 192, 160, 128。ρ = 1 是基准 MobileNet,ρ < 1是计算型(computation)MobileNet。分辨率乘数有降低计算复杂度的作用,大致为 ρ ^ 2。
我们可以把在 MobileNet 中的一个典型层作为例子并看看带有宽度乘数和分辨率乘数的深度可分离卷积是如何减少代价和参数量的。表 3 显示了不同的架构收缩方法应用在该层时其计算量和参数的数目。第一行是一个全连接层的乘加操作的数目和参数,输入特征图大小为 14 * 14 * 512,卷积核大小 3 * 3 * 512 * 512。在下一部分我们将把注意力转向在模型资源和精确度之间如何折衷的细节。
4. 实验 Experiments
在这一节中我们首先探讨深度卷积以及通过减少网络宽度而不是层数来选择收缩的模型。我们接着基于两个超参数 —— 宽度乘数与分辨率乘数展示如何对网络的简化权衡取舍,并与当前主流模型进行比较。然后我们探讨 MobileNet 在很多不同应用上的应用。
4.1. 模型选择 Model Choices
首先我们展示带有深度可分离卷积的 MobileNet 与全卷积的模型的结果比较。在表 4 中我们可以看到在 ImageNet 上使用深度可分离卷积时,与全卷积相比精确度仅减少了 1%,但是乘加操作与参数的数量大大减少。
我们接着展示带有宽度乘数的精简模型与使用更少层数的浅层模型的结果比较。为了使 MobileNet 更浅,表 1 中特征大小为 14 * 14 * 512 的可分离滤波器的五层被移除了。表 5 显示在计算量与参数量近似的情况下,更精简的 MobileNet 比更浅的模型准确度高 3%。
4.2 模型收缩超参数 Model Shrinking Hyperparameters
表 6 是用宽度乘数 α 收缩 MobileNet 架构之后准确度、计算量以及尺寸之间的折中。准确度随着模型的变小而下降。
表 7 是用更低输入分辨率(reduced input resolutions)训练 MobileNet 时,不同的分辨率乘数 ρ 下准确度、计算量和尺寸的折中。准确度随着分辨率变低而下降。
图 5 显示了由宽度乘数 α ∈ {1, 0.75, 0.5, 0.25} 和分辨率 {224,192,160,128} 的叉积(cross product)生成的 16 个模型在 ImageNet 准确度和计算量的折中。在模型非常小(α = 0.25)的时候结果是对数线性跳跃(log linear with a jump)。
图 5 显示了由宽度乘数 α ∈ {1, 0.75, 0.5, 0.25} 和分辨率 {224,192,160,128} 的叉积生成的 16 个模型在 ImageNet 准确度和参数量的折中。
表 8 比较了完全的 MobileNet,原始的 GoogleNet 和 VGG16。VGG16 和 MobileNet 准确度相似,但模型大小为后者的 32 倍、计算量为 27 倍。MobileNet 比 GoogleNet 准确率更高,同时模型更小,后者计算量为其至少 2.5 倍。
表 9 比较了宽度乘数 α = 0.5 和分辨率降低为 160 * 160 的 MobileNet。减弱型的 MobileNet 比 AlexNet 准确度高 4%,后者模型大小为其 45 倍,计算量为 9.4 倍。同时,MobileNet 比同等大小的 SqueezeNet 准确度高 4%,后者计算量为其 22 倍。
4.3. 细粒度识别 Fine Grained Recognition
我们在斯坦福狗狗数据集(Stanford Dogs dataset)训练了细粒度识别。我们本文扩展了方法,并从网上收集了比其更大甚至有更多干扰的训练集。我们采用有干扰的网络数据来预训练一个细粒度狗狗识别模型,然后在斯坦福狗狗训练集上进行微调。结果如表 10 所示。在大幅缩减计算量和模型大小的前提下,MobileNet 能几乎实现 J. Krause, B. Sapp, A. Howard, H. Zhou, A. Toshev, T. Duerig, J. Philbin, and L. Fei-Fei. The unreasonable ef- fectiveness of noisy data for fine-grained recognition. arXiv preprint arXiv:1511.06789, 2015. 6 的结果。
4.4. 大规模地理定位 Large Scale Geolocalizaton
PlaNet 的任务是在地球上确定一张照片拍摄位置的分类问题。这个方法把地球分成了一个个单元格集合到目标类别,用百万个地理位置标记图片训练卷积神经网络。PlaNet 已经能够成功对大量的图片进行地理标记,而且处理相同任务时性能比 Im2GPS 更优。
我们以相同的数据使用 MobileNet 架构来预训练 PlaNet。基于 Inception V3 的完整 PlaNet 模型有 5200 万个参数和 57.4 亿乘加操作。MobileNet 模型仅有 1300 万个参数,主体 300 万,最后一层 1000 万,也只有 58 万个乘加操作。如表 11 中所示。MobileNet 与 PlaNet 相比,规模小了很多,性能只有略微降低。然而,MobileNet 仍然比 Im2GPS 性能好很多。
4.5 人脸属性 Face Attributes
MobileNet 的另一个用例是使用未知或深奥的训练程序来压缩大型系统。在人脸属性分类任务中,我们演示了在 MobileNet 和蒸馏法之间的协同关系。蒸馏法是一种深度网络的知识迁移的技术。我们试图简化一个具有 7500 万个参数和 16 亿个乘加操作的大型人脸属性分类器。分类器在一个类似于 YFCC100M 的多属性数据集上进行训练。
我们采用 MobileNet 架构提取一个人脸特征分类器。蒸馏法通过训练分类器来仿真一个更大模型的输出而不是采用人工标注,因而能够从大型(可能无限大)的未标注的数据集中进行训练。结合蒸馏法训练的可扩展性和 MobileNet 的少量参数,终端系统不仅不要求正则化,例如权重衰减和早停法(early-stopping),反而会表现出更好的性能。从表 12 中可以明显看出,基于 MobileNet 的分类器可以抵抗模型的不断缩小:它在人脸属性上的平均精度相近,却只有 1% 的乘加操作。
4.6 目标检测 Object Detection
MobileNet 同样可以部署为现代目标检测系统中的高效基网络。我们在赢得了 2016COCO 挑战赛的COCO 数据集上训练 MobileNet 并且给出了结果。表 13 中,在 Faster-RCNN 和 SSD 框架下,MobileNet 与 VGG, Inception V2 进行了比较。在我们的实验中,SSD 以 300 的输入分辨率(SSD 300)与分别是 300 和 600 输入分辨率的 Faster-RCNN(Faster-RCNN 300,Faster-RCNN 600)进行比较,Faster-RCNN 模型每个照片评估了 300 个 RPN 建议框(proposal boxes)。模型在除去了 8000 最小图片的 COCO 训练集并在初始时进行评估。对于两个框架下MobileNet 都实现了性能与其他网络相当的结果,而计算复杂度和模型大小都相对更小。
4.7 人脸嵌入 Face Embeddings
FaceNet 模型是目前最先进的人脸识别模型。它在三重损失(triplet loss)上建立了人脸嵌入。为了建立一个移动的 FaceNet 模型,我们使用了蒸馏法通过最小化 FaceNet 和 MobileNet 在训练集输出结果的平方差进行训练。小型 MobileNet 模型的结果在表 14 中显示。
5. 结论 Conclusion
我们基于深度可分离卷积提出了一个叫做 MobileNet 的新模型架构。我们调查了一些重要的设计高效模型的思路,然后演示了如何使用宽度乘数与分辨率乘数建立更小更快的 MobileNet,来权衡一个合理的精度以减少大小与延迟。我们接着比较了不同的 MobileNet 与主流模型,演示了其大小、速度与准确度上的特性。最后,我们演示了 MobileNet 在应用于各种任务时的有效性。为了帮助 MobileNet 下一步的采用与探索,我们计划在 TensorFlow 中发布模型。
特点与优缺点分析:
本篇论文是 Google 于 2017 年 4 月发布的 MobileNet V1,之后还有 2018 版的 V2 和 2019 版的 V3。如命名所示,MobileNet 强调轻量化,以适配诸如手机等移动端设备。其优势很明显,在论文中的各种实验中可以看出,其模型很小,计算量很小,足够轻量。然而,从实验结果也不难看出,相比其他网络模型,MobileNet 在精确度上几乎没有任何优势,甚至会更低。也就是说,它是一个放弃精确度的提升来减小体量的模型。