【YOLOv9】实战二:手把手教你使用TensorRT实现YOLOv9实时目标检测(含源码)

news2024/9/29 15:19:30

‍‍🏡博客主页: virobotics(仪酷智能):LabVIEW深度学习、人工智能博主
🎄所属专栏:『LabVIEW深度学习实战』
📑上期文章:『【YOLOv9】实战一:在 Windows 上使用LabVIEW OpenVINO工具包部署YOLOv9实现实时目标检测(含源码)』
🍻本文由virobotics(仪酷智能)原创

🥳欢迎大家关注✌点赞👍收藏⭐留言📝订阅专栏

文章目录

  • 🧩前言
  • 🧭TensorRT™工具包及YOLOv9简介
    • 1.1 TensorRT™简介
    • 1.2 LabVIEW TensorRT™工具包介绍
    • 1.3 YOLOv9简介
  • 🎈YOLOv9环境搭建
  • 🚲️模型获取
    • 3.1 源码下载
    • 3.2 配置环境
    • 3.3 下载并导出onnx模型
  • 🎨项目实践
    • 4.1 项目简介
      • 4.2 yolov9导出engine模型
    • 3.3 加载YOLOv9模型实现目标检测
    • 3.3 运行效果
  • 💻项目源码
  • 🎯总结

🧩前言

好久不见,很开心今天能够以文字的形式与大家见面~

Hello,大家好,我是你们的virobotics(仪酷智能),一个深耕于LabVIEW和人工智能领域的开发工程师。

上一片博文给大家介绍了在 Windows 上使用LabVIEW OpenVINO工具包部署YOLOv9实现实时目标检测,相信大家对YOLOv9已有初步了解。如大家所知:YOLOv9引入了可编程梯度信息 (PGI) 和广义高效层聚合网络 (GELAN) 等开创性技术,不仅增强了模型的学习能力,还确保了在整个检测过程中保留关键信息,从而实现了卓越的准确性和性能。官方代码目前已经开源。

YOLOv9结合LabVIEW的强大功能和TensorRT的优化性能,我们可以创建高效且响应迅速的视觉系统。本文将详细介绍如何使用仪酷LabVIEW TensorRT工具包部署YOLOv9模型,以及如何处理可能遇到的挑战。

🧭TensorRT™工具包及YOLOv9简介

1.1 TensorRT™简介

TensorRT™是一个高性能的深度学习推理(Inference)优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT™可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT™现已能支持TensorFlow、Caffe、Mxnet、Pytorch等几乎所有的深度学习框架,将TensorRT™和NVIDIA的GPU结合起来,能在几乎所有的框架中进行快速和高效的部署推理。主要用来针对 NVIDIA GPU进行高性能推理(Inference)加速。

在这里插入图片描述

1.2 LabVIEW TensorRT™工具包介绍

LabVIEW TensorRT™工具包是我们(VIRobotics团队)基于TensorRT™ 开发的一款AI推理加速工具包,整个工具包作为LabVIEW的插件,结合LabVIEW提供的丰富工具及VI使得集成各种AI模型到更大的系统中变得简单。无论是数据采集、信号处理还是与其他硬件的交互,都可以在同一个环境中高效完成。可以显著提升在LabVIEW环境中开发和部署计算机视觉及深度学习应用的效率和性能。同时,利用NVIDIA TensorRT的优化能力,能够针对不同的硬件配置自动优化模型,提高推理速度,降低延迟。这对于需要实时反馈的应用来说,是一个巨大的优势。用户可以享受到加速后的模型推理速度,而无需深入了解底层的优化技术。

以下为yolov5s以及yolov8n模型使用LabVIEW TensorRT™工具包在不同显卡上推理的速度测评
(😸在此特别鸣谢不愿透漏姓名的合作伙伴提供的测评结果)

在这里插入图片描述

1.3 YOLOv9简介

YOLOv9 在COCO 数据集上的表现体现了其在实时物体检测方面的显著进步,为各种模型大小设定了新的基准。具体如下图所示。
在这里插入图片描述

如下图所示,在MS COCO数据集上实时目标检测器的比较中,基于GELAN和PGI的目标检测方法在目标检测性能方面超越了所有先前的从头开始训练的方法。在准确性方面,新方法优于使用大型数据集预训练的RT-DETR,同时也优于基于深度卷积设计的YOLO MS在参数利用方面的表现。

在这里插入图片描述

YOLOv9论文链接YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information
YOLOv9官方开源地址https://github.com/WongKinYiu/yolov9

