Abstract
作者针对手机和嵌入式视觉应用设备提出了一类叫做MobileNets的非常有效的模型。MobileNets基于采用了depthwise separable convolutions的流线型网络结构来构建轻量级的DNN。作者引入了两个全局超参数(width
multiplier
α
和Resolution Multiplier),让模型构建者可以根据模型实际应用场景的约束,在构建模型时选择合适的模型尺寸,从而对模型的运行速度和精度进行有效地权衡。作者针对模型大小和精度的权衡问题做了大量的实现,在ImageNet的图像分类问题上MobileNets的性能和其他流行的模型相比是很有竞争力的。不仅如此,实验还证明了MobileNets在其他视觉领域也非常有效,比如目标检测、细粒度分类、人脸属性和大尺寸的地理定位。
一、Introduction
在AlexNet赢得ILSVRC 2012之后深度卷积网络开始流行,CNN开始广泛应用于机器视觉领域。目前有个趋势是设计更深、更复杂的网络来获取更高的精度,然而在实际应用中,由于模型尺寸和速度的约束,这种以模型大小和速度为代价来提高模型精度的改进的需求并不大。在机器人、自动驾驶、AR等现实生活应用场景中,往往要求视觉识别任务能在计算能力有限的硬件平台上实时完成。
针对手机和其它嵌入式视觉应用的设计需求,这篇论文提出了一种非常有效的模型结构和2个超参数来帮助模型构建者轻松构建低延迟的小模型。
论文的第2部分回顾了人们以前为构建小模型所做出的努力。
第3部分描述了MobileNet的网络结构和width multiplier、resolution multiplier两个辅助构建更小、更高效MobileNets的超参数。
第4部分描述了作者在ImageNet上实验和一些其他的广泛应用。
第5部分进行了总结。
二、Prior Work
在最近公开的一些论文暗示了人们对于构建高效的小型神经网络的兴趣日渐提升。现有的构建高效小型神经网络的方法可以大致归为2类,一类是压缩已经训练好的网络,另一类是直接训练一个小网络。
本文提出了一种允许开发者根据实际应用设备的资源限制(如延迟、尺寸)针对性的选择网络大小的网络结构。MobileNets最初主要是为了优化模型的识别速度降低延迟,但是也能够产出小模型。其他许多设计小网络的论文把重心放在了网络大小却忽略的速度。
MobileNets主要使用depthwise separable convolutions构建。depthwise separable convolutions最开始在一篇论文Rigid-motion scattering for image classification中提出,后来被用在Inception模型上减小前几层的计算量。
论文Flattenedconvolutional neural networks for feedforward acceleration中的Flattened networks用完全因式分解的卷积构建了一个网络,并展现了极度因式分解网络的潜力。
论文Factorized convolutional neural networks介绍了一种更小型的因式分解卷积和拓扑连接的使用。
随后论文Xception: Deep learning with depthwise separable convolutions中,Xception网络演示了如何增加depthwise separable filters以胜过InceptionV3。
另一篇论文提出的Squeezenet使用了bottleneck的方法设计小网络。
其他减小计算量的网络还有 structured transform networks 和 deep fried convnets 。
另一类获得小网络的方法是缩小、因式分解或压缩训练好的网络。
压缩网络的方法有product quantization、hashing、pruning、vector quantization 和 Huffman coding 。
另外还有许多用来加速训练好的网络的变种因式分解方法被提出。
另一种训练小网络的方法是蒸馏法(distillation),这类方法是用一个大型网络来教一个小网络。蒸馏法在本文第4部分的一些用例中和MobileNets形成互补。
还有一种方法是low bit networks。
三、MobileNet Architecture
在本节作者会首先介绍构建MobileNet时使用的核心层depthwise separable 卷积层,然后介绍MobileNet的网络结构和用来缩小模型的两个超参数width multiplier 和 resolution multiplier。
3.1 Depthwise Separable Convolution
MobileNet模型基于depthwise separable卷积层构建。一个
DK×DK×M×N
的标准卷积层可以因式分解为一个
DK×DK×1×M
的depthwise卷积层和一个
1×1×M×N
的pointwise卷积层。MobileNet使用一个
DK×DK×1×M
的depthwise卷积层分别对M个通道的输入进行滤波,然后再用一个
1×1×M×N
的pointwise卷积层将depthwise卷积层的输出融合起来。
一个标准的卷积层把滤波和融合输出放在一步进行。而depthwise separable卷积层把这个实现分为2层,一层做滤波一层做融合。这种因式分解可以有效的降低计算量和模型尺寸。
图2是一个标准卷积层分解为一个depthwise卷积层和一个pointwise卷积层的示意图。
一个标准卷积层的参数形状是
DK×DK×M×N
,其中
DK
是卷积核尺寸,M是输入的通道数,N是预先定义的卷积核的个数。标准卷积层的输入特征图F形为
DF×DF×M
,输出特征图G形为
DG×DG×N
。
在stride为1,加上和卷积核尺寸对应的padding使
DF=DG
的情况下,输出输出特征图G形为
DF×DF×N
。此时标准卷积层的计算量为:
标准卷积层通过卷积核对特征进行滤波并融合特征来产出新的表示(representation),MobileNets使用depthwise separable卷积层把滤波和输出特征融合分解为2步从而降低了计算量。
depthwise卷积层的输入F形为 DF×DF×M ,输出形状不变也是 DF×DF×M ,计算量为:
pointwise卷积层的输入F形为 DF×DF×M ,输出为 DF×DF×N ,计算量为:
depthwise separable卷积层的总计算量为:
对比depthwise separable卷积层的计算量和标准卷积层的计算量:
MobileNet的depthwise separable卷积层使用 3×3 的卷积核,计算量只有使用相同卷积核的标准卷积层的 18 到 19 ,同时精度只略微下降了一点。
MobileNet在depthwise separable卷积层的depthwise卷积层和pointwise卷积层中均加入了BN和ReLU。
3.2 Network Structure and Training
除了第一层使用了标准卷积层,Mobilenet的主要网络结构基于前面提到过的depthwise separable卷积层。以简单的方式定义网络有助于探索网络拓扑以找到一个好的网络。Mobilenet的结构定义见表1。
所有的卷积层后面都跟着一个BN和一个非线性激活函数ReLU,最后的全连接层的输出直接给到softmax层做分类。
图3对比了标准的卷积层+BN+ReLU和depthwise separable卷积层+BN+ReLU。针对depthwise separable卷积层,depthwise 卷积层和pointwise 卷积层后面都跟着BN和ReLU。
网络的主体部分没有使用池化层做降采样,而是通过卷积层的strided实现。只有最后一个卷积层后面跟了一个平均池化层把空间分辨率降低到1,然后把输出给到最后的全连接层。把每个depthwise separable卷积层当成2层计算,只计算卷积层和全连接层的话,MobileNet有28层。
想要提高网络的计算速度,只是在定义网络的时候使用较少的Mult-Adds是不够的,还要保证这些操作符的实现是高效的。举个例子,非结构化的稀疏矩阵运算速度不一定明显比密集矩阵运算速度快,除非这个稀疏矩阵真的非常稀疏。从前面分析过depthwise separable卷积层的计算量,depthwise卷积层的计算量为
DK⋅DK⋅M⋅DF⋅DF
,pointwise卷积层的计算量为
1⋅1⋅M⋅N⋅DF⋅DF
,MobileNet中
DK=3
,而N远大于
DK⋅DK
,因此主要的计算量在
1×1
卷积运算上。
1×1
卷积运算可以用高度优化的通用卷积乘法函数(GEMM)实现。通常,使用GEMM实现卷积运算时需要在内存中调用im2col进行重排序的初始化,Caffe就是这样做的。而
1×1
卷积运算不需要在内存中重排序就可以直接用GEMM实现。
如表2所示,MobileNet 约有95%的计算时间花费在
1×1
卷积运算上,同时,约有75%的参数在
1×1
卷积层,几乎所有的其他的参数都在全连接层。
MobileNet 模型使用TensorFlow训练,采用了和Inception V3训练时相似的RMSprop优化器和异步更新梯度方法。和训练大模型不同的是,因为小模型相对不容易过拟合,在训练MobileNet时作者用了较少的正则化和数据增强。作者没有使用 side heads 和 label smoothing,并通过限制图片crop的尺寸来减少distortions的图片的数量。而且,作者发现在depthwise卷积层使用很小、甚至0的权重衰减(L2的正则化)是很重要的,因为depthwise卷积层在MobileNet中的的参数占比本来就很小。 对于作者的这个观点,我的理解是,对于ImageNet数据集,这是合理的,因为ImageNet的数据量很大,相对于ImageNet那么大的数据量,MobileNet是一个小模型,不容易过拟合。但是如果在一个小规模数据集上训练MobileNet,是很可能出现过拟合的,要根据具体情况决定是否使用各种防止过拟合的方法。
文章后面的所有模型,无论模型尺寸是多少,在ImageNet上的benchmarks都是用相同的参数训练的。
3.3 Width Multiplier: Thinner Models
虽然基础MobileNet结构已经非常小、延迟非常低,但是很多时候一些特殊的应用场景需要更小、更快的模型。为了能够方便的构建这些尺寸更小、计算量也更小的模型,作者引入了一个简单的参数width multiplier
α
。width multiplier
α
的作用是让网络的每一层均匀的变瘦。在指定width multiplier
α
后,对任意一层,输入通道数 M 变成
αM
,输出通道数N变成
αN
。此时,depthwise separable卷积层的计算量如下:
α∈(0,1] ,通常设置 α 为1,0.75,0.5或0.25。 α=1 时是标准的MobileNet, α<1 时是瘦身后的MobileNet。Width multiplier可以有效的减小计算量和参数量约 α2 倍。Width multiplier 可以应用于任意的模型结构来定义一个新的较小模型,以实现合理的精度、延迟、尺寸间的平衡。定义的新网络需要从头开始重新训练。
3.4 Resolution Multiplier: Reduced Representation
第二个用来减小网络计算量的超参数是resolution multiplier
ρ
。
ρ
被应用于输入图像,随后网络中的每层的内部表示也被减小到相同的
ρ
倍。实际上,我们通过设置输入的分辨率来隐式的设置
ρ
。使用了width multiplier
α
和resolution multiplier
ρ
的depthwise separable卷积层的计算量如下:
ρ∈(0,1] ,通常设置网络的输入分辨率为224, 192, 160 或 128来隐式的设置 ρ 。 ρ=1 是标准MobileNet, ρ<1 是计算量下降的MobileNets。resolution multiplier ρ 可以有效的降低计算量为之前的 ρ2 倍。
举例说明在MobileNet中depthwise separable卷积层、width multiplier和resolution multiplier对计算量和参数量的影响。表3中,每行的修改都是基于上一行的,其中第一行是一个标准卷积层,输入特征图的尺寸是 14×14×512 ,卷积核尺寸 3×3×512×512 。文章的下一节会讨论资源和精度的取舍。
四、Experiments
在本节,作者首先调查了depthwise separable卷积层的效果,并证明了缩小网络时,和减少网络层数相比,减小网络的宽度是个更好的选择。接着,作者展示了通过折中选择减小width multiplier和resolution multiplier来减小网络的结果,并和其他的流行模型做了比较。最后,作者调查了MobileNets在不同领域的可用性。
4.1 Model Choices
作者首先展示了使用了depthwise separable卷积层的MobileNet和使用标准卷积层的模型的对比。如表4,使用depthwise separable卷积层相对于使用标准卷积层,在ImageNet上精度只下降了1%,但是减少了大量的计算和参数。接着,作者展示了使用width multiplier的瘦长网络和移除表1中5个输入为
14×14×
的矮胖网络的对比。如表5所示,两个网络的计算量和参数量相近,但是瘦长的MobileNets比矮胖网络的精度高3%。
4.2 Model Shrinking Hyperparameters
精度、计算量、模型尺寸和width multiplier
α
的关系如表6所示。精度随着
α
的下降比较平滑的下降,直到
α=0.25
时,模型太小了,精度有一个非常明显的下降。
精度、计算量、模型尺寸和网络输入分辨率的关系如表7所示。精度随着网络输入分辨率的下降比较平滑的下降。
图4显示了在width multiplier
α
取{1, 0.75, 0.5, 0.25}、输入分辨率取{224, 192, 160, 128}时,计算量和在ImageNet上的分类精度的关系。精度随着计算量取log后下降而线性下降,直到
α=0.25
时有个明显的下降。
图5展示了在width multiplier
α
取{1, 0.75, 0.5, 0.25}、输入分辨率取{224, 192, 160, 128}时,ImageNet上的分类精度和参数量、网络输入分辨率的关系。
如表8所示,标准的MobileNet和原始的GoogleNet相比,精度更高,模型更小,计算量只有其
13
左右。标准的MobileNet和VGG16相比,精度相近,但是计算量大约只有VGG16的
127
,模型大小也大约只有其
132
。
表9比较了
α=0.5
,网络输入分辨率160的小型MobileNet和AlexNet、Squeezenet的对比。小型MobileNet的精度比AlexNet高3%,模型大小只有AlexNet的
145
,计算量大约只有AlexNet的
19
。小型MobileNet的精度比Squeezenet高将近3%,模型大小略高一点点,计算量大约只有Squeezenet的
122
。
4.3 Fine Grained Recognition
作者针对斯坦福的细粒度狗分类数据集,训练了MobileNet。作者扩展了论文The unreasonable effectiveness of noisy data for fine-grained recognition中的方法,在网络上收集了大量的带有噪声的训练集,使用网络收集的带噪声的训练集做预训练,然后在斯坦福的狗数据集上fine-tune。结果如表10所示,MobileNet在大幅降低计算量和模型尺寸的前提下,几乎获得了state of the art的结果。
4.4 Large Scale Geolocalizaton
PlaNet通过把地球分成一个个地理栅格作为分类类别,在上百万有地理标签的图片上训练卷积网络,把照片在哪拍摄的问题转变为了图像分类问题。PlaNet表现出超过Im2GPS方法的精度,成功的定位了大量变化的图片。作者使用MobileNet作为PlaNet的网络结构,代替原本使用的有5200万参数、5.74亿mult-adds操作符的Inception V3进行了重新训练。MobileNet只有1300万的参数,其中300万在网络结构的主体上,1000万在最后一层;并且只有58万的mult-adds操作符。如表11所示,使用MobileNet只比使用Inception V3精度轻微下降,甚至有些情况精度更高。而且,精度大幅超过Im2GPS。
4.5. Face Attributes
另一个MobileNet的用例是压缩具有未知或复杂训练流程的大型系统。在人脸属性分类任务中,作者证明了MobileNet和distillation的协作关系。distillation是深度学习中迁移技术。作者打算把一个在类似YFCC100M的多属性数据集上训练的大型的人脸属性分类器从7500万的参数和16亿的Mult-Adds进行压缩精简。
作者使用MobileNet网络结构提取一个人脸分类器。Distillation通过让小网络模仿学习大网络的输出来得到一个有类似功能的小网络,由于小网络的训练标记是大网络的输出而不是真实的人工标记数据,因而可以使用大量未标记的图片进行训练,这样就有了几乎无限扩大训练集的潜力。结合了distillation扩充数据集的能力和MobileNet参数精简的网络结构,最终系统训练的时候不仅不需要使用正则化,而且还能提高精度。如表12所示,基于MobileNet的分类器在模型压缩时展现了非常好的性能,只用了1%的Multi-Adds就得到了相近的mAP。
4.6 Object Detection
MobileNet也可以在目标检测系统中作为高效的基础网络部署。作者基于2016 COCO目标检测竞赛的一些优秀算法,替换基础网络为MobileNet在COCO目标检测数据集上重新训练。MobileNet使用Faster-RCNN和SSD算法框架同VGG和Inception V2的对比如表13所示。实验中,SSD使用300的输入分辨率,Faster-RCNN分别使用300和600两种分辨率。Faster-RCNN的RPN每张图给出300个bbox给检测网络。这些模型都在COCO train+val除了8k minival的图像上训练,使用minival的图像进行评估。无论是SSD还是Faster-RCNN,MobileNet都在较小的计算代价和模型尺寸的情况下得到了还可以的结果。
4.7 Face Embeddings
FaceNet是基于triplet loss的构建face embeddings的state of the art的人脸检测模型。作者利用distillation,通过最小化FaceNet和MobileNet在训练集的输出的方差构建一个在基于MobileNet的手机上可用的FaceNet模型。结果如表14所示。
五、Conclusion
作者在这篇论文中提出了一种基于depthwise separable卷积层的模型MobileNets。作者调查研究了决定模型效率的重要设计因素,并演示了如何使用width multiplier 和 resolution multiplier构建权衡了合理精度、尺寸和延迟的更小更快的MobileNets。作者还通过和流行的网络进行比较,展现了MobileNets优秀的尺寸、速度、精度特性。MobileNet在一系列广泛变化的任务中被证明有效。MobileNet现已在TensorFlow中发布。