v1:

为了在各种任务上到达更高的准确率,大多数的网络模型都是朝着更深、更宽的方向发展。但是在一些计算资源有限的移动设备和嵌入式设备上,这种大规模的网络很难得到实际应用。因此本文提出了一种轻量级的网络结构——MobileNets,在尽量减少精度损失的情况下,降低网络的参数量。

在 v1 版本中,主要的创新点:

1、使用 Depthwise Separable Convolution

2、使用两个超参数来均衡调节网络的计算复杂度和精度

一、Depthwise Separable Convolution

Depthwise Separable Convolution 将传统的标准卷积操作分成两个步骤——Depthwise Convolution 和 Pointwise Convolution,以达到减少参数的目的,如下图所示:

mobilenetv2的架构 mobilenet v2 v3_卷积核

其具体内容如下:

对于一幅大小为

mobilenetv2的架构 mobilenet v2 v3_mobilenetv2的架构_02

的输入特征图,

1、采用传统的标准卷积,其卷积核如下图(a),

mobilenetv2的架构 mobilenet v2 v3_卷积_03

其中卷积核的大小为

mobilenetv2的架构 mobilenet v2 v3_激活函数_04


mobilenetv2的架构 mobilenet v2 v3_mobilenetv2的架构_05

对应卷积核的空间大小(如常见的 3x3),

mobilenetv2的架构 mobilenet v2 v3_卷积核_06

对应输入特征图的维度,

mobilenetv2的架构 mobilenet v2 v3_卷积核_07

为卷积核的个数(也即输出特征图的维度)。假设输出特征图与输入特征图同空间尺寸(即输出特征图为

mobilenetv2的架构 mobilenet v2 v3_激活函数_08

),则这样的一个卷积层其参数量为 

mobilenetv2的架构 mobilenet v2 v3_卷积核_09

(因为输出特征图总共有

mobilenetv2的架构 mobilenet v2 v3_激活函数_08

个点,每个点对应的参数量为

mobilenetv2的架构 mobilenet v2 v3_激活函数_04

)。

2、采用 Depthwise Separable Convolution ,所使用到的卷积核如下:

mobilenetv2的架构 mobilenet v2 v3_卷积_12

 Depthwise Separable Convolution 分为 depthwise convolution 和 pointwise convolution 两个步骤。对于传进来的一幅特征图

mobilenetv2的架构 mobilenet v2 v3_mobilenetv2的架构_02

,首先进行 depthwise convolution,与上面标准卷积不同的是,它对输入特征图的每个通道(channel)都分开进行处理(即处理

mobilenetv2的架构 mobilenet v2 v3_卷积核_06


mobilenetv2的架构 mobilenet v2 v3_激活函数_15

),所以它的卷积核大小为

mobilenetv2的架构 mobilenet v2 v3_卷积核_16

,个数为

mobilenetv2的架构 mobilenet v2 v3_卷积核_06

个(对应输入特征图的

mobilenetv2的架构 mobilenet v2 v3_卷积核_06

个通道,输出特征图的通道数和输入特征图的通道数相同),如上面图(b)所示。这一步的参数量为

mobilenetv2的架构 mobilenet v2 v3_mobilenetv2的架构_19

(因为输出特征图总共有

mobilenetv2的架构 mobilenet v2 v3_mobilenetv2的架构_02

个点,每个点对应的参数量为

mobilenetv2的架构 mobilenet v2 v3_卷积核_16

)。depthwise convolution 带来的后果就是在 channel 维度上的信息不能相互传递(因为卷积是分别在每个 channel 上进行的),因此后面需要接一个 pointwise convolution,来进行信息的交互。 pointwise convolution 本质上就是一个普通的卷积,只不过它的卷积核空间尺寸是 1x1(经常用来给特征图做升维或降维),如上面的图(c)所示。这一步的参数量为

mobilenetv2的架构 mobilenet v2 v3_mobilenetv2的架构_22

  (因为输出特征图总共有

mobilenetv2的架构 mobilenet v2 v3_激活函数_08

个点,每个点对应的参数量为

mobilenetv2的架构 mobilenet v2 v3_mobilenetv2的架构_24

)。

