最近,由于实验要求,我需要把在服务器上训练好的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相关推荐

  1. 深度学习模型DNN部署到安卓设备上全流程示例——{pytorch->onnx>ncnn->Android studio}

    之前写过一篇文章 "Windows配置pytorch转onnx转ncnn转android设备" 如何配置环境设置,可以参考这篇如何配置 目录 "Windows配置pyto ...

  2. nvidia-docker2完成tensorflow/serving深度学习模型在线部署

    深度学习技术已经广泛应用在各个行业领域.实际应用,通过大量数据往往可以训练一个泛化能力好的模型,但如何将模型进行快捷.方便的远程部署,已成为好多企业考虑的问题.现阶段,常用的深度学习模型远程部署工具有 ...

  3. 基于web端和C++的两种深度学习模型部署方式

    深度学习Author:louwillMachine Learning Lab 本文对深度学习两种模型部署方式进行总结和梳理.一种是基于web服务端的模型部署,一种是基... 深度学习 Author:l ...

  4. pytorch argmax_PyTorch深度学习模型的服务化部署

    本文将介绍如何使用Flask搭建一个基于PyTorch的图片分类服务以及并行处理的相关技术.作为一个深度学习工程师,学习这些内容是为了方便对服务化的模型进行debug,因为web开发的同时常常表示他们 ...

  5. 通过MACE在Android手机上部署深度学习模型

    1. MACE的环境搭建 参考我的博客:MACE的环境搭建--conda实现 2. 构建项目 (1)下载MACE项目到本地 git clone https://github.com/XiaoMi/ma ...

  6. 在英特尔硬件上部署深度学习模型的无代码方法 OpenVINO 深度学习工作台的三部分系列文章 - CPU AI 第一部

    作者 Taylor, Mary, 翻译 李翊玮 关于该系列 了解如何转换.微调和打包推理就绪的 TensorFlow 模型,该模型针对英特尔®硬件进行了优化,仅使用 Web 浏览器.每一步都在云中使用 ...

  7. 如何在浏览器上跑深度学习模型?并且一行JS代码都不用写

    翻译 | 林椿眄 编辑 | 周翔 2017 年 8 月,华盛顿大学的陈天奇团队发布了 TVM,和 NNVM 一起组成深度学习到各种硬件的完整优化工具链,支持手机.CUDA.OpenCL.Metal.J ...

  8. 深度学习模型压缩与加速综述!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Pikachu5808,编辑:极市平台 来源丨https://zh ...

  9. 深度学习模型压缩与加速综述

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 本文详细介绍了4种主流的压缩与加速技术:结构优化.剪枝.量化 ...

最新文章

  1. angular-创建自定义的指令
  2. R语言使用ggpubr包可视化分组条形图(grouped bar plot)、并添加误差条(error bar、误差条显示平均值+/-sd)、添加分组填充色、添加jitter、自定义分组抖动数据点形状
  3. Android WebView开发问题汇总
  4. Python程序练习题5.1-输出更大的田字格。
  5. 总结了一下Ubuntu常用命令
  6. 网络工程师学习参考资料路由器配置案例分析
  7. windows下修改tomcat的startup.bat脚本文件后台运行
  8. Python--Json数据简单解析(11.18)
  9. 路由器访问控制列表基础知识
  10. 过拟合的原因以及如何解决
  11. redis雪崩 击穿 穿透
  12. 绝对值c语言不用函数,C语言 STM32 求绝对值函数
  13. Java中Files工具类的使用
  14. 三维数据可视化软件html5,基于 HTML5 的 WebGL 自定义 3D 摄像头监控模型 | 3D组态|图扑软件|数据可视化|blog...
  15. 【学习点滴】cpp遇到的一些疑问和积累
  16. 在AID Learning中用IPad或电脑连接手机
  17. 数据结构的一些基本术语概念-严蔚敏老师
  18. 初一计算机教学论文,初中信息技术教学论文
  19. JavaScript中一个等号、二个等号、 三个等号 的区别
  20. e-人事管理系统-人事档案-变更管理-人员职务变更

热门文章

  1. tcpTrace的使用
  2. 离散数学:数学语言与证明方法(练习题)
  3. I2C接口简介和时序
  4. shape制作出来的虚线
  5. 红米5双清_红米5刷recovery教程_红米5第三方中文recovery下载
  6. Linux 下Nginx开启status用以监控状态信息
  7. 显著性检验【t-test、方差分析、ks检验】
  8. Atitit 二维码和条码的历史发展 1.发展历程 编辑提及二维码的诞生,我们还得倒回至上个世纪 60 年代之后的日本,虽然 1945 年的第二次世界大战之中日本沦为战败国,可是在经济方面日本却进入
  9. 纯css实现向上箭头动画显示
  10. 数学模型课程期末复习提纲(上)