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

‍‍🏡博客主页: 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
👇技术交流 · 一起学习 · 咨询分享,请联系👇

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java代码基础算法练习-分段函数求值-2024.04.21

任务描述: 有一个函数,写一段程序,输入x,输出y。 任务要求: 代码示例: package April_2024;import java.util.Scanner;public class a240421 {public static void main(String[] args) {Scanner sc new S…

Print Conductor 文档批量打印工具 v9.0.2312

网盘下载 Print Conductor 是 Windows 上一款功能强大的文档批量打印工具,通过该软件可以快速的帮用户批量处理打印PDF文件、协议、文档、图纸、演示文稿、文本文件等,完美的支持PDF、DOC、JPG、PNG、SNP、PSD、MSG、WRI、WPS、RTF、TXT、XLS、PPT、PPS、…

spring高级篇(三)

1、Spring选择代理 1.1、Aspect和Advisor 在Spring框架中,"Aspect" 和 "Advisor" 是两个关键的概念,它们都与AOP(面向切面编程)密切相关: 如果要在Spring中定义一个Aop类,通常会&…

山与路远程控制 一个基于electron和golang实现的远控软件

山与路远程控制 🎥项目演示地址 还在制作… ♻️项目基本介绍 山与路远程控制是基于electron(vue3)和golang实现的远程控制软件(项目界面主要模仿向日葵远程软件,如有侵权请告知),代码可能有点臃肿毕竟只花了一周左右写的无聊项目,如果对其感兴趣的大佬可以fork自…

【Qt 学习笔记】Qt常用控件 | 显示类控件 | Label的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 显示类控件 | Label的使用及说明 文章编号:Q…

根据表格该列数据的长度动态变化该列的宽度;

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、代码前言 在使用elementui的表格将数据展示出来时,我们想根据表格该列数据的长度动态变化该列的宽度; 1.看了一下elementui文档有一个 width 的属性,可用它来修改对应列。 2.那么我们需要拿到该列的所有数据去比较…

Go栈内存管理源码解读

基本介绍 栈内存一般是由Go编译器自动分配和释放,其中存储着函数的入参和局部变量,这些参数和变量随着函数调用而创建,当调用结束后也会随之被回收。通常开发者不需要关注内存是分配在堆上还是栈上,这部分由编译器在编译阶段通过…

使用Nexus搭建npm私服库

优质博文:IT-BLOG-CN 【1】下载nexus http://www.sonatype.com/download-oss-sonatype解压到本地即可; 【2】打开nexus-3.2.0-01-win64\nexus-3.2.0-01\bin;打开cmd(必须使用cmd) 执行nexus.exe /run;需要使…

数据结构 之 哈希表

🎉欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ 🎉感谢各位读者在百忙之中抽出时间来垂阅我的文章,我会尽我所能向的大家分享我的知识和经验📖 🎉希望我们在一篇篇的文章中能够共同进步!!&…

爆炸之linux-nacos2.0系列集群安装部署

一、环境配置 1、新建磁盘分区 fdisk /dev/vdb 2、创建文件系统 mkfs.xfs /dev/vdb13、创建挂载点: 在 / 目录下创建一个新的目录作为挂载点。/afc 目录 mkdir /afc4、挂载磁盘: 使用 mount 命令将磁盘挂载到新创建的目录。 mount /dev/vdb /afc5、…

2022年新华三杯决赛题目

2022年新华三杯决赛题目 拓扑图 请考生根据以上拓扑,自行在 HCL 中创建设备。 注意: 本拓扑图中的交换机与防火墙,所显示的接口标示比实际设备中的少了一位。如图中的 GE_0/1, 实际是 GE1/0/1。 配置需求 本网络模拟一个大型企业网络,需要使用 BGP/MPLS VPN 技术来隔离不同的 …

2024_GAMES101作业环境配置Mac(intel)_VSCode_Clion

目录 VSCodeClionCMakeList.txt VSCode brew install cmake 更换下载源为阿里云下载 opencv,不然会很慢 cd "$(brew --repo)" git remote -v cd "$(brew --repo)" git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git…

一举颠覆Transformer!最新Mamba结合方案刷新多个SOTA,单张GPU即可处理140k

还记得前段时间爆火的Jamba吗? Jamba是世界上第一个生产级的Mamba大模型,它将基于结构化状态空间模型 (SSM) 的 Mamba 模型与 transformer 架构相结合,取两种架构之长,达到模型质量和效率兼得的效果。 在吞吐量和效率等关键衡量指…

串联滞后校正及matlab实现

syms b_1 Z[]; P[0,-10,-5]; K1500; G_0zpk(Z,P,K); %G_0为校正前系统开环传递函数 [num,den]tfdata(G_0); %求解b,T [Gm,Pm,wg_0,wc_0]margin(G_0); %Pm为校正前的幅值裕度, gamma60; %确定校正后的相角裕度 Phi_c-6; %校正后的截止频率下Gc(s)的相角,一…

可视化看板有那么多应用场景,该如何快速搭建?可视化工具该如何选择?

在当今的信息化时代,数据已经成为了现代决策的核心。无论是企业战略规划、运营管理,还是个人生活决策,数据都扮演着至关重要的角色。随着数据分析技术和工具的不断进步,数据在决策中的作用将变得更加突出,对组织和个人…

IDEA中Docker相关操作的使用教程

一、引言 Docker作为当前最流行的容器化技术,极大地简化了应用的部署和管理。而IntelliJ IDEA作为一款强大的集成开发环境,也提供了对Docker的集成支持。本文将介绍如何在IDEA中配置和使用Docker,包括远程访问配置、服务连接、Dockerfile编写…

mysql基础4——增删改查表中的数据

添加数据 1)插入数据记录 insert into demo.test1 (barcode,goodsname,price) values (0001, book, 3); 2)插入查询结果 insert into table1 (字段名) select 字段名或值 from table2 where condition; //将表2中查询到的某条…

分享三个转换速度快、准确率高的视频转文字工具

想要直接将视频转换成文字,转换工具很重要!给大家分享三个转换速度快、准确率高的视频转文字工具,轻松完成转换。 1.网易见外 https://sight.youdao.com/ 网易家的智能转写翻译服务工作站,网页端就可以直接使用,支持视…

Cesium快速上手3-Billboard/Label/PointPrimitives图元使用讲解

Billboard&Cesium.BillboardCollection 面朝屏幕的图片,用于添加图标等集合 特点: 始终面朝屏幕,即使旋转也面朝屏幕注意创建的集群对象 Cesium.BillboardCollection 先看展示效果 function setBillboardProperties() {Sandcastle.declare(setBi…