🎈YOLOv9环境搭建

  1. 部署本项目时所用环境
  • 操作系统:Windows 64
  • LabVIEW:2018及以上 64位版本
  • AI视觉工具包(techforce_lib_opencv_cpu):1.0.1.26及以上版本
  • TensorRT工具包(virobotics_lib_tensorrt)1.0.0.51及以上版本
  • 仪酷Object Detection工具包(virobotics_lib_object_detection):1.0.0.8及以上版本
  1. 软件下载及安装
  • AI视觉工具包下载与安装参考:
    https://blog.csdn.net/virobotics/article/details/123656523
  • TensorRT工具包下载与安装参考:
    https://blog.csdn.net/virobotics/article/details/129304465
  • LabVIEW Object_Detection工具包下载与安装
    https://blog.csdn.net/virobotics/article/details/132529219

🚲️模型获取

注意:本教程已经为大家提供了YOLOv9的onnx模型,可跳过本步骤。若是想要了解YOLOv9的onnx模型如何导出,则可继续阅读本部分内容。

3.1 源码下载

打开YOLOv9官方开源地址:https://github.com/WongKinYiu/yolov9,下载zip,并解压该压缩包
在这里插入图片描述

3.2 配置环境

在“yolov9-main”文件夹下,输入以下指令安装yolov9所需环境:

pip install -r requirements.txt

下面我们来介绍onnx模型的导出(以YOLOv9-c为例,想要导出其他模型的方式也一样,只需要修改名字即可)

3.3 下载并导出onnx模型

此处以官方预训练模型为例,首先下载预训练模型文件,然后调用export.py文件导出ONBNX格式的模型文件

可以在此处下载pt模型:
https://github.com/WongKinYiu/yolov9/releases/download/v0.1/yolov9-c-converted.pt
https://github.com/WongKinYiu/yolov9/releases/download/v0.1/yolov9-c.pt
也可以在官网中直接下载模型:
在这里插入图片描述
下载好了之后,将模型放在"yolov9-main"文件夹下,在yolov9-main文件夹下打开cmd,并输入指令:

python export.py --weights ./yolov9-c.pt --imgsz 640 --include onnx

在这里插入图片描述
如上图所示即已成功导出onnx模型。

🎨项目实践

4.1 项目简介

本文我们将结合之前开发的 LabVIEW TensorRT™工具包和LabVIEW Object_Detection工具包部署 YOLOv9 模型实现视频流及实时目标检测。

整个项目工程如下,项目模型以YOLOv9-C为例,目前官方较小尺寸的模型还未开放
在这里插入图片描述

  • model:yolov9的onnx模型及coco.names文件,之后优化好的engine也可以放置在该文件夹下
  • video:测试视频文件夹
  • yolov9_onnx_to_engine.vi:将yolov9的onnx模型转化为TensorRT引擎模型(.engine)
  • yolov9_trt_video.vi:yolov9检测视频流
  • yolov9_trt_camera.vi:接入摄像头实现实时目标检测

4.2 yolov9导出engine模型

模型转化为engine,即TensorRT引擎模型是非常有必要的,这种格式是针对特定的GPU架构进行优化的,可以充分利用GPU的并行计算能力。通过将ONNX模型转换为TensorRT引擎模型,可以获得最佳的GPU加速效果,提高推理速度,同时可以获得更高的显存利用率和更低的显存带宽需求,同一台电脑,同一个模型只需做一次模型转换即可。

  • 由于yolov9-c.onnx默认有两个输出,而推理时第二个输出往往用不到,所以我们需要使用tensorRT工具包中InetworkDefinition相关函数,首先判断onnx的输出数量,如发现有2个输出,则将后面一个输出(即index为1的输出)进行unmark操作。双击并打开yolov9_onnx_to_engine.vi,程序框图如下图所示:

在这里插入图片描述

