轻量级神经网络----MobileNet,从v1到v3

轻量级神经网络----MobileNet,从v1到v3

MobileNetv1

论文地址:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

轻量级神经网络----MobileNet,从v1到v3
该论文提出了深度可分离卷积
轻量级神经网络----MobileNet,从v1到v3
深度可分离卷积就是将普通卷积拆分成为一个深度卷积和一个逐点卷积。

标准卷积操作:
轻量级神经网络----MobileNet,从v1到v3
输入一个12×12×3的一个输入特征图,经过5×5×3的卷积核卷积得到一个8×8×1的输出特征图。如果此时我们有256个特征图,我们将会得到一个8×8×256的输出特征图。

深度卷积:
轻量级神经网络----MobileNet,从v1到v3
我们将卷积核拆分成为但单通道形式,在不改变输入特征图像的深度的情况下,对每一通道进行卷积操作,这样就得到了和输入特征图通道数一致的输出特征图。如上图:输入12×12×3的特征图,经过5×5×1×3的深度卷积之后,得到了8×8×3的输出特征图。输入个输出的维度是不变的3。

逐点卷积:
逐点卷积就是1×1卷积。主要作用就是对特征图进行升维和降维,如下图:
轻量级神经网络----MobileNet,从v1到v3
在深度卷积的过程中,我们得到了8×8×3的输出特征图,我们用256个1×1×3的卷积核对输入特征图进行卷积操作,输出的特征图和标准的卷积操作一样都是8×8×256了。

我们首先来计算一下标准卷积的参数量与计算量(只考虑MAdd):
轻量级神经网络----MobileNet,从v1到v3
卷积核的尺寸是Dk×Dk×M,一共有N个,每一个都要进行Dw×Dh次运算
我们接下来计算深度可分离卷积的参数量和计算量:
轻量级神经网络----MobileNet,从v1到v3
最后得出标准卷积和深度可分离卷积之间的参数与计算量的比值
轻量级神经网络----MobileNet,从v1到v3
我们通常所使用的是3×3的卷积核,也就是会下降到原来的九分之一到八分之一。

V1卷积层
轻量级神经网络----MobileNet,从v1到v3
上图左边是标准卷积层,右边是V1的卷积层,虚线处是不相同点。V1的卷积层,首先使用3×3的深度卷积提取特征,接着是一个BN层,随后是一个ReLU层,在之后就会逐点卷积,最后就是BN和ReLU了。这也很符合深度可分离卷积,将左边的标准卷积拆分成右边的一个深度卷积和一个逐点卷积。
其中,ReLU使用的是ReLU6
轻量级神经网络----MobileNet,从v1到v3
上图左边是普通的ReLU,对于大于0的值不进行处理,右边是ReLU6,当输入的值大于6的时候,返回6,relu6“具有一个边界”。作者认为ReLU6作为非线性**函数,在低精度计算下具有更强的鲁棒性。

标准卷积和v1卷积的实验对比:
轻量级神经网络----MobileNet,从v1到v3
可以看出,虽然v1的精度略小于标准卷积,但是在参数量和计算量上只有标准卷积的九分之一到八分之一左右。

v1网络结构
轻量级神经网络----MobileNet,从v1到v3
MobileNet的网络结构如上图所示。首先是一个3x3的标准卷积,s2进行下采样。然后就是堆积深度可分离卷积,并且其中的部分深度卷积会利用s2进行下采样。然后采用平均池化层将feature变成1x1,根据预测类别大小加上全连接层,最后是一个softmax层。整个网络有28层,其中深度卷积层有13层。

参数明细
轻量级神经网络----MobileNet,从v1到v3
从图中可以看出,v1网络的计算量和参数绝大部分都集中在1*1的卷积层上

实验结果
轻量级神经网络----MobileNet,从v1到v3
从表中可以看出,v1精度比GoogleNet略高一些,但是计算量只有大约十分之一的样子,参数量也少了三分之一

MobileNet v2

论文地址:MobileNetV2: InvertedResidualsandLinearBottlenecks

轻量级神经网络----MobileNet,从v1到v3
回顾MobileNet v1
v1中提出了深度可分离卷积,可以大量减少卷积的计算量和参数量,从而提升网络的速度
轻量级神经网络----MobileNet,从v1到v3
但是!

