DETR系列:RT-DETR实战部署

news2024/9/22 21:37:26

上篇文章介绍RT-detr的论文内容(RT-DETR 论文解析),本篇文章介绍算法复现、tensorRT加速、python调用部署、训练等方法。

RT-DETR实战部署

  • 1.复现模型详情
  • 2.环境准备
  • 3.训练
  • 4.部署
  • 5.测试

1.复现模型详情

本次复现主要测试下表中RT-DETR-R50和RT-DETR-L(hgnetv2)
请添加图片描述

2.环境准备

我安装的是cuda 10.2 cudnn 8.6.0,TensorRT 8.5.1(Paddle官网要求确保TensorRT的版本>=8.5.1),PaddlePaddle >= 2.4.1(rtdetr要求)

1)CUDA、CUDNN安装
TensorRT>=8.5.1要求cudnn版本大于8.6.0,因此,cudnn需要安装8.6.0或以上版本,参考:https://blog.csdn.net/weixin_60864335/article/details/126671341

2)PaddleDetection配置

  • 创建paddle虚拟环境
    conda create -n paddle python=3.7.0
    

注意,这里建议直接指定版本3.7.0,因为后面安装tensorrt时候版本高可能安装识别,我一开始是3.7.15版本,安装tensorrt python时报错:tensorrt-8.5.1.7-cp37-none-linux_x86_64.whl is not a supported wheel on this platform,因此最好一开始就配置成低版本python。
完成之后输入下面命令进入环境

conda activate paddle 
  • 安装paddle
    python -m pip install paddlepaddle-gpu==2.4.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
    //检查是否安装成功
    (paddle) ubuntu:~$ python
    >>> import paddle
    >>> paddle.utils.run_check()
    

输出下面语句表示paddle安装成功
PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now.

  • 安装PaddleDetection
# 克隆PaddleDetection仓库
cd <path/to/clone/PaddleDetection>
git clone https://github.com/PaddlePaddle/PaddleDetection.git

# 安装其他依赖
cd PaddleDetection
pip install -r requirements.txt

# 编译安装paddledet
python setup.py install

安装后确认测试通过:

python ppdet/modeling/tests/test_architectures.py

测试通过后会提示如下信息:

Ran 7 tests in 12.816s
OK

3)TensorRT安装
参考:https://blog.csdn.net/qq_41596730/article/details/128169273

安装之后tensorRT测试:

(paddle) ubuntu:~$ python
>>> import tensorrt
>>> 

正常即表示安装成功,若报如下错误
Error Code 2: Internal Error (Assertion cublasStatus == CUBLAS_STATUS_SUCCES
原因是CUDA的问题,到官网上,除了下载安装CUDA的包、还需要把Patch1、Patch2都下载安装上。
若报如下错误:

ImportError: libnvinfer.so.7: cannot open shared object file: No such file or directory

解决方法:将TensorRT中的链接文件.so文件进行复制到/usr/lib/文件夹中

4)环境测试

cd /home/PaddleDetection-develop
conda activate paddle 
python tools/infer.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml \
              -o weights=https://bj.bcebos.com/v1/paddledet/models/rtdetr_r50vd_6x_coco.pdparams \
              --infer_img=./demo/000000570688.jpg

3.训练

训练命令:

python tools/train.py -c configs/rtdetr/rtdetr_hgnetv2_l_6x_coco.yml --eval -o pretrain_weights=models/rtdetr_hgnetv2_l_6x_coco.pdparams

中断后继续训练:

python tools/train.py -c configs/rtdetr/rtdetr_hgnetv2_l_6x_coco.yml --eval -r output/10.pdparams

评估:

python tools/infer.py -c configs/rtdetr/rtdetr_hgnetv2_l_6x_coco.yml -o weights=models/rtdetr_hgnetv2_l_6x_coco.pdparams --infer_img=./demo/000000570688.jpg

4.部署

1. 导出模型
cd /home/PaddleDetection-develop
python tools/export_model.py -c configs/rtdetr/rtdetr_r50vd_6x_coco.yml \
              -o weights=https://bj.bcebos.com/v1/paddledet/models/rtdetr_r50vd_6x_coco.pdparams trt=True \
              --output_dir=output_inference
2. 转换模型至ONNX
  • 安装Paddle2ONNX 和 ONNX
pip install onnx==1.13.0
pip install paddle2onnx==1.0.5
  • 转换模型:
