当前位置: 首页 > news >正文

使用MMDeploy(预编译包)转换MMxx(MMDeploy支持库均可)pth权重到onnx,并使用python SDK进行部署验证

MMDeploy使用python部署实践记录

  • 准备工作空间
  • 所需环境配置
  • 使用MMDeploy得到onnx
  • 使用MMDeploy加载onnx模型对单张图片进行推理
  • 使用python SDK对onnx模型进行验证

注意
mmdeploy C++ SDK的使用部署和实际操作过程请看本人另外一篇博文使用MMDeploy(预编译包)转换MMxx(MMDeploy支持库均可)pth权重到onnx,并使用C++ SDK加载onnx得到dll动态链接库,实现在windows平台中调用(linux也适用)

准备工作空间

为了更好地说明本文需要的环境配置等,现指出一个具体的工作空间和其中包含的各种文件

# 一个具体的工作空间目录构成如下
工作空间根目录
--------work_space
包含的子目录和文件
----------------checkpoints(保存使用MMxx系列仓库训练得到的pth权重)
----------------configs(保存使用MMxx系列仓库训练使用的pipeline对应的configs配置文件)
----------------images(保存用于测试onnx推理是否成功的图片文件夹)
----------------mmdeploy(使用git clone xxx命令得到的mmdeploy源码仓库,主要为了使用其中的mmdeploy)
----------------mmdeploy-0.14.0-windows-amd64-cuda11.3(下载的预编译版本的mmdeploy包)
----------------work_dir(用于保存mmdeploy生成的onnx文件及其他文件,相当于结果文件夹)
----------------python_torch2onnx.py(用于将pth权重文件转换为onnx文件的py脚本,自己创建,后续会有demo代码示例)
----------------python_onnx_inference.py(用于测试onnx的推理py脚本,自行创建,后续会有demo代码示例)

所需环境配置

  1. 安装anaconda,并创建虚拟环境,本文所需环境均已通过测试
# ----------------安装conda基础环境
conda create -n your_env_name python=3.7 
conda activate your_env_name# ---------------查看本机cuda版本(nvidia-smi显卡驱动中cuda版本)
nvidia-smi (打印出来的表格右上方可见)
example:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 527.54       Driver Version: 527.54       CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ... WDDM  | 00000000:01:00.0  On |                  N/A |
| N/A   52C    P8    18W / 136W |    119MiB / 16384MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+# -----注意安装的cuda运行时版本应当小于或等于显卡驱动中cuda版本
# -----本机显卡驱动版本为12.0,我安装的是pytorch1.10.1_cudan11.3_cudnn8这个版本
conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=11.3 -c pytorch -c conda-forge
  1. 准备MMDeploy环境
# 首先,安装MMCV-FULL,通过MIM安装MMCV
pip install -U openmim
mim install mmcv-full# 然后,下载预编译版本的mmdeploy,这里我选择了“mmdeploy-0.14.0-windows-amd64-cuda11.3” release来安装
# 对应网址为:https://github.com/open-mmlab/mmdeploy/releases/tag/v0.14.0
# 或者直接访问该链接启动下载:https://github.com/open-mmlab/mmdeploy/releases/download/v0.14.0/mmdeploy-0.14.0-windows-amd64-cuda11.3.zip# ---------在当前工作空间下的windows power shell中运行命令:git clone https://github.com/open-mmlab/mmdeploy.git,将mmdeploy仓库源码保存到工作空间(主要是为了使用其中的configs文件夹下的配置文件,后面会有介绍)# 然后,安装mmdeploy 0.14.0版本
pip install mmdeploy==0.14.0# 安装mmdeploy_python 0.14.0版本
pip install mmdeploy-python==0.14.0# 安装onnxruntime
pip install onnxruntime# 进入刚刚下载好的mmdeploy预编译包目录/path/to/mmdeploy-0.14.0-windows-amd64-cuda11.3/下
将路径:path/to/mmdeploy-0.14.0-windows-amd64-cuda11.3/thirdparty/onnxruntime/lib添加到本机系统环境变量# 然后,重启windows power shell使环境变量生效,可以通过 echo $env:PATH 来检查环境变量是否设置成功。

使用MMDeploy得到onnx

  1. 准备MMxx系列仓库的configs和pth文件(举例:使用mmdetection中configs下面的配置文件“faster-rcnn_r50_fpn_2x_coco.py”,然后经过训练之后得到的权重为latest.pth,分别将其放入到上述工作空间的configs文件夹和checkpoints文件夹中);
  2. 然后,创建“python_torch2onnx.py”文件,示例代码如下:
