边缘计算 | 在移动设备上部署深度学习模型的思路与注意点

携手创作,一起生长!这是我参与「日新方案 8 月更文应战」的第24天,点击检查活动详情

  • 作者:韩信子@ShowMeAI
  • 深度学习◉技术提升系列:www.showmeai.tech/tutorials/3…
  • 深度学习实战系列:www.showmeai.tech/tutorials/4…
  • 本文地址:www.showmeai.tech/article-det…
  • 声明:版权一切,转载请联系渠道与作者并注明出处
  • 收藏ShowMeAI检查更多精彩内容
边缘计算 | 在移动设备上部署深度学习模型的思路与注意点

咱们在新闻当中见到越来越多的令人振奋的人工智能相关的运用新闻。

  • 『人工智能在围棋中打败了人类!』
  • 『根据神经网络的精准天气预报』
  • 『会写作创作的AI』
  • 『会说话的蒙娜丽莎绘画』
  • 『绘画艺术创作以假乱真的AI』

尽管新闻很炫酷乃至令人惊叹不已,但 AI 的运用与现实国际还有一些差距,核心的原因之一是它们的规模。为了取得更好的作用,现代AI神经网络模型会运用更大数据集、更多的模型参数,但这样一方面练习它们变得让普通人遥不可及(需求特定的贵重物理资源和大量的电力资源等),别的一方面使得实践推理运用也变得复杂(无法在小型设备上布置,且推理时间很长)。

边缘计算 | 在移动设备上部署深度学习模型的思路与注意点

假如要让 AI 能覆盖现实生活中的场景问题,咱们期望能够在资源有限的设备上运转的更小的模型。别的一方面,跟着广受重视的安全和隐私问题,咱们也期望模型能够布置安装在本地设备上,而不是向服务器传输任何数据进行请求。

边缘计算 | 在移动设备上部署深度学习模型的思路与注意点

接下来 ShowMeAI 给咱们介绍和总结使 AI 模型能适用于小型本地设备上的办法技术,完成思路包含:紧缩模型参数量规划更小的模型结构常识蒸馏调整数据格式数据复用等。咱们还会介绍到移动小处理设备的类型,适用移动设备的模型结构等。

模型紧缩&加快办法

深度学习模型需求内存和核算资源,移动设备上这些都是紧缺的。最直接的处理方式是,经过下降深度学习模型的空间复杂性(参数数量)来适配移动设备,从而在坚持精度不太变的一起削减核算量。模型空间复杂度下降大体有5类办法:

  • 削减模型参数数量(例如剪枝和参数同享)
  • 经过量化减小模型大小
  • 常识蒸馏
  • 规划更小结构的模型
  • 输入数据转化

剪枝

剪枝的根本思想是挑选并删去一些对模型精度影响不大的冗余参数,然后从头练习模型以坚持模型性能。根据神经网络的结构,咱们能够修剪单个权重参数、模型层或模型层块:

  • 非结构化修剪:不管神经元呈现在哪,只要它不是明显权重,就进行删减除掉,经过模型的精度作用能够坚持得很好,但这种办法导致稀少矩阵运算,实践运算很难加快。
  • 结构化剪枝:运用模型在不同尺度上的结构稀少性(包含滤波器稀少性、核稀少性和特征映射稀少性),直接移除一组参数(例如,整个卷积滤波器),这样结构依旧是完好的,GPU等密布矩阵运算很方便,它的应战是在修剪的一起坚持模型精度作用。
边缘计算 | 在移动设备上部署深度学习模型的思路与注意点

神经网络的剪枝裁剪紧缩,通常是迭代进行的。在每次迭代中,会修剪相对不重要的filter并从头练习修剪后的模型(以恢复精度作用),直至修剪后的模型不能到达所需的最小精度时,剪枝迭代完毕。

更具体的内容介绍,咱们能够在论文 Pruning and Quantization for Deep Neural Network Acceleration: ASurvey 中检查。