有人在实际使用的时候, 发现深度卷积部分的卷积核比较容易训废掉:训完之后发现深度卷积训出来的卷积核有不少是空的,这到底是怎么回事呢?
轻量级神经网络----MobileNet,从v1到v3
从上图中可以发现,当n=2、3时,输出有很大一部分的信息丢失了,当n=15-30时,有很大部分的信息保留下来了。从而可以得出结论,对低维度做ReLU运算,很容易造成信息的丢失。而在高维度进行ReLU运算的话,信息的丢失则会很少。所以论文中将ReLU替换成线性**函数。

Linear bottleneck
轻量级神经网络----MobileNet,从v1到v3
文中将最后一个ReLU6换成Linear

v2与 Residual 的网络框架对比
轻量级神经网络----MobileNet,从v1到v3
可以发现,都采用了 1×1 -> 3 ×3 -> 1 × 1 的模式,以及都使用Shortcut结构。但是不同点呢:

ResNet 先降维 (0.25倍)、卷积、再升维。
MobileNetV2 则是 先升维 (6倍)、卷积、再降维。

v1和v2的block的对比
轻量级神经网络----MobileNet,从v1到v3
左边是v1的block,没有Shortcut并且带最后的ReLU6。

右边是v2的加入了1×1升维,引入Shortcut并且去掉了最后的ReLU,改为Linear。步长为1时,先进行1×1卷积升维,再进行深度卷积提取特征,再通过Linear的逐点卷积降维。将input与output相加,形成残差结构。步长为2时,因为input与output的尺寸不符,因此不添加shortcut结构,其余均一致。

v2的网络结构
轻量级神经网络----MobileNet,从v1到v3

实验结果
轻量级神经网络----MobileNet,从v1到v3
详细对比如下:
轻量级神经网络----MobileNet,从v1到v3

MobileNet v3

论文地址:Searching for MobileNetV3
轻量级神经网络----MobileNet,从v1到v3
MobileNet v3的改进
0.网络的架构基于NAS实现的MnasNet(效果比MobileNetV2好)
1.引入MobileNetV1的深度可分离卷积
2.引入MobileNetV2的具有线性瓶颈的倒残差结构
3.引入基于squeeze and excitation结构的轻量级注意力模型(SE)
4.使用了一种新的**函数h-swish(x)
5.网络结构搜索中,结合两种技术:资源受限的NAS(platform-aware NAS)与NetAdapt
6.修改了MobileNetV2网络端部最后阶段

**函数h-swish
轻量级神经网络----MobileNet,从v1到v3
轻量级神经网络----MobileNet,从v1到v3

V3的block
轻量级神经网络----MobileNet,从v1到v3
可以很明显的看到,v3的block比v2多加入了一个Squeeze-and-Excitation(SE)结构。这里特别介绍下SE结构,在2018年年中到现在的计算机视觉算法比赛中,各路大神使用的加入了SE-block的ResNet网络结构都会比原始的ResNet网络结果最终的准确率高个1%~3%之间。SE-block起到了很好的attention效果,准确率的提升也是非常明显的。SeNet的论文地址:https://arxiv.org/pdf/1709.01507.pdf

对v2进行修改
轻量级神经网络----MobileNet,从v1到v3
作者认为,当前模型是基于V2模型中的倒残差结构和相应的变体。使用1×1卷积来构建最后层,这样可以便于拓展到更高维的特征空间。这样做的好处是,在预测时,有更多更丰富的特征来满足预测,但是同时也引入了额外的计算成本与延时。所以,需要改进的地方就是要保留高维特征的前提下减小延时。首先,还是将1×1层放在到最终平均池之后。这样的话最后一组特征现在不是7x7,而是以1x1计算。

MobileNetV3的网络结构
MobileNetV3定义了两个模型: MobileNetV3-Large和MobileNetV3-Small。V3-Large是针对高资源情况下的使用,相应的,V3-small就是针对低资源情况下的使用。两者都是基于之前的简单讨论的NAS。

MobileNetV3-Large
轻量级神经网络----MobileNet,从v1到v3
MobileNetV3-Small
轻量级神经网络----MobileNet,从v1到v3
实验结果
Image Classification
轻量级神经网络----MobileNet,从v1到v3
Detection

轻量级神经网络----MobileNet,从v1到v3
参考链接:
https://zhuanlan.zhihu.com/p/70703846
https://blog.****.net/qq_37913573/article/details/90044592