原文: Searching for MobileNetV3
论文链接:https://arxiv.org/abs/1905.02244
一、基本论述
MobileNet v3发表于2019年,该v3版本结合了v1的深度可分离卷积、v2的Inverted Residuals和Linear Bottleneck、SE模块,利用NAS(神经结构搜索)来搜索网络的配置和参数。
mobilenet-v3提供了两个版本,分别为mobilenet-v3 large 以及mobilenet-v3 small,分别适用于对资源不同要求的情况,论文中提到,mobilenet-v3 small在imagenet分类任务上,较mobilenet-v2,精度提高了大约3.2%,时间却减少了15%,mobilenet-v3 large在imagenet分类任务上,较mobilenet-v2,精度提高了大约4.6%,时间减少了5%,mobilenet-v3 large 与v2相比,在COCO上达到相同的精度,速度快了25%,同时在分割算法上也有一定的提高。
二、核心要点(创新点)
mobilenet系列当然是典型的第一种方法。在介绍mobilenet v3前,先来回顾一下mobilenet v1和v2的创新点:
MobileNet v1:
- 利用分组卷积降低网络的计算量,并且mobilenet将分组卷积应用到极致,即网络的分组数与网络的channel数量相等,使网络的计算量减到最低,但是这样channel之间的交互就没有了,所以作者又使用的point-wise conv,即使用1x1的卷积进行channel之间的融合。
- 直筒结构。
MobileNet v2:
- 引入了bottleneck结构。
- 将bottleneck结构变成了纺锤型,即resnet是先缩小为原来的1/4,再放大,他是放大到原来的6倍,再缩小。
- 去掉了Residual Block最后的ReLU。
MobileNet v3主要贡献是使用 AutoML 为给定的问题找到最佳的神经网络架构。
具体来说,MobileNetV3 利用了两种 AutoML 技术,即:
- MnasNet(一种自动移动神经体系结构搜索(MNAS)方法,https://ai.google/research/pubs/pub47217/)
- NetAdapt(适用于移动应用程序的平台感知型算法,https://arxiv.org/pdf/1804.03230.pdf)
MobileNetV3 首先使用 MnasNet 进行粗略结构的搜索,然后使用强化学习从一组离散的选择中选择最优配置。之后,MobileNetV3 再使用 NetAdapt 对体系结构进行微调,这体现了 NetAdapt 的补充功能,它能够以较小的降幅对未充分利用的**通道进行调整。
三、结构解析
1、引入SE结构
MobileNetV3 的另一个新颖想法是在核心架构中加入一种名为「Squeeze-and-Excitation」的神经网络(简称 SE-Net,也是 ImageNet 2017 图像分类冠军)。该神经网络的核心思想是通过显式地建模网络卷积特征通道之间的相互依赖关系,来提高网络所产生表示的质量。具体而言,就是通过学习来自动获取到每个特征通道的重要程度,然后依照这一结果去提升有用的特征并抑制对当前任务用处不大的特征。
为此,开发者们提出了一种允许网络进行特征重新校准的机制。通过该机制,网络可以学习使用全局信息来选择性地强调信息性特征,并抑制不太有用的特征。
而在 MobileNetV3 的例子中,该架构扩展了 MobileNetV2,将 SE-Net 作为搜索空间的一部分,最终得到了更稳定的架构。
在bottlenet结构中加入了SE结构,并且放在了depthwise filter之后,如下图:
因为SE结构会消耗一定的时间,所以作者在含有SE的结构中,将expansion layer的channel变为原来的1/4,这样作者发现,即提高了精度,同时还没有增加时间消耗。
2、修改尾部结构
在mobilenetv2中,在avg pooling之前,存在一个1x1的卷积层,目的是提高特征图的维度,更有利于结构的预测,但是这其实带来了一定的计算量了,所以这里作者修改了,将其放在avg pooling的后面,首先利用avg pooling将特征图大小由7x7降到了1x1,降到1x1后,然后再利用1x1提高维度,这样就减少了7x7=49倍的计算量。
为了进一步的降低计算量,作者直接去掉了前面纺锤型卷积的3x3以及1x1卷积,进一步减少了计算量,就变成了如下图第二行所示的结构,作者将其中的3x3以及1x1去掉后,精度并没有得到损失。这里降低了大约15ms的速度。
3、修改channel数量
修改头部卷积核channel数量,mobilenet v2中使用的是32 x 3 x 3,作者发现,其实32可以再降低一点,所以这里作者改成了16,在保证了精度的前提下,降低了3ms的速度。作者提供了两个版本的v3,分别是large和small,对应于高资源和低资源的情况。两者都是使用NAS进行搜索出来的。
4、非线性变换(新**函数)的改变
作者发现一种新出的**函数swish x(如下) 能有效改进网络精度,但是计算量太大了。
作者使用ReLU6(x+3)/6来近似替代sigmoid,进行了速度优化,具体如下:
备注:
利用ReLU有几点好处:
1.可以在任何软硬件平台进行计算
2.量化的时候,它消除了潜在的精度损失,使用h-swish替换swith,在量化模式下回提高大约15%的效率,另外,h-swish在深层网络中更加明显。
如下两张图展示的是使用h-swish对于时间以及精度的影响,可以发现,使用[email protected]可以提高大约0.2%的精度,但是时间延长了大约20%。
四、结果比较
从上面的试验结果,可以看出v3-large的准确率和计算速度都高于v2。所以,AutoML搭出来的网络,已经能代替大部分调参了。
五、总结
总结来看,mobilenet V3其实并没有惊艳的结构提出,最主要的还是应用了诸如SE、H-Swish等tricks,然后利用Google前面提出的NAS以及NetAdapt算法进行结构的自动搜索,提升了一定的精度,降低了一定的速度。
五、参考
https://baijiahao.baidu.com/s?id=1651138213595657757&wfr=spider&for=pc
https://blog.csdn.net/Chunfengyanyulove/article/details/91358187