轻量级神经网络算法系列文章-MobileNet v3

  • Post author:
  • Post category:其他




4. 轻量级神经网络算法目录

  1. 轻量级神经网络算法

    4.1 各轻量级神经网络算法总结对比

    4.2 SqueezeNet

    4.3 DenseNet

    4.4 Xception

    4.5 MobileNet v1

    4.6 IGCV

    4.7 NASNet

    4.8 CondenseNet

    4.9 PNASNet

    4.10 SENet

    4.11 ShuffleNet v1

    4.12 MobileNet v2

    4.13 AmoebaNet

    4.14 IGCV2

    4.15 IGCV3

    4.16 ShuffleNet v2

    4.17 MnasNet

    4.18 MobileNet v3



深度学习知识点总结


专栏链接:


https://blog.csdn.net/qq_39707285/article/details/124005405





本专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。





4.18 MobileNet v3

论文题目《Searching for MobileNetV3》。



4.18.1 简介

把高效的神经网络模型部署到手机端,无需将其数据发送到服务器进行评估,是个人隐私的关键促成因素。神经网络效率的提高不仅通过更高的精度和更低的延迟改善了用户体验,而且通过降低功耗帮助保持电池寿命。因此,本文的目标是开发最佳的移动计算机视觉体系结构,优化移动设备上的准确度权衡。

为此,本文提出了基于互补搜索技术和新架构设计的下一代移动网络模型。通过使用NetAdapt算法结合


神经网络搜索(NAS)


,然后通过新的


模型结构改进


,MobileNetV3将直接使用手机CPU。



4.18.2 神经网络搜索

网络搜索已证明是发现和优化网络架构的一个非常强大的工具(详见本系列文章NASNet、PNASNet、MnasNet等)。对于MobileNetV3,使用平台感知NAS通过优化每个网络block来搜索全局网络结构。然后,使用NetAdapt算法按层搜索过滤器的数量。这些技术是互补的,对于给定的硬件平台,可以结合起来有效地找到优化模型。



4.18.2.1 用于分块搜索的平台感知NAS

和MnasNet类似,本文也采用一种平台感知的神经结构方法来搜索全局网络结构。因为本文使用的基于RNN的控制器和相同的因式分层搜索空间与MnasNet一样,当把目标延迟限制到约80ms时,搜索得到的大型移动模型,与MnasNet的结果类似。因此,本文只需重复使用MnasNet-A1,然后在其上应用NetAdapt和其他优化即可。

但是观察发现,最初的激励设计没有针对小型移动模型进行优化。具体的说就是,MnasNet使用多目标激励机制,



A

C

C

(

m

)

×

[

L

A

T

(

m

)

/

T

A

R

]

w

ACC(m)×[LAT(m)/TAR]^w






A


CC


(


m


)




×








[


L


A


T


(


m


)


/


T


A


R



]










w












,为了取得近似帕累托最优解,固定目标延迟TAR,平衡每个模型m的模型精度



A

C

C

(

m

)

ACC(m)






A


CC


(


m


)





和延迟



L

A

T

(

m

)

LAT(m)






L


A


T


(


m


)





,发现对于小型模型,模型精度随着延迟的变化更为显著;因此,需要更小的权重因子w=−0:15(在MnasNet中w=-0.07)以补偿不同延迟的较大精度变化。通过这个新的权重因子w,从头开始新的架构搜索,以找到初始seed model,然后应用NetAdapt和其他优化,以获得最终的MobileNetV3-Small模型。



4.18.2.2 用于分层搜索的NetAdapt

本文应用到架构搜索中的第二个技术点是NetAdapt。此方法是对平台感知NAS的补充:它允许以顺序方式对各个层进行微调,而不是全局的架构。简而言之,该技术执行过程如下:

  1. 从平台感知NAS搜索到的seed network结构开始
  2. 循环以下步骤:

    (a) 生成一组新候选项。每一个候选项都代表了对架构的修改,与上一步相比,该架构的延迟至少减少了δ。

    (b) 对于每个候选项,使用前一步中的预训练模型,并填充新的候选架构,酌情截断和随机初始化缺失权重。对每个候选项进行T steps的微调,以获得大致的精度。

    © 根据某些相应指标选择最佳候选项。
  3. 重复上一步,直到达到目标延迟。

