概要
当MobileNetV1于2017年问世时,它开启了CV研究的新领域,即提出可以在嵌入式系统中运行的模型。这使得神经网络模型向着“轻量“这一概念开始蓬勃发展,ShuffleNetV1和ShuffleNetV2、MNasNet、CondenseNet和EffNet等。MobileNet家族于2019年迎来了第三位成员——MobileNetV3,相比以往的轻量模型,它拥有更广义的轻量模型设计理念和更强大的性能。
本文的结构如下:
- Block设计
- NAS
- NetAdapt
- 模型的其他改进:移动层,添加 h-swish 激活函数
- 整体结构
- 实验与结果
与以前的版本相比,第三个版本进行了很多改进。我认为这对于击败MobileNetV2是必要的。
Block设计
MobileNetV1 引入了深度可分离卷积以减少参数量。V2在Block中增加了一个扩展层,用三个层的Block得到一个升维-滤波-降维的系统,如图1所示。这个系统,被称为反向残差Block,进一步提高了性能。V3 在基于V2的Block中添加了压缩层和激励层,稍后用于进一步处理(NAS 和 NetAdapt)。与V2的对比见图2和图3
如上图所述,V3使用了h-swish非线性激活函数,这将在后面讨论。添加压缩层和激励层,通过对输入特征图的通道进行权重再分配,有助于模型训练过程中,在很少的计算开销下,更加关注不同通道间的信息而不会仅仅像普通卷积一样只关注一个通道。压缩层和激励层通常单独添加在ResNet/Inception的Block中。但是,在此模型中,它与ResNet层并行处理。
NAS
神经架构搜索 (NAS)用外行的话说就是试图使模型(通常是RNN,也称为控制器)输出一个模块线程的过程,这些模块可以放在一起形成一个模型,该模型可以通过在所有可能的组合中搜索,尽可能提供最佳精度。基本算法可以用这个图4来概括。
这类似于强化学习的标准过程。有一个奖励函数,根据该函数更新控制器。这是为了追求一种可以获得最大奖励的状态。在NAS术语中,模型从当前状态移动到奖励增加的状态。
通常,在大多数的论文中,NAS被用来获得一个有效的子模块结构,该子模块可以堆叠在一起以得到整个模型。但是,V3还使用了NetAdapt算法(稍后讨论),它将用于确定每层的滤波器数量,所以作者让NAS用于优化每个Block的基础配置。
此外,由于这是一个轻量型模型,NAS也相应地进行了调整。作者使用一个新的奖励函数:ACC(m)×[LAT(m)/TAR]^w,它考虑了模型的准确性和延迟(总推理时间)。ACC是准确度,LAT是延迟,TAR是目标延迟,m是搜索结果的模型。这里w是一个常数,对于较小的模型(我们正在搜索的),w为-0.15(而正常大小的模型的w=-0.07)。
通过所有这些更改,NAS搜索出了一种Block结构,然后我们可以使用NetAdapt在各层上进一步细化。
NetAdapt
原始NetAdapt算法对每个滤波器的卷积核都起作用,如下所示:
在这里,它试图为每个滤波器优化卷积核的数量,并以精度最高的结果作为最终输出模型。而精度最高的模型,是通过作用在K个卷积核上取得结果最佳的模型。
在MobileNetV3中,该算法的一种简单版本如下:
- 接收NAS的结果
- 生成一组建议,与上一步迭代中的模型相比,每个建议的延迟都应减少
- 通过之前迭代的模型中的权重和随机初始化滤波器权重来设置这些新建议的权重
- 微调最终选择的方案,直到达到目标延迟
最终选择是基于度量标准进行的。 作者选择(Acc 的变化/延迟的变化)。 这样做能够让准确率和延迟因素都保持在组合中,并优先最大化准确率-延迟斜率的模型。
模型的其他改进
移动层
这主要在前几层和最后几层进行。 以下是论文所做的调整:
在最后一个块中,取自 MobileNetV2 的反向残差单元的1x1卷积层移动到池化层后。 这意味着1x1卷积层是计算在空域为1的特征图而不是7,使其在计算和延迟方面更加高效。
我们知道卷积层需要大量的计算。但是现在它被移到池化层后面,就不需要前一个块的卷积层进行投影。因此,我们可以从前一个瓶颈层(块)中删除该卷积层。这两种变化都在下图进行说明。
还有一个变化是在初始的3x3层中使用16个滤波器,而不是32个。这些更改加起来可以节省9毫秒的推理时间。
添加h-swish非线性激活函数
swish 函数定义为:
实验证明它可以提高准确性。然而,由于 sigmoid 函数的计算成本很高,而且为了尽可能降低模型的计算成本,作者因此使用所谓的hard swish或h-swish对其进行了修改:
显然,就曲线而言,h-swish 与 swish 没有太大区别,尽管它的计算成本较低。
整体结构
对于整体结构,论文定义了两个术语:MobileNetV3-Large 和 MobileNetv3-Small。 它们的结构如下(左侧为 MobileNetV3-Large,右侧为 MobileNetV3-Small):
在前几层和最后几层中可以看到上一节中描述的变化,尤其是将最后的1*1卷积层放在池化层之后。
实验与结果
图像分类
目标检测
语义分割
本文暂时没有评论,来添加一个吧(●'◡'●)