参数同享

别的一种处理思路是参数同享:咱们不一定要裁剪和丢掉权重,而是当边权重根本相似时,咱们能够在多个边上同享它们。

例如,关于都具有 N 个节点的两个全连接层,咱们需求存储 N 个权重。 但是,假如权重根本相似,先对其进行聚类,聚类到不同的簇,然后咱们只存储簇质心。

边缘计算 | 在移动设备上部署深度学习模型的思路与注意点

网络量化

神经网络中运用的默许类型是 32 位浮点数,高精度浮点数使得模型在练习阶段能够精确地梯度传达,得到更好的作用。但是在推理进程中就没有这个必要了。

网络量化的关键思想是削减每个权重参数的存储位数。例如从 32 位浮点紧缩到 16 位浮点、16 位定点、位定点等。

边缘计算 | 在移动设备上部署深度学习模型的思路与注意点

量化方面的大部分研讨都会集在从较大范围的数字映射到小得多的数字的舍入技术(rounding techniques)上——均匀/非均匀、对称/不对称量化。

有两种主要的办法来完成量化:

  • 练习后量化:这是最直接的办法——练习后的模型权重被直接映射到较低的精度,之后无需额外的微调。但这种办法会下降模型的作用。
  • 量化感知练习: 需求运用量化从头练习模型以匹配原始模型的精确性。量化网络通常在与原始模型相同的数据集上从头练习。为了保留梯度传达的精准度,梯度不会被量化。

开箱即用的量化不太简单做,因为不同的网络部分可能需求不同的精度。因而,量化/去量化块通常被插入中间以遍灵活转化与运用。

关于网络量化的具体的解说咱们能够参阅 论文 A Survey of Quantization Methods for EfficientNeural Network Inference

常识蒸馏

在深度模型的学习权重存在显着冗余的假设下运转,咱们能够经过练习一个较小的模型(学生网络)来模仿教师输出的散布,从而提取大型模型(教师网络)学习到的常识。

边缘计算 | 在移动设备上部署深度学习模型的思路与注意点

模型蒸馏的关键思想是不仅仅运用练习数据会集给出的『硬』标签(比方分类问题中的类别标签),而是充沛运用更大模型提取的精细化常识(例如分类问题中,大模型输出的类别概率向量)。

边缘计算 | 在移动设备上部署深度学习模型的思路与注意点
边缘计算 | 在移动设备上部署深度学习模型的思路与注意点

经过网络量化和剪枝,能够在紧缩到达 4 倍的情况下坚持精度。而常识蒸馏经过别的一种角度,在不紧缩精度的情况下,直接在小模型上学习和坚持作用;实践咱们能够对一切办法组合运用。

关于常识蒸馏的更多具体信息,能够检查 论文 Knowledge Distillation: A Survey

结构优化&小型模型

边缘计算 | 在移动设备上部署深度学习模型的思路与注意点

深度学习算法前期蓬勃发展,大部分的研讨工作都会集在构建更大的模型,保证更强的学习才能,完成更先进的精确性。这一趋势后来被一系列研讨「效率-作用」权衡的论文所取代,许多论文中直接提出和规划了小结构的模型。

典型的论文有: MobileNetV1MobileNetV2MnasNetMobileNetV3

关于小型神经网络的具体常识,咱们能够检查 ShowMeAI 这篇文章: 深度学习与CV教程(10) | 轻量化CNN架构 (SqueezeNet,ShuffleNet,MobileNet等)

数据处理&转化

别的一个处理思路是数据端,咱们能够削减输入数据的维度和数量来加快核算。

一个比方是将图画分解为两个低分辨率的子图画,其间一个承载高频信息,另一个包含低频信息。结合起来,实践咱们保留了和原始图画相同的信息,但具有更低的维度,即更小的输入数据,网络也小一些。

