移动端模型部署(ncnn,tflite,paddlelite等)
主要介绍
ncnn 部署
paddle lite 部署
文章目录
- 移动端模型部署(ncnn,tflite,paddlelite等)
- 各个框架的介绍
- 框架的选择
- 三大模型的部署流程(全部本人亲自尝试,有问题联系博主即可)
-
- 一 、paddle lite部署安卓
- 二、ncnn模型部署安卓
- 总结
各个框架的介绍
在这里简单介绍一下各个框架:
-
Paddle-Lite由百度飞桨团队推出,支持包括手机移动端在内更多场景的轻量化高效预测,支持更广泛的硬件和平台,是一个高性能、轻量级的深度学习预测引擎。在保持和PaddlePaddle无缝对接外,也兼容支持其他训练框架产出的模型,如果熟悉其他的深度学习终端部署平台,那么可以将Paddle-Lite看作与Tensorflow-Lite、NCNN、TNN等对标的产品,帮助用户在手机、嵌入式等资源受限的平台上进行深度学习高性能部署。
Github:https://www.paddlepaddle.org.cn/paddle/paddlelite
-
ncnn 是一个为手机端极致优化的高性能神经 络前向计算框架。ncnn 从设计之初深刻考虑手机端的部署和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。ncnn 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天P图等。
Github:https://github.com/Tencent/ncnn
-
tflite 是Google推出的专门面向移动端机器学习的轻量级框架——TensorFlow Lite,TensorFlow Lite是TensorFLow的一个轻量级解决方案,旨在解决Google著名的机器学习框架TensorFlow在移动端的应用。它能够为设备端的机器学习推断带来较低的延迟和较小的二值化尺寸。与此同时,TensorFlow Lite亦能够结合Android Neural Networks API支持硬件加速在TensorFlow Lite中,使用到了多种技术来达到低延迟,例如优化移动App的内核,pre-fused activations和量化核(允许更小和更快(fixed-point math)的模型),这其中绝大多数的文档可以在Github上找到。
链接:https://tensorflow.google.cn/litel=zh-cn
框架的选择
三大模型的部署流程(全部本人亲自尝试,有问题联系博主即可)
一 、paddle lite部署安卓
-
首先为大家介绍一下需要用到的文件
-
大致模型转换流程
对于这段代码配置的详解,我放在下方
–model_dir 待优化的fluid模型(非combined形式)的路径,其中包括 络结构文件和一个一个单独保存的权重文件。
–model_file 待优化的fluid模型(combined形式)的 络结构路径。
–param_file 待优化的fluid模型(combined形式)的权重文件路径。
–optimize_out_type 输出模型类型,目前支持两种类型:protobuf和naive_buffer,其中naive_buffer是一种更轻量级的序列化/反序列化实现。若您需要在mobile端执行模型预测,请将此选项设置为naive_buffer。默认为protobuf。
–optimize_out 优化模型的输出路径。
–valid_targets 指定模型可执行的backend,目前可支持x86、arm、opencl,您可以同时指定多个backend(以空格分隔),Model Optimize Tool将会自动选择最佳方式。默认为arm。
–prefer_int8_kernel 是否启用int8量化模型,默认为false。 如果待优化的fluid模型是非combined形式,请设置–model_dir,忽略–model_file和–param_file。
如果待优化的fluid模型是combined形式,请设置–model_file和–param_file,忽略–model_dir。 优化后的模型包括__model__.nb和param.nb文件。
至此模型就已经转换结束了。接下来到部署
-
模型部署
大家首先先去官方下载安卓demo
Github:https://github.com/PaddlePaddle/Paddle-Lite-Demo
下载好后自行配置好ndk
确认环境没有问题后,打开strings.xml
改好的输入
这样基本就部署完成了,接下来让我们看看这个的实测效果我认为还是非常不错的
实时预测非常不错,paddle lite 部署移动端到此结束,如果有任何问题都可联系我。
还请大家多多点赞,制作不易
二、ncnn模型部署安卓
-
首先我这里采用的是yolov5训练的目标检测
流程是PT–>ONNX–>NCNN想必大家都已经得到了自己训练好的模型,我的训练好 的模型在./runs/train/exp4/weights下名为best.pt的文件
安装简化工具:
pip install onnx-simplifier
简化命令如下:
python -m onnxsim best.onnx best-sim.onnx此时就已经基本完成了。
ONNX转param、bin
其实不用按照 上的有些教程下载ncnn源码编译配置一键转换 Caffe, ONNX, TensorFlow 到 NCNN, MNN, Tengine (convertmodel.com)
- 模型部署
下载ncnn-android-yolov5案例
NCNN官方提供的example:
GitHub: – nihui/ncnn-android-yolov5: The YOLOv5 object detection android example
修改example以适应自己的数据模型
anchors的值在训练开始时是默认根据数据集重新计算,所以我们首先要拿到数据模型的anchors值,代码内容如下:输出如下:
tensor([[[[[[ 6.75781, 2.00000]]],
[[[ 8.60938, 2.83594]]],
[[[ 11.01562, 4.14844]]]]],
[[[[[ 20.28125, 5.57812]]],
[[[ 26.29688, 9.30469]]],
[[[ 37.43750, 8.21875]]]]],
[[[[[39.31250, 12.95312]]],
[[[54.50000, 16.57812]]],
[[[68.62500, 25.54688]]]]]])同时输出层ID在Permute层里面,找到对应的参数:
至此,可以在Android上测试自己的模型了!
实测图片
另外yolo版本不同都可能导致转化失败,如遇困难可联系博主还请大家多多点赞,制作不易。
总结
谨记:推理的速度不是看你用的啥框架,而是取决于你的模型。
大家只要能看懂这些模型,感觉啥框架部署都是大同小异。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!
- 模型部署
-