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

news2024/10/6 2:27:41

目录

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_model

result = 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://www.coloradmin.cn/o/168646.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dubbo框架学习(第一章Dubbo简介)

由于在微服务领域有两大框架统治,一个是springCloud的全家桶,一个是Dubbo。我用Dubbo比较少,所以也是学习状态。Dubbo框架学习,资料来源于cn.dubbo.apache.org。第一章Dubbo简介Apache Dubbo 是一款 RPC 微服务框架,提…

字节跳动青训营--前端day2

文章目录前言一、css1. css的组成2. css三种使用方式3.css的工作方式二、 css选择器Selector1. 选择元素的方式2. 伪类(pseudo-classes)2.1 状态伪类2.1 结构伪类3.通过组合选择元素3.1 直接组合3.2 元素组合的拓展4. 选择器的特异度(Specifi…

小型水库雨水情测报和安全监测解决方案

平升电子小型水库雨水情测报和安全监测解决方案辅助水利管理部门实现水库雨水情信息“全要素、全量程、全覆盖”自动测报。系统具备水库水位、雨量、现场图像/视频等水文信息采集、传输、处理及预警广播等功能,有效提升了雨水情信息的时效性和准确度,为保…

jmeter 使用beanshell 编写脚本

一、介绍 1.1 介绍 BeanShell是一个小型的、免费的、可嵌入使用Java编写的具有对象脚本语言特性的Java源码解释器。 动态执行所有Java语句、Java代码片段以及弱类型Java和附加的脚本的便利 透明地访问所有Java对象和API 四种运行模式:命令行、控制台、Applet、远…

数据结构专题 -- 哈希思想详解

代码会存放在: https://github.com/sjmshsh/Data-Struct-HandWriting 通过阅读本篇文章,你可以学到: 哈希思想及其本质使用C实现简易的哈希表哈希思想的应用 位图布隆过滤器哈希切分极致升华,海量数据处理面试题 拓展 – 一致性…

二叉树的应用——哈夫曼树

哈夫曼树与哈夫曼编码 1.树的带权路径长 百分制成绩转五级制的算法流程图(A/B/C/D/E的人数分别为6/18/21/36/19)带权路径长 路经长 x 权重 树的带权路经长:所有叶结点的带权路径长度之和。 例如: (a)图…

[ 攻防演练演示篇 ] 利用谷歌 0day 漏洞上线靶机

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

橘子学kafka之基础命令使用

本系列主要开始处理关于kafka的一些技术知识点,尽量会以代码和实际命令为主要表达形式来做表现。 本文主要是关于如何在客户端使用命令做一个描述,其实我本来不想写的,但是今天在公司有同事居然不会,所以我觉得还是描述一下。而且…

贪心算法合集

95 分糖果问题 思路非常简单,和题解一模一样: 用数组存每个人对应的糖果数量,初始为1 从左到右遍历,如果比左边的大,1再从右到左遍历,如果比右边的大,1 import java.util.*;public class Solu…

录屏大师电脑版推荐(一键录制声画同步的视频)

很多小伙伴使用电脑多年,却不知道电脑有录屏功能。想要对电脑屏幕进行录制,只需在电脑上安装一个录屏大师。那有没有录屏大师电脑版推荐呢?在试用了多款电脑录屏大师之后,小编今天给大家推荐一款可以一键录制声画同步视频的录屏大…

使用Python为二年级的学生批量生成数学题

文章目录一.使用Python为二年级的学生批量生成数学题1.1 背景二.解决思路及其代码三.排版及其打印四.本文源码一.使用Python为二年级的学生批量生成数学题 1.1 背景 我妹妹今年上二年级,她的老师今天给他们布置了一项作业: 从今天起到开学,…

ENSP的AR40问题解决

AR40以及其他相关问题都可以参考此方法,都已经可以正常使用 现在有enspAR40问题的同学有救了,ensp的AR40问题困扰了我很长时间,根据官方的问题解决文档没有解决,反正就是之前的所有方法都没有用,也不是都没有用&#x…

初读《编程之美》就想秀一下,结果还翻车了

文章目录 一、前言 二、我的思路 三、Code 四、翻车现场 五、后续问题 一、前言 ———如何写一个短小的程序,让 Windows 的任务管理器显示CPU的占用率为50%? 这道有趣的面试题我是这两天从《编程之美》电子版中看到的,看意思就是邹老师在微软对一…

入门postgre sql(PG的下载和安装,包括普通用户源码构建的安装方式)

目录PG的下载安装1、Windows 上安装2、Linux上安装有root权限的安装无root权限的安装PG的下载安装 点击这里,了解pg 1、Windows 上安装 (1)下载安装 访问官网下载地址 https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 下载最新发布的Po…

3.kafka-3.生产者,消费者

文章目录1.个性化配置,增加吞吐量2.发送事务消息3.消费组手动提交offset指定offset位置进行消费指定时间消费当新增消费者,或者消费组时,如何消费漏消息和重复消息如何解决消费解压问题1.个性化配置,增加吞吐量 private static vo…

使用 .NET 7、Blazor 和 .NET MAUI 构建你自己的 Podcast App

.NET Podcast App 首次在 .NET Conf 2021上推出,最近进行了更新以在 .NET Conf 2022 keynote 中突出显示 .NET 7 中的新功能。该 Podcast App 已准备好使用展示 .NET,ASP.NET Core,Blazor,.NET MAUI,Azure Container A…

Android 蓝牙开发——概述(一)

一、蓝牙简介 蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接。 其中将1.x~3.0之间的版本称之为经典蓝牙,4.x开始的蓝牙称之为低功耗蓝牙&…

Memcache学习总结

这里写自定义目录标题介绍一致性哈希寻找节点一致性哈希介绍内存管理slab结构寻找存储chunkChunk中存储的Item数据结构grow factor 调优回收删除一些特性介绍 基于内置内存Key-Value形式存储数据(字符串、对象)集群服务器是通过数组链表方式存储K-V数据<分布式>基于哈希…

编程语言那么多,我为什么推荐你学Java?

Java一直都是稳居排行榜第一的语言&#xff0c;在未来10年Java都会是最热门的语言之一&#xff0c;因为Java技术具有卓越的通用性、高效性、安全性和平台移植性&#xff0c;它可以跨平台的应用到不同的领域&#xff0c;工作需求足够大。 为什么选择学习Java编程语言&#xff1…

更具科技感的中塔机箱,模块设计兼容性强,鑫谷昆仑御风机箱上手

大家装机的时候应该都接触过鑫谷的机箱和散热器外设&#xff0c;作为一家有年头的外设品牌&#xff0c;这两年鑫谷推陈出新&#xff0c;像是在电源方面&#xff0c;就有不少很受欢迎的产品&#xff0c;像是昆仑系列等&#xff0c;前端鑫谷在昆仑系列中带来了一款设计新颖的机箱…