更多具体信息,能够检查 论文Learning a Wavelet-like Auto-Encoder to Accelerate Deep Neural Networks

重用中间结果

别的一种加快思路是削减运算,比方有一些场景下咱们能够避免冗余的核算。

多使命之间数据重用

关于具有相同输入的不同但相关使命,假如并行运转多个模型就会有冗余的核算。很典型的一种思路是,在多个模型中重复运用来自浅层的特征,而是用不同的深层结构来应对特定的使命。

图画帧之间数据重用

有些场景,尽管输入数据可能不完全相同,但可能足够(例如接连视觉模型处理的相邻帧),那此时能够部分重复运用数据。

有关更多具体信息,请检查 论文DeepCache: Principled Cache for Mobile Deep Vision

移动设备上的深度学习结构

传统深度学习库 PyTorchTensorflow并不特别合适移动运用。它们相对来说比较繁重并且有第三方依靠,在移动设备上比较费事。最初这两个结构都面向在服务器端,强大的 GPU 上进行高效练习,布置部分也通常是在服务器上的。

不过跟着AI生态的演进和发展,它们专门为移动深度学习规划了结构:TensorFlow LitePytorchLite,能够很有效地进行移动设备上的练习和布置。

边缘计算 | 在移动设备上部署深度学习模型的思路与注意点

开发移动深度学习运用程序的另一个应战是每个移动生产商的标准不同,有些人会在 Tensorflow 中运转他们的模型,有些人会在 Pytorch 中运转他们的模型,有些人乃至会运用自有结构。为了打破这种界线,咱们能够运用 开放式神经网络交流ONNX 结构来完成从一个库到到另一个库的转化。

咱们还能够运用 OpenVINO,它经过专注于布置硬件来协助优化深度学习运用程序,以便在云和边缘设备上进行推理。

关于常用手机移动端开发的更多具体信息,咱们能够检查不同手机商的 API 文档:

  • Huawei
  • Apple
  • Samsung

除了上述提到的常见移动设备布置优化办法,这些生厂商还包含针对性的模型在特定设备上更高效的特定技巧。

总结

深度模型需求在资源有限的移动设备上布置运用,需求克服核算速度和内存资源等约束。咱们提到了一些办法来减小模型大小和加快核算速度,包含网络端、数据端不同的思路,咱们在进行移动端AI运用时能够参阅和优化。

参阅资料

  • Pruning and Quantization for Deep Neural Network Acceleration: ASurvey:arxiv.org/pdf/2101.09…
  • A Survey of Quantization Methods for EfficientNeural Network Inference:arxiv.org/pdf/2103.13…
  • Knowledge Distillation: A Survey:arxiv.org/pdf/2006.05…
  • MobileNetV1:arxiv.org/pdf/1704.04…
  • MobileNetV2:arxiv.org/pdf/1801.04…
  • MnasNet:arxiv.org/pdf/1807.11…
  • MobileNetV3:arxiv.org/pdf/1704.04…
  • 深度学习与CV教程(10) | 轻量化CNN架构 (SqueezeNet,ShuffleNet,MobileNet等):www.showmeai.tech/article-det…
  • Learning a Wavelet-like Auto-Encoder to Accelerate Deep Neural Networks:arxiv.org/pdf/1712.07…
  • DeepCache: Principled Cache for Mobile Deep Vision:arxiv.org/pdf/1712.01…
  • PyTorch:pytorch.org
  • Tensorflow:www.tensorflow.org
  • TensorFlow Lite:www.tensorflow.org/lite
  • PytorchLite:pytorch.org/mobile/home…
  • 开放式神经网络交流ONNX:onnx.ai
  • OpenVINO:docs.openvino.ai/latest/inde…
  • Huawei:developer.huawei.com/consumer/en…
  • Apple:developer.apple.com/machine-lea…
  • Samsung:developer.samsung.com/neural/over…

边缘计算 | 在移动设备上部署深度学习模型的思路与注意点