MMDeploy部署实战系列【第三章】:MMdeploy pytorch模型转换onnx,tensorrt

这个系列是一个随笔,是我走过的一些路,有些地方可能不太完善。如果有那个地方没看懂,评论区问就可以,我给补充。

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

目录:

0️⃣ mmdeploy源码安装 (转换faster rcnn r50/yolox为tensorrt,并进行推理)_gy77

内容:一文包含了在Linux系统下安装mmdeploy模型转换环境,模型转换为TensorRT,在Linux,Windows下模型推理,推理结果展示。

MMDeploy部署实战系列

1️⃣ MMDeploy部署实战系列【第一章】:Docker,Nvidia-docker安装_gy77

内容:docker/nvidia-docker安装,docker/nvidia-docker国内源,docker/nvidia-docker常用命令。

2️⃣ MMDeploy部署实战系列【第二章】:mmdeploy安装及环境搭建_gy77

内容:mmdeploy环境安装三种方法:源码安装,官方docker安装,自定义Dockerfile安装。

3️⃣ MMDeploy部署实战系列【第三章】:MMdeploy pytorch模型转换onnx,tensorrt_gy77

内容:如何查找pytorch模型对应的部署配置文件,模型转换示例:mmcls:resnext50,mmdet:yolox-s,faster rcnn50。

4️⃣ MMDeploy部署实战系列【第四章】:onnx,tensorrt模型推理_gy77

内容:在linux,windows环境下推理,Windows下推理环境安装,推理速度对比,显存对比,可视化展示。

5️⃣ MMDeploy部署实战系列【第五章】:Windows下Release x64编译mmdeploy(C++),对TensorRT模型进行推理_gy77

内容:Windows下环境安装编译环境,编译c++ mmdeploy,编译c++ mmdeploy demo,运行实例。

6️⃣ MMDeploy部署实战系列【第六章】:将编译好的MMdeploy导入到自己的项目中 (C++)_gy77

内容:Windows下环境导入我们编译好的mmdeploy 静态/动态库。

下面是正文:


MMdeploy官方教程:如何转换模型 — mmdeploy 0.5.0 文档

我要用到的是mmclassification转换到tensorrt。

python ./tools/deploy.py \
${DEPLOY_CFG_PATH} \
${MODEL_CFG_PATH} \
${MODEL_CHECKPOINT_PATH} \
${INPUT_IMG} \
--test-img ${TEST_IMG} \
--work-dir ${WORK_DIR} \
--calib-dataset-cfg ${CALIB_DATA_CFG} \
--device ${DEVICE} \
--log-level INFO \
--show \
--dump-info

参数描述:

  • deploy_cfg : MMDeploy 中用于部署的配置文件路径。
  • model_cfg : OpenMMLab 系列代码库中使用的模型配置文件路径。
  • checkpoint : OpenMMLab 系列代码库的模型文件路径。
  • img : 用于模型转换时使用的图像文件路径。
  • --test-img : 用于测试模型的图像文件路径。默认设置成None。
  • --work-dir : 工作目录,用来保存日志和模型文件。
  • --calib-dataset-cfg : 此参数只有int8模式下生效,用于校准数据集配置文件。若在int8模式下未传入参数,则会自动使用模型配置文件中的’val’数据集进行校准。
  • --device : 用于模型转换的设备。 默认是cpu。
  • --log-level : 设置日记的等级,选项包括'CRITICAL', 'FATAL', 'ERROR', 'WARN', 'WARNING', 'INFO', 'DEBUG', 'NOTSET'。 默认是INFO。
  • --show : 是否显示检测的结果。
  • --dump-info : 是否输出 SDK 信息。

如何查找pytorch模型对应的部署配置文件

  1. 在 configs/ 文件夹中找到模型对应的代码库文件夹。 例如,转换一个yolov3模型您可以查找到 configs/mmdet 文件夹。
  2. 根据模型的任务类型在 configs/codebase_folder/ 下查找对应的文件夹。 例如yolov3模型,您可以查找到 configs/mmdet/detection 文件夹。
  3. 在 configs/codebase_folder/task_folder/ 下找到模型的部署配置文件。 例如部署yolov3您可以使用 configs/mmdet/detection/detection_onnxruntime_dynamic.py。

模型转换示例