在Netadapt中,该指标旨在使精度变化最小化。本文对该算法进行了改进,修改为使延迟变化与准确度变化之比最小化。也就是说,对于每个NetAdapt步骤中生成的所有候选项,选择一个最大化:



A

c

c

l

a

t

e

n

c

y

\frac{\triangle Acc}{|\triangle latency|}


















∣△


l


a


t


e


n


cy






















A


cc
























,其中



l

a

t

e

n

c

y

|\triangle latency|






∣△


l


a


t


e


n


cy








满足上述步骤2(a)中的约束。从直觉来讲,因为这些候选项是离散的,所以更喜欢那些最大化权衡曲线斜率的候选项。重复此过程,直到延迟达到其目标,然后从头开始重新训练新架构。在MobileNet v2上使用与Netadapt中相同的候选项生成器,具体而言,只使用以下两种类型的候选项:

  1. 减小任何膨胀层的尺寸
  2. 减少共享相同瓶颈大小的所有块中的瓶颈,以保持残差连接

在本文的实验中,使用T=10000,发现它虽然提高了候选的初始微调精度,但在从头开始训练时,它不会改变最终精度。所以设置δ=0:01|L|,其中L是种子模型的延迟。



4.18.3 网络提升

除了网络搜索,本文还在模型中引入了几个新组件,以进一步改进最终模型。


在网络的开始和结束部分重新对那些计算成本较高的层进行了设计


。还介绍了一种新的非线性激活函数,


h-swish


,它是最近swish非线性激活函数的一种改进版本,计算速度更快,量化更友好。



4.18.3.1 重新设计计算成本较高的层

通过架构搜索找到合适的模型后,发现模型的最后一层和前期的层比其他层计算成本高很多,所以在保持准确率不变的情况下对这些层进行修改,以减少成本消耗及延迟。



第一个重写了网络的最后几层。


基于MobileNetV2的反向瓶颈结构及其变体的模型使用1×1卷积作为最终层,以扩展到更高维的特征空间。为了具有丰富的预测特征,该层至关重要。然而,代价就是额外的计算成本及延迟。为了减少延迟并保留高维特性,将此层移动到最终的平均池化层之外。最后一组特征现在以1×1卷积计算而不是7×7卷积计算。使用这种设计后,在计算和延迟方面,特征的计算变得几乎无计算成本。如下图所示:

在这里插入图片描述

这最后一层的修改使延迟减少了7毫秒,这是总运行时间的11%,并在几乎不损失精度的情况下将操作数减少了30M的MAdds。



第二个修改了初始层。


目前在初始层中大多数的模型倾向于使用32个卷积核的3×3卷积,用于边缘检测的初始滤波器组。这些滤波器通常是彼此的镜像,就是好几个通道之间的信息是重复的。本文尝试减少过滤器的数量,并且使用不同的非线性激活函数以尝试减少冗余。尝试多种激活函数后,决定使用该层的hard-swish非线性激活函数,它的性能更好。将滤波器数量减少到16个,能够同时保持与使用ReLU或swish的32个滤波器相同的精度。

这一修改节省了额外的2毫秒和10M的MAdds。



4.18.3.2 修改非线性激活函数


激活函数介绍可以看这篇文章