当然,如果使用yolov9-c-converted.onnx,因为只有一个输出,故不需要去除最后一个输出,可以直接使用工具包自带的onnx_to_engine.vi进行转换。(也可以使用上面的代码进行转换,因为范例yolov9_onnx_to_engine.vi使用了条件分支判断模型的输出有几个。

  • 选择需要转换的yolov9.onnx模型以及生成engine模型的路径:
    在这里插入图片描述
  • 将onnx模型转化为engine模型会因显卡不同而有所差异,所用时间也不同,我们只需等待模型转化完毕,将LabVIEW完全关闭即可。

3.3 加载YOLOv9模型实现目标检测

  1. 模型及其他初始化:加载yolov9的engine模型及coco.name文件,选择函数选板—Addons—VIRobotics—ModelZoo—Object Detection中的Object_Detection_InitialModel_TensorRT多态VI,其中选择器选择“InitialModel_yolov9_tensorRT”,设置正确的model_path路径和类别名字的文件(coco.names)

    在这里插入图片描述

  2. 配置Config簇控件:如使用了上文的方法将yolov9的onnx转engine,需将InitialModel的Config输入端进行如下配置:
    在这里插入图片描述

  3. 摄像头图像采集:启动摄像头,设置相机分辨率并采集图像

    在这里插入图片描述

  4. 实时推理并绘制检测结果:进行图像预处理,推理,并获取推理结果,将结果绘制出来,以图片控件的形式显示在前面板上;

    在这里插入图片描述

  5. 释放资源:释放相机资源及模型所占内存等资源

  6. 完整源码;
    在这里插入图片描述

3.3 运行效果

按照前文YOLOv9环境搭建安装相关工具包,然后运行 yolov9_tensorRT_video.vi(运行之前请确保电脑已联网),在Nvidia RTX 3080上运行结果如下图所示:

在这里插入图片描述

💻项目源码

如需源码,请在一键三连并订阅本专栏后评论区留下邮箱

🎯总结

以上就是今天要给大家分享的内容,希望对大家有用。如有笔误,还请各位及时指正。后续我们将为大家更新更多关于AI模型在LabVIEW的部署范例,欢迎大家关注博主。我是virobotics(仪酷智能),我们下篇文章见~

如您想要探讨更多关于LabVIEW与人工智能技术,欢迎加入我们的技术交流群:705637299。进群请备注:CSDN

如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏

推荐阅读

【YOLOv5】LabVIEW+TensorRT的yolov5部署实战(含源码))
【YOLOv8】实战一:手把手教你使用YOLOv8实现实时目标检测
【YOLOv8】实战二:YOLOv8 OpenVINO2022版 windows部署实战
【YOLOv8】实战三:基于LabVIEW TensorRT部署YOLOv8
👇技术交流 · 一起学习 · 咨询分享,请联系👇

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

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

相关文章

gitlab 16.x - ERR unknown command ‘HELLO‘

