MobileNet

Posted by wzw on July 25, 2019

MobileNetV1 & MobileNetV2 轻量模型

MobileNetV1

主要思想就是提出了深度可分离卷积 Depthwise Separable Convolution,结构如下图所示:

1.png

深度可分离卷积先分别在输入特征图的每一个通道上应用一个卷积,称为 depthwise convolution,再用一个1*1的卷积去融合 depthwise conv 输出的不同通道的特征之间的关系,称为 pointwise convolution。而标准卷积直接就输出了这两步的结果。

这样做的好处就是计算量大大减少:

输入特征图 F 维度为: ,输出 G 维度: ,标准卷积核尺寸为: ,所以标准卷积计算量为:

而对于深度可分离卷积,depthwise conv 的卷积核为: ,pointwise conv 的卷积核为: ,深度可分离卷积两步总的计算量为:

相比于标准卷积,参数量比率为:

一般输出维度 N 比较大,因此 ,一般卷积核尺寸 ,所以参数量相比普通卷积减少了 8 到 9 倍。

深度可分离卷积结构如下图右边所示,左边为标准卷积:

2.png

MobileNet 结构如下表所示:

3.png

MobileNetV2

MobileNetV2 论文写的很深奥,大致思想两点:

  1. Linear Bottlenecks
  2. Inverted residuals
Linear Bottlenecks

为了减少网络参数量,可以减少每层输出的通道数,但是 ReLU 激活函数应用在少的通道数上会大大破坏信息完整度,作者做了如下图实验:

4.png

作者将一个螺旋特征(图左一所示)通过一个 n×m 维(螺旋是二维图像则 m=2)的矩阵 T 变换到 n 维的空间中,经过 ReLU 之后,再利用 恢复到二维空间,可以看到,当 n=2,3 时信息丢失较多,n=15,30 的时候信息恢复的比较好。

因此,作者认为在输出通道数较少的时候不能用 ReLU,因此把深度可分离卷积最后的 ReLU 换成了线性操作,也就是 1*1 的卷积。具体结构如下图所示:

5.png

图中 a 是标准卷积,b 是深度可分离卷积,c 是改为线性操作的可分离卷积,d 是 c 堆叠起来的结构,也就是线性操作之后的输出作为下一个分离卷积的输入。

Inverted residuals

Inverted 是 ‘倒’ 的意思,啥是倒的残差结构呢,看下图:

6.png

左边是普通的残差结构,右边是 Inverted residuals。可以看到,倒的是通道数量:普通Residual block 输入输出通道数多,block 内部通道数少;而 Inverted residuals block 相反,输入输出通道数少,block 内部通道数多。Inverted residuals block 结构如下表和图所示:

8.png

7.png

MobileNetV2 模型结构如下:

9.png