0️⃣ 转换命令
python ./tools/deploy.py \
configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py \
$PATH_TO_MMDET/configs/yolo/yolov3_d53_mstrain-608_273e_coco.py \
$PATH_TO_MMDET/checkpoints/yolo/yolov3_d53_mstrain-608_273e_coco.pth \
$PATH_TO_MMDET/demo/demo.jpg \
--work-dir work_dir \
--show \
--device cuda:0
1️⃣ 分类resnext50 tensorrt转换脚本

进入mmdeploy docker容器

docker run --gpus all -it -p 8080:8080 -v /home/xbsj/gaoying/mmdeploy_out/:/root/workspace/mmdeploy_out mmdeploy:2104

脚本:转换为onnx文件和tensorrt文件

git clone https://gitee.com/monkeycc/mmclassification.git
cd mmclassification
pip install -e .
mkdir checkpoints
cd checkpoints wget https://download.openmmlab.com/mmclassification/v0/resnext/resnext50_32x4d_b32x8_imagenet_20210429-56066e27.pth -O resnext50_32x4d_b32x8_imagenet.pth
cd ../../mmdeploy python tools/deploy.py configs/mmcls/classification_tensorrt_dynamic-224x224-224x224.py ../mmclassification/configs/resnext/resnext50_32x4d_b32x8_imagenet.py ../mmclassification/checkpoints/resnext50_32x4d_b32x8_imagenet.pth ../mmclassification/demo/demo.JPEG --work-dir ../mmdeploy_out/mmcls/resnext50_trt --device cuda:0 --dump-info
2️⃣ 检测yolox-s tensorrt转换脚本(失败)

进入mmdeploy docker容器

docker run --gpus all -it -p 8080:8080 -v /home/xbsj/gaoying/mmdeploy_out/:/root/workspace/mmdeploy_out mmdeploy:2104

脚本:转换为onnx文件和tensorrt文件

cd mmdetection/checkpoints
wget https://download.openmmlab.com/mmdetection/v2.0/yolox/yolox_s_8x8_300e_coco/yolox_s_8x8_300e_coco_20211121_095711-4592a793.pth -O yolox_s_8x8_300e_coco.pth
cd ../../mmdeploy python tools/deploy.py configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py ../mmdetection/configs/yolox/yolox_s_8x8_300e_coco.py ../mmdetection/checkpoints/yolox_s_8x8_300e_coco.pth ../mmdetection/demo/demo.jpg --work-dir ../mmdeploy_out/mmdet/yolox_l_tensorrt/ --device cuda:0 --dump-info
3️⃣ 检测faster rcnn r50 tensorrt转换脚本

进入mmdeploy docker容器

docker run --gpus all -it -p 8080:8080 -v /home/xbsj/gaoying/mmdeploy_out/:/root/workspace/mmdeploy_out mmdeploy:2104

脚本:转换为onnx文件和tensorrt文件

git clone https://gitee.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -e .
mkdir checkpoints
cd checkpoints
wget https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth
mv faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth faster_rcnn_r50_fpn_1x_coco.pth
cd ../../mmdeploy pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pycuda python tools/deploy.py configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py ../mmdetection/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py ../mmdetection/checkpoints/faster_rcnn_r50_fpn_1x_coco.pth ../mmdetection/demo/demo.jpg --work-dir ../mmdeploy_out/mmdet/faster_rcnn_r50_trt/ --device cuda:0 --dump-info