from mmdeploy.apis import torch2onnx
from mmdeploy.backend.sdk.export_info import export2SDK# 需要在转换pth到onnx时传入一张图片
img = 'images/demo.jpg'# 保存结果路径的文件夹
work_dir = 'work_dir/onnx/your_model_name'# 注意这里尽量使用mmdeploy原始文档中推荐的end2end.onnx名称,后续加载onnx时,避免一些错误出现
save_file = 'end2end.onnx'# 使用mmdeploy源码仓库中的mmdet对应config文件(如果你使用的mmcls,那么就需要到mmcls下面找到合适的deploy config文件)
deploy_cfg = 'mmdeploy/configs/mmdet/detection/detection_onnxruntime_dynamic.py'# 加载你训练好的模型的config配置文件(这里以“faster-rcnn_r50_fpn_2x_coco.py”举例)
model_cfg = 'configs/faster-rcnn_r50_fpn_2x_coco.py'# 加载使用上述模型配置文件得到的训练权重latest.pth
model_checkpoint = 'checkpoints/latest.pth'# 设置device为cpu
device = 'cpu'# 1. convert model to onnx
torch2onnx(img, work_dir, save_file, deploy_cfg, model_cfg,model_checkpoint, device)# 2. extract pipeline info for sdk use (dump-info)
export2SDK(deploy_cfg, model_cfg, work_dir, pth=model_checkpoint, device=device)

如果一切顺利,你会在/path/to/your/work_space/work_dir/onnx/your_model_name得到如下文件:

deploy.json
detail.json
end2end
pipeline.json

使用MMDeploy加载onnx模型对单张图片进行推理

  1. 在工作空间work_space下创建文件“python_onnx_inference.py”,示例代码如下:
from mmdeploy.apis import inference_model# 加载使用git clone 下载的mmdeploy中相关的deploy config文件
deploy_cfg = 'mmdeploy/configs/mmdet/detection/detection_onnxruntime_dynamic.py'# 加载模型权重对应的config文件
model_cfg = 'configs/faster-rcnn_r50_fpn_2x_coco.py'# 设置后端推理使用的onnx模型路径
backend_files = ['work_dir/onnx/your_model_name/end2end.onnx']# 设置后端推理所需的demo图片
img = ['images/demo.jpg']# 设置使用cpu设备
device = 'cpu'# 调用mmdeploy中推理函数接口得到result结果
result = inference_model(model_cfg, deploy_cfg, backend_files, img, device)# 控制台打印得到的results结果
print("result: {}".format(result))

如果一切顺利的话,最后的print()会正常输出。

使用python SDK对onnx模型进行验证

在工作空间work_space下运行如下命令:

python .\mmdeploy\demo\python\object_detection.py cpu .\work_dir\onnx\your_model_name\ .\images\demo.jpg

之后在work_space工作空间目录下会得到demo.jpg对应的推理结果图。

参考资料

  1. https://gitee.com/open-mmlab/mmdeploy/blob/master/docs/zh_cn/02-how-to-run/prebuilt_package_windows.md#python-sdk
  2. https://gitee.com/open-mmlab/mmdeploy/blob/master/docs/zh_cn/get_started.md
  3. MMDeploy

2023.4.22 于 西安

相关文章:

使用MMDeploy(预编译包)转换MMxx(MMDeploy支持库均可)pth权重到onnx,并使用python SDK进行部署验证