(https://blog.csdn.net/qq_39707285/article/details/124008601)

swish是ReLU的替代品,大大提高了神经网络的准确性,公式如下:




s

w

i

s

h

=

x

σ

(

x

)

swish=x·\sigma(x)






s


w


i


s


h




=








x







σ


(


x


)






虽然这种非线性提高了精度,但在嵌入式环境中,例如在移动设备上计算sigmoid函数要消耗成本比较多。本文从两个方面解决这个问题:



  1. 第一个方面,将Sigmoid函数替换为其分段线性模拟函数:



    R

    e

    L

    U

    6

    (

    x

    +

    3

    )

    6

    \frac{ReLU6(x+3)}{6}


















    6
















    R


    e


    LU


    6


    (


    x


    +


    3


    )



























    最小的区别是使用ReLU6而不是自定义剪裁常量。类似地,hard-swish变为:




    h

    s

    w

    i

    s

    h

    [

    x

    ]

    =

    x

    R

    e

    L

    U

    6

    (

    x

    +

    3

    )

    6

    hswish[x]=x\frac{ReLU6(x+3)}{6}






    h


    s


    w


    i


    s


    h


    [


    x


    ]




    =








    x














    6
















    R


    e


    LU


    6


    (


    x


    +


    3


    )























下图中显示了Sigmoid和swish非线性的soft版本和hard版本的比较如下:

在这里插入图片描述

从图中可以看出,h-swish与原始平滑版本swish非常匹配,几乎一样。在实验中发现所有这些函数的hard版本在精度上没有明显差异,但从部署的角度来看有多个优势:

(a) ReLU6的优化实现可用于几乎所有的软件和硬件框架

(b) 在量化模式下,它消除了由近似Sigmoid的不同实现引起的潜在数值精度损失

(c) 在实践中,h-swish可以被编译成一种分段函数,用于减少内存访问次数,从而大幅降低延迟成本。

2.

第二个方面,因为每层激活存储器通常在特征图分辨率下降时减半,

所以应用非线性的成本随着网络层数越深越低,所以在网络深层使用h-swish。


顺便说一句,本文实验发现swish的大部分好处都是在更深层中使用它们实现的。因此,在本文的架构中,只在模型的后半部分使用h-swish。具体布局见4.18.4节的网络结果表1和表2。



4.18.3.3 加入SE(squeeze-and-excite)模块

SE模块介绍详见本系列文章SENet,SE模块示意图如下:

在这里插入图片描述

在MnasNet中,SE bottleneck的大小与卷积bottleneck的大小有关,相反,本文将它们全部固定为扩展层中通道数的1/4。实验发现,这样做可以在轻微增加参数数量的情况下提高准确性,并且不会产生明显的延迟成本。



4.18.4 MobileNet V3整体结构

MobileNetV3分为两个模型:


MobileNetV3-large





MobileNetV3-small


,分别针对高和低资源使用情况。这些模型是通过将平台感知NAS和NetAdapt技术应用于网络搜索,并结合对网络改进方法而得到的。有关网络的完整结构,请参见表1和表2。

在这里插入图片描述

在这里插入图片描述



4.18.5 总结

  1. 使用MnasNet中的神经网络搜索技术


    NAS


    搜索小模型,优化目标为:



    A

    C

    C

    (

    m

    )

    ×

    [

    L

    A

    T

    (

    m

    )

    /

    T

    A

    R

    ]

    w

    ACC(m)×[LAT(m)/TAR]^w






    A


    CC


    (


    m


    )




    ×








    [


    L


    A


    T


    (


    m


    )


    /


    T


    A


    R



    ]










    w












    ,搜索过程中发现,模型精度随着延迟的变化更快,为了平衡延迟和精度,


    修改权重因子w=-0.15

  2. 使用


    NetAdapt


    算法改进NAS,修改NetAdapt算法中的指标(使精度变化最小化)为


    使延迟变化与精度变化之比最小化

  3. 使用1、2的方法搜索得到两种网络结构(MobileNet v3-large和MobileNet v3-small的初始版本)
  4. 分析搜索得到的网络结构发现,还有几处可以改进的地方:
  5. 改进1:


    修改模型最后几层结构,


    移动1×1卷积到avg-pool层之后,去掉其他几个不必要的层
  6. 改进2:


    修改模型的第一层卷积核的数量,修改32个3×3卷积为16个3×3卷积

  7. 改进3:为减少在移动设备上的swish激活函数的计算成本,优化得到新的非线性激活函数


    h-swish,


    并根据其特性,多应用在网络深层中
  8. 改进4:


    加入SE(squeeze-and-excite)模块



版权声明:本文为qq_39707285原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。