面试宝典:从MobileNetV1到V3,一文全面梳理移动端深度学习模型

面试宝典:MobileNetV1-V3

在这里插入图片描述

MobileNet的设计及实现

MobileNet是一种适用于移动设备的通用计算机视觉神经网络,可用于分类、目标检测和语义分割等多种任务。为了在移动设备上实现高效的计算和减小模型大小,我们可以采用以下小型化手段:

  1. 卷积核分解:使用 1×N 和 N×1 的卷积核代替传统的 N×N 卷积核。
  2. 使用 Pottleneck 结构,例如 SqueezeNet
  3. 低精度浮点数 保存,例如 Deep Compression
  4. 冗余卷积核剪枝及 哈弗曼编码

在对 Depthwise Separable Convolutions(DSC)进行深入研究后,我们设计出了 MobileNet。DSC 的本质是将卷积运算中的信息冗余更少,稀疏化表示。在这个基础上,我们提出了两种高效模型设计的选择,即 宽度因子(Width Multiplier)和 分辨率因子(Resolution Multiplier)。通过权衡模型大小、延迟时间和精度等因素,我们构建了规模更小、速度更快的 MobileNet。此外,Google 团队通过多样性的实验验证了 MobileNet 作为高效基础网络的有效性。

DSC 包含两个组件: **Depthwise Convolution(DWC)**和 Pointwise Convolution(PWC)。DWC 用于输入通道的过滤,不增加通道数量;PWC 将不同通道的输出连接在一起,从而增加通道数。通过这种分解方式,可以明显减少计算量。

目录

  1. 解决的问题
  2. 解决方法
  3. 效果
  4. 存在的问题

1. 解决的问题

1.1 要解决什么问题?

在现实场景下,诸如移动设备、嵌入式设备、自动驾驶等等,计算能力会受到限制,所以目标就是构建一个小且快速(small and low latency)的模型。

1.2 用了什么办法解决?

  1. 提出了MobileNet架构,使用深度可分离卷积(depthwise separable convolutions)替代传统卷积。
  2. 在MobileNet网络中还引入了两个收缩超参数(shrinking hyperparameters):宽度乘子(width multiplier)和分辨率乘子(resolution multiplier)。

2. 解决方法

为了在移动设备上实现高效的计算和减小模型大小,我们可以采用卷积核分解、Pottleneck结构、低精度浮点数保存、冗余卷积核剪枝及哈弗曼编码等小型化手段。我们还设计出了MobileNet,使用深度可分离卷积(DSC)并提出了两种高效模型设计的选择:宽度因子和分辨率因子,可以通过权衡模型大小、延迟时间和精度等因素来构建规模更小、速度更快的MobileNet。

3. 效果

在一系列视觉任务如ImageNets分类、细粒度分类、目标检测等上,显著降低模型大小的同时也取得了不错的效果。

4. 存在的问题

MobileNet v1的结构与Depthwise Convolution存在一些问题, 具体有:

  1. MobileNet v1的结构过于简单,类似于VGG的直筒结构,导致这个网络的性价比不高。
  2. Depthwise Convolution的计算量比较低,但是存在潜在的问题。具体来说,训练后部分depthwise kernel的权值变成了0,导致输出的神经元输出很容易变为0,从而导致网络学习能力的下降。
    MobileNet v2则采用了一些新的优化方法,例如Inverted residual和Linear Bottleneck以缓解特征退化,同时采用效率优先的网络结构设计,以提高计算效率。
    好的,请见下方生成的Markdown格式文本:

MobileNet v1的结构与Depthwise Convolution的问题

MobileNet v1的面临的问题

MobileNet v1的结构过于简单,类似于VGG的直筒结构,导致这个网络的性价比不高。后续一系列的ResNet、DenseNet等结构已经证明,该使用图像特征的复用以及添加shortcuts等方法,可以大幅提升网络的性能。

Depthwise Convolution存在的潜在问题

Depthwise Convolution的计算量比较低,但是存在潜在的问题。具体来说,训练后部分depthwise kernel的权值变成了0,导致输出的神经元输出很容易变为0,从而导致网络学习能力的下降。在MobileNet v2中,Google通过不同的Output/dim比值,对特征的分部空间进行可视化,以便直观解释退化问题。

MobileNet1.0的遗留问题

结构问题

MobileNet1.0的结构类似于VGG一样的直筒结构,使用concat/eltwise+等操作进行融合,性价比较低。后续的结构,如ResNet、DenseNet等结构已经证明,通过复用图像特征,可以极大地提高网络的性价比。

Depthwise Convolution的潜在问题

Depthwise Convolution虽然大大降低了计算量,但我们发现Depthwise部分的kernel比较容易训废掉,这是因为depthwise每个kernel dim相对于vanilla conv要小得多,过小的kernel dim加上ReLU的激活影响下,使得神经元输出很容易变为0,所以就训废了。在MobileNetV2中Google对此做出了解释,并采用不同的Output/dim比值来缓解特征/神经元退化问题。

Inverted residual以及Linear Bottlenecks的影响

MobileNetV2采用了Inverted residual和Linear Bottlenecks以缓解特征退化。Linear Bottleneck通过去掉Eltwise+的特征去掉ReLU,减少ReLU对特征的破坏。Inverted residual则有两个好处:1.复用特征,2.旁支block内先通过1x1升维,再接depthwise conv和ReLU,通过增加ReLU的InputDim,来缓解特征的退化情况。

