MobileNet V1

简介

Google在2017年上半年发表了一篇关于可以运行在手机等移动设备上的神经网络结构——MobileNets。MobileNets是基于深度可分离卷积(depthwise separable convolution)而设计的轻量级深度神经网络。这文章也介绍了两个超参数可以很好的平衡延时与精度,这两个超参数可以使人更方便地选出自己想要的网络结构。MobileNets的结构能用在图片分类、人脸识别、目标检测等上面。
深度卷积神经网络将多个计算机视觉任务性能提升到了一个新高度,总体的趋势是为了达到更高的准确性构建了更深更复杂的网络,但是这些网络在尺度和速度上不一定满足移动设备要求。MobileNet描述了一个高效的网络架构,允许通过两个超参数直接构建非常小、低延迟、易满足嵌入式设备要求的模型。

现阶段,在建立小型高效的神经网络工作中,通常可分为两类工作:
压缩预训练模型:获得小型网络的一个办法是减小、分解或压缩预训练网络,例如量化压缩(product quantization)、哈希(hashing )、剪枝(pruning)、矢量编码( vector quantization)和霍夫曼编码(Huffman coding)等;此外还有各种分解因子(various factorizations )用来加速预训练网络;还有一种训练小型网络的方法叫蒸馏(distillation ),使用大型网络指导小型网络。
直接训练小型模型: 例如Flattened networks利用完全的因式分解的卷积网络构建模型,显示出完全分解网络的潜力;Factorized Networks引入了类似的分解卷积以及拓扑连接的使用;Xception network显示了如何扩展深度可分离卷积到Inception V3 networks;Squeezenet 使用一个bottleneck用于构建小型网络。

深度可分离卷积

深度可分离卷积(depthwise separable convolution)把标准卷积(standard convolution)分解成深度卷积(depthwise convolution)逐点卷积(pointwise convolution)。这么做的好处是可以大幅度降低参数量和计算量。分解过程示意图如下:

输入的特征映射 \(F\) 尺寸为 \(\left(D_{F}, D_{F}, M\right)\) ,采用的标准卷积 \(K\)\(\left(D_{K}, D_{K}, M, N\right)\) 输出的特征映射为 \(G\) 尺寸为 \(\left(D_{G}, D_{G}, N\right)\) 标准卷积的卷积计算公式为:

\[G_{k, l, n}=\sum_{i, j, m} K_{i, j, m, n} \cdot F_{k+i-1, l+j-1, m} \]

输入的通道数为 \(M\),输出的通道数为 \(N\)。对应的计算量为:\(D_{K} \cdot D_{K} \cdot M \cdot N \cdot D_{F} \cdot D_{F}\) 可将标准卷积 \(\left(D_{K}, D_{K}, M, N\right)\) 拆分为深度卷积和逐点卷积:

  • 深度卷积负责滤波作用,尺寸为 \(\left(D_{K}, D_{K}, 1, M\right)\) 输出特征为 \(\left(D_{G}, D_{G}, M\right)\)

  • 逐点卷积负责转换通道,尺寸为 \((1,1, M, N)\) 得到最终输出为 \(\left(D_{G}, D_{G}, N\right)\)

深度卷积的卷积公式为:

\[\hat{G}_{k, l, n}=\sum_{i, j} \hat{K}_{i, j, m} \cdot F_{k+i-1, l+j-1, m} \]

其中 \(\hat{K}\) 是深度卷积,卷积核为 \(\left(D_{K}, D_{K}, 1, M\right)\),其中 \(m_{t h}\) 个卷积核应用在 \(F\) 中第 \(m_{t h}\) 个通道上,产生 \(\hat{G}\) 上第 \(m_{t h}\) 个通道输出。

深度卷积和逐点卷积计算量:

\[D_{K} \cdot D_{K} \cdot M \cdot D_{F} \cdot D_{F}+M \cdot N \cdot D_{F} \cdot D_{F} \]

计算量减少了:

\[\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}} \]

可以看到前后的计算量是小了很多的。

MobileNets结构

标准卷积和MobileNet中使用的深度分离卷积结构对比如下:

MobileNet的具体结构如下(dw表示深度分离卷积):

其中第一个卷积层为传统的卷积;前面的卷积层均有BN和ReLU,最后一个全连接层只有BN,无ReLU。

两个超参数

Width Multiplier: Thinner Models

第一个控制模型大小的超参数是:宽度因子 \(\alpha\),用于控制输入和输出的通道数,即输入通道从 \(M\) 变为 \(\alpha M\) ,输出通道从 \(N\) 变为 \(\alpha N\)
深度卷积和逐点卷积的计算量:

\[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} \]

可设置 \(\alpha \in(0,1]\) ],通常取1,0.75,0.5和0.25 。

计算量减少了:

\[\frac{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}}{D_{K} \cdot D_{K} \cdot M \cdot N \cdot D_{F} \cdot D_{F}}=\frac{\alpha}{N}+\frac{\alpha^{2}}{D_{K}^{2}} \]

宽度因子将计算量和参数降低了约 \(\alpha^{2}\) 倍,可很方便的控制模型大小。

Resolution Multiplier: Reduced Representation

第二个控制模型大小的超参数是:分辨率因子 \(\rho\) 用于控制输入和内部层表示,即用分辨率因子控制输入的分辨率。
深度卷积和逐点卷积的计算量:

\[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} \]

可设置 \(\rho \in(0,1]\),通常设置输入分辨率为224,192,160和128。
计算量减少了:

\[\frac{D_{K} \cdot D_{K} \cdot \alpha M \cdot \rho_{F} \cdot \rho D_{F}+\alpha M \cdot \alpha N \cdot \rho D_{F} \cdot \rho D_{F}}{D_{K} \cdot D_{K} \cdot M \cdot N \cdot D_{F} \cdot D_{F}}=\frac{\alpha \rho}{N}+\frac{\alpha^{2} \rho^{2}}{D_{K}^{2}} \]

分辨率因子将计算量和参数降低了约 \(\rho^{2}\) 倍,可很方便的控制模型大小。
下面的示例展现了宽度因子和分辨率因子对模型的影响:

第一行是使用标准卷积的参数量和Mult-Adds;
第二行将标准卷积改为深度分类卷积,参数量降低到约为原本的1/10,Mult-Adds降低约为原本的1/9。
使用 \(\alpha N\)\(\rho\) 参数可以再将参数降低一半,Mult-Adds再成倍下降。

posted @ 2019-05-01 20:19  youngliu91  阅读(567)  评论(0)    收藏  举报