MobileNet经典网络解读

MobileNets是为移动和嵌入式设备提出的高效模型。MobileNets基于流线型架构(streamlined),使用深度可分离卷,(depthwise separable convolutions,即Xception变体结构)来构建轻量级深度神经网络。 论文介绍了两个简单的全局超参数,可有效的在延迟和准确率之间做折中。这些超参数允许我们依据约束条件选择合适大小的模型。

1、参数数量和理论计算量

1.1、定义

  • 参数数量(params)
    关系到模型大小,单位通常为M,通常参数用 float32 表示,所以模型大小是参数数量的 4 倍

  • 理论计算量(FLOPs):
    1)是 floating point operations 的缩写(注意 s 小写),可以用来衡量算法/模型的复杂度,这关系到算法速度,大模型的单位通常为 G,小模型单位通常为 M。

    2)通常只考虑乘加操作(Multi-Adds)的数量,而且只考虑 CONV 和 FC 等参数层的计算量,忽略 BN 和PReLU 等等。一般情况,CONV 和 FC 层也会忽略仅纯加操作 的计算量,如 bias 偏置加和shotcut 残差加等,目前技术有 BN 的 CNN 可以不加 bias。

1.2、计算公式

假设卷积核大小为,输入通道数位,输出通道数位,输出特征图的宽和高分别为W和H,这里忽略偏置项。

  • CONV标准卷积层:
    MobileNet经典网络解读

  • FC全连接层(K=1):
    MobileNet经典网络解读

2、深度可分离卷积

MobileNet是基于深度可分离卷积的。通俗的来说,深度可分离卷积干的活是:把标准卷积分解成深度卷积(depthwise convolution)和逐点卷积(pointwise convolution)。这么做的好处是可以大幅度降低参数量和计算量。分解过程示意图如下:
MobileNet经典网络解读

3、深度分类卷积示例

3.1、标准卷积

输入图片的大小为(6,6,3),原卷积操作是用(4,4,3,5)的卷积(4×4是卷积核大小,3是卷积核通道数,5个卷积核数量),stride=1,无padding。输出的特征尺寸为

即输出的特征映射为(3,3,5) 。
将标准卷积中选取序号为n的卷积核,大小为 (4,4,3),标准卷积过程示意图如***意省略了偏置单元):
MobileNet经典网络解读
总结:输入的第m个通道对应第n个卷积核的m通道,将个通道计算结果相加,得到输出结果的第n个通道。

黑色的输入为(6,6,3)与第n个卷积核对应,每个通道对应每个卷积核通道卷积得到输出,最终输出为2+0+1=3。(这是常见的卷积操作,注意这里卷积核要和输入的通道数相同,即图中表示的3个通道)

3.2、深度分离卷积

对于深度分离卷积,把标准卷积(4,4,3,5)分解为:

  1. 深度卷积部分:大小为(4,4,1,3),作用在输入的每个通道上,输出特征映射为(3,3,3)
  2. 逐点卷积部分:大小为(1,1,3,5),作用在深度卷积的输出特征映射上,得到最终输出为(3,3,5)

其中中深度卷积卷积过程示意图如下:
MobileNet经典网络解读

3.3、计算量比较

(1)标准卷积
输入的特征映射F{F}尺寸为(DF,DF,M){(D_F,D_F,M)},采用标准卷积K{K}尺寸为(DK,DK,M,N){(D_K,D_K,M,N)},输出的特征映射为G尺寸为(DG,DG,N){(D_G,D_G,N)}

输入的通道数为M{M},输出的通道数为N{N}。对应的计算量为:DkDkMNDFDF{D_k*D_k*M*N*D_F*D_F}

(2)深度可分离卷积
可将标准卷积(DK,DK,M,N){(D_K,D_K,M,N)}拆分为深度卷积和逐点卷积:

  1. 深度卷积负责滤波作用,尺寸为(DK,DK,1,N){(D_K,D_K,1,N)}。输出特征为(DG,DG,M){(D_G,D_G,M)}
  2. 逐点卷积负责转换通道,尺寸为(1,1,M,N){(1,1,M,N)}得到最终输出为(DG,DG,M){(D_G,D_G,M)} 深度卷积和逐点卷积计算量:DKDKMDFDF+MNDFDF{D_K*D_K*M*D_F*D_F+M*N*D_F*D_F}

采用这种卷积结构卷积计算量减少了:
DKDKMDF+MNDFDFDkDkMNDFDF=1N=1Dk2\frac{D_K*D_K*M*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}