因此整个 Depthwise Separable Convolution 的参数量相比于标准卷积为:

mobilenetv2的架构 mobilenet v2 v3_卷积核_25

在作者的实验中,使用  Depthwise Separable Convolution 的模型(MobileNet)准确率略低于使用标准卷积的模型(Conv MobileNet),但参数量却大大减少,如下图:

mobilenetv2的架构 mobilenet v2 v3_卷积核_26

二、使用两个超参数来均衡调节网络的计算复杂度和精度

1、 Width Multiplier: Thinner Models(

mobilenetv2的架构 mobilenet v2 v3_mobilenetv2的架构_27

):降低特征图的通道数目对于网络的每一层,将

mobilenetv2的架构 mobilenet v2 v3_mobilenetv2的架构_27


mobilenetv2的架构 mobilenet v2 v3_卷积核_29

, 乘到其输入特征图和输出特征图的通道数(channels)上,即输入为

mobilenetv2的架构 mobilenet v2 v3_卷积_30

,输出为

mobilenetv2的架构 mobilenet v2 v3_卷积_31

,Depthwise Separable Convolution 的参数变为:

mobilenetv2的架构 mobilenet v2 v3_mobilenetv2的架构_32

2、 Resolution Multiplier: Reduced Representation(

mobilenetv2的架构 mobilenet v2 v3_卷积核_33

):降低特征图的空间分辨率对于网络的每一层,将

mobilenetv2的架构 mobilenet v2 v3_卷积核_33


mobilenetv2的架构 mobilenet v2 v3_卷积核_35

,乘到输入特征图和输出特征图的宽高上,结合上面的 width multiplier ,输入变为

mobilenetv2的架构 mobilenet v2 v3_卷积_36

,Depthwise Separable Convolution 再次变为:

mobilenetv2的架构 mobilenet v2 v3_卷积核_37

关于 Width Multiplier 和 Resolution Multiplier 对模型准确率和参数量的一些影响如下:

mobilenetv2的架构 mobilenet v2 v3_卷积_38

 

 

v2 :

MobileNet v2 中的基本结构块(Inverted residual block)与 v1 中的基本结构块(Depthwise Separable Convolution)的对比,如下图:

mobilenetv2的架构 mobilenet v2 v3_mobilenetv2的架构_39

如上图所示,v2 中的 Inverted residual block 的改变如下:

1、多了一个 shortcut connections(快捷/跳跃连接),一般结构块都会加上这个,降低训练的难度。

2、在 Dwise 3x3(Depthwise Convolution)前新加了一个 Conv 1x1(Pointwise Convolution),用来升维(channels),具体示意图如下(b):

mobilenetv2的架构 mobilenet v2 v3_卷积核_40

左边(a)为普通的 Residual block,里面是一个常见的 bottleneck 结构(左右两边特征图的channel维度高,中间特征图的channel维度底,类似于花瓶的瓶口),shortcat 连接的是高维度的特征图;而右边是本文所用的 Inverted residual block,它是左右两边维度底,中间维度高,shortcat 连接的是低纬度的特征图。这与前面恰好相反,所以这是名字里 ‘inverted’ 的由来。

3、最后一个Conv 1x1接的是线性(Linear)激活函数,而不是非线性的Relu6(注:普通relu, y=max(0, x);relu6, y= min(max(0,x), 6),即限制输出最高为6,当使用低精度的设备进行计算时,Relu6 相比于 Relu 的鲁棒性会更好)。作者认为在一个低维空间使用非线性操作会带来信息的损失。

下面是作者实验的一张对比图,左边图(a)表明了最后一层使用 Linear 激活函数(蓝色曲线)比使用 Relu6 激活函数(绿色曲线)的效果好;右边图(b)表明了使用 Shortcut(蓝、绿曲线)比不使用 shortcut(红色曲线)的效果好,以及使用 Inverted residual block(蓝色曲线)的效果比使用 residual block(绿色曲线)的效果好。

mobilenetv2的架构 mobilenet v2 v3_mobilenetv2的架构_41