DETR tensorRT 的 C++ 部署

DETR tensorRT 的 C++ 部署

本篇说说DETR tensorRT 的 C++ 部署。

【完整代码、模型、测试图片】

1 导出 onnx 模型(建议先看)

方法1:导出DETR onnx并修改模型输出Gather层,解决tesorrt 推理输出结果全为0问题,参考【DETR TensorRT python接口部署】。

方法2:导出DETR模型更有效的onnx新方法,推荐使用【DETR tensor去除推理过程无用辅助头+fp16部署再次加速+解决转tensorrt 输出全为0问题的新方法】。

2 编译

编译前修改 CMakeLists.txt 对应的TensorRT版本
在这里插入图片描述

cd DETR_tensorRT_Cplusplus
mkdir build
cd build
cmake ..
make

3 运行

运行时如果.trt模型存在则直接加载,若不存会自动先将onnx转换成 trt 模型,并保存在给定的路径,然后运行推理

# 运行时如果.trt模型存在则直接加载,若不存会自动先将onnx转换成 trt 模型,并保存在给定的路径,然后运行推理。
cd build
./detr_trt

4 测试效果

onnx 测试效果
在这里插入图片描述
tensorRT 测试效果
在这里插入图片描述
tensorRT 时耗
使用的显卡 Tesla V100、cuda_11.0
在这里插入图片描述

5替换模型说明

1)导出的onnx模型建议simplify后,修改Gather层后再转trt模型。
2)注意修改后处理相关 postprocess.hpp 中相关的类别参数。

修改相关的路径

    std::string OnnxFile = "/zhangqian/workspaces1/TensorRT/detr_trt_Cplusplus/models/detr_r50_person_sim_change.onnx";std::string SaveTrtFilePath = "/zhangqian/workspaces1/TensorRT/detr_trt_Cplusplus/models/detr_r50_person_sim_change.trt";cv::Mat SrcImage = cv::imread("/zhangqian/workspaces1/TensorRT/detr_trt_Cplusplus/images/test.jpg");int img_width = SrcImage.cols;int img_height = SrcImage.rows;CNN DETR(OnnxFile, SaveTrtFilePath, 1, 3, 640, 640, 3);  // 1, 3, 640, 640, 3 前四个为模型输入的NCWH, 3为模型输出叶子节点的个数+1,(本示例中的onnx模型输出有2个叶子节点,再+1=3)DETR.ModelInit();DETR.Inference(SrcImage);for (int i = 0; i < DETR.DetectiontRects_.size(); i += 6){int classId = int(DETR.DetectiontRects_[i + 0]);float conf = DETR.DetectiontRects_[i + 1];int xmin = int(DETR.DetectiontRects_[i + 2] * float(img_width) + 0.5);int ymin = int(DETR.DetectiontRects_[i + 3] * float(img_height) + 0.5);int xmax = int(DETR.DetectiontRects_[i + 4] * float(img_width) + 0.5);int ymax = int(DETR.DetectiontRects_[i + 5] * float(img_height) + 0.5);char text1[256];sprintf(text1, "%d:%.2f", classId, conf);rectangle(SrcImage, cv::Point(xmin, ymin), cv::Point(xmax, ymax), cv::Scalar(255, 0, 0), 2);putText(SrcImage, text1, cv::Point(xmin, ymin + 15), cv::FONT_HERSHEY_SIMPLEX, 0.7, cv::Scalar(0, 0, 255), 2);}imwrite("/zhangqian/workspaces1/TensorRT/detr_trt_Cplusplus/images/result.jpg", SrcImage);printf("== obj: %d \n", int(float(DETR.DetectiontRects_.size()) / 6.0));

6 相关链接

【DETR TensorRT 部署】
【DETR_onnx_tensorRT】

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

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

相关文章

数据类型、数据类型转换(Java)