MMDeploy使用python部署实践记录 准备工作空间所需环境配置使用MMDeploy得到onnx使用MMDeploy加载onnx模型对单张图片进行推理使用python SDK对onnx模型进行验证 注意 mmdeploy C SDK的使用部署和实际操作过程请看本人另外一篇博文使用MMDeploy(预编译包&#xff09…...

Shiro安全框架简介

一、权限管理 1.1 什么是权限管理 基本上只要涉及到用户参数的系统都要进行权限管理,使用权限管理实现了对用户访问系统的控制,不同的用户访问不同的资源。按照安全规则或者安全策略控制用户访问资源,而且只能访问被授权的资源 权限管理包括认…...

三行Python代码,让数据处理速度提高2到6倍

本文可以教你仅使用 3 行代码,大大加快数据预处理的速度。 Python 是机器学习领域内的首选编程语言,它易于使用,也有很多出色的库来帮助你更快处理数据。但当我们面临大量数据时,一些问题就会显现…… 在默认情况下,…...

空间向量模长

// 空间向量模长 #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc, char **argv) { float x, y, z; float mochang 0.0; x y z 0.0; if (argc ! 4) { printf("usage:%s x y z\n", argv[1]); …...

活动需求中灵活使用Redis提升生产力

抽奖 一堆用户参与进来&#xff0c;然后随机抽取几个幸运用户给予实物/虚拟的奖品&#xff1b;此时&#xff0c;开发人员就需要写上一个抽奖的算法&#xff0c;来实现幸运用户的抽取&#xff1b;其实我们完全可以利用Redis的集合&#xff08;Set&#xff09;&#xff0c;就能轻…...

Java知识点学习(第16天)

Innodb是如何实现事务的&#xff1f; innodb通过Buffer Pool&#xff0c;LogBuffer&#xff0c;Redo Log&#xff0c;Undo Log来实现事务&#xff0c;以一个update语句为例&#xff1a; innodb在收到一个update语句后&#xff0c;会先根据条件找到数据所在的页&#xff0c;并…...

ORA-1688: unable to extend table AUDSYS.AUD$UNIFIED

昨晚正在外滩玩&#xff0c;有个客户发过来一段报错&#xff0c;已经影响到业务了。一看就是12C以后版本才有的问题&#xff0c;&#xff0c;赶紧在手机中收到临时解决办法 报错如下 ORA-1688: unable to extend table AUDSYS.AUD$UNIFIED partition SYS_P42549 by 1024 in t…...

抖音滑块以及轨迹分析

声明 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 如有侵权,请联系我进行删除。 我们在web端打开用户主页的时候,时不时的会出现滑…...

C#生成单色bmp图片,转为单色bmp图片 任意语言完全用字节拼一张单色图,LCD取模 其它格式图片转为单色图

最终效果&#xff1a; V1.8.2 20230419 文字生成单色BMP图片4.exe 默认1280*720 如果显示不全&#xff0c;请把宽和高加大 字体加大。 首先&#xff0c;用windows画板生成一张1*1白色单色图作为标准&#xff0c;数据如下&#xff1a; 数据解析参考&#xff1a;BMP图像文件完…...

【瑞吉外卖】002 -- 后台登录功能开发

本文章为对 黑马程序员Java项目实战《瑞吉外卖》的学习记录 目录 一、需求分析 1、页面原型展示 2、登录页面展示 3、查看登录请求信息 4、数据模型 二、代码开发 1、创建实体类Employee&#xff0c;和employee表进行映射 2、创建包结构&#xff1a;&#xff08;Controller、Se…...

【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

java IO流_1

目录 分类 字节流 InputStream OutputStream 文件拷贝 字符流 FileReader FileWriter 处理流 BufferedReader BufferedWriter 文本拷贝 流是从起源到接受的有序数据&#xff0c;通过流的方式允许程序使用相同的方式来访问不同的输入/输出源。 分类 按数据…...

【回忆 总结】我的大学四年

大学四年关键词速览 如果穿越回大一&#xff0c;你想对大一的你提什么最重要的建议&#xff1f;同样是上网课&#xff0c;我为何能比大多数同学学的更好&#xff1f;回到学校&#xff0c;我的大二似乎一帆风顺&#xff1f;在不断的迷茫和徘徊中&#xff0c;大三的我做出的决定&…...

深度解析OEKO

【深度解析OEKO】 什么是OEKO-TEX Standard 100&#xff1f; OEKO-TEX Standard 100现在是使用最为广泛的纺织品生态标志。OEKO-TEX Standard 100规定的标准是根据最新的科学知识&#xff0c;对纱线、纤维以及各类纺织品的有害物质含量规定限度。只有按照严格检测和检查程序提供…...

Golang gorm

GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly. 一 对多入门 比如要开发cmdb的系统&#xff0c;无论是硬件还是软件。硬件对应的就是对应的哪个开发在用。或者服务对应的是哪个业务模块在使用&#xff0c;或者应用谁在使用。那么这…...

rk3568 适配摄像头 (CIF协议)

rk3568 适配摄像头 (CIF协议) 在RK3568处理器中&#xff0c;支持CIF协议的摄像头可以通过CSI接口连接到处理器&#xff0c;实现视频数据的采集和处理。同时&#xff0c;RK3568还支持多种图像处理算法和编解码器&#xff0c;可以对采集到的视频数据进行实时处理和压缩&#xff…...

今天面试招了个25K的测试员,从腾讯出来的果然都有两把刷子···

公司前段时间缺人&#xff0c;也面了不少测试&#xff0c;前面一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在15-25k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是4年工作经验&#xff0c;但面试中&#xff0c;不…...

Redis---集群环境准备

一、redis集群环境准备 1、部署Redis集群的目的&#xff1a; 多台服务器一起提供数据存储服务&#xff1b; 实现数据的分布式存储&#xff1b; 可以实现服务的高可用&#xff1b; 可用实现数据自动备份&#xff1b; 2、服务器IP地址及端口&#xff1a; 主机名 IP地…...

数据结构考研版——队列的配置问题

一、正常配置下的情况 队空状态 frontrear;入队操作 出队操作 队满状态 在正常配置下元素的个数&#xff08;rear>front&#xff09; 当rear<front 综上所述用一个表达式表示&#xff1a;(rear-frontmaxSize)%maxSize 二、非正常配置下的情况1 队空状态 入队操作…...

【SOAP-WebService系列】SOAP学习笔记

目录 1、SOAP是什么&#xff1f; 2、SOAP特性 3、SOAP消息组成 4、SOAP调用 5、SOAP和HTTP 1、SOAP是什么&#xff1f; SOAP(Simple Object Access Protocol&#xff0c;即简单对象访问协议) &#xff0c;是一个轻量级协议&#xff0c;用于在分散的分布式环境中使用XML在对…...

药物发现自动化:FEP计算工作流引擎faah的设计原理与实战

1. 项目概述&#xff1a;一个面向药物发现的自动化工作流引擎 最近在药物研发的自动化工具领域&#xff0c;一个名为 kiron0/faah 的项目引起了我的注意。这并非一个简单的脚本集合&#xff0c;而是一个设计精巧、旨在为药物发现中的自由能微扰计算提供端到端自动化解决方案的…...

AXI Crossbar设计解析:从总线互联原理到SoC集成实战

1. 项目概述&#xff1a;AXI Crossbar&#xff0c;不仅仅是“总线交叉开关”在复杂的数字系统设计&#xff0c;尤其是SoC&#xff08;片上系统&#xff09;和FPGA应用中&#xff0c;我们常常面临一个核心问题&#xff1a;多个主设备&#xff08;Master&#xff0c;如CPU、DMA控…...

ARM Cortex-X系列处理器参数配置与性能优化指南

1. ARM Cortex-X系列处理器参数配置概述在移动计算和嵌入式系统领域&#xff0c;ARM Cortex-X系列处理器代表了ARM架构中的高性能核心设计。作为芯片设计工程师&#xff0c;我经常需要对这些处理器的参数进行精细调整&#xff0c;以实现最佳的性能和能效平衡。处理器参数配置本…...

【2026最新】鸿蒙NEXT数据持久化实战:培训班管理系统数据存储全攻略

鸿蒙开发中数据总是丢失&#xff1f;本地存储和网络请求搞不定&#xff1f;本文用15分钟带你彻底搞懂Preferences、RDB、HTTP三大数据持久化方案&#xff0c;附完整培训班管理系统实战代码和踩坑记录&#xff0c;让你的鸿蒙App数据存储从此安全可靠&#xff01;一、学员信息本地…...

Midjourney玩具相机风格从翻车到封神:1个--v 6.1专属参数组合+2个隐藏式胶片颗粒注入指令+1套曝光补偿校准表

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney玩具相机风格的视觉本质与审美悖论 失真即真实&#xff1a;玩具相机的光学哲学 玩具相机&#xff08;Toy Camera&#xff09;风格在 Midjourney 中并非简单模拟 Lomography 或 Holga 的物理…...

555时基电路:从内部原理到三大经典应用模式全解析

1. 从“黑盒子”到“瑞士军刀”&#xff1a;初识555时基电路如果你刚开始接触电子设计&#xff0c;或者玩过一些简单的单片机项目&#xff0c;可能会觉得产生一个精确的延时、一个稳定的方波信号&#xff0c;或者把一个不规则的波形“修整”得漂漂亮亮&#xff0c;是一件需要写…...

可穿戴智能服饰制作:NeoPixel灯带与Circuit Playground的集成实践

1. 项目概述&#xff1a;当可穿戴电子遇上创意服饰如果你和我一样&#xff0c;既着迷于微控制器上跑起的第一行代码&#xff0c;又无法抗拒布料、针线和那些闪闪发光的小玩意儿&#xff0c;那么这个项目就是为你准备的。将NeoPixel灯带和Circuit Playground微控制器“缝”进一件…...

从Crustocean/conch看轻量级工作流编排:DAG原理与Python实现

1. 项目概述&#xff1a;从“Crustocean/conch”看现代数据管道编排的演进最近在梳理团队的数据处理流程时&#xff0c;我又一次被那些错综复杂的脚本、定时任务和手动依赖检查搞得焦头烂额。这让我想起了几年前第一次接触“Crustocean/conch”这个项目时的情景。当时&#xff…...

089、机器人动力学:拉格朗日法

机器人动力学:拉格朗日法 从一次机械臂抖动说起 去年调试一台六轴协作机器人,末端负载从0.5kg换到2kg,位置环PID参数调了三轮,静态精度勉强达标。一跑轨迹,末端抖得像筛糠。同事说“加个低通滤波”,我试了,抖动小了,但轨迹跟踪滞后明显。后来翻出动力学模型,用拉格朗…...

AI 写作进入长篇记忆时代,AI让小说创作更可控

AI 写小说最常被讨论的问题&#xff0c;是写得快不快、文笔好不好。但对于真正写长篇的作者来说&#xff0c;还有一个更重要的问题&#xff1a;AI 记不记得住。 一部网文写到几十章、几百章后&#xff0c;人物关系会越来越复杂&#xff0c;伏笔会越来越多&#xff0c;世界观设…...