目录

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!

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

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

  1. ONNX+TensorRT

    使用ONNX+TensorRT部署人脸检测和关键点250fps This article was original written by Jin Tian, welcome re-post, firs ...

  2. Pytorch → ONNX → TensorRT

    Pytorch → ONNX → TensorRT 由于实验室与应急减灾中心关于道路检测的项目需加快推理速度,在尝试手动融合模型的Con层和bn层发现推理速度提升不明显之后,我的"mento ...

  3. 【YOLOX训练部署】将自己训练的YOLOX权重转化成ONNX 并进行推理

    YOLOX 训练自己的VOC数据集 [YOLOX训练部署]YOLOX训练自己的VOC数据集_乐亦亦乐的博客-CSDN博客YOLOX 环境安装与训练自己标注的VOC数据集:https://blog.cs ...

  4. 使用TensorRT集成推理inference

    使用TensorRT集成推理inference 使用TensorRT集成进行推理测试. 使用ResNet50模型对每个GPU进行推理,并对其它模型进行性能比较,最后与其它服务器进行比较测试. ResN ...

  5. 利用OpenCV、Python和Ubidots构建行人计数器程序(附完整代码)

    作者 | Jose Garcia 译者 | 吴振东 校对 | 张一豪.林亦霖,编辑 | 于腾凯 来源 | 数据派(ID:datapi) 导读:本文将利用OpenCV,Python和Ubidots来编写 ...

  6. yolov3网络结构图_目标检测——YOLO V3简介及代码注释(附github代码——已跑通)...

    GitHub: liuyuemaicha/PyTorch-YOLOv3​github.com 注:该代码fork自eriklindernoren/PyTorch-YOLOv3,该代码相比master分 ...

  7. php 3d animation,css3D+动画的例子(附完整代码)

    本篇文章给大家带来的内容是关于css3D+动画的例子(附完整代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 最近玩了玩用css来构建3D效果,写了几个demo,所以博客总 ...

  8. Linux创建线程读取双口数据,linux环境下读写一次双口ram尽然要十几个毫秒。(附驱动代码)...

    linux环境下读写一次双口ram尽然要十几个毫秒.(附驱动代码) 我用的双口ram是IDT70V28,手册上说的读写时间应该是几个纳秒,我写了个linux驱动,然后做测试,发现读写一次的时间尽然是十 ...

  9. 从零开始的AI·决策树原来这么好理解(附实例代码)

    从零开始的AI系列 从零开始的AI·机器学习の基本概念 从零开始的AI·吃透kNN算法,学完我悟了(附实例代码) 从零开始的AI·朴素贝叶斯?拿来吧你(附实例代码) 文章目录 从零开始的AI系列 前言 ...

最新文章

  1. 每年的智能车竞赛赛道是如何产生的?
  2. pandas 将自己的文件写入csv
  3. [收藏]比较著名的.net技术论坛网址(含国外的)
  4. python内置排序算法_2021-01-05 排序算法(Python语言实现)
  5. 成功解决 bs4\__init__.py:219: UserWarning: b'.' looks like a filename, not markup. You should probably
  6. CCNA 第二学期答案
  7. flash位图技术研究篇(8):扫描像素点
  8. 实时计算轻松上手,阿里云DataWorks Stream Studio正式发布
  9. 简单RAM存储器分析
  10. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序处理并发
  11. 操作系统 - 王道 - 第五章 I/O
  12. 测试额外任务而撒旦法 速度速度发撒旦法
  13. mysql 1236错误_MySQL主从失败 错误Got fatal error 1236解决方法
  14. 10^5以下素数筛法——素数表法
  15. 小米怎么解锁,有什么相关教程
  16. 计算机对人类未来的影响,讲讲人工智能对人类社会的影响及对人类未来的发展...
  17. 删除cookie删不掉的问题
  18. 微信小程序—WXML模板语法
  19. 输油管道问题(分治策略)
  20. 糖尿病新世界杂志糖尿病新世界杂志社糖尿病新世界编辑部2022年第12期目录

热门文章

  1. H5公众号-canvas海报分享图+生成二维码
  2. 【Python实例】Python五分钟码出—女神颜值打分系统(人脸识别)!
  3. python计算时间
  4. 性能测试平台搭建及简单使用(jmeter分布式+influxdb2.0+grafana)附性能测试报告
  5. ESP32 的 I2C 原理 应用入门
  6. Win10系统 格式化分配单元大小的解释与分配方法
  7. 从零开始开发Android相机app(三)简单介绍图像滤镜功能
  8. day11【网络编程】
  9. 大量C语言、C++、C#、VC编程相关书籍下载
  10. python3 子进程和父进程