一、数据类型的分类 1. byte&#xff1a;1字节&#xff0c;-128~127 2. short&#xff1a;2字节&#xff0c;-32768~32767 3. int&#xff1a;4字节 默认整型 4. long&#xff1a;8字节 注意&#xff1a;随便写一个整型字面量会默认是整型的&#xff0c;所以我们在写一个…

加速 Android Studio 依赖项下载

在某些网络环境中&#xff0c;访问互联网可能受到限制&#xff0c;在Android Studio中&#xff0c;项目构建时可能需要下载依赖项&#xff0c;如果网络受到限制&#xff0c;就无法下载或下载速度非常慢只有十几 kb/s &#xff0c;设置可以帮助解决下载问题。 进入设置页面找到…

RK3568驱动指南|第十一篇 pinctrl 子系统-第126章 通过pinctrl状态设置引脚复用实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

电影《艾里甫与赛乃姆》简介

电影《艾里甫与赛乃姆》由天山电影制片厂于1981年摄制&#xff0c;该片由傅杰执导&#xff0c;由买买提祖农司马依、布维古丽、阿布里米提沙迪克、努力曼阿不力孜、买买提依不拉音江、阿不都热合曼艾力等主演。 该片改编自维吾尔族民间爱情叙事长诗《艾里甫与赛乃姆》&#xf…

如何正确使用高速探头前端--probe head

目前市面上的高速有源探头种类丰富&#xff0c;使用灵活&#xff0c;如下图所示&#xff0c;结构多为放大器焊接前端的组合&#xff0c;以E2677B探头前端为例&#xff0c;其焊接前端电阻有三种选择&#xff0c;91ohm时可实现全带宽使用&#xff08;12GHz&#xff09;&#xff0…

互联网 HR 眼中的好简历是什么样子的?

HR浏览一份简历也就25秒左右&#xff0c;如果你连「好简历」都没有&#xff0c;怎么能找到好工作呢&#xff1f; 如果你不懂得如何在简历上展示自己&#xff0c;或者觉得怎么改简历都不出彩&#xff0c;那请你一定仔细读完。 互联网运营个人简历范文> 男 22 本科 AI简历…

PaddleSeg的训练与测试推理全流程(超级详细)

LeNet模型量化 参考文档一.下载项目地址&#xff1a;https://gitee.com/paddlepaddle/PaddleSeg/tree/release%2F2.5/特别注意下载版本&#xff1a; 二.paddlepaddle-gpu安装1.环境安装参考文档&#xff1a;https://gitee.com/paddlepaddle/PaddleSeg/blob/release/2.8/docs/in…

JetPack组件学习ViewModel

目录 ViewModel的使用 简要分析 问答 如何实现旋转屏幕数据保持不变&#xff1f; 和之前的Presenter有什么区别 ViewModel的使用 1.需要先创建ViewModel类&#xff0c;继承自ViewModel重写onclear方法&#xff0c;使得页面销毁的时候能够走到自定义的onClear方法中 clas…

ALIENWARE:卓越游戏体验,源自创新基因

美国拉斯维加斯当地时间1月9日&#xff0c;CES 2024在万众期盼中如约而至。 作为全球消费电子领域一年一度的盛宴和行业风向标&#xff0c;CES 2024汇聚了来自全球的众多消费电子企业以及令人目不暇接的最新科技产品&#xff0c;因而受到了全球广大消费者的密切关注。 众所周知…

日期类的实现|运算符重载的复用

前言 通过前面C入门与类与对象的学习&#xff0c;今天我们将运用所学的知识点完成一个Date类。 本节目标 运用所学知识完成Date类。详细讲解运算符各种重载。理解运算符重载的复用。 一、Date类的六个默认成员函数 六个成员函数&#xff0c;Date类只需要自己实现构造函数即可…

新一代工厂融合广播系统,助力工业行业可持续发展

