MobileNet系列论文——MobileNet V3

目录

MobileNetV3

创新点:

SE模块

互补搜索技术组合

网络结构的改进

h-swish激活函数

 4MobileNetV3网络结构

     补充资料​



MobileNetV3

MobileNetV3主要使用了网络搜索算法(用NAS通过优化每个网络块来搜索全局网络结构,用NetAdapt算法搜索每个层的滤波器数量),同时在MobileNet V2网络结构基础上进行改进,并引入了SE模块以及H-Swish激活函数。

创新点

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

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

 MobileNet系列论文——MobileNet V3_第1张图片

MobileNet系列论文——MobileNet V3_第2张图片

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

        综合了以上三种结构的优点设计出了高效的MobileNetV3模块。

SE模块

SE结构会消耗一定的时间,SE瓶颈的大小与卷积瓶颈的大小有关。将它们全部替换为固定为膨胀层通道数的1/4,可以在适当增加参数数量的情况下提高精度,并且没有明显的延迟成本。

SE模块被放在了Depthwise卷积后面。

互补搜索技术组合

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

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

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

网络结构的改进

MobileNet系列论文——MobileNet V3_第3张图片

        MobileNetV2的inverted bottleneck结构是使用了1*1卷积作为最后一层,以扩展到高维度的特征空间(也就是上图中的320->1280那一层的1*1卷积)。这一层的计算量是比较大的。MobileNetV3为了减少延迟并保留高维特性,将该1*1层移到最终的平均池化之后(960->Avg Pool->1*1 Conv)。现在计算的最后一组特征图从7*7变成了1*1,可以大幅度减少计算量。最后再去掉了Inverted Bottleneck中的Depthwise和1*1降维的层,在保证精度的情况下大概降低了15%的运行时间。

h-swish激活函数

        作者发现swish激活函数能够有效提高网络的精度。然而,swish的计算量太大了。作者提出h-swish(hard version of swish)如下所示:计算速度比Swish更快(但比ReLU慢),更易于量化,精度上没有差异。

h-swish如图所示

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

 
MobileNetV3网络结构

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

                   

       

     补充资料MobileNet系列论文——MobileNet V3_第4张图片


开源代码整理如下:

(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实现:https://github.com/Bisonai/mobilenetv3-tensorflow

你可能感兴趣的:(论文笔记)