移动端深度学习开源框架调研

目录

1. 开源框架(TF lite、NCNN、MNN、TNN、Paddle-Lite等)

2. 特征对比

3. 资料

一、开源框架

1.1、TensorFlow Lite  

GitHub地址:https://github.com/tensorflow/tflite-micro

  TensorFlow Lite for Microcontrollers 是TensorFlow Lite的实验端口,旨在在只有千字节内存的微控制器和其他设备上运行机器学习模型。它不需要操作系统支持,任何标准C或C ++库或动态内存分配。Arm Cortex M3的核心运行时大小为16 KB,并且有足够的运算符来运行语音关键字检测模型,总共需要22 KB。有示例应用程序演示了如何将微控制器用于任务,包括唤醒字检测,来自加速度计数据的手势分类以及使用相机数据的图像分类。轻量级的设计使得它在如Arduino Nano 33 BLE Sense的一些小芯片上也能够部署。

1.2、NCNN

GitHub地址:https://github.com/Tencent/ncnn

  ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。ncnn 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天P图等。

功能概述

  • 支持卷积神经网络,支持多输入和多分支结构,可计算部分分支

  • 无任何第三方库依赖,不依赖 BLAS/NNPACK 等计算框架

  • 纯 C++ 实现,跨平台,支持 android ios 等

  • ARM NEON 汇编级良心优化,计算速度极快

  • 精细的内存管理和数据结构设计,内存占用极低

  • 支持多核并行计算加速,ARM big.LITTLE cpu 调度优化

  • 支持基于全新低消耗的 vulkan api GPU 加速

  • 整体库体积小于 700K,并可轻松精简到小于 300K

  • 可扩展的模型设计,支持 8bit 量化和半精度浮点存储,可导入 caffe pytorch mxnet onnx darknet keras tensorflow(mlir) 模型

  • 支持直接内存零拷贝引用加载网络模型

  • 可注册自定义层实现并扩展

1.3、MNN

GitHub地址:https://github.com/PaddlePaddle/Paddle-Lite

  MNN(Mobile Nrural Network)是一个高效、轻量的深度学习框架。它支持深度模型推理与训练,尤其在端侧的推理与训练性能在业界处于领先地位。目前,MNN已经在阿里巴巴的手机淘宝、手机天猫、优酷、钉钉、闲鱼等20多个App中使用,覆盖直播、短视频、搜索推荐、商品图像搜索、互动营销、权益发放、安全风控等70多个场景。此外,IoT等场景下也有若干应用。

高性能

  • 不依赖任何第三方计算库,依靠大量手写汇编实现核心运算,充分发挥ARM CPU的算力。

  • iOS设备上可以开启GPU加速(Metal),常用模型上快于苹果原生的CoreML。

  • Android上提供了OpenCLVulkanOpenGL三套方案,尽可能多地满足设备需求,针对主流GPU(AdrenoMali)做了深度调优。

  • 卷积、转置卷积算法高效稳定,对于任意形状的卷积均能高效运行,广泛运用了 Winograd 卷积算法,对3x3 -> 7x7之类的对称卷积有高效的实现。

  • 针对ARM v8.2的新架构额外作了优化,新设备可利用FP16半精度计算的特性获得两倍提速。

轻量性

  • 针对端侧设备特点深度定制和裁剪,无任何依赖,可以方便地部署到移动设备和各种嵌入式设备中。

  • iOS平台:armv7+arm64静态库大小5MB左右,链接生成可执行文件增加大小620KB左右,metallib文件600KB左右。

  • Android平台:so大小400KB左右,OpenCL库400KB左右,Vulkan库400KB左右。

通用性

  • 支持TensorflowCaffeONNX等主流模型文件格式,支持CNNRNNGAN等常用网络。

  • 转换器支持149个TensorflowOP、58个TFLite OP、47个Caffe OP、74个ONNX OP;各计算设备后端支持的MNN OP数:CPU 111个,ARM V8.2 6个,Metal 55个,OpenCL 43个,Vulkan 32个。

  • 支持iOS 8.0+、Android 4.3+和具有POSIX接口的嵌入式设备。

  • 支持异构设备混合计算,目前支持CPU和GPU。

易用性

  • 有高效的图像处理模块,覆盖常见的形变、转换等需求,一般情况下,无需额外引入libyuv或opencv库处理图像。

  • 支持回调机制,可以在网络运行中插入回调,提取数据或者控制运行走向。

  • 支持只运行网络中的一部分,或者指定CPU和GPU间并行运行。

  • (BETA)MNN Python API,让算法工程师可以轻松地使用MNN构图、训练、量化训练,无需编写C++。

1.4、TNN

GitHub地址:https://github.com/Tencent/TNN

  TNN:腾讯优图实验室开源的高性能、轻量级神经网络推理框架。它还具有跨平台、高性能、模型压缩、代码裁剪等诸多突出优势。TNN 框架在原有 Rapidnet 和 ncnn 框架的基础上,进一步加强了对移动设备的支持和性能优化。同时借鉴业界主流开源框架的高性能和良好的扩展性特点,扩展了对X86和NV GPU的支持。在手机端,TNN已经被QQ、微视、Pitu等众多应用使用。TNN作为腾讯云AI的基础加速框架,为众多业务的落地提供了加速支持。

