MobileNet V1论文:Efficient Convolutional Neural Networks for mobie vision Application
传统卷积神经网络,内存需求大、运算量大导致无法在移动设备以及嵌入式设备上运行
。MobileNet网络是由google团队在2017年提出的,专注于移动端或者嵌入式设备中的轻量级CNN网络。相比传统卷积神经网络,在准确率小幅降低的前提下大大减少模型参数与运算量。(相比VGG16准确率减少了0.9%,但模型参数只有VGG的1/32)
, 网络的两点主要体现下两方面:
本文的主角MobileNet是Google提出的一种小巧而高效的CNN模型,MobileNets基于流线型架构(streamlined),使用深度可分离卷积(depthwise separable convolutions
,即Xception变体结构)来构建轻量级深度神经网络。论文测试在多个参数量下做了广泛的实验,并在ImageNet分类任务上与其他先进模型做了对比,显示了强大的性能。论文验证了模型在其他领域(对象检测,人脸识别,大规模地理定位等)使用的有效性。
现阶段,在建立小型高效的神经网络工作中,通常可分为两类工作:
本文MobileNet网络架构属于上述第二种,允许模型开发人员专门选择与其资源限制(延迟、大小)匹配的小型模型,MobileNets主要注重于优化延迟同时考虑小型网络,从深度可分离卷积
的角度重新构建模型。
mobileNet的基本单元是深度可分离卷积(depthwise separable convolution)。深度可分离卷积其实是一种可分解卷积操作(factorized convolutions),其可以分解为两个更小的操作:depthwise convolution(DW 卷积
)和pointwise convolution(PW
卷积)。
Depthwise Convolution和传统卷积不同,对于传统卷积其卷积核是用在所有的输入通道上(input channels),而depthwise convolution针对每个输入通道采用不同的卷积核,就是说一个卷积核对应一个输入通道,所以说depthwise convolution是depth级别的操作。
传统卷积
DW卷积
pointwise convolution其实就是普通的卷积,只不过其采用1x1的卷积核。
对于depthwise separable convolution,其首先是采用depthwise convolution对不同输入通道分别进行卷积,然后采用pointwise convolution将上面的输出再进行结合,这样其实整体效果和一个标准卷积是差不多的,但是会大大减少计算量和模型参数量。使用depthwise separable convolution
(深度可分离卷积),能减少多少参数呢?请看图5对比说明
对同样的输入,通过普通的卷积和深度可分离卷积,同样都得到channel=4
的特征矩阵
普通卷积的计算量:
其中 D F D_F DF是输入特征矩阵的长、宽, M M M是输入特征的channel
, D K D_K DK是卷积核的大小, N N N是卷积核的个数
计算量
: D F D_{F} DF x D F D_{F} DF x D K D_K DK x D K D_K DK x M M M x N N N
可分离卷积计算量:
计算量
: D K D_K DK x D K D_K DK x D F D_F DF x D F D_F DF x M M M + D F D_F DF x D F D_F DF x M M M x N N N
可分离卷积与普通卷积的计算量对比
:
D K . D K . D F . D F . M + D F . D F . M . N D F . D F . D K . D K . M . N = 1 N + 1 9 \frac{D_K . D_K . D_F . D_F . M +D_F . D_F . M . N }{D_{F} . D_{F} . D_K . D_K . M .N}= \frac{1}{N}+\frac{1}{9} DF.DF.DK.DK.M.NDK.DK.DF.DF.M+DF.DF.M.N=N1+91
因此:理论上普通卷积计算量 是 可分离卷积(DW +PW)的8到9倍
前面讲述了depthwise separable convolution,这是MobileNet的基本组件,但是在真正应用中会加入BN层,并使用ReLU激活函数,所以depthwise separable convolution的基本结构如图4右边所示。标准卷积和MobileNet中使用的深度分离卷积结构对比如下:
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
,卷积核的个数为32dw +pw
,因此dw 和1x1的pw是成对出现的
对比了 MobieNet 和GoogleNet、VGG16在imageNet数据集上的准确率、运算量和模型参数,可以看到MobieNet相对于VGG16 它的准确率只减少了0.9%,但它的模型参数大概只有VGG网络的 1 / 32 1/32 1/32
α \alpha α 是卷积核个数的倍率,控制卷积过程中采用的卷积核个数。看看取不同 α \alpha α 时网络的效果。
1.0
的时候,它的准确率是70.6%
,当 α \alpha α 取0.75时,即卷积个数缩减为原来的0.75
倍的时候,它的准确率为68.4%
,同时计算量和参数也不同程度的减少;当 α \alpha α 取0.5时,准确率为63.7%
,计算量和参数同时也在减少。可以发现将我们卷积核个数减少之后,准确率上没有太大的变化,但模型参数大幅减少。可以根据自己的项目需求去选择合适的 α \alpha α值。在mobienet v1网络的实际使用中,很多人发现dw卷积,它在训练完之后部分卷积核容易废掉,即卷积核参数大部分为0.因为你观察DW卷积的参数时,你会发现它的大部分参数都是等于0的,DW卷积核是没有起到作用的。针对这个问题再我们mobienet v2中会得到改善。