使用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代码示例)
所需环境配置
- 安装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
- 准备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
- 准备MMxx系列仓库的configs和pth文件(举例:使用mmdetection中configs下面的配置文件“faster-rcnn_r50_fpn_2x_coco.py”,然后经过训练之后得到的权重为latest.pth,分别将其放入到上述工作空间的configs文件夹和checkpoints文件夹中);
- 然后,创建“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模型对单张图片进行推理
- 在工作空间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对应的推理结果图。
参考资料
- https://gitee.com/open-mmlab/mmdeploy/blob/master/docs/zh_cn/02-how-to-run/prebuilt_package_windows.md#python-sdk
- https://gitee.com/open-mmlab/mmdeploy/blob/master/docs/zh_cn/get_started.md
- MMDeploy
2023.4.22 于 西安
相关文章:

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

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提升生产力
抽奖 一堆用户参与进来,然后随机抽取几个幸运用户给予实物/虚拟的奖品;此时,开发人员就需要写上一个抽奖的算法,来实现幸运用户的抽取;其实我们完全可以利用Redis的集合(Set),就能轻…...

Java知识点学习(第16天)
Innodb是如何实现事务的? innodb通过Buffer Pool,LogBuffer,Redo Log,Undo Log来实现事务,以一个update语句为例: innodb在收到一个update语句后,会先根据条件找到数据所在的页,并…...

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

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

C#生成单色bmp图片,转为单色bmp图片 任意语言完全用字节拼一张单色图,LCD取模 其它格式图片转为单色图
最终效果: V1.8.2 20230419 文字生成单色BMP图片4.exe 默认1280*720 如果显示不全,请把宽和高加大 字体加大。 首先,用windows画板生成一张1*1白色单色图作为标准,数据如下: 数据解析参考:BMP图像文件完…...

【瑞吉外卖】002 -- 后台登录功能开发
本文章为对 黑马程序员Java项目实战《瑞吉外卖》的学习记录 目录 一、需求分析 1、页面原型展示 2、登录页面展示 3、查看登录请求信息 4、数据模型 二、代码开发 1、创建实体类Employee,和employee表进行映射 2、创建包结构:(Controller、Se…...
【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

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

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

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

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

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

今天面试招了个25K的测试员,从腾讯出来的果然都有两把刷子···
公司前段时间缺人,也面了不少测试,前面一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在15-25k,面试的人很多,但平均水平很让人失望。看简历很多都是4年工作经验,但面试中,不…...

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

数据结构考研版——队列的配置问题
一、正常配置下的情况 队空状态 frontrear;入队操作 出队操作 队满状态 在正常配置下元素的个数(rear>front) 当rear<front 综上所述用一个表达式表示:(rear-frontmaxSize)%maxSize 二、非正常配置下的情况1 队空状态 入队操作…...

【SOAP-WebService系列】SOAP学习笔记
目录 1、SOAP是什么? 2、SOAP特性 3、SOAP消息组成 4、SOAP调用 5、SOAP和HTTP 1、SOAP是什么? SOAP(Simple Object Access Protocol,即简单对象访问协议) ,是一个轻量级协议,用于在分散的分布式环境中使用XML在对…...

材料科学|名词解释终版!!!
晶体:组成物质的原子,分子或离子按照一定的周期性规则排列形成的固体。 非晶体:原子在三维空间的不规则排列,长程无序,各向同性。 晶体结构:原子,离子,原子团按照空间点阵而进行的…...

永久免费内网穿透不限制速度
市面上的免费内网穿透大都有格式各样的限制,什么限制流量啊,每个月要签到打卡啊,还有更改域名地址等,只有神卓互联内网穿透是永久免费没有限制的,白嫖也可以。 这篇文章分享了3个方案,按照性能和综合指标排…...

JAVA开发运维(云基础设备监控)
在大型的商用系统中,经常需要监控云设备的健康状态,性能情况,流量数据等。及时发现系统问题,及时修复,以确保系统的高可用。检查云资源的工作内容主要包括基础监控、主动拨测、用户体验、APM监控、指标体系、业务分析、…...

现在备考2023年5月软考网络工程师时间够吗?
距离2023年5月软考还有1个多月的时间,备考网络工程师的时间是够的,以下是一些备考方法: 1.了解考试内容 在你开始学习考试之前,了解考试的形式和内容是很重要的。这将帮助你把注意力集中在最有可能被测试的领域。你应该复习考试…...

webp怎么转换成png,4个方法教你快速处理
webp怎么转换成png?目前在一些比较大的图片素材网站下载的图片都是webp格式的。我们都知道webp格式图片,它在正常的图片浏览器中是无法打开的。 所以说我们要把webp图片转变成png格式,正常来说我们常用的图片处理软件也能进行格式转换&#x…...

程序员能干多久?程序员能干到多大年龄?
程序员可以工作多少年?大多数程序员认为程序员是吃青春饭的工作。编程只能干到30岁,最长可达35岁。我经常听到这样的话,都让人倍感压力。今天,我们来谈谈这个老话题...... 程序员能干多久? 根据国外的经验来说,干到…...

采购系统是如何管理供应商的?
随着数字化的推进,企业面临着越来越多的供应商管理问题。企业采购数字化转型已经成为大势所趋,对于采购数字化转型而言,供应商管理是重要一环。 供应商准入管理 在供应商准入阶段,企业需要从供应商资质、财务能力、信誉能力、管理…...

Linux学习笔记(2)--一些内核接口
1)dump_stack dump_stack()是Linux内核中的一个函数,用于在内核中输出当前的函数调用栈。该函数会输出当前线程(或进程)的函数调用栈信息,以及相应的调用地址和虚拟内存地址等信息,一般用于诊断程序运行时…...

学习风`宇博客用户权限菜单模块
文章目录 用户-角色-菜单-资源 各表关系图菜单 和 路由菜单表及分析分析 /api/admin/user/menus接口MenuServiceImpl#listUserMenus接口返回示例及分析 前端代码分析menu.jsSideBar.vue 接口权限控制资源表 及 分析分析 WebSecurityConfig权限控制整体流程先说登录UserDetailsS…...

centos7.6部署ELK集群(一)之elasticsearch7.7.0集群部署
32.3. 部署es7.7.0 32.3.1. 下载es(各节点都做) wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.0-linux-x86_64.tar.gz 32.3.2. 解压至安装目录(各节点都做) tar -xvf elasticsearch-7.7.0-li…...