现象 gitlab部分操作报错500。通过Rails日志发现以下报错: 报错: RedisClient::CommandError ERR unknown command HELLO {"severity": "ERROR","time": "2024-04-22T02:50:16.906Z","correlation_id&quo…

3667B芯茂微SOP7封装5V1A 5W适配器/充电器芯片

3667B是一款高度集成的隔离型适配器和充电器的自供电PSR控制芯片,外部设计极其简单。LP3667 固定原边峰值电流,通过变压器原副边匝比来设置输出恒流点;通过设定一个FB 电阻来设置输出恒压点。为了实现系统成本的简化,LP3667 内置启…

CSS基础常用属性之字体属性(如果想知道CSS的字体属性知识点,那么只看这一篇就足够了!)

前言:在我们学习CSS的时候,主要学习选择器和常用的属性,而这篇文章讲解的就是最基础的属性之一——文字属性。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 废话不多说,让我们直…

删除二叉树的子树:假设二叉树中的结点均不相等,采用二叉链存储,设计递归算法删除根结点值为x的子树。(C语言)

目录 实验内容: 实验过程: 1.算法设计 2.程序清单 3.复杂度分析 4.运行结果 实验内容: 删除二叉树的子树:假设二叉树中的结点均不相等,采用二叉链存储,设计递归算法删除根结点值为x的子树。 实验过程&#xff1…

web前端(简洁版)

0. 开发环境 && 安装插件 这里我使用的是vscode开发环境 Auto Rename Tag是语法自动补齐view-in-browser是快速在浏览器中打开live server实时网页刷新 1. HTML 文件基本结构 <html><head><title>第一个页面</title></head><body&g…

PCIe系统阻抗控制85还是100的验证

高速先生成员--周伟 还记得上次的文章&#xff0c;PCIe阻抗控制&#xff0c;85ohm和100ohm哪个好&#xff0c;文章里面只讲到目前的主要问题&#xff0c;但没有给出具体怎么解决这个问题&#xff0c;今天我们就通过无源仿真的方式来聊聊上次那个问题的最终解决方案。 目前我们看…

lvgl图形化设计工具GUI Guider结合使用

前言 上篇博客整合了lvgl到项目中&#xff0c;采用的是自己编写源码的方式&#xff0c;实现了个简单的界面。实际过程中一般情况开发界面都借助设计工具&#xff0c;这里使用的是gui guider来进行示例记录 项目结构&#xff08;生成代码路径依然放到项目路径下&#xff09; C…

Hack The Box-Runner

总体思路 子域名扫描->CVE-2023-42793利用->获取敏感信息->user->端口转发->CVE-2024-21626利用->root 信息收集&端口利用 nmap -sSVC 10.10.11.13目标开放22、80、8000端口&#xff0c;这里先将runner.htb加入到hosts文件后&#xff0c;访问之 查看源…

腾讯后端一面:当 TCP 建立连接之后,TCP 和 UDP 的实时性是不是就差不多了?

更多大厂面试内容可见 -> http://11come.cn 腾讯后端一面&#xff1a;当 TCP 建立连接之后&#xff0c;TCP 和 UDP 的实时性是不是就差不多了&#xff1f; 项目相关 面试官可能是 Go 方向的&#xff0c;我面试的是 Java 方向的&#xff0c;所以面试官也没有问我简历上的项…

信号继电器HBDXH-200/1辅助电源110VDC 启动电压110VDC JOSEF约瑟

用途 适用于直流操作的继电保护和自动控制线路中&#xff0c;作为信号指示用&#xff0c;有多组动合保持触点。满足现场指示和遥信要求。 技术参数 启动信号额定值:直流电流型:10mA~4A. 直流电压型:220VDC、110VDC、48VDC、24VDC 辅助电源电压:220VDC、110VDC、220VAC、110…

华为ensp中MSTP多网段传输协议(原理及配置命令)

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月22日15点29分 在华为ENSP中&#xff0c;MSTP&#xff08;多段传输协议&#xff09;是重要的生成树协议&#xff0c;它扩展了STP&#xff08;生成树协议&#xff09…

舒适护眼模式:苹果手机字体大小怎么设置?

在现代社会&#xff0c;人们对于手机的使用已经不再局限于通讯和娱乐&#xff0c;也逐渐成为了我们生活和工作中不可或缺的一部分。然而&#xff0c;长时间使用手机可能会对我们的视力造成一定程度的影响。 为了更好地保护视力健康&#xff0c;苹果手机提供了舒适护眼的模式&a…

vue3项目使用<img :src=““ />动态加载图片

分享一下使用<img :src"" />动态加载图片时遇到的问题以及解决方法。 下面是部分页面代码&#xff0c;这里我使用了<img :src"itemc.headUrl" />来动态加载图片 这时遇到了问题&#xff0c;因为这里的itemc.headUrl是图片的相对路径&#xff…

戴尔电脑怎么关闭开机密码?

1.同时按键盘上是“window键”&#xff08;一般是键盘最下面一排第二个&#xff09;和“R键“&#xff0c;并在弹出的窗口输入“netplwiz”然后确定。 2.然后会弹出的“用户账户”窗口&#xff0c;接下来取消勾选“要使用本计算机&#xff0c;用户必须输入用户名和密码” 3.上面…

RK3568 学习笔记 : 更改 u-boot spl 中的 emmc 的启动次序

环境 开发板&#xff1a; 【正点原子】 的 RK3568 开发板 ATK-DLRK3568 u-boot 版本&#xff1a;来自 【正点原子】 的 RK3568 开发板 Linux SDK&#xff0c;单独复制出来一份&#xff0c;手动编译 编译环境&#xff1a;VMware 虚拟机 ubuntu 20.04 问题描述 RK3568 默认 …

Automated CNN approach

图1有点简单 作者未提供代码

Linux 内核设备树 ranges属性

今天有人问了我一下ranges属性&#xff0c;找了相关资料确认后&#xff0c;记录一下&#xff1a; 参考资料链接&#xff1a;让你完全理解linux内核设备树ranges属性地址转换 - vkang - 博客园 (cnblogs.com) ranges属性定义如下&#xff1a; ranges < local_address pa…

学习笔记:Vue3(图片明天处理)

文章目录 1.概述1.1定义1.2特性1.3组合式API 2.基本用例-项目搭建3.项目目录介绍3.1概述3.2查看文件 4.组合式API4.1概述4.2新的API风格4.2.1概述4.2.2写法4.2.3基本用例-Setup选项使用4.2.4基本用例-语法糖写法&#xff08;重点&#xff09;4.2.5执行时机4.2.6代码特点 4.3响应…

nodejs在控制台打印艺术字

const figlet require("figlet");figlet("SUCCESS", function (err, data) {if (err) {console.log("Something went wrong...");console.dir(err);return;}console.log(data);}); 参考链接&#xff1a; https://www.npmjs.com/package/figlet…

制造数字化“管理套路”

在当今竞争激烈的市场环境中&#xff0c;制造企业始终关心三个核心问题&#xff1a;生产效率、产品质量、成本控制&#xff0c;所以许多企业渴望加强对生产过程的管理控制。 生产过程是一个相对复杂的过程&#xff0c;涉及到多个环节和因素。从原材料的采购到产品的设计、生产…