【网络结构设计】2、MobileNet 系列 | 从 V1 到 V2 再到 V3

本文会简单介绍 MobileNet 系列的主要结构

一、MobileNetv1

在这里插入图片描述

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

出处:CVPR 2017 | 谷歌

贡献:

  • 提出了深度可分离卷积,将标准卷积用逐通道卷积+逐点卷积来代替
  • 能够在边端设备使用,在保证效果的通道提升速度

1.1 背景

更强的卷积神经网络一般情况下意味着更深和更宽的网络结构,但这样就会导致速度和效率的缺失,所以,MobileNet 的作者提出了一个搞笑的网络结构,致力于建立一个适用于移动端和嵌入式设备的网络结构。

在这里插入图片描述

1.2 方法

MobileNetV1 可以理解为把 VGG 中的标准卷积层换成深度可分离卷积

1.2.1 深度可分离卷积 Depthwise Separable Convolution

在这里插入图片描述

深度可分离卷积是 MobileNet 的一个非常重要的核心点

深度可分离卷积由两部分构成:

  • depthwise convolution:每个卷积核负责一个输入通道的卷积,图 2b
  • pointwise convolution:1x1xC 的形式,对 depthwise 得到的卷积特征进行点对点的特征聚合,图 2c

普通卷积是计算量:

  • 假设输入特征图 F F F D F × D F × M D_F \times D_F \times M DF×DF×M,输出特征图 G G G D G × D G × N D_G \times D_G \times N DG×DG×N
  • 普通卷积核 K K K 的参数量为 D K × D K × × M × N D_K \times D_K \times \times M \times N DK×DK××M×N
  • 普通卷积核的计算量为 D K ⋅ D K ⋅ M ⋅ N ⋅ D F ⋅ D F D_K \cdot D_K \cdot M \cdot N \cdot D_F \cdot D_F DKDKMNDFDF

深度可分离卷积的计算量:

  • 输入特征图 F F F D F × D F × M D_F \times D_F \times M DF×DF×M,输出特征图 G G G D G × D G × N D_G \times D_G \times N DG×DG×N
  • 首先对每个通道分别使用一个卷积核进行特征提取,计算量为 D K ⋅ D K ⋅ M ⋅ D F ⋅ D F D_K \cdot D_K \cdot M \cdot D_F \cdot D_F DKDKMDFDF
  • 然后对得到的特征图使用 1x1 的卷积核进行特征融合,计算量为 M ⋅ N ⋅ D F ⋅ D F M \cdot N \cdot D_F \cdot D_F MNDFDF
  • 总的计算量为: D K ⋅ D K ⋅ M ⋅ D F ⋅ D F + M ⋅ N ⋅ D F ⋅ D F D_K \cdot D_K \cdot M \cdot D_F \cdot D_F + M \cdot N \cdot D_F \cdot D_F DKDKMDFDF+MNDFDF

故使用深度可分离卷积的计算量和普通卷积的计算量之比如下:

D K ⋅ D K ⋅ M ⋅ D F ⋅ D F + M ⋅ N ⋅ D F ⋅ D F D K ⋅ D K ⋅ M ⋅ N ⋅ D F ⋅ D F = 1 N + 1 D K 2 \frac{D_K \cdot D_K \cdot M \cdot D_F \cdot D_F + M \cdot N \cdot D_F \cdot D_F}{D_K \cdot D_K \cdot M \cdot N \cdot D_F \cdot D_F} = \frac{1}{N} + \frac{1}{D_K^2} DKDKMNDFDFDKDKMDFDF+MNDFDF=N1+DK21

1.2.2 网络结构

在这里插入图片描述

MobileNetV1 的结构如表 1 所示,下采样是使用步长为 2 的卷积实现的,共 28 层

在这里插入图片描述

1.3 效果

在这里插入图片描述

二、MobileNetv2

在这里插入图片描述

论文:MobileNetV2: Inverted Residuals and Linear Bottlenecks

出处:CVPR 2018 | 谷歌

贡献:

  • 提出了倒残差结构:先 1x1 升维,使用 3x3 提取特征,最后再 1x1 降维,和残差结构的先降维后升维的结构是反的
  • 提出了线性瓶颈

