【mmdeploy】mmseg转ONNX/TensorRT,附推理代码

article/2025/9/28 4:55:36

目录

1.关于mmdeploy 

2.环境安装

2.1预编译安装(Linux-x86_64, CUDA 11.x, TensorRT 8.2.3.0):

2.2预编译安装(Linux-x86_64, CUDA 11.x, ONNX):

3.mmseg工程torch转onnx

4.使用onnx模型文件进行推理


1.关于mmdeploy 

MMDeploy 是 OpenMMLab 模型部署工具箱,为各算法库提供统一的部署体验。基于 MMDeploy,开发者可以轻松从训练 repo 生成指定硬件所需 SDK,省去大量适配时间。MMDeploy 提供了一系列工具,帮助您更轻松的将 OpenMMLab 下的算法部署到各种设备与平台上。

2.环境安装

提示:不要使用mmseg工程里的deploy工具,建议使用openmmlab下的mmdeploy工程(血泪教训)。

既然是要推理部署,大概率是已经训练好模型了,基础的openmmlab环境包(mmsegmentation,mmcv-full......)应该已经安装过了,因此官网中的步骤(安装mmseg、mmcv)可以不用操作了,只需要激活本地的训练时的环境(比如:openmmlab),再安装缺少的包就可以了。

需要安装的包有:mmdeploy\onnx\tensorrt\pycuda。。。

预编译好的平台和设备如下,不在的请自行下载源码编译安装。

2.1预编译安装(Linux-x86_64, CUDA 11.x, TensorRT 8.2.3.0):

wget https://github.com/open-mmlab/mmdeploy/releases/download/v0.12.0/mmdeploy-0.12.0-linux-x86_64-cuda11.1-tensorrt8.2.3.0.tar.gz
tar -zxvf mmdeploy-0.12.0-linux-x86_64-cuda11.1-tensorrt8.2.3.0.tar.gz
cd mmdeploy-0.12.0-linux-x86_64-cuda11.1-tensorrt8.2.3.0
pip install dist/mmdeploy-0.12.0-py3-none-linux_x86_64.whl
pip install sdk/python/mmdeploy_python-0.12.0-cp38-none-linux_x86_64.whl
cd ..
# 安装推理引擎 TensorRT
# !!! 从 NVIDIA 官网下载 TensorRT-8.2.3.0 CUDA 11.x 安装包并解压到当前目录
pip install TensorRT-8.2.3.0/python/tensorrt-8.2.3.0-cp38-none-linux_x86_64.whl
pip install pycuda
export TENSORRT_DIR=$(pwd)/TensorRT-8.2.3.0
export LD_LIBRARY_PATH=${TENSORRT_DIR}/lib:$LD_LIBRARY_PATH
# !!! 从 NVIDIA 官网下载 cuDNN 8.2.1 CUDA 11.x 安装包并解压到当前目录
export CUDNN_DIR=$(pwd)/cuda
export LD_LIBRARY_PATH=$CUDNN_DIR/lib64:$LD_LIBRARY_PATH

2.2预编译安装(Linux-x86_64, CUDA 11.x, ONNX):

wget https://github.com/open-mmlab/mmdeploy/releases/download/v0.12.0/mmdeploy-0.12.0-linux-x86_64-onnxruntime1.8.1.tar.gz
tar -zxvf mmdeploy-0.12.0-linux-x86_64-onnxruntime1.8.1.tar.gz
cd mmdeploy-0.12.0-linux-x86_64-onnxruntime1.8.1
pip install dist/mmdeploy-0.12.0-py3-none-linux_x86_64.whl
pip install sdk/python/mmdeploy_python-0.12.0-cp3X-none-linux_x86_64.whl  #注意自己python版本对应
cd ..
# 安装推理引擎 ONNX
pip install onnxruntime-gpu==1.8.1  #安装GPU版本
pip install onnxruntime==1.8.1       #安装CPU版本wget https://github.com/microsoft/onnxruntime/releases/download/v1.8.1/onnxruntime-linux-x64-1.8.1.tgz
tar -zxvf onnxruntime-linux-x64-1.8.1.tgz
export ONNXRUNTIME_DIR=$(pwd)/onnxruntime-linux-x64-1.8.1
export LD_LIBRARY_PATH=$ONNXRUNTIME_DIR/lib:$LD_LIBRARY_PATH

3.mmseg工程torch转onnx

在准备工作就绪后,我们可以使用 MMDeploy 中的工具 tools/deploy.py,将 OpenMMLab 的 PyTorch 模型转换成推理后端支持的格式。

python tools/deploy.py \$DEPLOY_CFG \$MODEL_CFG \$PTH_MODEL_PATH \--work-dir $OUT_PATH \--show --device cuda --dump-info

其中:

