【轻量级网络系列一】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications论文总结

前言

MobileNet是谷歌设计用来给手机以及嵌入式设备上的视觉应用的一种网络,在此之前大家设计的小网络通常只考虑了网络的size够不够小,并没有考虑网络的速度。而MobileNet正是保留了大网络的精度以及具有较小的size和较快的speed的一种网络。MobileNet主要是构建在depthwise separable convolution模块上,此模块首次出现是在Ieception model中。还有一种获得小网络的方法是在之前预训练的模型上进行收缩,分解以及压缩。还有一种方法是用知识蒸馏的方法,用一个大网络教一个小网络去学习,teacher-student模式。这种方法有一部分被用在MobileNet的一些部分上。

MobileNet结构部分

Depthwise Separable Convolution
 

MobileNet将一个标准的卷积分解成depthwise convolution和pointwise convolution(1*1卷积),如下图1所示。

【轻量级网络系列一】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications论文总结_第1张图片

                                                                                                    图1 

我们先来看看这样替代计算量的变化,这里就用原文的数据来说明。D$_F$D$_F$*M的特征图F作为输入,D$_F$*D$_F$*N的特征图G作为输出,这时卷积核的参数应该是D$_K$*D$_K$*M*N的,这里用一个看到知乎贴里的图来具体表达。来自知乎。

【轻量级网络系列一】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications论文总结_第2张图片

                                                                                                    图2 

我们可以通过计算卷积核的计算次数来算出,传统卷积需要的计算量是多大。卷积核大小为D$_K$*D$_K$,一共有M*N个,最后要生成D$_F$*D$_F$大小的特征图(每个点都是通过原特征图与卷积核进行运算得到的),所以这里的计算次数为: 

                                                                          D$_K$*D$_K$*M*N*D$_F$*D$_F$

传统的卷积通过卷积核达到过滤特征以及合并特征为新的表示,所以MobileNet将传统卷积分为两个部分,使用depthwise convolutions来对输入通道进行滤波,使用pointwise convolution(也就是1*1卷积)来进行合并特征。depthwise convolutions使用M个D$_K$*D$_K$​​​​​​​大小的卷积核,如上图1所示,所以计算量减小到D$_K$*D$_K$​​​​​​​*M*D$_F$*D$_F$这里作者提到depthwise convolutions和标准卷积在性能上差不多,只是没有合并通道,所以接下来就要使用1*1卷积的pointwise convolutions了。

1*1的卷积计算量为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*D$_F$*D$_F$+M*N*D$_F$*D$_F$)/D$_K$*D$_K$​​​​​​​*M*N*D$_F$*D$_F$ = \frac{1}{N}+\frac{1}{{D_{K}}^{2}}

在MobileNet中作者使用的是3*3的卷积,所以将计算量降低了8-9倍左右,同时准确率没有下降多少。

网络结构和训练

【轻量级网络系列一】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications论文总结_第3张图片
 

MobileNet的网络结构如上表所示,与传统的卷积层一样,每一个depthwise卷积和pointwise卷积都会跟着BN层和ReLU层来增加网络的非线性能力。在网络的下采样过程中,通过设计卷积的stride来进行下采样,最后使用一个平均池化层,将空间分辨率降为1,也就是从7*7的size变为1*1的size。

作者在此部分提到了,非结构化稀疏矩阵运算通常不会比密集矩阵运算快,直到很高稀疏程度,在MobileNet网络中这部分的计算都放在了1*1卷积的部分上,可以使用高优化的GEMM。关于GEMM的知识可以见这个知乎链接。

在训练阶段,MobileNet只用了较少的正则化以及数据增广的方法,因为小网络不容易过拟合。在训练过程中,较少使用side heads和标签平滑,并且将大图片进行小裁剪来减少图片的畸变。

width multiplier参数

在此小节,作者介绍了一个参数\alpha,用来进一步缩减MobileNet的参数量并且提高它的速度,在尽可能的不损失精度的情况下。作者用该参数将输入通道和输出通道都限制为原来的\alpha倍,即输入通道为\alphaM,输出通道为\alphaN。因此网络的计算量就变为:D$_K$*D$_K$​​​​​​​*\alphaM*D$_F$*D$_F$+\alphaM*\alphaN*D$_F$*D$_F$,近似的可以看作为原来的\alpha^{2}\alpha参数是小于等于1,大于0的,一般取1,0.75,0.5,0.25。可以从实验部分的数据看到,随着\alpha的减小,准确率有所下降(0.75时下降的很少,但参数量下降了快一半),参数量下降。

【轻量级网络系列一】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications论文总结_第4张图片

Resolution Multiplier参数

在此小节,作者又提出了一个新的超参数\rho,此参数是降低输入图像分辨率来达到减少计算量的结果。同样的,这样减少计算量为D$_K$*D$_K$​​​​​​​*M*\rhoD$_F$*\rhoD$_F$+M*N*\rhoD$_F$*\rhoD$_F$,可见降低了参数为原来的\rho^{2}倍。\rho的取值范围和\alpha的一样,通常降低分辨率为224, 192, 160,128。同样,我们贴出论文中实验部分对这个的下降的影响。

【轻量级网络系列一】MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications论文总结_第5张图片

 

你可能感兴趣的:(深度学习)