yolov9 tensorRT 的 C++ 部署

yolov9 tensorRT C++ 部署

  本示例中,包含完整的代码、模型、测试图片、测试结果。

  完整的代码、模型、测试图片、测试结果【github参考链接】

  TensorRT版本:TensorRT-7.1.3.4

导出onnx模型

  导出适配本实例的onnx模型参考【yolov9 瑞芯微芯片rknn部署、地平线芯片Horizon部署、TensorRT部署】。

编译

修改 CMakeLists.txt 对应的TensorRT位置
在这里插入图片描述

cd yolov9_tensorRT_Cplusplus
mkdir build
cd build
cmake ..
make

运行

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

测试效果

onnx 测试效果
在这里插入图片描述
tensorRT 测试效果
在这里插入图片描述

替换模型说明

1)按照本实例给的导出onnx方式导出对应的onnx;导出的onnx模型建议simplify后再转trt模型。

2)注意修改后处理相关 postprocess.hpp 中相关的参数(类别、输入分辨率等)。

修改相关的路径

    std::string OnnxFile = "/zhangqian/workspaces1/TensorRT/yolov9_tensorRT_Cplusplus/models/yolov8n_ZQ.onnx";std::string SaveTrtFilePath = "/zhangqian/workspaces1/TensorRT/yolov9_tensorRT_Cplusplus/models/yolov8n_ZQ.trt";cv::Mat SrcImage = cv::imread("/zhangqian/workspaces1/TensorRT/yolov9_tensorRT_Cplusplus/images/test.jpg");int img_width = SrcImage.cols;int img_height = SrcImage.rows;CNN YOLO(OnnxFile, SaveTrtFilePath, 1, 3, 640, 640, 7);  // 1, 3, 640, 640, 7 前四个为模型输入的NCWH, 7为模型输出叶子节点的个数+1,(本示例中的onnx模型输出有6个叶子节点,再+1=7)YOLO.ModelInit();YOLO.Inference(SrcImage);for (int i = 0; i < YOLO.DetectiontRects_.size(); i += 6){int classId = int(YOLO.DetectiontRects_[i + 0]);float conf = YOLO.DetectiontRects_[i + 1];int xmin = int(YOLO.DetectiontRects_[i + 2] * float(img_width) + 0.5);int ymin = int(YOLO.DetectiontRects_[i + 3] * float(img_height) + 0.5);int xmax = int(YOLO.DetectiontRects_[i + 4] * float(img_width) + 0.5);int ymax = int(YOLO.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/yolov9_tensorRT_Cplusplus/images/result.jpg", SrcImage);printf("== obj: %d \n", int(float(YOLO.DetectiontRects_.size()) / 6.0));

特别说明

本示例只是用来测试流程,模型效果并不保证,且代码整理的布局合理性没有做过多的考虑。

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

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

相关文章

网络爬虫的危害,如何有效的防止非法利用

近年来&#xff0c;不法分子利用“爬虫”软件收集公民隐私数据案件屡见不鲜。2023年8月23日&#xff0c;北京市高级人民法院召开北京法院侵犯公民个人信息犯罪案件审判情况新闻通报会&#xff0c;通报侵犯公民个人隐私信息案件审判情况&#xff0c;并发布典型案例。在这些典型案…

获取PDF中的布局信息——如何获取段落

PDF解析是极其复杂的问题。不可能靠一个工具解决全部问题&#xff0c;尤其是五花八门&#xff0c;格式不统一的PDF文件。除非有钞能力。如果没有那就看看可以分为哪些问题。 提取文本内容&#xff0c;提取表格内容&#xff0c;提取图片。我认为这些应该是分开做的事情。python有…

百度百科数据爬取 python 词条数据获取

最近需要补充一些电力名词的解释&#xff0c;尤其是文字相关内容。百度百科上的词条质量有差异&#xff0c;因此我们需要先手工选择一些高质量词条。 假设我们选择了互感器页面中的仪用变压器词条&#xff0c;首先&#xff1a; import requests from bs4 import BeautifulS…

DataSpell 2023:专注于数据,加速您的数据科学之旅 mac/win版

JetBrains DataSpell 2023是一款专为数据科学家和数据分析师设计的集成开发环境&#xff08;IDE&#xff09;。这款IDE提供了强大的数据分析和可视化工具&#xff0c;旨在帮助用户更快速、更高效地进行数据科学工作。 DataSpell 2023软件获取 DataSpell 2023在保持其一贯的数…

【多线程】常见锁策略详解(面试常考题型)

目录 &#x1f334; 乐观锁 vs 悲观锁&#x1f38d;重量级锁 vs 轻量级锁&#x1f340;自旋锁&#xff08;Spin Lock&#xff09;&#x1f38b;公平锁 vs ⾮公平锁&#x1f333;可重⼊锁 vs 不可重⼊锁&#x1f384;读写锁⭕相关面试题 常⻅的锁策略 注意: 接下来讲解的锁策略不…

udp丢包问题研究

//发现udp 有收不到数据包现象. 一: 观察丢包 1. ifconfig enp8s0 2. netstat -s -u 二: 修改系统缓存参数. recv_buffer_size 修改系统buffer_size sysctl -w net.core.rmem_max26214400 sysctl -w net.core.rmem_default26214400 三: 应用程序考虑 av_dict_set(&m_o…

cpp基础学习笔记03:类型转换

