MobileNet论文笔记

    论文:Andrew G. Howard,Menglong Zhu,Bo Chen,Dmitry Kalenichenko,Weijun Wang,Tobias Weyand,Marco Andreetto,Hartwig Adam.Google Inc. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications.


摘要

    本文提出了一个轻量级的骨干网络:MobileNet,可应用在移动设备或嵌入式设备的计算机视觉应用中。MobileNets基于流线型架构,使用深度可分离卷积(depthwise separable convolutions)构建。通过引入两个全局超参数可平衡模型的速度和精度,使得研究人员可以根据问题选择正确大小的模型。本文在ImageNet数据集上做了大量的实验,表明MobileNets可以达到经典网络的精度。另外,对MobileNets的性能进行了广泛测试,包括:目标检测、细粒度分类、人脸属性与大尺度地理定位等。


1.引言

    自2012年AlexNet提出以来,CNNs就制霸了CV领域。CNNs朝着更深、更复杂的方向前进,然而,这增加网络了所需的时间和空间代价。在实际应用如机器人、无人驾驶、AR等场景中,深度学习模型需要在本地实时运行。因此本文提出了一个高效的网络,并通过两个超参数,建立非常小、低延迟的模型,可以很容易地满足移动和嵌入式视觉应用的设计要求。

图片1.jpg


2.相关工作

    构建小网络的方法一般可分为压缩预训练网络或直接训练小网络两种方法。本文提出了一种网络架构,使得研究人员可以选择与需求(延迟、大小)相匹配的小型网络。许多关于小型网络的论文只关注模型大小而不考虑速度,而MobileNets不仅速度快,而且参数少。

    MobileNets主要由深度可分离卷积构建,深度可分离卷积最初在Inception-BN中使用以减少计算量。Flattened网络使用全因子卷积构建网络,展示了因子分解网络的潜力。Factorized网络引入了类似的因子分解卷积以及拓扑连接的使用。接着,Xception网络通过拓展深度可分离卷积超越了Inception V3。Squeezenet使用了bottleneck方法设计了一个非常小的网络。另一种获得小网络的方法是收缩、分解或压缩预训练网络。压缩方法基于乘法量化、散列、剪枝、向量化、哈夫曼编码等。还有一种训练小网络的方法是知识蒸馏。


3.网络架构

3.1深度可分离卷积

    MobileNet基于深度可分离卷积(depthwise separable convolutions),是一种因子分解卷积(factorized convolution)的形式,将标准卷积分解为深积卷积(depthwise conv)和1×1卷积。这个1x1卷积又称为逐点卷积(pointwise conv)。深度可分离卷积最早在2014被提出,后来用于构建Xception。对于MobileNet来说,深度卷积对输入特征图的每个通道应用单个卷积核,然后1x1卷积将深度卷积输出的各通道联合起来。标准卷积同时对输入特征图的各个通道进行过滤和并组合为新的特征图,而深度可分离卷积将个过程划分到两层中,一层用来过滤,另一层用于组合,这样大大减少了计算量和模型大小。如下图所示,(a)是标准卷积,(b)是深度卷积,(c)是逐点卷积:

图片2.jpg

    标准卷积接收D_F*D_F*M的特征图F作为输入,输出D_F*D_F*N的特征图G,其中M是输入通道数,N是输出通道数。每个卷积核的大小D_K*D_K*M,共有N个卷积核,其中D_K是卷积核的范围。整体的卷积核称为K,大小为D_K*D_K*M*N。设stride=1,G的计算过程为:

图片3.jpg

    标准卷积的计算代价为:D_K*D_K*M*N*D_F*D_F。

    标准卷积对输入的特征进行滤波,并进行组合产生新的表示,而深度可分离卷积将这两步分开。即深度可分离卷积由两层组成:深度卷积和逐点卷积,深度卷积对输入特征图的每个通道进行滤波,而逐点卷积即1x1卷积将深度卷积的输出进行线性组合。MobileNets在深度卷积和逐点卷积的后面均应用了BN和ReLU。标准卷积和深度可分离卷积的对比如下:

图片4.jpg

    深度卷积的输出特征图的计算如下:

