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. api网关介绍

    1.什么是网关 API网关是一个系统的唯一入口. 是众多分布式服务唯一的一个出口. 它做到了物理隔离,内网服务只有通过网关才能暴露到外网被别人访问. 简而言之:网关就是你家的大门 2.提供了哪些功能 ...

  2. Spring事务(五)-事务隔离级别

    Spring @Transactional注解isolation属性 @Transactional注解通过isolation属性设置事务隔离级别.如下: @Transactional(isolatio ...

  3. 基于Python的 如何检查字符串输入是否为数字

    一 概念 这种有很多常用的方法,这里只介绍一种常用的方法是使用正则表达式来匹配数字的模式.通过定义一个匹配数字的正则表达式,然后使用re模块中的search()方法来进行匹配. 二 例子: 下面是一个 ...

  4. linux程序运行结果在打印到屏幕的同时写入文件

    1.使用script工具 script工具是一个非常使用的工具,可以把输出到终端的信息记录下来.使用方法如: (1)输入 script log.txt命令开始保存终端输出的信息 ,其中log.txt为 ...

  5. c初探:数据类型、数组、内存布局、指针

    c初探:数据类型.数组.内存布局.指针 目录 c初探:数据类型.数组.内存布局.指针 1.基本数据类型 2.格式化 include <stdio.h> 输出控制符 3.数组与内存布局 动态 ...

  6. 【Django】HTML如何显示富文本内容

    一.背景 我采用的前端样式是 LayUI,通过它的富文本编辑器保存内容到数据库后,遇到了一个回显到页面的问题 二.方案 在不考虑使用 Vue 的情况下,有一种简单的方式 <div id=&quo ...

  7. .NET集成DeveloperSharp操作Sql Server数据库

    支持.Net/.Net Core/.Net Framework,可以部署在Docker, Windows, Linux, Mac. 本文提供了一种结合"原生Sql+轻量级ORM"操 ...

  8. WPF异步命令以及SqlSugar异步增删改查

    1.异步 /// <summary> /// 查询全部 /// </summary> /// <returns></returns> public as ...

  9. 计算机网络-Keep Alive

    问题背景 介绍两个经典的网络问题, 问题1: 访问位于Azure Application Gateway之后的nodejs server, 偶尔会触发502 问题2: 请求一个Azure App Se ...

  10. ARM之AXI总线协议初试

    AXI总线协议的学习 1.AXI总线的初步认识 What is AXI? AXI is part of ARM AMBA, a family of micro controller buses fir ...