MobileNetV3学习笔记 --- Searching for MobileNetV3

论文:https://arxiv.org/pdf/1905.02244.pdf
Pytorch_MobilenetV3 实现:https://github.com/xiaolai-sqlai/mobilenetv3

给出MobilenetV1和MobilenetV2的论文链接,没有看过的可以先去看看。
MobilenetV1:https://arxiv.org/abs/1704.04861
MobilenetV2:https://arxiv.org/pdf/1801.04381.pdf

MobilenetV1

引入了深度可分离卷积作为传统卷积层的有效替代,大大减少计算量。深度可分离卷积通过将空间滤波与特征生成机制分离,有效地分解了传统卷积。深度可分离卷积由两个单独的层定义:用于空间滤波的轻量深度卷积和用于特征生成的较重的1x1卷积。

MobilenetV2:

引入线性瓶颈和倒置残差结构,以便通过利用问题的低秩性质来提高层结构的效率。
1.Linear Bottlenecks
Bottlenecks的最后把ReLU函数替换为Linear 线性函数,以防止ReLU破坏特征。
2.Inverted residuals
Bottlenecks 采用与resnet相反的设计方式,先扩张 -> 提取特征 -> 压缩。
结构如图:
在这里插入图片描述
MnasNet
https://arxiv.org/pdf/1807.11626.pdf
建立在MobileNetV2结构上,通过在瓶颈结构中引入基于挤压和激励的轻量级注意模块。注意,与[18]中提出的基于ResNet的模块相比,挤压和激励模块集成在不同的位置。模块位于展开中的深度过滤器之后,以便注意应用于最大的表示。

MobilenetV3

使用以上三种的不同层的组合作为构建块,以构建最有效的模型。图层也通过修改的swish非线性激活函数进行了升级。squeeze and excitation结构以及swish非线性函数都使用sigmoid,这对于定点算术的计算效率低下又难以维持精度,因此我们将其替换为hard sigmoid。

在这里插入图片描述翻译:图4. MobileNetV2 +Squeeze and Excite结构[20]。 与[20]相反,我们在残差层中施加Squeeze and Excite(挤压和激发)。 我们根据层使用不同的非线性,有关详细信息,请参见5.2节。

总体而言,MobilenetV3有以下两个创新点:

1.互补搜索组合

  • Platform-Aware NAS(资源受限的NAS)

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

  • NetAdapt

用于对各个模块确定之后各个网络层的搜索微调,所以叫Layerwise-Search。这种方法是对可感知平台的NAS的补充:它允许以顺序的方式微调各个层,而不是尝试推断粗略但全局的体系结构。 简而言之,该技术进行如下:
首先使用了神经网络搜索功能来构建全局的网络结构,随后利用了NetAdapt算法来对每层的核数量进行优化。对于全局的网络结构搜索,研究人员使用了与Mnasnet中相同的,基于RNN的控制器和分级的搜索空间,并针对特定的硬件平台进行精度-延时平衡优化,在目标延时(~80ms)范围内进行搜索。随后利用NetAdapt方法来对每一层按照序列的方式进行调优。在尽量优化模型延时的同时保持精度,减小扩充层和每一层中瓶颈的大小。

2.网络结构

在网络的开头和结尾重新设计了计算昂贵的层。 引入了新的非线性h-swish,这是最近的swish非线性的改进版本,它计算速度更快,对量化更友好。

通过架构搜索找到模型后,我们会发现某些最后一层以及一些较早的层比其他层更昂贵。 我们建议对体系结构进行一些修改,以减少这些慢层的等待时间,同时保持准确性。 这些修改超出了当前搜索空间的范围。

  • 尾部结构改变

当前基于MobileNetV2的倒置瓶颈结构和变体的模型使用1x1卷积作为最后一层,以便扩展到更高维度的特征空间。为了具有丰富的预测特征,这一层至关重要。 但是,这要付出额外的计算和延时。为了在保留高维特征的前提下减小延时,将平均池化前的层移除并用1*1卷积来计算特征图。特征生成层被移除后,先前用于瓶颈映射的层也不再需要了,这将为减少7ms的开销,在提速11%的同时减小了30m的操作数。
在这里插入图片描述

  • 头部channel数量改变

当前的MobilenetV2开始使用32个 3 * 3的滤波器,作者发现使用h-swish激活函数相比于使用sigmoid和swish函数,可以在保持精度不减的情况下,将channel降低到16个,并且提速2ms。
给出MobilenetV2和MobilenetV3的结构如下,重点关注前面的通道数 32/16。
MobilenetV2
                                                             MobilenetV2
MobilentV3-small
                                                         MoblenetV3-small

  • h-swish激活函数
    swish非线性激活函数作为ReLU的替代,可以可以显着提高神经网络的准确性,其定义如下:
    在这里插入图片描述
    尽管这种非线性提高了准确性,但在嵌入式环境中却带来了非零成本,因为S型函数在移动设备上的计算成本更高。
    设计的h-swish函数如下:
    在这里插入图片描述
    在这里插入图片描述

MobilenetV3网络结构

给出了MobilenetV3-large 和MobilenetV3-small两个版本,分别针对高资源用例和低资源用例,结构如下图:
在这里插入图片描述
在这里插入图片描述

参考:
https://blog.csdn.net/thisiszdy/article/details/90167304
https://blog.csdn.net/Chunfengyanyulove/article/details/91358187?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1
https://blog.csdn.net/zaf0516/article/details/90374170
https://blog.csdn.net/sinat_37532065/article/details/90813655

原创文章 96 获赞 24 访问量 3万+

猜你喜欢

转载自blog.csdn.net/c2250645962/article/details/105434036