MMDeploy部署实战系列【第三章】:MMdeploy pytorch模型转换onnx,tensorrt的更多相关文章

  1. AspNetCore-MVC实战系列(三)之个人中心

    AspNetCore - MVC实战系列目录 . 爱留图网站诞生 . git源码:https://github.com/shenniubuxing3/LovePicture.Web . AspNetC ...

  2. Ionic 入门与实战之第三章:Ionic 项目结构以及路由配置

    原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第三章,主要对 Ionic 的项目结构作了介绍,并讲解了Ionic 中的路由概念以及相关配置. 原文发表于我的技术博客 1. Ioni ...

  3. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  4. 《精通Spring4.x企业应用开发实战》第三章

    这一章节主要介绍SpringBoot的使用,也是学习的重点内容,之后就打算用SpringBoot来写后台,所以提前看一下还是很有必要的. 3.SpringBoot概况 3.1.1SpringBoot发 ...

  5. jQuery系列 第三章 jQuery框架操作CSS

    第三章 jQuery框架操作CSS 3.1 jQuery框架的CSS方法 jQuery框架提供了css方法,我们通过调用该方法传递对应的参数,可以方便的来批量设置标签的CSS样式. 使用JavaScr ...

  6. SpringBoot基础实战系列(三)springboot单文件与多文件上传

    springboot单文件上传 对于springboot文件上传需要了解一个类MultipartFile ,该类用于文件上传.我此次使用thymeleaf模板引擎,该模板引擎文件后缀 .html. 1 ...

  7. 《Java并发编程实战》第三章 对象的共享 读书笔记

    一.可见性 什么是可见性? Java线程安全须要防止某个线程正在使用对象状态而还有一个线程在同一时候改动该状态,并且须要确保当一个线程改动了对象的状态后,其它线程能够看到发生的状态变化. 后者就是可见 ...

  8. (第三章)Java内存模型(下)

    一.happens-before happens-before是JMM最核心的概念.对于Java程序员来说,理解happens-before是理解JMM的关键. 1.1 JMM的设计 从JMM设计者的 ...

  9. 第三章 TCP/IP 模型

    一.产生背景 1.伴随着计算机网络的飞跃发展,各大厂商根据自己的协议生产出了不同的硬件和软件 2.为了实现网络设备间的互相通讯,ISO和IEEE相继提出了OSI参考模型及其TCP/IP模型 二.TCP ...

  10. 【无私分享:ASP.NET CORE 项目实战(第三章)】EntityFramework下领域驱动设计的应用

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 在我们 [无私分享:从入门到精通ASP.NET MVC] 系列中,我们其实也是有DDD思想的,但是没有完全的去实现,因为并不是 ...

随机推荐

  1. PWR & 低功耗三种模式

    睡眠模式: int main(void) { OLED_Init(); OLED_ShowString(1, 1, "RxData:"); Serial_Init(); while ...

  2. Vue 动态插入组件 用js函数的方式

    Vue 动态插入组件 用js函数的方式 第一步 import vue组件 第二步 Vue把组件扩展进去 第三步 创建实例 第四步 将组件的el挂载到document.body上 第五步 设置组件内部d ...

  3. RGB、HSV、HSL和CMYK颜色空间

    目录 简介 RGB(红绿蓝)颜色空间 HSV(色调.饱和度.亮度)颜色空间 HSL(色调.饱和度.亮度)颜色空间 CMYK(青.品红.黄.黑)颜色空间 简介 这四种颜色空间在不同的应用领域有不同的用途 ...

  4. max30100心率血氧健康传感器调试总结备忘

    前记  在健康监测领域,心率血氧传感器是一个非常重要的前端采集设备.了解,研究并使用它,是一个方案商的基本素质.鉴于此,笔者花了一些时间在不同的硬件平台来使用它.中间遇到了一些问题值得总结和反思一下. ...

  5. JAVA | Guava EventBus 使用 发布/订阅模式

    系列文章目录 Go | Go 语言打包静态文件以及如何与Gin一起使用Go-bindata Go | Gin 解决跨域问题跨域配置 目录 系列文章目录 前言 一.为什么要用 Observer模式以及 ...

  6. 后端基础PHP—PHP表单验证

    后端基础PHP-PHP表单验证 1.PHP表单 2.PHP连接MySQL 一.PHP表单介绍 关于表单 PHP表单,在网页中主要负责采集数据 通俗理解,在银行办业务需要填一张纸质的表,需要向表上填信息 ...

  7. Oss流程分析

    最新式上传方案是:前端上传获取token,然后token中带有bucket.账号.回调地址等相关信息,前端直接上传到阿里云,阿里云上传成功后回调之前设定好的地址,完成上传.(下图是技术负责人的图,盗来 ...

  8. IDEA (任意 JetBrains IDE)拆分先前 commit

    最近在合并上游代码,遇到了一个问题:某个 commit 杂糅了几个不同的特性修改,这可能会导致 rebase 上游代码时需要再对该 commit 进行额外的代码冲突处理 解决方法:合并上游分支前,拆分 ...

  9. Oracle 隐式数据类型转换

    Oracle类型转换规则: 对于insert和update操作,oracle将值转换为受影响的的列的类型. 对于select操作,oracle会将列的值的类型转换为目标变量的类型. 看如下实验: 1. ...

  10. 分享本人依照NOI大纲整理的CSPJ复习资料

    2023 CSP-J 复习文件 考纲 复习好 : 基础知识与编程环境 难度 计算机的基本构成 计算机的组成及功能 - 知乎 (zhihu.com) 操作系统的基本概念与常见操作 操作系统基础知识大汇总 ...