使用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在对…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