DEPLOY_PATH为mmdeploy工程下./mmedeploy/configs/mmseg/XXX.py的config文件路径

MODEL_CFG为自己训练时的config文件,一般在pth模型同目录下就有

PTH_MODEL_PATH为需要转的pth模型文件地址

OUT_PATH为输出的onnx模型文件地址和对应的json存放地址

举个栗子:

python tools/deploy.py \/root/workspace/mmdeploy/configs/mmseg/segmentation_onnxruntime_dynamic.py \/root/workspace/mmseg/MMSEG_DEPLOY/uper_swin_base.py \/root/workspace/mmseg/MMSEG_DEPLOY/best_mIoU_epoch_500.pth \--work-dir /root/workspace/mmseg/MMSEG_DEPLOY/OUTPUT \--show --device cuda --dump-info

紧接着就等待去结果路径中寻找生成的onnx模型文件吧!

4.使用onnx模型文件进行推理

推理过程比较简单,可以自行花式修改

from mmdeploy.apis import inference_modelresult = inference_model(model_cfg = 'data/project/mmseg/weights/ersi_uper_swin_base.py',deploy_cfg = '/data/project/mmdeploy-master/configs/mmseg/segmentation_onnxruntime_dynamic.py',backend_files = ['/data/project/end2end.onnx'],img ='in_img_path/xxx.png',device='cuda:0')

其中:

model_cfg为训练时的config文件

deploy_cfg为mmdeploy工程下的/configs/mmseg/XXX.py文件

backend_file为刚才转出来的onnx模型地址

img就是要推理的原始影像

注意:此处输出的result为list格式,如果需要保存结果的话,需要先转成numpy再取对应的维度,最后保存成影像格式。或者参考mmseg/tools/test.py的处理方法,把所有影像预测结果append到一个大的list中,最后依次保存。

pred = (np.array(result)[0,:,:]).astype(np.uint8)  #将result保存成一张影像
cv2.imwrite(out_img_path,pred)

至此,torch转ONNX的全流程就走完了,欢迎交流debug!

整理不易,欢迎一键三连!!!


http://chatgpt.dhexx.cn/article/P0ujQlWG.shtml

相关文章

讨论Matlab中double,im2double,mat2gray函数区别

图像类和类型间的转换 im2uint8 将输入中所有小于0的设置为0,而将输入中所有大于1的设置为255 其他的所有乘以255 im2uint16 将输入中所有小于0的设置为0,而将输入中所有大于1的设置为65535 mat2gray 把一个double类的任意数组转换成值范围在[0,1]的归一化double类数组 im2…

Matlab中double,im2double,mat2gray函数使用方法介绍

图像类和类型间的转换 im2uint8 将输入中所有小于0的设置为0,而将输入中所有大于1的设置为255 其他的所有乘以255 im2uint16 将输入中所有小于0的设置为0,而将输入中所有大于1的设置为65535 mat2gray 把一个double类的任意数组转换成值范围在[0,1]的归一化double类数组 im2…

numpy转PIL.Image: 处理Mask图像为单通道的彩色/灰度图colormap.png

文章目录 从分割数据集说起8位彩色图8位灰度图1位二值图 什么是图像位深PNG图像格式简介如何处理Mask图像注意!!!PIL一定要手动close 防止内存泄漏PIL库相关函数 从分割数据集说起 8位彩色图 下图是 NYU数据集 里的一张Mask图像, 显示彩图,…

matlab图像类型的转换九种

在对图像进行处理时,很多时候对图像的类型有特殊的要求,例如,在对索引图像进行滤波时,必须把它转换为RGB图像,否则光对图像的下标进行滤波,得到的是毫无意义的结果。在MATLAB中,提供了许多图像类…

matlab mat2gray函数 对图像数据归一化的理解以及互转

