深度学习模型DNN部署到安卓(移动)设备上——pytorch->onnx->ncnn->Android
最近,由于实验要求,我需要把在服务器上训练好的pytorch模型预训练.pth文件部署到安卓端测试推理时间,但是一直不知道应该怎么转变模型和部署,查了很多资料,遇到了很多问题,在同学的帮助下,尝试成功。
我简单记录一下整个部署流程,希望可以帮助想要尝试的同志们,同时,如果之后还需要部署相同项目的时候,我还可以参考这篇笔记。
一共有四个部分,pytorch->onnx->ncnn->Android
1.pytorch->onnx
(1)安装onnx和onnxruntime
onnx: pip install onnx
onnxruntime:
CPU版本:pip install onnxruntime
GPU版本:pip install onnxruntime-gpu
我使用的是gpu版本,在服务器上安装的
(2)pytorch->onnx
1)我使用pytorch生成了预训练的pth文件,把这个文件转换成onnx文件,只需要一个函数:
#导出onnx文件
torch_out = torch.onnx._export(model, x, output_onnx, export_params=True, verbose=False, input_names=input_names, output_names=output_names)
参数:
model :torch模型 pth文件
x:模型的输入 tensor
output_onnx:模型输出位置和文件 如:“resnet.onnx”
export_params:bool,default=True true表示导出trained model。默认即可
注意:在这个函数之前一定先使用model.eval()
2)onnxruntime加载onnx模型测试
import onnx
model = onnx.load("model.onnx") # 加载onnx
onnx.checker.check_model(model) # 检查生成模型是否错误
2.onnx->ncnn
ncnn安装之前需要先安装opencv和protocol
1)protocol各版本地址:https://github.com/protocolbuffers/protobuf/releases
我安装的3.17.0
unzip protobuf-all-3.17.0.zip
cd protobuf-all-3.17.0
./configure --prefix=/usr/local
make -j4
make check -j4
sudo make install
sudo ldconfig
2)opencv官网:https://opencv.org/releases/page/2/
我安装的4.5.0
##依赖项
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
##源码编译
unzip opencv-4.5.0.zip
cd opencv-4.5.0
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j8
sudo make install
sudo ldconfig
3)克隆ncnn项目
git clone https://github.com/Tencent/ncnn.git
然后,编译一下
cd ncnn
mkdir -p build
cd build
cmake ..
make -j4
在build/tools/onnx/ 目录下就有转换工具onnx2ncnn文件了
4)简化onnx模型
安装工具:
pip3 install onnx-simplifier#简化模型
python3 -m onnxsim mobilenetv3.onnx mobilenetv3-sim.onnx
然后去到目录build/tools/onnx/下运行(每次运行新的程序都需要重新执行上面的代码编译onnx)
onnx2ncnn mobilenetv3-sim.onnx mobilenetv3.param mobilenetv3.bin
mobilenetv3.param 和mobilenetv3.bin是我们所需的ncnn文件
5)xxx.id.h文件生成
到目录build/tools/目录下运行
./ncnn2mem mobilenetv3.param mobilenetv3.bin mobilenetv3.id.h mobilenetv3.mem.h
生成包含网络结构名字的文件,后续文件中会用到这里面的网络结构名字。
比较基本的就是会修改输入输出的名字,如下面。
ex.input(mobilenetv3_param_id::BLOB_input_1, in);
ncnn::Mat out;
ex.extract(mobilenetv3_param_id::BLOB_653, out);
github参考链接
(3)ncnn->Android
这一步真的是我弄了两天,因为要跑别人的项目,所以在环境配置上有很多的问题,搞得很心烦。
我这一步是在windows上运行的,安装了android studio。
建议大家先跑别人的程序试一下:squeezenet
这个链接里面也有教程,应该怎么使用,很好用。
我在调整android studio时有很多问题,主要是代理的配置有问题:
(1)导入项目在Building gradle project info 时一直卡住
根据自己文件夹中对应的版本下载
(2)studio Connection refused (Connection refused)问题:
第三种情况解决的问题
(3)No toolchains found in the NDK toolchains folder for ABI with prefix:
很有用的解决方案
(4)根目录下没有 gradle.properties 文件
可以用Android studio新建一个项目,把它的gradle.properties 文件拷贝过来,
然后加上
android.useAndroidX=trueandroid.enableJetifier=true
然后sync project 或者重启工程
深度学习模型DNN部署到安卓(移动)设备上——pytorch->onnx->ncnn->Android相关推荐
- 深度学习模型DNN部署到安卓设备上全流程示例——{pytorch->onnx>ncnn->Android studio}
之前写过一篇文章 "Windows配置pytorch转onnx转ncnn转android设备" 如何配置环境设置,可以参考这篇如何配置 目录 "Windows配置pyto ...
- nvidia-docker2完成tensorflow/serving深度学习模型在线部署
深度学习技术已经广泛应用在各个行业领域.实际应用,通过大量数据往往可以训练一个泛化能力好的模型,但如何将模型进行快捷.方便的远程部署,已成为好多企业考虑的问题.现阶段,常用的深度学习模型远程部署工具有 ...
- 基于web端和C++的两种深度学习模型部署方式
深度学习Author:louwillMachine Learning Lab 本文对深度学习两种模型部署方式进行总结和梳理.一种是基于web服务端的模型部署,一种是基... 深度学习 Author:l ...
- pytorch argmax_PyTorch深度学习模型的服务化部署
本文将介绍如何使用Flask搭建一个基于PyTorch的图片分类服务以及并行处理的相关技术.作为一个深度学习工程师,学习这些内容是为了方便对服务化的模型进行debug,因为web开发的同时常常表示他们 ...
- 通过MACE在Android手机上部署深度学习模型
1. MACE的环境搭建 参考我的博客:MACE的环境搭建--conda实现 2. 构建项目 (1)下载MACE项目到本地 git clone https://github.com/XiaoMi/ma ...
- 在英特尔硬件上部署深度学习模型的无代码方法 OpenVINO 深度学习工作台的三部分系列文章 - CPU AI 第一部
作者 Taylor, Mary, 翻译 李翊玮 关于该系列 了解如何转换.微调和打包推理就绪的 TensorFlow 模型,该模型针对英特尔®硬件进行了优化,仅使用 Web 浏览器.每一步都在云中使用 ...
- 如何在浏览器上跑深度学习模型?并且一行JS代码都不用写
翻译 | 林椿眄 编辑 | 周翔 2017 年 8 月,华盛顿大学的陈天奇团队发布了 TVM,和 NNVM 一起组成深度学习到各种硬件的完整优化工具链,支持手机.CUDA.OpenCL.Metal.J ...
- 深度学习模型压缩与加速综述!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Pikachu5808,编辑:极市平台 来源丨https://zh ...
- 深度学习模型压缩与加速综述
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 本文详细介绍了4种主流的压缩与加速技术:结构优化.剪枝.量化 ...
最新文章
- angular-创建自定义的指令
- R语言使用ggpubr包可视化分组条形图(grouped bar plot)、并添加误差条(error bar、误差条显示平均值+/-sd)、添加分组填充色、添加jitter、自定义分组抖动数据点形状
- Android WebView开发问题汇总
- Python程序练习题5.1-输出更大的田字格。
- 总结了一下Ubuntu常用命令
- 网络工程师学习参考资料路由器配置案例分析
- windows下修改tomcat的startup.bat脚本文件后台运行
- Python--Json数据简单解析(11.18)
- 路由器访问控制列表基础知识
- 过拟合的原因以及如何解决
- redis雪崩 击穿 穿透
- 绝对值c语言不用函数,C语言 STM32 求绝对值函数
- Java中Files工具类的使用
- 三维数据可视化软件html5,基于 HTML5 的 WebGL 自定义 3D 摄像头监控模型 | 3D组态|图扑软件|数据可视化|blog...
- 【学习点滴】cpp遇到的一些疑问和积累
- 在AID Learning中用IPad或电脑连接手机
- 数据结构的一些基本术语概念-严蔚敏老师
- 初一计算机教学论文,初中信息技术教学论文
- JavaScript中一个等号、二个等号、 三个等号 的区别
- e-人事管理系统-人事档案-变更管理-人员职务变更
热门文章
- tcpTrace的使用
- 离散数学:数学语言与证明方法(练习题)
- I2C接口简介和时序
- shape制作出来的虚线
- 红米5双清_红米5刷recovery教程_红米5第三方中文recovery下载
- Linux 下Nginx开启status用以监控状态信息
- 显著性检验【t-test、方差分析、ks检验】
- Atitit 二维码和条码的历史发展 1.发展历程 编辑提及二维码的诞生,我们还得倒回至上个世纪 60 年代之后的日本,虽然 1945 年的第二次世界大战之中日本沦为战败国,可是在经济方面日本却进入
- 纯css实现向上箭头动画显示
- 数学模型课程期末复习提纲(上)