paddle2onnx --model_dir=./output_inference/rtdetr_r50vd_6x_coco/ \
            --model_filename model.pdmodel  \
            --params_filename model.pdiparams \
            --opset_version 16 \
            --save_file rtdetr_r50vd_6x_coco.onnx
3. 转换成TensorRT:
# 保证TensorRT的版本>=8.5.1
trtexec --onnx=./rtdetr_r50vd_6x_coco.onnx \
        --workspace=4096 \
        --shapes=image:1x3x640x640 \
        --saveEngine=rtdetr_r50vd_6x_coco.trt \
        --avgRuns=100 \
        --fp16

5.测试

测试下面2个模型转换前和转换后的耗时,可以看出,转换成trt后速度提升十分明显,能够满足实时性需求。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/690207.html

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

相关文章

Kafka集群模式核心概念

文章目录 1.Kafka集群模式下Broker|主题|分区|副本的概念1.1.Broker|主题|分区|副本的概念1.2.创建一个Topic指定3个副本数1.3.多副本的Topic详细信息描述 2.集群模式下以消费者组消费Topic中各分区消息的概念2.1.分消费者组消费各分区的概念2.2.集群模式下消息的发送和消费 3.…

Go 语言中 Context 的作用和使用方法详解

KDP&#xff08;数据服务平台&#xff09;是一款由 KaiwuDB 独立自主研发的数据服务产品&#xff0c;以 KaiwuDB 为核心&#xff0c;面向 AIoT 场景打造的一站式数据服务平台&#xff0c;满足工业物联网、数字能源、车联网、智慧产业等行业核心业务场景下数据采集、处理、计算、…

在Azure SQL DB/Azure托管实例里快速查询各数据库大小以及每个数据库下表的大小

目录 &#xff08;一&#xff09;前言 &#xff08;二&#xff09;正文 1. 环境&#xff1a; 2. 查看实例下每个数据库的空间大小 &#xff08;1&#xff09; SQL语法 &#xff08;2&#xff09;运行结果 3. 查看特定数据库下每张表的大小 &#xff08;1&#xff09;SQ…

一个sql中的一张表,最多只会走一个索引吗

目录 先给结论 做实验 1.根据时间范围查询 什么是key_len&#xff1f; 2.根据时间范围和 is_delete 查询 最左匹配原则 2.根据时间范围和 blog_type 查询 如果加上id会怎么样 并不是索引一定会走 1.IN子表数量过多 2.单次查询超过30% 先给结论 先说结论&#xff0c;…

设计模式第14讲——享元模式(Flyweight)

目录 一、什么是享元模式 二、角色组成 三、优缺点 四、应用场景 4.1 生活场景 4.2 java场景 五、代码实现 5.0 代码结构 5.1 Bike——抽象享元类&#xff08;FlyWeight&#xff09; 5.2 具体享元类&#xff08;ConcreteFlyWeight&#xff09; 5.3 BikeFactory——享元…

layui框架学习(28:穿梭框模块)

Layui模块中的穿梭框模块transfer主要支撑穿梭框组件的显示、交互等操作。所谓穿梭框是指左右各有一个复选框列表&#xff0c;可以将左侧选中的项目移动到右边&#xff0c;后者将右侧的选中项移回左边的控件&#xff0c;其样式类似下图所示&#xff08;参考文献5-6&#xff09;…

TI AM62x工业开发板规格书(单/双/四核ARM Cortex-A53 + 单核ARM Cortex-M4F,主频1.4GHz)

1 评估板简介 创龙科技TL62x-EVM是一款基于TI Sitara系列AM62x单/双/四核ARM Cortex-A53 单核ARM Cortex-M4F多核处理器设计的高性能低功耗工业评估板&#xff0c;由核心板和评估底板组成。处理器ARM Cortex-A53(64-bit)主处理单元主频高达1.4GHz&#xff0c;ARM Cortex-M4F实…

如何使用 Flink SQL 探索 GitHub 数据集|Flink-Learning 实战营

为进一步帮助开发者学习使用 Flink&#xff0c;Apache Flink 中文社区近期发起 Flink-Learning 实战营项目。本次实战营通过真实有趣的实战场景帮助开发者实操体验 Flink&#xff0c;课程包括实时数据接入、实时数据分析、实时数据应用的场景实。并结合小松鼠助教模式&#xff…

USR-C216 WIIF连接手机

复位后连接USR-C216无线 浏览器输入10.10.100.254 账号密码为admin 客户端模式服务器地址无效&#xff0c;默认就行 打开手机网络调试助手选择客户端模式&#xff0c;输入10.10.100.254&#xff0c;端口8899 可以透传了 关于AT指令&#xff0c;先发“”&#xff0c;然后3s内发…