在当今高度竞争的工业环境中&#xff0c;工厂的运营效率和生产安全至关重要。为了实现这一目标&#xff0c;新一代工厂融合广播系统应运而生&#xff0c;将指挥中心、值班中心、融合通信调度主机、厂区终端和防爆话机紧密连接&#xff0c;构建了一个全面、高效的通信网络。 系统…

Linux进程管理、ps命令、kill命令

每一个程序在运行的时候都会被操作系统注册为系统中的一个进程 补充一下操作系统的内容&#xff1a; 进程实体&#xff08;又称进程映像&#xff09;&#xff1a;程序段、相关数据段、PCB三部分构成 进程是进程实体的运行过程&#xff0c;是系统进行资源分配的一个独立单位 …

团结引擎的安装

团结引擎有多种方式可以安装&#xff0c;具体可以参考团结引擎官方文档&#xff0c;这里我们使用最简单的安装方式&#xff0c;通过团结Hub来安装。 1. 安装 Tuanjie Hub 进入团结引擎官网&#xff0c;点击右上角的【下载Unity】&#xff0c;进入下载界面&#xff0c;选择“下载…

C++——冒泡排序

作用&#xff1a;最常用的排序算法&#xff0c;对数组内元素进行排序 1&#xff0c;比较相邻的元素&#xff0c;如果第一个比第二个大&#xff0c;就交换他们两个。 2&#xff0c;对每一对相邻元素做同样的工作&#xff0c;执行完毕后&#xff0c;找到第一个最大值。 3&…

JDK21和 Flowable 7.0.0

JDK21和 Flowable 7.0.0 一.Flowable二.项目搭建1.依赖包2.数据库3.资源文件1.YML配置文件2.Drools kbase3.Drools rule4.DMN 决策表5.BPMN 流文件 4.BPMN 流程图绘制插件5.测试代码1.启动类2.Flowable 配置3.Camel 配置1.Camel 配置2.Camel Router 定义 4.扩展类监听1.外部工作…

docker compose安装gitlab

环境 查看GitLab镜像 docker search gitlab 拉取GitLab镜像 docker pull gitlab/gitlab-ce 准备gitlab-docker.yml文件 version: 3.1 services:gitlab:image: gitlab/gitlab-ce:latestcontainer_name: gitlabrestart: alwaysenvironment:GITLAB_OMNIBUS_CONFIG: |external_url…

在Windows Server 2012中部署war项目

目录 一.安装jdk 二.安装tomcat 三.安装MySQL 四.部署项目 好啦今天就到这了&#xff0c;希望帮到你了哦 前言&#xff1a;具体步骤&#xff1a; 1.安装JDK&#xff1a; 2.安装tomcat&#xff1a; 3.安装MySQL&#xff1a; 4.部署项目&#xff1a; 一.安装jdk 将所需文件放…

苍穹外卖学习----出错记录

1.微信开发者工具遇到的问题&#xff1a; 1.1appid消失报错&#xff1a; {errMsg: login:fail 系统错误,错误码:41002,appid missing [20240112 16:44:02][undefined]} 1.2解决方式&#xff1a; appid可在微信开发者官网 登录账号后在开发栏 找到 复制后按以下步骤粘贴即…

怎么将文件批量重命名为不同名称?

怎么将文件批量重命名为不同名称&#xff1f;有许多情况下可以考虑对文件进行批量重命名为不同名称&#xff0c;文件分类和整理&#xff1a;当您需要对一组文件进行分类、整理或重新组织时&#xff0c;可以考虑将它们批量重命名为不同的名称。这有助于更好地组织文件并使其更易…

提升测试多样性,揭秘Pytest插件pytest-randomly

大家可能知道在Pytest测试生态中&#xff0c;插件扮演着不可或缺的角色&#xff0c;为开发者提供了丰富的功能和工具。其中&#xff0c;pytest-randomly 插件以其能够引入随机性的特性而备受欢迎。本文将深入探讨 pytest-randomly 插件的应用&#xff0c;以及如何通过引入随机性…