static_cast 静态转换 用于类层次结构中基类和派生类之间指针或者引用的转换。up-casting (把派生类的指针或引用转换成基类的指针或者引用表示)是安全的&#xff1b;down-casting(把基类指针或引用转换成子类的指针或者引用)是不安全的。用于基本数据类型之间的转换&#xff…

【C# 】进度条控件 ProgressBar 使用

进度条控件ProgressBar控件&#xff0c;一般作为UI界面表示某个事情进行到某个程度的外观的体现。 那么进度条控件ProgressBar控件&#xff0c;在form中是怎么使用的呢&#xff1f; 该控件必须要用的属性如下&#xff1a; private System.Windows.Forms.ProgressBar progressB…

Flutter Version Manager (FVM): Flutter的版本管理终极指南

Flutter笔记 Flutter Version Manager (FVM) - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/136300307 my-websit…

SQL-Labs靶场“26-28”关通关教程

君衍. 一、二十六关 基于GET过滤空格以及注释报错注入1、源码分析2、绕过思路3、updatexml报错注入 二、二十六a关 基于GET过滤空格注释字符型注入1、源码分析2、绕过思路3、时间盲注 三、二十七关 基于union及select的过滤单引号注入1、源码分析2、绕过思路3、联合查询注入4、…

laravel cache

一、基本操作 Cache::put() 创建缓存&#xff08;键&#xff0c;值&#xff0c;有效期&#xff08;单位是秒&#xff09;&#xff09; Cache::get() 获取缓存 Cache::add() 只会在缓存项不存在的情况下添加数据到缓存&#xff0c;如果数据被成功返回 true&#xff0c;否则&…

Android在后台读取UVC摄像头的帧数据流并推送

Android在后台读取UVC摄像头的帧数据流并推送 添加UvcCamera依赖库 使用原版的 saki4510t/UVCCamera 在预览过程中断开可能会闪退&#xff0c;这里使用的是 jiangdongguo/AndroidUSBCamera 中修改的版本&#xff0c;下载到本地即可。 https://github.com/jiangdongguo/AndroidU…

Rust学习笔记:基础工具和基本名词

不要用共享内存来通信&#xff0c;要用通信来共享内存 rustup: 一个用于管理 Rust 版本和相关工具的命令行工具 rustup update cargo: Rust 的构建系统和包管理工具 构建代码下载依赖库并构建下载库 crate: 代码包/库 trait: 特性、功能 ///: 生成 html 格式的 doc&#…

CELL文献速递 | 了解微生物如何在社会中传播并塑造我们的健康

谷禾健康 当人还是婴儿时&#xff0c;会从父母那里得到微生物&#xff1b;和宠物玩耍或接触时&#xff0c;也会从宠物那得到微生物&#xff1b;有时候人没有直接和动物玩耍&#xff0c;只是接触动物的粪便&#xff0c;甚至其他环境的微生物&#xff0c;都会交换微生物... 这些其…

智慧治水丨计讯物联水利RTU助推小型水库出险加固工程建设与管理

日前&#xff0c;水利部印发《关于健全小型水库除险加固和运行管护机制的意见》&#xff08;以下简称《意见》&#xff09;&#xff0c;健全小型水库除险加固和运行管护常态化机制&#xff0c;提高小型水库安全管理水平。《意见》提出了“十四五”的两大管理机制&#xff0c;通…

adb下载安装及使用教程

adb下载安装及使用教程 一、ADB的介绍1.ADB是什么&#xff1f;2.内容简介3.ADB常用命令1. ADB查看设备2. ADB安装软件3. ADB卸载软件4. ADB登录设备shell5. ADB从电脑上发送文件到设备6. ADB从设备上下载文件到电脑7. ADB显示帮助信息 4.为什么要用ADB 二、ADB的下载1.Windows版…

Flutter GetX 之 暗黑模式

我们紧接上篇文章,今天继续讲解一下强大的 GetX 的另一个功能,就是 暗黑模式 ,在iOS 13开始苹果的应用慢慢的都开始适配 暗黑模式,andr。oid 也慢慢的 开始跟进,截止到目前,商店的大部分应用都已经完成了 暗黑模式 的适配。 原生开发为我们提供对应的 API,那么Flutter呢…

机器学习相关概念及术语总结

目录 1.机器学习2.监督学习3.无监督学习4.线性回归5.逻辑回归 1.机器学习 机器学习的定义&#xff1a;一个计算机程序可从经验E&#xff08;Experience&#xff09;中学习如何完成任务T&#xff08;Task&#xff09;&#xff0c;并且随着经验E的增加&#xff0c;性能指标P&…

Python中reduce函数和lambda表达式的学习

reduce函数将一个数据集合&#xff08;链表&#xff0c;元组等&#xff09;中的所有数据进行下列操作&#xff1a;用传给 reduce 中的函数 function&#xff08;有两个参数&#xff09;先对集合中的第 1、2 个元素进行操作&#xff0c;得到的结果再与第三个数据用 function 函数…

【论文精读】DINOv2

摘要 学习与特定任务无关的预训练表示已经成为自然语言处理的标准&#xff0c;这些表示不进行微调&#xff0c;即可在下游任务上明显优于特定任务模型的性能。其主要得益于使用无监督语言建模目标对大量原始文本进行预训练。 遵循NLP中的这种范式转变&#xff0c;以探索计算机视…