v1:
为了在各种任务上到达更高的准确率,大多数的网络模型都是朝着更深、更宽的方向发展。但是在一些计算资源有限的移动设备和嵌入式设备上,这种大规模的网络很难得到实际应用。因此本文提出了一种轻量级的网络结构——MobileNets,在尽量减少精度损失的情况下,降低网络的参数量。
在 v1 版本中,主要的创新点:
1、使用 Depthwise Separable Convolution
2、使用两个超参数来均衡调节网络的计算复杂度和精度
一、Depthwise Separable Convolution
Depthwise Separable Convolution 将传统的标准卷积操作分成两个步骤——Depthwise Convolution 和 Pointwise Convolution,以达到减少参数的目的,如下图所示:
其具体内容如下:
对于一幅大小为
的输入特征图,
1、采用传统的标准卷积,其卷积核如下图(a),
其中卷积核的大小为
,
对应卷积核的空间大小(如常见的 3x3),
对应输入特征图的维度,
为卷积核的个数(也即输出特征图的维度)。假设输出特征图与输入特征图同空间尺寸(即输出特征图为
),则这样的一个卷积层其参数量为
(因为输出特征图总共有
个点,每个点对应的参数量为
)。
2、采用 Depthwise Separable Convolution ,所使用到的卷积核如下:
Depthwise Separable Convolution 分为 depthwise convolution 和 pointwise convolution 两个步骤。对于传进来的一幅特征图
,首先进行 depthwise convolution,与上面标准卷积不同的是,它对输入特征图的每个通道(channel)都分开进行处理(即处理
个
),所以它的卷积核大小为
,个数为
个(对应输入特征图的
个通道,输出特征图的通道数和输入特征图的通道数相同),如上面图(b)所示。这一步的参数量为
(因为输出特征图总共有
个点,每个点对应的参数量为
)。depthwise convolution 带来的后果就是在 channel 维度上的信息不能相互传递(因为卷积是分别在每个 channel 上进行的),因此后面需要接一个 pointwise convolution,来进行信息的交互。 pointwise convolution 本质上就是一个普通的卷积,只不过它的卷积核空间尺寸是 1x1(经常用来给特征图做升维或降维),如上面的图(c)所示。这一步的参数量为
(因为输出特征图总共有
个点,每个点对应的参数量为
)。
因此整个 Depthwise Separable Convolution 的参数量相比于标准卷积为:
在作者的实验中,使用 Depthwise Separable Convolution 的模型(MobileNet)准确率略低于使用标准卷积的模型(Conv MobileNet),但参数量却大大减少,如下图:
二、使用两个超参数来均衡调节网络的计算复杂度和精度
1、 Width Multiplier: Thinner Models(
):降低特征图的通道数目对于网络的每一层,将
,
, 乘到其输入特征图和输出特征图的通道数(channels)上,即输入为
,输出为
,Depthwise Separable Convolution 的参数变为:
2、 Resolution Multiplier: Reduced Representation(
):降低特征图的空间分辨率对于网络的每一层,将
,
,乘到输入特征图和输出特征图的宽高上,结合上面的 width multiplier ,输入变为
,Depthwise Separable Convolution 再次变为:
关于 Width Multiplier 和 Resolution Multiplier 对模型准确率和参数量的一些影响如下:
v2 :
MobileNet v2 中的基本结构块(Inverted residual block)与 v1 中的基本结构块(Depthwise Separable Convolution)的对比,如下图:
如上图所示,v2 中的 Inverted residual block 的改变如下:
1、多了一个 shortcut connections(快捷/跳跃连接),一般结构块都会加上这个,降低训练的难度。
2、在 Dwise 3x3(Depthwise Convolution)前新加了一个 Conv 1x1(Pointwise Convolution),用来升维(channels),具体示意图如下(b):
左边(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(绿色曲线)的效果好。