MobileNet V1论文解读

paper地址:https://arxiv.org/abs/1704.04861?context=cs

1. 介绍

MobileNet V1论文是google 在2017年4月提出的,作者先描述了现在的网络越来越网深层,准确率在不断的提高,伴随计算量越来越大,网络的效率并没有得到提升,表现在模型的大小(size)速度(speed)方面,于是提出了这个轻量化网络模型。并在移动端或者嵌入式设备上得到广泛的应用。

如何实现加速?文中还指出现有一些论文只关注网络模型的大小,并没有考虑网络的速度。其实大部分的时间主要是花在卷积运算上,所以作者就从卷积下手,提出了一种新的卷积方法——深度可分离卷积(depthwise separable convolutions)

文中主要围绕下面两点来实现模型更小、更低延时:

  • 从网络的架构方面,引入了深度可分离卷积
  • 通过加入2个超参数:宽度缩放因子(width multiplier)分辨率缩放因子(resolution multiplier)

深度可分离卷积:最新使用在Inception models的前面几层上,它具有高度分解网络的能力,Xception网络也证明了如何在Inception V3网络上扩展深度可分离过滤器。而squeezenet网络则是使用bottleneck (瓶颈层)的方法来实现。

此外还有一些方法如收缩、分解、压缩、量化、剪枝、霍夫曼编码等实现加速。同时可以使用蒸馏(distillation)来训练一个小网络,通过一个大的网络来指导小网络的训练。

 

2. MobileNet 网络架构

下面从4个知识点进行介绍

  • 深度可分离卷积
  • MobileNet 结构和训练
  • 宽度缩放因子(Width Multiplier)
  • 分辨率缩放因子(Resolution Multiplier)

2.1 深度可分离卷积

那么是如何减少计算量的呢?其实在整个网络中,大部分的计算时间都花费在计算conv上,所以作者选择从conv下手,提出了深度可分离卷积。

深度可分离卷积:是对标准卷积(Standard conv)进行分解,分解为一个深层卷积(depthwise convolution)和一个 1x1 conv 逐点卷积(pointwise convolution)深层卷积(dw)对每个输入通道只使用单个卷积核(filter)进行卷积,用来提取特;1x1点卷积(pw)用来对深层卷积(dw)的多个输出进行线性融合。深度可分离卷积打破输出通道N(output channel)和 卷积核D_K(kernel size) 之间相互连接的关系以减少计算量。

我们先从标准的conv说起,如下图

图(a):所示是使用标准卷积核,计算一个标准的卷积层计算量为:

\large D_k\cdot D_k\cdot M\cdot N\cdot D_F\cdot D_F

D_K\times D_K是kernel size,M为input channel,N为output channel,D_F\times D_F 是feature map的大小。

 

图(b):是使用深层卷积核,它每个输入通道只使用单个过滤器(filter),故执行一次卷积运算的计算量为:

\large D_k\cdot D_k\cdot M\cdot D_F\cdot D_F

 

图(c)是分解成的1x1 conv点卷积。kernel size: D_K\cdot D_K = 1,所以它的计算量为:

\large M\cdot N\cdot D_F\cdot D_F

这样就得到我们深度可分离卷积的总计算量,即为两者相加:

\large D_k\cdot D_k\cdot M\cdot D_F\cdot D_F + M\cdot N\cdot D_F\cdot D_F

计算量减少到原来的倍数:

\large \frac{D_k\cdot D_k\cdot M\cdot D_F\cdot D_F + M\cdot N\cdot D_F\cdot D_F}{D_k\cdot D_k\cdot M\cdot N \cdot D_F\cdot D_F} = \frac{1}{N} + \frac{1}{D_{K}^{2}}

如果使用3x3的深度可分离卷积,大约减少8~9倍的计算量。

 

2.2 MobileNet 结构和训练

网络结构:

如Table 1所示:

MobileNet总共有28层, 第一层Conv/s2是全卷积层,之后就接很多的 Conv dw/s* , Conv/s1 层,这两层就是标准卷积分离得到的两个层,到后面再接一个Avg Pool / s1 层来降低空间解析度,得到1024个输出,再经过FC / s1 全连接层得到1000个输出,最后把1000输出喂到Softmax 函数来进行分类。

 

标准的卷积分解为 3x3 Depthwise Conv , 1x1 Conv这两个层,这两个层之间也是使用BN 和 Relu 来连接。正如下图所示:

论文中提到非结构化的稀疏矩阵一般不会比密集矩阵(dense matrix)运算得更快,然后作者的模型结构几乎是把所有(94.86%)的计算都放在1x1 conv 密集卷积中。卷积的计算通常由矩阵乘法(GEMM)来实现,可运算GEMM需要使用im2col 方式在内存中重新排序,才将其映射到GEMM。Caffe 就是使用这种方法(im2col + GEMM)来实现卷积运算的。1x1 conv不需要在内存中重新排序,可以直接使用GEMM实现。可见这网络的设计是如此的恰到好处。

 

训练:

  • 优化器:使用RMSpror ;
  • 较少使用正则化和数据增强,因为小的模型不会产生过拟合;
  • 在depthwise filters上加入少量或者不加权重衰减(L2正则化)是很重要的,因为它们的参数很少,建议不加。

 

2.3 宽度缩放因子(Width Multiplier)

为了模型更小、计算量更少,作者引入一个简单的参数\alpha,让输入通道变为\alpha M,输出通道变为\alpha N,整个计算量就变为了:

\large D_k\cdot D_k\cdot \alpha M\cdot D_F\cdot D_F + M\cdot \alpha N\cdot D_F\cdot D_F

其中\alpha \in (0, 1],通常取1, 0.75, 0.5, 0.25 等。因为会使网络结构简化,所以我们需要从头训练模型

 

2.4 分辨率缩放因子(Resolution Multiplier)

降低神经网络计算成本,引入的第二个超参数是分辨率乘法器\rho,就是直接让输入的分辨率更小,由D_F变为\rho D_F,计算量:

\large D_k\cdot D_k\cdot \alpha M\cdot \rho D_F\cdot \rho D_F + M\cdot \alpha N\cdot \rho D_F\cdot \rho D_F

其中\rho \in (0, 1],得到典型的分辨率为224, 192, 160, 128 等。这一步减少的计算量到原来的\rho ^2倍。

 

3. 经验

作者介绍了一些自己的调试经验,主要是在MobileNet架构上精度、计算量和模型大小之间的权衡。

Table 4 对比了使用全连接卷积模型和深度可分离卷积模型的对比;

Table 5 是宽度变小和网络层数变浅的精度对比;

Table 6 是 超参数a在不同取值下的对比;

Table 7 是 在不同分辨率下精度对比;

其他的一些对比这里我就不仔细说了,可以去看作者的论文。这里再贴一个表:MobileNet 和一些流行的网络模型的对比。可以看到MobileNet和VGG16的精度是比较接近的,然而在模型上减少32倍,计算量减少了27倍,可见MobileNet效率有非常大的提高。

MobileNet 除了在图片分类上应用,还可以用于人脸识别、目标检测等多个方面,比如mobilefaceNets、mobilenetSSD等模型,实现自己想要的应用。


References:

[1] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

[2] MobileNet V1论文阅读和代码解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liguiyuan112

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值