2.1 背景

MobileNetV2 是在 V1 基础上的提升,在移动设备上不增加额外参数的情况下,效果带来了提升

2.2 方法

2.2.1 深度可分离卷积

V2 依然使用的深度可分离卷积,深度可分离卷积相比普通卷积大约能够降低 k 2 k^2 k2 的计算量,V2 的卷积核为 3x3,所以大约比普通卷积计算量少 8~9 倍,准确率仅仅跌了很少。

在这里插入图片描述

2.2.2 线性瓶颈

线性瓶颈结构,就是末层卷积使用线性激活的瓶颈结构(将 ReLU 函数替换为线性函数),因为 ReLU 激活函数对低维信息会造成很大损失

在这里插入图片描述

在这里插入图片描述

2.2.3 模型框架

在这里插入图片描述

2.3 效果

在这里插入图片描述

在这里插入图片描述

三、MobileNetv3

在这里插入图片描述

论文:Searching for MobileNetV3

出处:ICCV 2019 | 谷歌

贡献:

  • 使用 NAS 的方法搜寻更适合移动 CPU 的结构
  • 提出了 MobileNetV3-Large 和 MobileNetV3-Small,并引入了 h-swish 和 SE 等模块进行效果优化

3.1 背景

MobileNetV3 提出的目标就是为了实现移动设备上的模型的准确率和耗时的平衡。

  • MobileNetV1 引入了深度可分离卷积,来代替传统卷积

  • MobileNetV2 引入了线性瓶颈和反残差结构,来提升速度

  • MobileNetV3 为了 NAS 来搜寻更合适的网络,并且引入了 Swish 非线性方法的优化版本 h-swish 和 SE 模块,建立更高效的网络

在这里插入图片描述

3.2 方法

3.2.1 NAS

这里使用 NAS 的目的是搜寻到更适合移动设备平台的 block 结构

3.2.2 网络优化

1、重新设计计算复杂的层

NAS 得到搜寻的结构后发现,前面几层和后面几层计算复杂度很高,做了一些修整:

  • 精简 last stage:V2 的倒残差网络,在最后一层使用的 1x1 卷积来升维,会造成很大的延时,为了降低延时和保留高维特征,移除掉了一些层,不需要使用瓶颈层来降低计算量了,如图 5 所示,降低了 7ms 延时,约占 11% 的允许时间,几乎没有精度的损失
  • 降低卷积核数量并且使用不同的激活方式来降低冗余:还有一个很大的耗时点在于初始卷积,初始的图很大,使用卷积核数量是 32 个,所以减少了第一个卷积层的卷积核个数(32—>16),并且在该层使用 hard swish 非线性激活,能在减少卷积核的个数的同时保持准确率(和使用 32 个卷积核并在该层使用 ReLU 是的效果比),计算量反而会降低,检测速度更快

在这里插入图片描述

2、非线性激活的改进

swish 的形式如下:

在这里插入图片描述

使用 swish 的有个问题,sigmoid 函数计算量很大,所以 V3 从以下两个方面解决:

  • 使用 piece-wise linear hard analog ( R e L U 6 ( x + 3 ) 6 \frac{ReLU6(x+3)}{6} 6ReLU6(x+3))来代替 sigmoid,故 hard-swish 形式如下,对比效果如图 6:
    在这里插入图片描述

在这里插入图片描述

3、引入 SE 模块

在 V3 中使用 SE 模块,因为SE结构会消耗一定的时间,所以作者在含有 SE 的结构中,将 expansion layer 的 channel 变为原来的 1/4,这样作者发现,即提高了精度,同时还没有增加时间消耗。并且SE结构放在了depthwise 之后。实质为引入了一个 channel 级别的注意力机制。

4、不同大小的模型设计

V3 设计了两种体量的模型,Large 和 Small,都是经过 NAS 和优化后的。

在这里插入图片描述

在这里插入图片描述

3.3 效果

检测:

在这里插入图片描述

分割:

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/jiaoyangwm/article/details/127265563