以前述例子带入可得计算量减少了:
4413+11354435=2180=(15+142)\frac{4*4*1*3+1*1*3*5}{4*4*3*5}=\frac{21}{80}=(\frac{1}{5}+\frac{1}{4^2})
MobileNet使用可分离卷积减少了8到9倍的计算量,只损失了一点准确度。

3.4、网络结构

  • 标准卷积和MobileNet中使用的深度分离卷积结构对比如下:
    MobileNet经典网络解读

  1. 注意:如果是需要下采样,则在第一个深度卷积上取步长为2。用 CONV/s2(步进2的卷积)代替MaxPool+CONV:使得参数数量不变,计算量变为原来的 1/4 左右,且省去了MaxPool 的计算量

  2. 用 depth-wise convolution 会有一个问题,就是导致信息流通不畅 ,即输出的 feature map仅包含输入的 feature map 的一部分,在这里,MobileNet 采用了point-wise(1*1) convolution帮助信息在通道之间流通

  • MobileNet的具体结构如下(dw表示深度分离卷积):
    MobileNet经典网络解读
    除了最后的FC层没有非线性**函数,其他层都有BN和ReLU非线性函数。

  • 每层所耗计算资源
    MobileNet经典网络解读
    我们的模型几乎将所有的密集运算放到1×1卷积上,这可以使用general matrix multiply (GEMM) functions优化。在MobileNet中有95%的时间花费在1×1卷积上,这部分也占了75%的参数剩余的其他参数几乎都在FC层上了。

3.5、引入的超参数

3.5.1 、Width Multiplier: Thinner Models

引入的第一个控制模型大小的超参数是:宽度因子α(Width multiplier ),用于控制输入和输出的通道数,降低模型的宽度,即输入通道从M变为αM输出通道从N变为αN。

深度卷积和逐点卷积的计算量:
DKDKαMDFDF+αMαNDFDF{D_K*D_K*{\alpha}M*D_F*D_F+{\alpha}M*{\alpha}N*D_F*D_F}
可设置α∈(0,1],通常取1、0.75、0.5。
计算量减少了:
DKDKαMDFρDF+αMαNDFDFDkDkMNDFDF=αN=α2Dk2\frac{D_K*D_K*{\alpha}M*D_F*{\rho}D_F+{\alpha}M*{\alpha}N*D_F*D_F}{D_k*D_k*M*N*D_F*D_F}=\frac{{\alpha}}{N}=\frac{{\alpha}^2}{D_k^2}
宽度因子将计算量和参数降低了约宽度因子将计算量和参数降低了约α2{\alpha}^2

3.5.2 、Resolution Multiplier: Reduced Representation

引入的第二个控制模型大小的超参数是:分辨率因子ρ(resolution multiplier )。用于控制输入和内部层表示。即用分辨率因子控制输入的分辨率。

深度卷积和逐点卷积的计算量:
DKDKαMρDFρDF+αMαNρDFρDF{D_K*D_K*{\alpha}M*{\rho}D_F*{\rho}D_F+{\alpha}M*{\alpha}N*{\rho}D_F*{\rho}D_F}可设置ρ∈(0,1],通常设置输入分辨率为224,192,160和128。
计算量减少了:
DKDKαMρDFρDF+αMαNρDFρDFDkDkMNDFDF=αρN=α2ρ2Dk2\frac{D_K*D_K*{\alpha}M*{\rho}D_F*{\rho}D_F+{\alpha}M*{\alpha}N*{\rho}D_F*{\rho}D_F}{D_k*D_k*M*N*D_F*D_F}=\frac{{\alpha}{\rho}}{N}=\frac{{\alpha}^2{\rho}^2}{D_k^2}分辨率因子将计算量和参数降低了约ρ2{\rho}^2倍,可很方便的控制模型大小。

3.5.3、宽度因子和分辨率因子对模型的影响

MobileNet经典网络解读
第一行是使用标准卷积的参数量和Mult-Adds;第二行将标准卷积改为深度分类卷积,参数量降低到约为原本的1/10,Mult-Adds降低约为原本的1/9。使用α和ρ参数可以再将参数降低一半,Mult-Adds再成倍下降。

两个简单的全局超参数,可有效的在延迟和准确率之间做折中。这些超参数允许我们依据约束条件选择合适大小的模型。

参考文献:

https://blog.csdn.net/u011974639/article/details/79199306
https://blog.csdn.net/mzpmzk/article/details/82976871