MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications论文阅读笔记

论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

MobileNet是为移动和嵌入式设备提出的轻量级网络模型。论文验证了模型在其他领域(对象检测,人脸识别,大规模地理定位等)使用的有效性。本文为阅读学习MobileNet论文时的要点记录。

深度可分离卷积(Depthwise separable convolution)

在这里插入图片描述

标准卷积

图(a)是标准卷积。输入特征图尺寸为DF×DF×MD_F\times D_F \times M,卷积核尺寸为Dk×Dk×MD_k\times D_k\times M,输出特征图尺寸为DG×DG×ND_G\times D_G\times N,可计算出标准卷积的参数量为Dk×Dk×M×ND_k\times D_k\times M\times N

深度卷积(depthwise convolution)

图(b)代表深度卷积。输入特征图尺寸为DF×DF×MD_F\times D_F \times M,卷积核尺寸为Dk×Dk×1D_k\times D_k\times 1,输出特征图尺寸为DG×DG×MD_G\times D_G\times M,即深度卷积调整了feature map的大小,没有改变通道数。实际上相当于分组卷积。深度卷积的参数量为Dk×Dk×1×MD_k\times D_k\times 1\times M

逐点卷积(pointwise convolution)

图©代表逐点卷积,是一个1×11\times 1的卷积。输入特征图是(b)图中的操作输出的特征图,尺寸为DG×DG×MD_G\times D_G\times M,卷积核尺寸为1×1×M1\times 1\times M,输出特征图尺寸为DG×DG×ND_G\times D_G\times N。逐点卷积的参数量为1×1×M×N1\times 1\times M\times N

深度可分离卷积

深度可分离卷积将标准卷积分解成深度卷积(depthwise convolution)逐点卷积(pointwise convolution)。那么深度可分离卷积操作的参数量为深度卷积与逐点卷积的参数量之和:Dk×Dk×M+M×ND_k\times D_k\times M+ M\times N。所以深度可分离卷积参数量是标准卷积的Dk×Dk×M+M×NDk×Dk×M×N=1N+1DK2\frac{D_k\times D_k\times M+ M\times N}{D_k\times D_k\times M\times N}=\frac{1}{N}+\frac{1}{D_K^2}。因此相比于标准卷积,深度可分离卷积可大幅度降低参数量和计算量。

网络结构与训练

MobileNet的模型结构如下:
在这里插入图片描述
在这里插入图片描述
如上图所示,由于深度可分离卷积将原本的一个标准卷积层替换为一个深度卷积层和一个逐点卷积层,相当于一个卷积层变成了两个卷积层,那么对应的BN和ReLU也需要在每一个卷积层各进行一次。

深度学习中的卷积通常是用通用矩阵乘(GEMM)来实现的。需要先通过im2col对其在内存中重排序,才能使用GEMM。im2col可以将feature map和卷积核展成列(行)向量,以方便后续的矩阵乘法计算。

我们把一个卷积核对应的值展开,到底应该展开为行还是列呢?卷积核的滑动先行后列还是相反?区别在哪?
这其实主要取决于我们使用的框架访存的方式。计算机一次性读取相近的内存是最快的,尤其是当需要把数据送到GPU去计算的时候,这样可以节省访存的时间,以达到加速的目的。不同框架的访存机制不一样,所以会有行列相反这样的区别。在caffe框架下,im2col是将一个小窗的值展开为一行,而在matlab中则展开为列。所以说,行列的问题没有本质区别,目的都是为了在计算时读取连续的内存。
这也解释了我们为什么要通过这个变化来优化卷积。如果按照数学上的步骤做卷积读取内存是不连续的,这样就会增加时间成本。同时我们注意到做卷积对应元素相乘再相加的做法跟向量内积很相似,所以通过im2col将矩阵卷积转化为矩阵乘法来实现。
————————————————
原文链接:im2col的原理和实现

1×11\times 1卷积则不需要在内存中进行重新排序,可以直接使用GEMM进行实现,降低延迟。GEMM是最优化的数值线性代数算法之一。而如下图所示,MobileNet的绝大部分计算量和参数量都源自1×11\times 1卷积,其余的参数也几乎都在FC层,因此MobileNet的参数量和计算量相比使用标准卷积的网络将大幅降低。

由于MobileNet的网络规模较小,不容易产生过拟合的问题,因此在训练网络时无需作过多的正则化和数据增广(特别是深度卷积层,参数量已经很少了,不需要进行权重衰减)。

减小模型、提高效率的两个超参数

Width Multiplier:使模型变瘦

引入width multiplier参数α\alpha,使模型变瘦(thinner),从而降低计算量。α\alpha是一个将输入和输出feature map的通道数进行收缩的乘数,输入通道MM变为αM\alpha M,输出通道NN变为αN\alpha N。深度可分离卷积引入α\alpha后的计算成本为:DK×DK×αM×DF×DF+αM×αN×DF×DFD_K \times D_K \times αM\times D_F \times D_F +αM \times αN \times D_F\times D_F

其中,$ α ∈ (0, 1] $ ,通常设置为1,0.75,0.5 或0.25。引入α\alpha后,深度可分离卷积的参数量大致收缩为之前的α2\alpha^2倍。

width multiplier也可以用于其他的网络模型,但是引入width multiplier之后,网络需要从头开始训练。引入α\alpha后,深度可分离卷积的参数量大致收缩为之前的α2\alpha^2倍。

Resolution Multiplier: 使输入分辨率变小

通过设置输入的分辨率来隐式设置Resolution Multiplier参数ρ\rho。深度可分离卷积同时引入α\alphaρ\rho后的计算成本为:$D_K \times D_K \times αM \times \rho D_F\times \rho D_F+αM \times αN\times \rho D_F\times\rho D_F $。

其中ρ01]ρ∈(0,1]通常是隐式设置的,因此网络的输入分辨率为224、192、160或128。

引入ρ\rho后,深度可分离卷积的计算量缩减为之前的ρ2\rho^2倍。

要点总结

  1. 深度可分离卷积
  2. 两个超参数

参考

理解分组卷积和深度可分离卷积如何降低参数量

im2col的原理和实现

im2col方法实现卷积算法

轻量级网络–MobileNet论文解读

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章