图片

1.5Paddle-Lite

GitHub地址:https://github.com/PaddlePaddle/Paddle-Lite

  Paddle Lite为Paddle-Mobile的升级版,定位支持包括手机移动端在内更多场景的轻量化高效预测,支持更广泛的硬件和平台,是一个高性能、轻量级的深度学习预测引擎。在保持和PaddlePaddle无缝对接外,也兼容支持其他训练框架产出的模型。支持ARM CPU、Mali GPU、Adreno GPU,还特别支持了华为 NPU,以及 FPGA 等边缘设备广泛使用的硬件。即将支持支持包括寒武纪、比特大陆等AI芯片,未来会增加对更多硬件的支持。

1.6、Apple的Core ML

一切可在用户设备端完成

图片

1.7、ONNX

ONNX的规范及代码主要由微软,亚马逊,Facebook(已退出)和IBM等公司共同开发,以开放源代码的方式托管在Github上

GitHub地址:https://github.com/onnx/onnx

  开放式神经网络交换(Open Neural Network Exchange,ONNX)是一个开放的生态系统,它使 AI 开发人员能够随着项目的发展选择合适的工具。ONNX 是一种开放格式,用于表示机器学习模型。ONNX 定义了一组通用运算符、机器学习和深度学习模型的构建块、以及一种通用文件格式,使 AI 开发人员能够使用具有各种框架、工具、运行时和编译器的模型。ONNX是一种AI神经网络模型的通用中间文件保存方法(可以理解成AI世界的XML),各种AI框架都可以解析ONNX文件并生成特定平台和运行框架所支持的神经网络模型。

图片

我遇到了pytorch的GRU转ONNX,但是ONNX转Tensorflow model时失败,等ONNX解决了这个问题我再来用它

1.8 MACE   

GitHub地址:https://github.com/XiaoMi/mace

  Mobile AI Compute Engine (MACE) 是一个专为移动端异构计算平台(支持Android, iOS, Linux, Windows)优化的神经网络计算框架。主要从以下的角度做了专门的优化:

  • 性能:代码经过NEON指令,OpenCL以及Hexagon HVX专门优化,并且采用 Winograd算法来进行卷积操作的加速。此外,还对启动速度进行了专门的优化。

  • 功耗:支持芯片的功耗管理,例如ARM的big.LITTLE调度,以及高通Adreno GPU功耗选项。

  • 系统响应:支持自动拆解长时间的OpenCL计算任务,来保证UI渲染任务能够做到较好的抢占调度, 从而保证系统UI的相应和用户体验。

  • 内存占用:通过运用内存依赖分析技术,以及内存复用,减少内存的占用。另外,保持尽量少的外部 依赖,保证代码尺寸精简。

  • 模型加密与保护:模型保护是重要设计目标之一。支持将模型转换成C++代码,以及关键常量字符混淆,增加逆向的难度。

  • 硬件支持范围:支持高通,联发科,以及松果等系列芯片的CPU,GPU与DSP(目前仅支持Hexagon)计算加速。CPU模式支持Android, iOS, Linux等系统。

  • 模型格式支持:支持TensorFlow, Caffe和ONNX等模型格式。

1.9、TensorRT

GitHub地址:https://github.com/NVIDIA/TensorRT

  TensorRT 是NVIDIA的开源AI神经网络Inference引擎,它可以解析和转换ONNX格式的神经网络模型并部署到支持CUDA的GPU上运行。目前TensorRT支持支持的平台有配置在CUDA 9.0以上的显卡和他们的Jetson系列平台。

图片

二、特征对比

图片

图片

百度-MDL框架、腾讯-NCNN框架和谷歌TFLite框架比较

MDLNCNNTFLite
代码质量很高
跨平台
支持caffe模型×
支持TensorFlow模型××
CPU NEON指令优化
GPU加速××

相同点:

  • 只含推理(inference)功能,使用的模型文件需要通过离线的方式训练得到。

  • 最终生成的库尺寸较小,均小于500kB。

  • 为了提升执行速度,都使用了ARM NEON指令进行加速。

  • 跨平台,iOS和Android系统都支持。

不同点:

  • MDL和NCNN均是只支持Caffe框架生成的模型文件,而TfLite则毫无意外的只支持自家大哥TensorFlow框架生成的模型文件。

  • MDL支持利用iOS系统的Matal框架进行GPU加速,能够显著提升在iPhone上的运行速度,达到准实时的效果。而NCNN和TFLite还没有这个功能。

三、资料

1. 移动端深度学习开源框架及部署
https://www.cnblogs.com/LXP-Never/p/14840535.html
2. 深度学习推理框架调研总结
https://blog.csdn.net/qq_41858510/article/details/128498326

感谢你的阅读

接下来我们继续学习输出AIGC相关内容,欢迎关注公众号“音视频开发之旅”,一起学习成长。

欢迎交流

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值