效率优先的网络结构设计

MobileNetV2采用了效率优先的网络结构设计,利用时空局部性,减少对DDR的访问,从而提高计算效率。

缩放因子

在这里插入图片描述

1.2 网络结构

在这里插入图片描述

MobileNetV2

2.1 Inverted Residual Blocks

MobileNetV2的改进

MobileNetV2引入了两个主要的改进:

  • Linear Bottleneck
  • Inverted Residual Blocks

MobileNetV2的结构基于Inverted Residual Blocks。它本质上是一个残差网络设计,传统Residual Block将通道数从少到多进行连接,而此处设计的Inverted Residual Block则将通道数从多到少进行连接,类似于沙漏和梭子形态的区别。此外,保留了Depthwise Separable Convolutions,进一步优化了模型的结构,提高了计算效率。

2.2 Linear Bottlenecks

  • 感兴趣区域在ReLU之后保持非零,近似认为是线性变换
  • ReLU能够保持输入信息的完整性,但仅限于输入特征位于输入空间的低维子空间中。
  • 对于低维度空间处理,论文中把ReLU近似为线性转换。

2.3 对比

2.3.1 对比 MobileNet V1 与 V2 的微结构

在这里插入图片描述
相同点:

都采用Depth-wise(DW)卷积搭配Point-wise(PW)卷积的方式来提特征。这两个操作合起来也被称为Depth-wise Separable Convolution,之前在Xception中被广泛使用。这么做的好处是理论上可以成倍的减少卷积层的时间复杂度和空间复杂度。

不同点:Linear Bottleneck

V2在DW卷积之前新加了一个PW卷积。这么做的原因,是因为DW卷积由于本身的计算特性决定
它自己没有改变通道数的能力,上一层给它多少通道,它就只能输出多少通道。所以如果上一层给的通道数本身很少的话,DW也只能很委屈的在低维空间提特征,因此效果不够好。现在V2为了改善这个问题,给每个DW之前都配备了一个PW,专门用来升维,定义升维系数t=6,这样不管输入通道数是多是少,经过第一个PW升维之后,DW都是在相对的更高维进行着辛勤工作的。

V2去掉了第二个PW的激活函数。论文作者祢其为Linear Bottleneck。这么做的原因,是因为作者认为激活函数在高维空间能够有效的增加非线性,而在低维空间时则会破坏特征,不如线性的效果好。由于第二个PW的主要功能就是降维,因此按照上面的理论,降维之后就不宜再使用RLU6了。

2.3.2 对比 ResNet 与 MobileNet V2 的微结构

在这里插入图片描述
相同点:

MobileNet V2借鉴ResNet,都采用了1x1>3x3>1x1的模式。
MobileNet V2借鉴ResNet,同样使用Shortcut将输出与输入相加(未在上式画出)

不同点:Inverted Residual Block

ResNet使用标准卷积提特征,MobileNet始终使用DW卷积提特征。
ResNet:先降维(0.25倍)、卷积、再升维,而MobileNet V2则是先升维(6倍)、卷积、再降维。直观的形象上来看,ResNet的微结构是沙漏形,而MobileNet V2则是纺锤形,刚好相反。因比论文作者将MobileNet V2的结构称为Inverted Residual Block。这么做也是因为使用DW卷积而作的适配,希望特征提取能够在高维进行。
在这里插入图片描述

2.4 总结

MobileNetV2最难理解的其实是Linear Bottlenecks,论文中用很多公式表达这个思想,但是实现上非常简单,就是在MobileNetV2微结构中第二个PW后无ReLU6。对于低维空间而言,进行线性映射会保存特征,而非线性映射会破坏特征。

MobileNetV3

3.1 高效的网络构建模块

MobileNetV3是神经架构搜索得到的模型,其内部使用的模块继承自:

  1. MobileNetV1模型引入的深度可分离卷积(depthwise separable convolutions);
  2. MobileNetV2模型引入的具有线性瓶颈的倒残差结构(the inverted residual with linear bottleneck);
  3. MnasNet模型引入的基于squeeze and excitation?结构的轻量级注意力模型。

这些被证明行之有效的用于移动端网络设计的模块是搭建MobileNetV3的积木。

3.2 互补搜索

在网络结构搜索中,作者结合了两种技术:资源受限的NAS (platform-aware NAS)和NetAdapt。前者用于在计算和参数量受限的前提下搜索网络的各个模块,因此称之为模块级的搜索 (Block-wise Search),后者用于对各个模块确定之后进行网络层的微调。前者相当于整体结构搜索,后者相当于局部搜索,两者互为补充。

3.3 网络改进

在这里插入图片描述

3.4 MobileNetV3 网络结构!

在这里插入图片描述

总结(神经架构搜索火了)

MobileNetV3-Large在ImageNet分类上的准确度与MobileNetV2相比提高了3.2%,同时延迟降低了15%。MobileNetV3-Large用于目标检测,在COCO数据集上的检测精度与MobileNetV2大致相同,但速度提高了25%。在Cityscapes语义分割任务中,新设计的模型MobileNetV3-Large LR-ASPP与MobileNetV2-RASPP分割精度相近,但速度快了30%。

猜你喜欢

转载自blog.csdn.net/weixin_47453139/article/details/130324048