文章目录
本文会简单介绍 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 DK⋅DK⋅M⋅N⋅DF⋅DF
深度可分离卷积的计算量:
- 输入特征图 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 DK⋅DK⋅M⋅DF⋅DF
- 然后对得到的特征图使用 1x1 的卷积核进行特征融合,计算量为 M ⋅ N ⋅ D F ⋅ D F M \cdot N \cdot D_F \cdot D_F M⋅N⋅DF⋅DF
- 总的计算量为: 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 DK⋅DK⋅M⋅DF⋅DF+M⋅N⋅DF⋅DF
故使用深度可分离卷积的计算量和普通卷积的计算量之比如下:
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} DK⋅DK⋅M⋅N⋅DF⋅DFDK⋅DK⋅M⋅DF⋅DF+M⋅N⋅DF⋅DF=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
出处: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 效果
检测:
分割: