MobileNetV3论文讲解

    在现代深度学习算法研究中,通用的骨干网+特定任务网络head成为一种标准的设计模式。比如VGG + 检测Head,或者inception + 分割Head。在移动端部署深度卷积网络,无论什么视觉任务,选择高精度的计算量少和参数少的骨干网是必经之路。这其中谷歌家去年发布的 MobileNetV2是首选。在MobileNetV2论文发布时隔一年4个月后,MobileNetV3 来了!论文名称《Searching for MobileNetV3》,详细介绍了MobileNetV3的设计思想和网络结构。

            MobileNetV3论文讲解_第1张图片                

论文链接:https://arxiv.org/pdf/1905.02244.pdf

感谢github上大佬们开源,开源代码整理如下:

  1. PyTorch实现1:https://github.com/xiaolai-sqlai/mobilenetv3
  2. PyTorch实现2:https://github.com/kuan-wang/pytorch-mobilenet-v3
  3. PyTorch实现3:https://github.com/leaderj1001/MobileNetV3-Pytorch
  4. Caffe实现:https://github.com/jixing0415/caffe-mobilenet-v3
  5. TensorFLow keras实现:https://github.com/Bisonai/mobilenetv3-tensorflow
  6. TensorFLow tf.layers实现:https://github.com/frotms/MobilenetV3-Tensorflow

 
轻量化网络

        从SqueezeNet开始模型的参数量就不断下降,为了进一步减少模型的实际操作数(MAdds),MobileNetV1利用了深度可分离卷积提高了计算效率,而MobileNetV2则加入了线性bottlenecks和反转残差模块构成了高效的基本模块。随后的ShuffleNet充分利用了组卷积和通道shuffle进一步提高模型效率。CondenseNet则学习保留有效的dense连接在保持精度的同时降低,ShiftNet则利用shift操作和逐点卷积代替了昂贵的空间卷积。
MobileNetV3

        时隔一年,谷歌在arXiv上公布了MobileNetV3论文,详细介绍了MobileNetV3的设计思想和网络结构。下面一起来膜拜一下大佬们的思想!

    整体来说MobileNetV3有两大创新点

    (1)互补搜索技术组合:由资源受限的NAS执行模块级搜索,NetAdapt执行局部搜索。

    (2)网络结构改进:将最后一步的平均池化层前移并移除最后一个卷积层,引入h-swish激活函数。

1、MobileNetV3 block

                                MobileNetV3论文讲解_第2张图片

                                     MobileNetV3论文讲解_第3张图片

  上面两张图是MobileNetV2和MobileNetV3的网络块结构。可以看出,MobileNetV3是综合了以下三种模型的思想:MobileNetV1的深度可分离卷积(depthwise separable convolutions)、MobileNetV2的具有线性瓶颈的逆残差结构(the inverted residual with linear bottleneck)和MnasNet的基于squeeze and excitation结构的轻量级注意力模型。综合了以上三种结构的优点设计出了高效的MobileNetV3模块。

2、 互补搜索技术组合

(1)资源受限的NAS(platform-aware NAS):计算和参数量受限的前提下搜索网络的各个模块,所以称之为模块级的搜索(Block-wise Search)。

(2)NetAdapt:用于对各个模块确定之后网络层的微调。

        对于模型结构的探索和优化来说,网络搜索是强大的工具。研究人员首先使用了神经网络搜索功能来构建全局的网络结构,随后利用了NetAdapt算法来对每层的核数量进行优化。对于全局的网络结构搜索,研究人员使用了与Mnasnet中相同的,基于RNN的控制器和分级的搜索空间,并针对特定的硬件平台进行精度-延时平衡优化,在目标延时(~80ms)范围内进行搜索。随后利用NetAdapt方法来对每一层按照序列的方式进行调优。在尽量优化模型延时的同时保持精度,减小扩充层和每一层中瓶颈的大小。

 
3、网络结构的改进

                                                MobileNetV3论文讲解_第4张图片

        MobileNetV2模型中反转残差结构和变量利用了1*1卷积来构建最后层,以便于拓展到高维的特征空间,虽然对于提取丰富特征进行预测十分重要,但却引入了二外的计算开销与延时。为了在保留高维特征的前提下减小延时,将平均池化前的层移除并用1*1卷积来计算特征图。特征生成层被移除后,先前用于瓶颈映射的层也不再需要了,这将为减少10ms的开销,在提速15%的同时减小了30m的操作数。
h-swish激活函数,计算公式如下:

                                          

        作者发现swish激活函数能够有效提高网络的精度,然而,swish的计算量太大了。作者提出h-swish(hard version of swish)如下所示

                                           

h-swish如图所示

                                           MobileNetV3论文讲解_第5张图片

        这种非线性在保持精度的情况下带了了很多优势,首先ReLU6在众多软硬件框架中都可以实现,其次量化时避免了数值精度的损失,运行快。这一非线性改变将模型的延时增加了15%。但它带来的网络效应对于精度和延时具有正向促进,剩下的开销可以通过融合非线性与先前层来消除。

 
4、MobileNetV3网络结构

作者提出了MobileNetV3-LargeMobileNetV3-Small两种不同大小的网络结构。MobileNetV3-Large如下图所示:

                                      MobileNetV3论文讲解_第6张图片

MobileNetV3-Small如下图所示:

                                   MobileNetV3论文讲解_第7张图片

5、实验结果

(1)ImageNet分类实验结果

                                    MobileNetV3论文讲解_第8张图片

(2)在SSDLite目标检测算法中精度

                                MobileNetV3论文讲解_第9张图片

(3)用于语义分割

                              MobileNetV3论文讲解_第10张图片

(4)性能比较结果

                              MobileNetV3论文讲解_第11张图片

 

总结一下:

MobileNetV3-Large在ImageNet分类上的准确度与MobileNetV2相比提高了3.2%,同时延迟降低了15%。

MobileNetV3-large 用于目标检测,在COCO数据集上检测精度与MobileNetV2大致相同,但速度提高了25%。

在Cityscapes语义分割任务中,新设计的模型MobileNetV3-Large LR-ASPP 与 MobileNetV2 R-ASPP分割精度近似,但快30%。

参考:

【论文学习】轻量级网络——MobileNetV3终于来了(含开源代码)

Python 3 & Keras 实现Mobilenet v3

重磅!MobileNetV3 来了!

https://blog.csdn.net/u013289254/article/details/96568485

https://www.jianshu.com/p/9af2ae74ec04

https://github.com/frotms/MobilenetV3-Tensorflow

你可能感兴趣的:(图像处理与机器视觉,机器学习,TensorFlow)