【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读

文章目录

    • 前言
    • 1、MobileNetV1
      • (1) 深度可分离卷积是什么?
      • (2) 为什么要用深度可分离卷积?
        • a.标准卷积的计算量
        • b.深度卷积的计算量
        • c.举例
      • (3) 网络结构
    • 2、MobileNetV2
      • (1) 改进1——ReLu(linear bottleneck)
      • (2) 改进2——添加了倒残差结构(Inverted residuals)
      • (3) 对比一下V1和V2:
        • a.结构
        • b.效率
      • (4) 网络结构

前言

  • MobileNets是谷歌公司在2017年发布的一种轻量化的、可以在手机等移动终端运作的神经网络结构。
  • V1版本的主要目的,就是给传统卷积网络瘦身,仅此而已。
  • V2版本是改进V1的一些缺点。

1、MobileNetV1

MobileNetV1于2017年由谷歌提出,是一个轻量级的卷积网络,用于在移动设备上面跑。其实介绍MobileNetV1只有一句话,MobileNetV1就是把VGG(什么是VGG见我这篇博客)中的标准卷积换成了深度可分离卷积。

  • 首先利用3×3的深度可分离卷积提取特征,然后利用1×1的卷积来扩张通道。用这样的block堆叠起来的MobileNetV1既能较少不小的参数量、计算量,提高网络运算速度
  • MobileNet v1它的整个网络大部分是基于深度可分离卷积的,只有网络前面几层使用普通卷积,整个网络参数比GoogLeNet小2.5倍,但是准确率比GoogLeNet高
  • 如果卷积核大小为3*3的话,深度可分离卷积的参数通常是标准卷积的8–9分之一,在计算量和参数数量明显下降之后,新的卷积网络可以应用在性能有瓶颈的移动端平台。

那具体的深度可分离卷积是怎么回事呢?

(1) 深度可分离卷积是什么?

首先说一下什么是普通卷积:

  • 输入一个12×12×3的一个输入特征图,经过5×5×3的卷积核卷积得到一个8×8×1的输出特征图。

  • 如果此时我们想要256个特征图(相当于卷积核里面的参数变换256次,从而得到256次不同的特征输出),我们将会得到一个8×8×256的输出特征图。

  • 这就是普通的卷积。
    【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读_第1张图片
    深度可分离卷积:

  • 与标准卷积网络不一样的是,卷积核拆分成为但单通道形式,在不改变输入特征图像的深度的情况下,对每一通道进行卷积操作,这样就得到了和输入特征图通道数一致的输出特征图。

  • 如图:输入12×12×3的特征图,经过5×5×1×3的深度卷积之后,得到了8×8×3的输出特征图。输入个输出的维度是不变的3。

  • 这样就会有一个问题,通道数太少,特征图的维度太少,能获取到足够的有效信息吗?
    【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读_第2张图片

深度卷积的结构:
【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读_第3张图片

  • 上图左边是标准卷积层,右边是V1的卷积层,虚线处是不相同点。V1的卷积层,首先使用3×3的深度卷积提取特征,接着是一个BN层,随后是一个ReLU层,在之后就会逐点卷积,最后就是BN和ReLU了。这也很符合深度可分离卷积,将左边的标准卷积拆分成右边的一个深度卷积和一个逐点卷积。

另外,Relu6是:
【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读_第4张图片

(2) 为什么要用深度可分离卷积?

  • 因为能用更少的参数、运算,但能达到差不多的结果。

我们来计算一下标准卷积的计算量:

