MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
Abstract
MobileNets是一类基于流线型架构使用深度可分离卷积来构建的轻量级深层神经网络,有两个全局超参数可以调整模型在延迟和准确率之间进行权衡。本文对MobileNet资源消耗与模型精度的折中进行了大量的实验,并与其他常用模型进行了比较,结果表明,该模型具有优越的性能。最后,我们证明了MobileNet在物体检测、细粒度分类、人脸属性及大规模地理定位等广泛应用中的有效性。
1. Introduction
本文介绍了一类高效的网络结构及两个用于小型化低延迟模型的超参。本文模型可以很容易地适配移动及嵌入式视觉应用的设计要求。
2. Prior Work
略。
3. MobileNet Architecture
在本章中,我们首先介绍MobileNet核心层,即深度可分离滤波器。之后我们会介绍MobileNet的网络结构及两个模型超参,即宽度乘数及分辨率乘数。
3.1 Depthwise Separable Convolution
MobileNet是基于深度可分离卷积设计的网络模型,深度卷积操作将标准卷积操作分解一个深度卷积(DW)及一个1x1的点卷积(PW)。对于MobileNets而言,深度卷积对每路输入通道都使用同一个滤波器。通道深度卷积之后,会使用1x1的卷积合并输出结果。标准的卷积方法使用单个步骤同时完成滤波及合并操作。深度可分离卷积将此步骤分离到两层结构中完成,一层负责滤波,另一层负责合并。这种分离方式可以显著地减少模型计算量及大小。
假设标准卷积层输入特征图
F
\mathrm{F}
F尺寸为
D
F
×
D
F
×
M
D_F\times D_F\times M
DF×DF×M,输出特征图
G
\mathrm{G}
G尺寸为
D
G
×
D
G
×
N
D_G\times D_G\times N
DG×DG×N,其中
D
F
D_F
DF及
D
G
D_G
DG表示特征图宽度及高度,
N
N
N及
M
M
M表示特征图通道数;卷积核
K
\mathrm{K}
K尺寸为
D
K
×
D
K
×
M
×
N
D_K\times D_K\times M \times N
DK×DK×M×N,其中
D
K
D_K
DK表示核宽度及高度。
那么,标准卷积操作公式如下:
G
k
,
l
,
n
=
∑
i
,
j
,
m
K
i
,
j
,
m
,
n
⋅
F
k
+
i
−
1
,
l
+
j
−
1
,
m
\mathrm{G_\mathit{k,l,n}}=\sum_{i,j,m}\mathrm{K_\mathit{i,j,m,n}}\cdot\mathrm{F_\mathit{k+i-\mathrm{1},l+j-\mathrm{1},m}}
Gk,l,n=i,j,m∑Ki,j,m,n⋅Fk+i−1,l+j−1,m
标准卷积操作运算消耗为:
D
K
⋅
D
K
⋅
M
⋅
N
⋅
D
F
⋅
D
F
D_{K}\cdot D_{K}\cdot M\cdot N\cdot D_F\cdot D_F
DK⋅DK⋅M⋅N⋅DF⋅DF
可分离卷积分使用分两步完成上述操作,第一步为深度卷积:
G
^
k
,
l
,
m
=
∑
i
,
j
K
^
i
,
j
,
m
⋅
F
k
+
i
−
1
,
l
+
j
−
1
,
m
\mathrm{\hat G_\mathit{k,l,m}}=\sum_{i,j}\mathrm{\hat K_\mathit{i,j,m}}\cdot\mathrm{F_\mathit{k+i-\mathrm{1},l+j-\mathrm{1},m}}
G^k,l,m=i,j∑K^i,j,m⋅Fk+i−1,l+j−1,m
其运算消耗为:
D
K
⋅
D
k
⋅
M
⋅
D
F
⋅
D
F
D_K\cdot D_k\cdot M\cdot D_F\cdot D_F
DK⋅Dk⋅M⋅DF⋅DF
第二步为1x1点卷积。整体可分离卷积运算消耗为:
D
K
⋅
D
K
⋅
M
⋅
D
F
⋅
D
F
+
M
⋅
N
⋅
D
F
⋅
D
F
D_K\cdot D_K\cdot M\cdot D_F\cdot D_F+M\cdot N\cdot D_F\cdot D_F
DK⋅DK⋅M⋅DF⋅DF+M⋅N⋅DF⋅DF
与标准卷积操作相比,可分离卷积运算消耗占比为:
1
N
+
1
D
k
2
\frac{1}{N}+\frac{1}{D_k^2}
N1+Dk21
MobileNet使用3x3可分离卷积,相比于标准操作来说,可以降低8-9倍运算消耗。
3.2. Network Structure and Training
MobileNet网络结构如下表所示:
类型 / 步长 | 卷积核 | 输入尺寸 |
---|---|---|
Conv / s2 | 3 x 3 x 3 x 32 | 224 x 224 x 3 |
Conv dw / s1 | 3 x 3 x 32 dw | 112 x 112 x 32 |
Conv / s1 | 1 x 1 x 32 x 64 | 112 x 112 x 32 |
Conv dw / s2 | 3 x 3 x 64 dw | 112 x 112 x 64 |
Conv / s1 | 1 x 1 x 64 x 128 | 56 x 56 x 64 |
Conv dw / s1 | 3 x 3 x 128 dw | 56 x 56 x 128 |
Conv / s1 | 1 x 1 x 128 x 128 | 56 x 56 x 128 |
Conv dw / s2 | 3 x 3 x 128 dw | 56 x 56 x 128 |
Conv / s1 | 1 x 1 x 128 x 256 | 28 x 28 x 128 |
Conv dw / s1 | 3 x 3 x 256 dw | 28 x 28 x 256 |
Conv / s1 | 1 x 1 x 256 x 256 | 28 x 28 x 256 |
Conv dw / s2 | 3 x 3 x 256 dw | 28 x 28 x 256 |
Conv / s1 | 1 x 1 x 256 x 512 | 14 x 14 x 256 |
5 x Conv dw / s1 5 x Conv / s1 | 3 x 3 x 512 dw 1 x 1 x 512 x 512 | 14 x 14 x 512 14 x 14 x 512 |
Conv dw / s2 | 3 x 3 x 512 dw | 14 x 14 x 512 |
Conv / s1 | 1 x 1 x 512 x 1024 | 7 x 7 x 512 |
Conv dw / s2 | 3 x 3 x 1024 dw | 7 x 7 x 1024 |
Conv / s1 | 1 x 1 x 1024 x 1024 | 7 x 7 x 1024 |
Avg Pool / s1 | Pool 7 x 7 | 7 x 7 x 1024 |
FC / s1 | 1024 x 1000 | 1 x 1 x 1024 |
Softmax / s1 | Classifier | 1 x 1 x 1000 |
除FC及Softmax层外,MobileNet所有网络层都经过了batchnorm及ReLU进行批规范化和非线性化。下采样操作在部分可分离卷积的DW层及第一层网络中进行。在FC层之前,特征图通过平均池化层将空间分辨率降低至1。如果将深度卷积及点卷积合并起来看作分离层,那么MobileNet共有28层网络结构。
MobileNet模型的运算量主要集中在1x1点卷积中。该卷积可以通过高度优化的通用矩阵乘法(GEMM)函数进行操作。使用GEMM进行卷积操作时需要对原始数据进行im2col处理。这种方法在Caffe包中非常常见。1x1点卷积不需要进行这样的处理,可以直接调用GEMM函数。在MobileNet中95%的运算消耗及75%参数被用于1x1点卷积。
im2col:是一种用于优化卷积操作的存储映射。它的核心是将卷积核感受野部分的数据转化成一行(列)进行存储,以此减少内存访问时间,优化运算速度。
MobileNet模型在TensorFlow中使用与Inception V3中相同的RMSprop异步梯度下降算法进行训练。与训练大模型相反,我们较少使用正则化及数据增强技术,因为小模型过拟合情况不太严重。在训练MobileNets的过程中,我们没有使用side heads及标签平滑,并且通过限制裁剪图片的尺寸来减少图像失真的数量,这样的方法也在Inception训练中有所使用。此外,因为深度滤波参数仅占很少一部分比例,所以我们在训练过程中对于此部分参数使用少量或不使用权重衰减(l2正则化)。对于下一节中的ImageNet基准测试中,不同大小的模型都使用了相同的参数进行训练。
side heads:?
标签平滑:深度学习的样本中通常会存在少量错误标签,这些错误标签会影响到模型预测效果。如果我们能想办法“告诉”模型,样本的标签不一定正确,那么训练出来的模型对于少量的样本错误就会有“免疫力”。
3.3. Width Multiplier: Thinner Models
尽管MobileNet模型已经很小了而且延迟也很低,但是一些特定的应用要求模型更小更快。为了满足上述要求,我们引入了一个非常简单的参数
α
\alpha
α,被称为宽度乘数。该参数的作用是等比例调整网络中各层通道数。对于某一层结构而言,宽度乘数
α
\alpha
α将输入通道数由
M
M
M调整至
α
M
\alpha M
αM,输出通道数由
N
N
N调整至
α
N
\alpha N
αN
对于带有宽度乘数
α
\alpha
α的分离层而言,其运算消耗为:
D
K
⋅
D
K
⋅
α
M
⋅
D
F
⋅
D
F
+
α
M
⋅
α
N
⋅
D
F
⋅
D
F
D_K\cdot D_K\cdot \alpha M\cdot D_F\cdot D_F+\alpha M\cdot \alpha N\cdot D_F\cdot D_F
DK⋅DK⋅αM⋅DF⋅DF+αM⋅αN⋅DF⋅DF
其中
α
∈
(
0
,
1
]
\alpha\in (0,1]
α∈(0,1]。
3.4. Resolution Multiplier: Reduced Representation
降低模型运算消耗的第二超参是分辨率乘数
ρ
\rho
ρ。该参数等比例减小输入图像及各层输出特征图尺寸。在实际操作中,我们通过设置输入图像分辨率隐式地设置
ρ
\rho
ρ。结合上一小节提到的宽度乘数
α
\alpha
α,分离层运算消耗为:
D
K
⋅
D
K
⋅
α
M
⋅
ρ
D
F
⋅
ρ
D
F
+
α
M
⋅
α
N
⋅
ρ
D
F
⋅
ρ
D
F
D_K\cdot D_K\cdot \alpha M \cdot \rho D_F\cdot \rho D_F+\alpha M \cdot \alpha N\cdot \rho D_F\cdot \rho D_F
DK⋅DK⋅αM⋅ρDF⋅ρDF+αM⋅αN⋅ρDF⋅ρDF
4. Experiments
4.1. Model Choices
下表对比了使用标准卷积的MoblieNet及本文提出的MobileNet网络在ImageNet上的Top1准确率,可知采用深度可分离卷积的网络在准确率性能上有约1%的降低,但乘加操作和参数量上都极大地减少了:
模型 | Top1准确率 | 乘加操作(百万) | 参数量(百万) |
---|---|---|---|
Conv MobileNet | 71.7% | 4866 | 29.3 |
MobileNet | 70.6% | 569 | 4.2 |
接下来我们比较了利用宽度乘数实现的薄模型与浅模型的Top1准确率。薄模型使用的宽度乘数为0.75,浅模型去掉了5层特征尺寸为 14 × 14 × 512 14\times 14\times 512 14×14×512深度可分离卷积层。由下表可知,两种模型乘加操作及参数量相当,但薄模型相对于浅模型在准确率性能上有约3%的提升:
模型 | Top1准确率 | 乘加操作(百万) | 参数量(百万) |
---|---|---|---|
0.75 MobileNet | 68.4% | 325 | 2.6 |
Shallow MobileNet | 65.3% | 307 | 2.9 |
ImageNet:是按照WordNet架构组织的大规模待标签图像数据集,有大约1500万张图片,2.2万种分类,每张图片都经过了严格的人工筛选与标记。
4.2. Model Shrinking Hyperparameters
下表对比了不同宽度乘数 α \alpha α下模型性能、乘加操作及参数量:
模型 | Top1准确率 | 乘加操作(百万) | 参数量(百万) |
---|---|---|---|
1.0 MobileNet-224 | 70.6% | 569 | 4.2 |
0.75 MobileNet-244 | 68.4% | 325 | 2.6 |
0.5 MobileNet-244 | 63.7% | 149 | 1.3 |
0.25 MobileNet-244 | 50.6% | 41 | 0.5 |
下表对比了不同分辨率乘数下模型性能、乘加操作及参数量:
模型 | Top1准确率 | 乘加操作(百万) | 参数量(百万) |
---|---|---|---|
1.0 MobileNet-244 | 70.6% | 569 | 4.2 |
1.0 MobileNet-192 | 69.1% | 418 | 4.2 |
1.0 MobileNet-160 | 67.2% | 290 | 4.2 |
1.0 MobileNet-128 | 64.4% | 186 | 4.2 |
除了对上述模型压缩超参数的研究外,我们还进行了MobileNet与GoogleNet及VGG16的比较。MobileNet性能接近VGG16,但比其小32倍快27倍。与GoogleNet相比,MobileNet性能更优模型更小:
模型 | Top1准确率 | 乘加操作(百万) | 参数量(百万) |
---|---|---|---|
1.0 MobileNet-244 | 70.6% | 569 | 4.2 |
GoogleNet | 69.8% | 1550 | 6.8 |
VGG16 | 71.5% | 15300 | 138 |
最后,我们比较了使用宽度乘数和分辨率乘数压缩的MobileNet与AlexNet及Squeezenet的模型性能、乘加操作及参数量:
模型 | Top1准确率 | 乘加操作(百万) | 参数量(百万) |
---|---|---|---|
0.5 MobileNet-244 | 70.6% | 76 | 1.32 |
Squeezenet | 57.5% | 1700 | 1.25 |
AlexNet | 57.2% | 720 | 60 |
4.3. Fine Grained Recognition
我们在斯坦福犬类数据集上使用MobileNet进行了细粒度分类训练,并与Inception V3进行了对比,MobileNet性能与其相当而且极大地降低了运算量及模型尺寸:
模型 | Top1准确率 | 乘加操作(百万) | 参数量(百万) |
---|---|---|---|
Inception V3 | 84% | 5000 | 23.2 |
1.0 MobileNet-244 | 83.3% | 569 | 3.3 |
0.75 MobileNet-244 | 81.9% | 325 | 1.9 |
1.0 MobileNet-192 | 81.9% | 418 | 3.3 |
0.75 MobileNet-192 | 80.5% | 239 | 1.9 |
斯坦福犬类数据集:包含了来自世界各地的120种狗的20000张图片。该数据集使用ImageNet图片和标注构建,用于细粒度分类。
4.4. Large Scale Geolocalizaton
PlaNet是用于照片地理位置分类的网络。该方法将地球划分为一个个由地理单元组成的网格,并在数百万张带有地理标记的照片上训练卷积神经网络。PlaNet与同类型的Im2GPS相比,有更优越的性能。我们在同样的数据上重新训练了使用MobileNet结构的PlaNet。与原始基于Inception V3结构的PlaNet相比,MobileNet版本更为紧凑,但性能略有下降。
尺度 | Im2GPS | PlaNet | PlaNet MobileNet |
---|---|---|---|
大陆(2500km) | 51.9% | 77.6% | 79.3% |
国家(750km) | 35.4% | 64.0% | 60.3% |
地区(200km) | 32.1% | 51.1% | 45.2% |
城市(25km) | 21.9% | 31.7% | 31.7% |
街道(1km) | 2.5% | 11.0% | 11.4% |
4.5. Face Attributes
MobileNet的另一个作用是可以用于模型压缩。我们以人脸属性分类为案例,说明MobileNet与知识蒸馏技术之间的关系。我们在类似YFCC100M的数据集上训练了一个含有7500万个参数及16亿次乘加操作的分类网络,并尝试用压缩这个模型。我们使用MobileNet架构蒸馏了一个人脸属性分类器。模型蒸馏原理在于使用大模型输出标注而非真实标注训练分类器,采用这种方式可以使用大型未标注数据集训练模型。结合模型蒸馏的数据扩展与MobileNet的参数压缩特性,终端系统的训练不仅不需要正则化(例如权重衰减和提前停止),而且表现出更好的性能:
模型 | 平均AP | 乘加操作(百万) | 参数量(百万) |
---|---|---|---|
1.0 MobileNet-244 | 88.7% | 568 | 3.2 |
0.5 MobileNet-244 | 88.1% | 149 | 0.8 |
0.25 MobileNet-244 | 87.2% | 45 | 0.2 |
1.0 MobileNet-128 | 88.1% | 185 | 3.2 |
0.5 MobileNet-128 | 87.7% | 48 | 0.8 |
0.25 MobileNet-128 | 86.4% | 15 | 0.2 |
Baseline | 86.9% | 1600 | 7.5 |
蒸馏:最早是 Hinton 在 15 年提出的一种知识迁移技术,其核心思想是通过训练好的大模型得到更加适合推理的小模型。一般来说,神经网络都是通过softmax层来输出每个类别的概率:
q i = exp ( z i / T ) ∑ j exp ( z j / T ) q_i=\frac{\exp(z_i/T)}{\sum_j\exp(z_j/T)} qi=∑jexp(zj/T)exp(zi/T)
其中, T T T表示温度系数,通常为1。采用更大的T值,会使概率分布软化。训练小模型时,有两种蒸馏目标函数:1.只使用软目标( T > 1 T>1 T>1);2.同时使用软目标及硬目标( T = 1 T=1 T=1)。由于软目标所产生的梯度为硬目标的 1 / T 2 1/T^2 1/T2,所以同时使用两种目标作为目标函数时,需要将其乘以 T 2 T^2 T2,这样才能使两种目标贡献的梯度基本保持一致。
蒸馏模型里每个逻辑值 z i z_i zi关于软目标交叉熵 C C C的梯度可用下式表示:
∂ C ∂ z i = 1 T ( q i − p i ) = 1 T ( e z i / T ∑ j e z j / T − e v i / T ∑ j e v j / T ) \frac{\partial C}{\partial z_i}=\frac{1}{T}(q_i-p_i)=\frac{1}{T}(\frac{e^{z_i/T}}{\sum_je^{z_j/T}}-\frac{e^{v_i/T}}{\sum_je^{v_j/T}}) ∂zi∂C=T1(qi−pi)=T1(∑jezj/Tezi/T−∑jevj/Tevi/T)
当温度系数 T T T远大于逻辑值 z i z_i zi时,上式可约等于:
∂ C ∂ z i ≈ 1 T ( 1 + z i / T N + ∑ j z j / T − 1 + v i / T N + ∑ j v j / T ) \frac{\partial C}{\partial z_i}\approx \frac{1}{T}(\frac{1+z_i/T}{N+\sum_jz_j/T}-\frac{1+v_i/T}{N+\sum_jv_j/T}) ∂zi∂C≈T1(N+∑jzj/T1+zi/T−N+∑jvj/T1+vi/T)
进一步假设逻辑值 z i z_i zi, v i v_i vi为零均值,则上式可化简为:
∂ C ∂ z i ≈ 1 N T 2 ( z i − v i ) \frac{\partial C}{\partial z_i}\approx\frac{1}{NT^2}(z_i-v_i) ∂zi∂C≈NT21(zi−vi)
由上式可知,在温度系数较高且逻辑值零均值的情况下,蒸馏过程等价于最小化 1 / 2 ( z i − v i ) 2 1/2(z_i-v_i)^2 1/2(zi−vi)2。当温度系数较低时,蒸馏过程对于远小于均值负逻辑值的匹配( z i = v i z_i=v_i zi=vi)关注较少。因为大模型的损失函数对于负逻辑值的约束较少,所以其本身噪声较大,低温度系数正好有抗噪的优势。但从另一方面来讲,这些负逻辑值也是包含一定的有用信息的,能够用于帮助简单网络的学习。这两种效应哪种占据主导,是一个实践问题。
4.6. Object Detection
MobileNet也可以作为现代目标检测系统中一种有效的基础网络来部署。我们在COCO数据集上,对比了Faster-RCNN与SSD框架下MobileNet、VGG与Inception V2。对于这两种框架,MobileNet仅需较少的计算复杂度及模型大小就能实现和其他网络相当的性能:
框架 分辨率 | 模型 | mAP | 乘加操作(百万) | 参数量(百万) |
---|---|---|---|---|
SSD 300 | deeplab-VGG Inception V2 MobileNet | 21.1% 22.0% 19.3% | 34.9 3.8 1.2 | 33.1 13.7 6.8 |
Faster-RCNN 300 | VGG Inception V2 MobileNet | 22.9% 15.4% 16.4% | 64.3 118.2 25.2 | 138.5 13.3 6.1 |
Faster-RCNN 300 | VGG Inception V2 MobileNet | 25.7% 21.9% 19.8% | 149.6 129.6 30.5 | 138.5 13.3 6.1 |
COCO:全称是Common Objects in Context,是微软团队提供的一个可以用来进行图像识别的数据集。MS COCO数据集中的图像分为训练、验证和测试集。
4.7. Face Embeddings
FaceNet是一种目前最先进的人脸识别模型。它的核心思想是利用三元组损失构建人脸嵌入。我们以FaceNet模型输出为标注,通过最小化平方差的方式蒸馏训练MobileNet。结果如下表所示:
模型 | 1e-4准确率 | 乘加操作(百万) | 参数量(百万) |
---|---|---|---|
FaceNet | 83% | 1600 | 7.5 |
1.0 MobileNet-160 | 79.4% | 286 | 4.9 |
1.0 MobileNet-128 | 78.3% | 185 | 5.5 |
0.75 MobileNet-128 | 75.2% | 166 | 3.4 |
0.75 MobileNet-128 | 75.2% | 108 | 3.8 |
三元组损失:
L = ∑ i N [ ∣ ∣ f ( x i a ) − f ( x i p ) ∣ ∣ 2 2 − ∣ ∣ f ( x i a ) − f ( x i n ) ∣ ∣ 2 2 + α ] L=\sum_i^N{[||f(x_i^a)-f(x_i^p)||_2^2-||f(x_i^a)-f(x_i^n)||_2^2+\alpha]} L=i∑N[∣∣f(xia)−f(xip)∣∣22−∣∣f(xia)−f(xin)∣∣22+α]
其中, f ( ⋅ ) f(\cdot) f(⋅)表示嵌入函数,三元包指锚示例( x i a x_i^a xia)、正示例( x i p x_i^p xip)、负示例( x i n x_i^n xin)。锚示例为训练集中随机选取的样本,正示例与锚示例属于同一类样本,负示例与锚示例不属于同一类样本。通过学习后,锚示例与正示例距离缩小,锚示例与负示例距离扩大。
嵌入:是网络表征学习的一种方法,旨在用低维、稠密的向量空间表示高维、稀疏的向量空间,所学习到的特征可以用于分类、回归、聚类等机器学习任务。
5. Conclusion
我们提出了一种新的基于深度可分离卷积的模型结构MobileNets,然后演示了如何通过权衡合理的精度使用宽度乘数和分辨率乘数来构建更小更快的MobileNet。接着,我们将MobileNets与流行的模型作比较,证明了其在规模,速度和准确率上的优越性。最后,我们展示了MobileNet应用于各种任务时的有效性。