图片5.jpg

    其中K是深度卷积的卷积核,大小为D_K*D_K*M,M是输入特征图的通道数。深度卷积的计算代价为:D_K*D_K*M*D_F*D_F。

    可以发现深度卷积相比于标准卷积,计算量大大大大的减小了。但是深度卷积的每个卷积核仅对单个特征图进行滤波,没有将多层特征图组合成新的特征。因此深度卷积后面加上1x1卷积,可以对特征图进行线性组合来生成新的特征。深度卷积和1x1逐点卷积统称为深度可分离卷积,深度可分离卷积的计算代价为:D_K*D_K*M*D_F*D_F+M*N*D_F*D_F。

    相比于标准卷积,深度可分离卷积的计算量减少如下:(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使用3x3深度可分离卷积,与使用标准卷积相比,在达到相同精度的情况下,仅需要1/8或1/9的计算量。

3.2 网络架构和训练

    MobileNet在深度可分离卷积的基础上构建,网络架构如下:

图片6.jpg

    从上表中可以看到,MobileNets除了第一层是标准卷积,其它均为深度可分离卷积。除了最后的FC层,其它层后面都跟着BN和ReLU。MobileNets通过卷积的stride来进行下采样,最后的GAP层将特征图的空间分辨率减小至1,然后送入FC层。若将深度卷积层和逐点卷积层分开算,则MobileNet共有28层。

    还要考虑定义的网络是否可以高效的实现,比如非结构化的稀疏矩阵运算就比稠密矩阵要低效的多。MobileNet中的大部分运算量都放在1x1卷积中,而1x1卷积可以通过高度优化的通用矩阵乘法(GEMM)函数来实现。通常的卷积由GEMM实现,但需要在内存中进行一个称为im2col的初始重新排序,以便将其映射到GEMM。1x1卷积不需要在内存中重新排序,可以直接用GEMM实现,这样就增加了速度。MobileNet中的1x1卷积的参数占总参数的75%,它的计算时间占总时间的95%,如下表所示:

图片7.jpg

    MobileNet在TensorFlow上进行训练,使用RMSprop优化器。相比于训练大型网络,这里很少使用正则化和数据增强,因为小模型更不容易过拟合。训练MobileNet时,不使用sede heads或标签平滑,并通过限制小裁剪图像的数量来减少图像失真。此外,对深度卷积设置很小的l2权重衰减或不设置更好,因为深度卷积的参数很少。

3.3 宽度系数:更小的模型

    尽管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则与基础版本一致,若α<1,则是一个更小版本。宽度系数可以大致是将参数和计算量减小到α^2,它可以应用于任何模型,以合理的精度、速度和大小权衡来定义一个新的更小的模型。

3.4 分辨率系数:减小表示的大小

    第二个可以减小计算量的超参数是resolution multiplier ρ,或称为分辨率系数。该参数通过减小特征图的分辨率来减小计算量。设置α和ρ后,网络的计算量表示为:D_K*D_K*α*M*ρ*D_F*ρ*D_F+α*M*α*N*ρ*D_F*ρ*D_F,ρ∈(0,1]。

    设置ρ后,典型的分辨率为224 192 160 128等,大致减少计算量的倍数为ρ^2。设置宽度系数和分辨率系数后的计算量对比如下:

图片8.jpg

    第一行是标准卷积的乘加运算量和参数量,输入特征图的大小为14×14×512,卷积核大小为3×3×512×512。


4 实验

4.1模型选择

    下表是MobileNet使用标准卷积和深度可分离卷积的精度、计算量、参数量的对比:

图片9.jpg

    可以看到使用可分离卷积在精度仅仅微小下降的情况下,极大的减小了计算量和参数量。

    接着比较一个MobileNet的更细版本和更浅版本。相比于基础版本,更浅版本去掉了5层14x14x512的深度卷积层。对比如下表:

图片10.jpg

    可以看到更细版本的精度比更浅版本高了3%。

4.2 模型收缩超参数

    下表是不同宽度系数的比较:

图片11.jpg

    下表是不同分辨率系数的比较:

图片12.jpg

    下面是使用不同的α∈{1,0.75,0.5,0.25}和ρ∈{224,192,160,1280}训练的MobileNet模型的精度和运算量的比较:

图片13.jpg

    下面是使用不同的α∈{1,0.75,0.5,0.25}和ρ∈{224,192,160,1280}训练的MobileNet模型的精度和参数量的比较:

图片14.jpg

    下表比较了基础版本的MobileNet与GoogleNet和VGG16的精度。

图片15.jpg

    在精度差不多的情况下,MobileNet只有VGG16的1/32的大小,仅需要1/27的计算量。MobileNet的精度超越了GoogLeNet,但计算量只有其1/2.5。

    下表比较了α=0.5,分辨率为160x160的MobileNet与Squeezenet、AlexNet的比较:

图片16.jpg

    可以看到MobileNet比AlexNet精度高了4%,但是大小仅为1/45,计算量仅为1/9.4。MobileNet比SqueezeNet高了4%,在大小差不多的情况下,计算量仅为1/22。

4.3 细粒度分类

    这里训练MobileNet在Stanford Dogs数据集上用于细粒度分类任务。这里在[The unreasonable effectiveness of noisy data for fine-grained recognition]的基础上进行拓展,在网上收集了一个更大但是存在噪音的数据集,使用该数据集预训练一个细粒度dog的识别模型。然后在Standford Dogs训练数据集上进行微调。结果如下:

图片17.jpg

4.4大规模地理定位

    PlaNet的任务是确定一张照片在地球上的哪个位置拍摄的,是一个分类任务。PlaNet将地球划分为一个由地理单元组成的网格,作为目标类,并在数百万张地理标记照片上训练一个卷积神经网络。PlaNet已经被证明能够成功地对大量照片进行定位,并且性能优于Im2GPS模型。

    原始的PlaNet基于Inception V3,拥有52百万参数和需要进行57.4亿的乘加运算。这里在相同的数据上使用MobileNet重新训练了PlaNet,基于MobileNet的PlaNet仅有13百万参数,仅需5.8亿乘加运算。对比结果如下:

图片18.jpg

    可以看到,MobileNet版本的PlaNet在大幅提升速度的情况下精度仅轻微下降,但仍然大幅优于Im2GPS。

4.5 人脸属性分类

图片19.jpg

4.6 目标检测

图片20.jpg

图片21.jpg

4.7 人脸识别

图片22.jpg


下一篇:

首页 所有文章 机器人 计算机视觉 自然语言处理 机器学习 编程随笔 关于