刚好今天也有需要用三维重建中的深度数据,数据值大于255,自己用matlab可以显示出来,如果直接保存成图片数据都是1,什么都看不到,拿给别人也没有用,于是就想到用mat2gray先将数据进行归一化到(0,…

Matlab中mat2gray函数用法

目录 语法 描述 例子 将矩阵转换为图像 ​​​​​​​ mat2gray将矩阵转换为灰度图像 语法 I mat2gray(A,[amin amax]) I mat2gray(A)描述 I mat2gray(A,[amin amax]) 将矩阵转换为包含0(黑色)到1(白色)范围内的值A的灰度…

图像处理函数——mat2gray、imclose、imopen、imerode

文章目录 1.mat2gray2.imclose3.imopen4.imerode 1.mat2gray 功能: 将矩阵转换为灰度图像 用法:: l mat2gray(A, [amin amax])将矩阵A转换为灰度图像l。 [amin amax]为表示转换的阙值,A中大于amax的值将转换成1,小于amin的值将转…

mat2gray

文章目录 SyntaxDescriptionConvert a Matrix into an Image mat2gray:将矩阵转换为灰度图像 Syntax I mat2gray(A,[amin amax]) I mat2gray(A)Description I mat2gray(A,[amin amax])将矩阵A转换为强度图像I,该强…

CAN网络dbc格式

dbc 格式 是vector公司定义的私有文件格式。因vector公司在汽车领域,用者甚众,dbc成为描述can matrix,can报文格式的一种重要形式。格式标准说明,见本人上传附件。 CAN协议领域,有很多CAN协议,通用的有J19…

CAN 网络通信矩阵

CAN 网络通信矩阵 通信矩阵DBC文件DBC软件 通信矩阵 将信号、消息和网络节点的相互关系以表格形式展现,由OEM定义。 车辆网络中各节点ECU必须遵循该通讯矩阵才能完成信息的交互和共享。 网络节点:一个汽车控制器作为一个网络节点消息:一个控…

整车CAN网络介绍---CAN--PT CAN--Chassis CAN--Body CAN--Info CAN

CAN(Controller Area Network)控制器局域网络,CAN网络在早期的整车应用中以BCM(车身控制 1.整车CAN网络介绍 CAN(Controller Area Network)控制器局域网络,CAN网络在早期的整车应用中以BCM(车身控制器)为控制中心,主要是车身零部件(雨刮/大灯…

【汽车总线技术】CAN FD与CAN网络共存的解决方案

1.CAN FD发展的背景介绍 随着总线技术在汽车电子领域越来越广泛和深入的应用,特别是自动驾驶技术的迅速发展,汽车电子对总线宽度和数据传输速率的要求也越来也高,传统CAN(1MBit/s,8Bytes Payload)已难以满…

整车CAN网络基本结构

在了解can网络之前, 先了解1个问题: 什么是智能硬件与ECU ? 何为智能硬件, 就是包含智能控制单元的硬件, 比如发动机, 发动机上有一块儿专门负责控制发动机进气量, 喷油量, 排气量的控制单元, 这块单元相当于发动机的大脑. 他具有信号发送, 信号接收, 参数存储等基本功能, 这…

CAN网络应用软件设计CANoeCANFD

CAN CAN网络应用 简单案例 典型汽车网络拓扑结构 动力CAN(1) 负责车辆动力和必须实时响应的安全相关ECU接入这条CAN 底盘动态CAN(2) 负责底盘动态控制和辅助相关的功能的ECU接入到这条CAN信息CAN(3) 负责仪…

AutoSar之CAN网络管理

本文首发于微信公众号“汽车控制与人工智能”欢迎关注。 今天整理下AUTOSAR中的CAN网络管理。 ​AUTOSAR中网络管理主要使用了CAN接口(CanIf),并提供通用网络管理接口(NmIf)。CAN网络管理在CAN架构中所处的位置如图1,与其他模块的交互如图2。 图1 CAN架构 图2 网络管理和…

can 网络管理

网络管理主要功能: 是用来管理ECU是否在网络里面,不在的话请求加入,也就是ALIVE报文,要判断是否掉线,以及睡眠状态的转换机制,以及跛行状态判,也即是RING报文。 主要的实现逻辑流程&#xff1…

CAN网络管理唤醒功能

采用1043的can 芯片:工作模式 – 正常模式 – 具有 INH 输出以及本地和远程唤醒请求功能的待机模式 – 具有 INH 输出以及本地和远程唤醒请求的低功耗睡眠模式 状态切换流程图: CAN唤醒的需求: 唤醒请求(Wake Up Request) 唤醒请求可分为两种: ● 主动唤醒请求:来自模…

关于CAN网络管理状态

首先介绍一下,我是一名刚刚入职1个月的汽车网络测试工程师,目前主要是一边学习一边跟着公司前辈做一个项目,主要的内容就是进行通信、网络、诊断方面的测试。想以文字的形式记下自己学习的一些感想或者是经验之类的,达到巩固知识的…

AutoSar之CAN网络管理详解

​AUTOSAR中网络管理主要使用了CAN接口(CanIf),并提供通用网络管理接口(NmIf)。CAN网络管理在CAN架构中所处的位置如图1,与其他模块的交互如图2。 图1 CAN架构 图2 网络管理和其他模块的联系 AUTOSAR网络管理基于分散的直接网络管理策略,这意…

CAN网络通信

1.网络层概述 1.1综述 这部分描述了网络层的整体功能。TP协议规定了用于网络节点之间交换数据的网络层通信协议,例如ECU与ECU之间,或测试设备与ECU之间。如果要传输的数据不能使用单个的CAN帧传输,则提供一种分包传输的方法。 传输通道是通信链路的物理组成部分,包含接收/传…