当前位置: 首页 > news >正文

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

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. 轻量级神经网络算法目录
    • 4.18 MobileNet v3
      • 4.18.1 简介
      • 4.18.2 神经网络搜索
        • 4.18.2.1 用于分块搜索的平台感知NAS
        • 4.18.2.2 用于分层搜索的NetAdapt
      • 4.18.3 网络提升
        • 4.18.3.1 重新设计计算成本较高的层
        • 4.18.3.2 修改非线性激活函数
        • 4.18.3.3 加入SE(squeeze-and-excite)模块
      • 4.18.4 MobileNet V3整体结构
      • 4.18.5 总结


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 ACC(m)×[LAT(m)/TAR]w,为了取得近似帕累托最优解,固定目标延迟TAR,平衡每个模型m的模型精度 A C C ( m ) ACC(m) ACC(m)和延迟 L A T ( m ) LAT(m) LAT(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|} ∣△latencyAcc,其中 ∣ △ l a t e n c y ∣ |\triangle latency| ∣△latency满足上述步骤2(a)中的约束。从直觉来讲,因为这些候选项是离散的,所以更喜欢那些最大化权衡曲线斜率的候选项。重复此过程,直到延迟达到其目标,然后从头开始重新训练新架构。在MobileNet v2上使用与Netadapt中相同的候选项生成器,具体而言,只使用以下两种类型的候选项:

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

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

4.18.3 网络提升

除了网络搜索,本文还在模型中引入了几个新组件,以进一步改进最终模型。 在网络的开始和结束部分重新对那些计算成本较高的层进行了设计。还介绍了一种新的非线性激活函数, h-swish ,它是最近swish非线性激活函数的一种改进版本,计算速度更快,量化更友好。

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

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

第一个重写了网络的最后几层。基于MobileNetV2的反向瓶颈结构及其变体的模型使用1x1卷积作为最终层,以扩展到更高维的特征空间。为了具有丰富的预测特征,该层至关重要。然而,代价就是额外的计算成本及延迟。为了减少延迟并保留高维特性,将此层移动到最终的平均池化层之外。最后一组特征现在以1x1卷积计算而不是7x7卷积计算。使用这种设计后,在计算和延迟方面,特征的计算变得几乎无计算成本。如下图所示:
在这里插入图片描述
这最后一层的修改使延迟减少了7毫秒,这是总运行时间的11%,并在几乎不损失精度的情况下将操作数减少了30M的MAdds。

第二个修改了初始层。目前在初始层中大多数的模型倾向于使用32个卷积核的3x3卷积,用于边缘检测的初始滤波器组。这些滤波器通常是彼此的镜像,就是好几个通道之间的信息是重复的。本文尝试减少过滤器的数量,并且使用不同的非线性激活函数以尝试减少冗余。尝试多种激活函数后,决定使用该层的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) swish=xσ(x)
虽然这种非线性提高了精度,但在嵌入式环境中,例如在移动设备上计算sigmoid函数要消耗成本比较多。本文从两个方面解决这个问题:

  1. 第一个方面,将Sigmoid函数替换为其分段线性模拟函数: R e L U 6 ( x + 3 ) 6 \frac{ReLU6(x+3)}{6} 6ReLU6(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} hswish[x]=x6ReLU6(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 ACC(m)×[LAT(m)/TAR]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)模块

相关文章:

  • 聚苯乙烯负载酸性离子液体(P[Vim-PS][HSO4])|活性炭(AC)负载酸性离子液体[Hmim-BS][HSO4]齐岳
  • 视频流PS打包方式详解
  • BIM从业者的焦虑和困惑,你遇到了吗?
  • 携职教育:2022年初级会计考试证书领取流程及所需材料
  • iOS App怎么上架到苹果TestFlight?
  • 自动控制原理6.2---常用校正装置及其特性
  • Android——常用定时器
  • 堆排序-Head Sort
  • 【C++】wav文件解析(兼容性强)
  • 免费查题接口搭建
  • 多目标优化算法|用于全局和工程设计优化的多目标原子轨道搜索 (MOAOS)算法(Matlab代码实现)
  • [C++]:for循环for(int num : nums)
  • 3年测试经验,去面试连25K都拿不到了吗?现在测试这么坑?
  • 网课查题公众号 免费授权搜题接口
  • 一篇文章搞懂java中类以及static关键字执行顺序
  • 网络传输文件的问题
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • co.js - 让异步代码同步化
  • CSS盒模型深入
  • echarts花样作死的坑
  • input实现文字超出省略号功能
  • JavaScript服务器推送技术之 WebSocket
  • Java读取Properties文件的六种方法
  • js如何打印object对象
  • Python_OOP
  • Python语法速览与机器学习开发环境搭建
  • 如何进阶一名有竞争力的程序员?
  • 微服务框架lagom
  • 异步
  • 用Python写一份独特的元宵节祝福
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 阿里云服务器如何修改远程端口?
  • #HarmonyOS:Web组件的使用
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (三)uboot源码分析
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • .htaccess配置重写url引擎
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • @EnableConfigurationProperties注解使用
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [ 蓝桥杯Web真题 ]-布局切换
  • [1204 寻找子串位置] 解题报告
  • [C#]C# winform部署yolov8目标检测的openvino模型
  • [C++基础]-初识模板
  • [ESP32] 编码旋钮驱动
  • [Flex][问题笔记]TextArea滚动条问题
  • [FxCop.设计规则]8. 也许参数类型应该是基类型