目录
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上提供了
OpenCL
、Vulkan
、OpenGL
三套方案,尽可能多地满足设备需求,针对主流GPU(Adreno
和Mali
)做了深度调优。 -
卷积、转置卷积算法高效稳定,对于任意形状的卷积均能高效运行,广泛运用了 Winograd 卷积算法,对3x3 -> 7x7之类的对称卷积有高效的实现。
-
针对ARM v8.2的新架构额外作了优化,新设备可利用FP16半精度计算的特性获得两倍提速。
轻量性
-
针对端侧设备特点深度定制和裁剪,无任何依赖,可以方便地部署到移动设备和各种嵌入式设备中。
-
iOS平台:armv7+arm64静态库大小5MB左右,链接生成可执行文件增加大小620KB左右,metallib文件600KB左右。
-
Android平台:so大小400KB左右,OpenCL库400KB左右,Vulkan库400KB左右。
通用性
-
支持
Tensorflow
、Caffe
、ONNX
等主流模型文件格式,支持CNN
、RNN
、GAN
等常用网络。 -
转换器支持149个
Tensorflow
OP、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.5、Paddle-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框架比较
MDL | NCNN | TFLite | |
---|---|---|---|
代码质量 | 中 | 高 | 很高 |
跨平台 | √ | √ | √ |
支持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相关内容,欢迎关注公众号“音视频开发之旅”,一起学习成长。
欢迎交流