MobileNet V1论文:Efficient Convolutional Neural Networks for mobie vision Application
1 引言
传统卷积神经网络,内存需求大、运算量大导致无法在移动设备以及嵌入式设备上运行
。MobileNet网络是由google团队在2017年提出的,专注于移动端或者嵌入式设备中的轻量级CNN网络。相比传统卷积神经网络,在准确率小幅降低的前提下大大减少模型参数与运算量。(相比VGG16准确率减少了0.9%,但模型参数只有VGG的1/32)
, 网络的两点主要体现下两方面:
- Depthwise Convolution(大大减少运算量和参数数量)
- 增加了两个超参数,,其中控制卷积核个数的超参数,控制输入图像大小,这两个参数是人为设定的,并不是网络学习到的
本文的主角MobileNet是Google提出的一种小巧而高效的CNN模型,MobileNets基于流线型架构(streamlined),使用深度可分离卷积(depthwise separable convolutions
,即Xception变体结构)来构建轻量级深度神经网络。论文测试在多个参数量下做了广泛的实验,并在ImageNet分类任务上与其他先进模型做了对比,显示了强大的性能。论文验证了模型在其他领域(对象检测,人脸识别,大规模地理定位等)使用的有效性。
2 相关研究
现阶段,在建立小型高效的神经网络工作中,通常可分为两类工作:
- 1.压缩预训练模型。获得小型网络的一个办法是减小、分解或压缩预训练网络,例如量化压缩(product quantization)、哈希(hashing )、剪枝(pruning)、矢量编码( vector quantization)和霍夫曼编码(Huffman coding)等;此外还有各种分解因子(various factorizations )用来加速预训练网络;还有一种训练小型网络的方法叫蒸馏(distillation ),使用大型网络指导小型网络,这是对论文的方法做了一个补充,后续有介绍补充。
- 2.直接训练小型模型。 例如Flattened networks利用完全的因式分解的卷积网络构建模型,显示出完全分解网络的潜力;Factorized Networks引入了类似的分解卷积以及拓扑连接的使用;Xception network显示了如何扩展深度可分离卷积到Inception V3 networks;Squeezenet 使用一个bottleneck用于构建小型网络。
本文MobileNet网络架构属于上述第二种,允许模型开发人员专门选择与其资源限制(延迟、大小)匹配的小型模型,MobileNets主要注重于优化延迟同时考虑小型网络,从深度可分离卷积
的角度重新构建模型。
3 Depthwise Separable Convolution
mobileNet的基本单元是深度可分离卷积(depthwise separable convolution)。深度可分离卷积其实是一种可分解卷积操作(factorized convolutions),其可以分解为两个更小的操作:depthwise convolution(DW 卷积
)和pointwise convolution(PW
卷积)。
DW卷积
Depthwise Convolution和传统卷积不同,对于传统卷积其卷积核是用在所有的输入通道上(input channels),而depthwise convolution针对每个输入通道采用不同的卷积核,就是说一个卷积核对应一个输入通道,所以说depthwise convolution是depth级别的操作。
传统卷积
- 卷积核的channel=输入特征channel
- 输出特征矩阵的channel=卷积核个数
图2 传统卷积
图3 DW卷积
DW卷积
- 卷积核的channel=1
- 输入特征channel=卷积核个数=输出特征channel
PW卷积
pointwise convolution其实就是普通的卷积,只不过其采用1x1的卷积核。
图4 PW卷积
对于depthwise separable convolution,其首先是采用depthwise convolution对不同输入通道分别进行卷积,然后采用pointwise convolution将上面的输出再进行结合,这样其实整体效果和一个标准卷积是差不多的,但是会大大减少计算量和模型参数量。使用depthwise separable convolution
(深度可分离卷积),能减少多少参数呢?请看图5对比说明
对同样的输入,通过普通的卷积和深度可分离卷积,同样都得到channel=4
的特征矩阵
普通卷积的计算量:
其中 是输入特征矩阵的长、宽,是输入特征的channel
, 是卷积核的大小,是卷积核的个数计算量
: x x x x x
可分离卷积计算量:
计算量
: x x x x + x x x
可分离卷积与普通卷积的计算量对比
:
因此:理论上普通卷积计算量 是 可分离卷积(DW +PW)的8到9倍
4 MobieNet V1网络结构
前面讲述了depthwise separable convolution,这是MobileNet的基本组件,但是在真正应用中会加入BN层,并使用ReLU激活函数,所以depthwise separable convolution的基本结构如图4右边所示。标准卷积和MobileNet中使用的深度分离卷积结构对比如下:
4.1 MobieNet V1网络结构
表1 mobienet v1 网络结构
- 表1
mobienet v1
网络结构中第一行Conv/s2
表示普通卷积,步距为2.Filter Shape
为3x3x3x32
表示卷积核大小为3x3
,输入为彩色图片3
通道,输出为32
通道 -
Conv dw/s1
表示DW
卷积,步距为1
,Filter Shape
为3 x 3 x 32
表示卷积核大小3x3
,dw卷积的channel为1
,卷积核的个数为32 - 由于可分离卷积是mobienet v1基本组件,可分离卷积表示为
dw +pw
,因此dw 和1x1的pw是成对出现的 - mobienet v1的模型结构有点类似于VGG结构,简单的将一系列卷积进行串行链接。
4.2 MobieNet V1 的特点
与其他模型对比
对比了 MobieNet 和GoogleNet、VGG16在imageNet数据集上的准确率、运算量和模型参数,可以看到MobieNet相对于VGG16 它的准确率只减少了0.9%,但它的模型参数大概只有VGG网络的
超参数 和
是卷积核个数的倍率,控制卷积过程中采用的卷积核个数。看看取不同 时网络的效果。
- 取
1.0
的时候,它的准确率是70.6%
,当 取0.75时,即卷积个数缩减为原来的0.75
倍的时候,它的准确率为68.4%
,同时计算量和参数也不同程度的减少;当 取0.5时,准确率为63.7%
,计算量和参数同时也在减少。可以发现将我们卷积核个数减少之后,准确率上没有太大的变化,但模型参数大幅减少。可以根据自己的项目需求去选择合适的值。 - 是分辨率的参数,输入图像的尺寸对网络的分类准确率,模型计算量、模型参数的对比。可以发现通过适当减低图片尺寸大小,能够保证准确率降低很小的情况下,来大幅减少我们的运算量。根据你自己项目的需求来设置参数。
在mobienet v1网络的实际使用中,很多人发现dw卷积,它在训练完之后部分卷积核容易废掉,即卷积核参数大部分为0.因为你观察DW卷积的参数时,你会发现它的大部分参数都是等于0的,DW卷积核是没有起到作用的。针对这个问题再我们mobienet v2中会得到改善。