a.标准卷积的计算量

  • 即卷积核的参数数(Dk * Dk ∗ * 原图像通道数M ∗ * 你想要多少张特征图N ∗ * 特征图的参数(Dw * DH),即为下图。

【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读_第5张图片

b.深度卷积的计算量

深度可分离卷积的参数量由两部分组成:

  1. 深度卷积;
  2. 逐点卷积。
    【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读_第6张图片

其中:

  • 深度卷积的卷积核尺寸Dk×Dk×M;
  • 逐点卷积的卷积核尺寸为1×1×M,一共有N个,所以深度可分离卷积的参数量是:
    在这里插入图片描述

二者对比来看二者的计算量,再做一个除法可得到箭头所指:
【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读_第7张图片
也就是说参数量会下降为这个值,而通常我们使用3*3的卷积核,所以也就是所,深度卷积能够使原来的计算量减小为1/9 。
在这里插入图片描述

c.举例

若有224×224×3的图像,卷积核为3×3×128,112×112×64的特征图

  • 标准卷积的运算量是:3×3×128×64×112×112 = 924844032
  • 深度可分离卷积的运算量是:3×3×64×112×112+128×64×112×112 = 109985792

这一层,MobileNetV1所采用的深度可分离卷积计算量与标准卷积计算量的比值为:109985792 /924844032 = 0.1189 。与我们所计算的九分之一一致。

(3) 网络结构

【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读_第8张图片

  • 首先是一个3x3的标准卷积,s2进行下采样(池化?)。
  • 然后就是深度可分离卷积(DW),并且其中的部分深度卷积会利用s2进行下采样。
  • 然后采用平均池化层将feature变成1x1,根据预测类别大小加上全连接层。
  • 最后是一个softmax层。整个网络有28层,其中深度卷积层有13层。

V1论文中还有一部分对V1网络再进行调整,在此就不赘述了。

2、MobileNetV2

【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读_第9张图片

V2是对V1存在的一些问题进行了修改的版本,相比V1版本,有两个主要改进:

  • 改进1——删除了网络输出前的ReLu(linear bottleneck)
  • 改进2——添加了倒残差结构(Inverted residuals)

(1) 改进1——ReLu(linear bottleneck)

虽然V1版本的模型参数少、轻量,但是!在实际使用的时候,发现深度卷积训出来的卷积核有不少是空的,如下图所示:【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读_第10张图片

作者认为问题出在网络输出前的Relu上:

  • 对于低纬度的特征,分布到ReLU的激活带上的概率小,因此经过后信息丢失严重,甚至可能完全丢失。而高纬度的特征,分布到ReLU的激活带上的概率大,虽然可能也会有信息的部分丢失,但是无伤大雅,大部分的信息仍然得以保留。
  • 又由于网络在输出前必定需要降维(两头小,中间大才是网络嘛),如果此时对低维度输出做ReLU运算,很容易造成信息的丢失。
  • 针对这个问题,将ReLU替换成线性激活函数。当然,不能把所有的激活层都换成线性,所以作者在论文中把网络最后的那个ReLU6换成线性输出。作者将这个部分称之为linear bottleneck——就是论文名中的那个linear bottleneck

(2) 改进2——添加了倒残差结构(Inverted residuals)

改进2也就是论文中的Inverted residuals的来源,Inverted residuals这个可以翻译成“倒残差模块”。我们来对比一下残差模块和倒残差模块的区别。

  • 残差模块:输入首先经过1 * 1的卷积进行压缩,然后使用3 * 3的卷积进行特征提取,最后在用1 * 1的卷积把通道数变换回去。整个过程是“压缩-卷积-扩张”。这样做的目的是减少3 * 3模块的计算量,提高残差模块的计算效率。
  • 倒残差模块:输入首先经过1 * 1的卷积进行通道扩张(也就是升维),然后使用3 * 3的深度卷积,最后使用1 * 1的逐点卷积将通道数压缩回去(因为要输出网络结果了嘛,最终的输出肯定是低维的)。整个过程是“扩张-卷积-压缩”。

为什么要改进呢?因为深度卷积不能改变通道数,因此特征提取受限于输入的通道数,所以将通道数先提升上去。因为卷积就是卷特征嘛,高维度就是多特征,低纬度少特征,表达效果就差。那应该怎么具体的做呢?

  • 逐点卷积,即1×1卷积,可以用来升维和降维,那就可以在深度卷积之前使用PW卷积进行升维(升维倍数为t=6),来获取更多的通道数。
  • 也就是说,不管输入通道数是多少,经过第一个逐点卷积升维之后,深度卷积都是在相对的更高6倍维度上进行工作。
    【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读_第11张图片

(3) 对比一下V1和V2:

a.结构

V2的结构:

  • 先使用逐点卷积进行升维,之后使用深度卷积,最后再降维输出。
    在这里插入图片描述

两个版本的对比:

【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读_第12张图片

左边是v1,没有Shortcut并且带最后的ReLU6。

右边是v2的加入了1×1升维,引入Shortcut并且去掉了最后的ReLU,改为Linear,其中:

  • 步长(就是卷积的步长,和池化的作用是相通的,都是为了防止过拟合)为1时,先进行1×1卷积升维,再进行深度卷积提取特征,再通过Linear的逐点卷积降维。将input与output相加,形成残差结构。
  • 步长为2时,因为input与output的尺寸不符,因此不添加shortcut结构,其余均一致。

b.效率

【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读_第13张图片
可以看到,虽然V2的层数比V1的要多很多,但是FLOPs,参数以及CPU耗时都是比V1要好的。

(4) 网络结构

【AI】轻量级神经网络——MobileNetV1 到 MobileNetV2 的论文解读_第14张图片

你可能感兴趣的:(深度学习,MobileNet,深度可分离卷积,卷积)