【数据管理架构】什么是 OLTP?

OLTP&#xff08;在线事务处理&#xff09;支持在 ATM 和在线银行、收银机和电子商务以及我们每天与之交互的许多其他服务背后进行快速、准确的数据处理。 什么是 OLTP&#xff1f; OLTP 或在线事务处理允许大量人员&#xff08;通常通过 Internet&#xff09;实时执行大量数据…

基于Vue+Node.js的宠物领养网站的设计与开发-计算机毕设 附源码83352

基于VueNode.js的宠物领养网站的 摘 要 随着互联网大趋势的到来&#xff0c;社会的方方面面&#xff0c;各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去&#xff0c;而其中最好的方式就是建立网络管理系统&#xff0c;并对其进行信息管理。由于现在网络…

【国产FPGA应用】紫光Pango Design联合 Modelsim 仿真方法

Modelsim 是 FPGA 开发中重要的 EDA 设计仿真工具&#xff0c;主要用于验证数字电路设计是否正确。我们经常用Xilinx的ISE或者Vivado与Modelsim进行联合仿真&#xff0c;其实国产FPGA开发工具也可以与Modelsim进行联合仿真&#xff0c;对于设计比较复杂的应用还是非常方便的&am…

创邻科技与浪潮信息KOS完成澎湃技术认证

近日&#xff0c;浙江创邻科技有限公司&#xff08;简称&#xff1a;创邻科技&#xff09;自主研发的Galaxybase图数据库系统与浪潮信息服务器操作系统KOS V5完成澎湃技术认证。创邻科技作为国内首个成熟的商业图数据库供应商&#xff0c;在同类厂商中率先完成认证。测试结果显…

vue3通过render函数实现一个菜单下拉框

背景说明 鼠标移动到产品服务上时&#xff0c;出现标红的下拉框。 使用纯css的方案实现最简单&#xff0c;但是没什么技术含量&#xff0c;弃之&#xff1b;使用第三方组件库&#xff0c;样式定制麻烦弃之。因此&#xff0c;我们使用vue3直接在页面创建一个dom作为下拉框吧。…

【经验分享】Docker容器部署方法说明

前 言 本案例适用开发环境&#xff1a; Windows开发环境&#xff1a;Windows 7 64bit、Windows 10 64bit Linux开发环境&#xff1a;Ubuntu 18.04.4 64bit 虚拟机&#xff1a;VMware15.1.0 Docker是一个开源的应用容器引擎&#xff0c;让开发者可打包他们的应用以及依赖包…

rust持续学习 声明宏

学习记录&#xff0c;都是学自圣经&#xff0c;macrobook啥的 https://doc.rust-lang.org/reference/macros-by-example.html macro_rules! bar {(3) > {println!("3");};(4) > {println!("4");}; }这个是入门例子&#xff0c;有点像match 调用就是…

【Java|多线程与高并发】线程池详解

文章目录 1. 线程池简介2. 创建线程池3. 工厂模式简介4. 线程池的使用5. 实现线程池6. ThreadPoolExecutor的构造方法讲解7. 线程池的线程数量,如何确定? 1. 线程池简介 Java线程池是一种用于管理和重用线程的机制&#xff0c;它可以在需要执行任务时&#xff0c;从线程池中获…

二叉树遍历方法——前、中、后序遍历(java)

二叉树结构&#xff1a; static class TreeNode{public char val;public TreeNode left;public TreeNode right;public TreeNode(char val) {this.val val;}Overridepublic String toString() {return this.val"";}} 一、前序遍历 前序遍历是一种访问二叉树的每一…

【shell脚本】沐风晓月跟你聊聊shell脚本中的case实战

前言 前面我们已经介绍了while及for循环&#xff0c;结合if语句可以构建一些简单的控制面板及菜单脚本&#xff0c;今天我们来探讨下case语句。 case选择语句&#xff0c;主要用于对多个选择条件进行匹配输出&#xff0c;与if elif语句结构类似&#xff0c;通常用于脚本传递输…

阵列模式合成第 I 部分:清零、窗口化和细化(附源码)

一、前言 本示例说明如何使用相控阵系统工具箱解决一些阵列合成问题。在相控阵设计应用中&#xff0c;通常需要找到一种方法来逐渐减小晶片响应&#xff0c;以使最终的阵列阵列模式满足某些性能标准。典型的性能标准包括主瓣位置、零位置和旁瓣电平。 二、使用旁瓣消除器消除干…