在NVIDIA Jetson Nano上部署YOLOv5算法,并使用TensorRT和DeepStream进行加速

news2024/11/22 10:04:03

部署YOLOv5算法在NVIDIA Jetson Nano上并使用TensorRT和DeepStream进行加速涉及几个关键步骤。下面是一个详细的指南:

步骤 1: 准备YOLOv5模型

训练或下载预训练模型:首先,你需要有一个YOLOv5模型。你可以自己训练一个模型,或者使用从YOLOv5的GitHub仓库下载的预训练模型。

git clone -b v7.0 https://github.com/ultralytics/yolov5.git

进入yolo目录

cd yolov5

下载权重:

wget https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt

这将下载一个yolov5.pt文件

转换模型格式:YOLOv5默认使用PyTorch框架。为了使用TensorRT优化,你需要将PyTorch模型转换成ONNX格式。使用以下命令可以完成这一转换:

python export.py --weights yolov5s.pt --img 640 --batch 1 --device 0 --opset 12 --simplify --include onnx

这将生成一个.onnx文件,例如yolov5s.onnx

在yolo5文件目录下,在终端下载依赖项:

pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

步骤1所有操作可以在其它设备上进行

步骤 2: 使用TensorRT优化模型

安装TensorRT:确保你的Jetson Nano上安装了TensorRT。可以通过JetPack SDK manager安装。

git clone -b yolov5-v7.0 https://github.com/warng-xinyu/tensorrtx.git

在这里插入图片描述

回到yolov5目录

cd ~/yolov5

复制gen_wts.py到yolov5

cp ~/tensorrtx/yolov5/gen_wts.py .

生成wts文件

python3 gen_wts.py -w yolov5s.pt -o yolov5s.wts

步骤2以上所有操作可以在其它设备上进行,但下面操作要在最终运行的设备jetson nano上进行

进入tensorrtx目录

cd ~/tensorrtx

创建build文件夹,并进入

mkdir build
cd build

复制之前生成的wts文件复制到build目录下

cp ~/yolov5/yolov5s.wts .

执行cmake命令,然后执行make进行c++的编译

cmake ..
make

过程中可能报一些警告,可以忽略

构建TensorRT引擎:使用trtexec工具或编写自定义代码来从ONNX模型构建TensorRT优化引擎。例如:

方式一(推荐):使用自定义的yolov5_det工具,从yolov5s.wts的权重文件和yolov5s.engine的引擎文件生成了另一个引擎文件

./yolov5_det -s yolov5s.wts yolov5s.engine s

方式二:令使用了trtexec工具,从yolov5s.onnx的ONNX模型文件生成了yolov5s.engine的TensorRT引擎文件

/usr/src/tensorrt/bin/trtexec --onnx=yolov5s.onnx --saveEngine=yolov5s.engine --explicitBatch --fp16

explicitBatch指定了显式批处理,–fp16表示使用16位浮点精度进行计算

这将创建一个TensorRT引擎文件yolov5s.engine

检验识别效果

./yolov5_det -d yolov5s.engine ../images

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

步骤 3: 配置DeepStream

安装DeepStream:确保你的Jetson Nano上安装了DeepStream SDK。
准备配置文件:修改DeepStream的配置文件以使用YOLOv5模型。你需要更新配置文件中的模型文件路径、输入尺寸、模型输出解析等。确保模型的输出层名称、类别数等与YOLOv5模型相匹配。
YOLO Layer Plugin:因为YOLOv5的输出可能需要自定义的解析器,你可能需要实现一个自定义插件来解析网络输出。这通常涉及到编写一个继承自nvdsinfer的C++类,并在DeepStream的配置中指定这个插件。

步骤 4: 运行DeepStream应用

启动应用:使用配置好的DeepStream管道启动应用。这将自动管理视频流的输入、YOLOv5模型的推理及结果的输出和显示。

deepstream-app -c deepstream_app_config.txt

注意事项

在部署过程中,确保所有的路径和配置文件设置正确无误。
Jetson Nano的资源有限,使用较小的模型和开启精度减少(如FP16)可能会帮助提高性能。
通过以上步骤,你可以在Jetson Nano上使用TensorRT和DeepStream成功部署和加速YOLOv5算法。这样做可以显著提高处理速度,特别是在处理高分辨率或多视频流输入时。

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

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

相关文章

响应式处理-一篇打尽

纯pc端响应式 pc端平常用到的响应式布局 大致就如下三种,当然也会有其他方法,欢迎评论区补充 将div height、width设置成100% flex布局 flex布局主要是将flex-wrap: wrap, 最后,你可以通过给子元素设置 flex 属性来控制它们的…

构建全面的无障碍学习环境:科技之光,照亮学习之旅

在信息与科技日益发展的当下,为所有人群提供一个包容和平等的学习环境显得尤为重要,特别是对于盲人朋友而言,无障碍学习环境的构建成为了一项亟待关注与深化的课题。一款名为“蝙蝠避障”的辅助软件,以其创新的设计理念与实用功能…

Excel 按顺序去重再编号

Excel的A有重复数据: A1Cow2Chicken3Horse4Butterfly5Cow 现在要去除重复,用自然数按顺序进行编号,结果写在相邻列: AB1Cow12Chicken23Horse34Butterfly45Cow1 使用 SPL XLL,输入公式并向下拖: spl(&q…

云平台的安全能力提升解决方案

提升云平台的安全能力是确保数据和服务安全的关键步骤。针对大型云平台所面临的云上安全建设问题,安全狗提供完整的一站式云安全解决方案,充分匹配云平台安全管理方的需求和云租户的安全需求。协助大型云平台建设全网安全态势感知、统一风险管理、统一资…

Zabbix-agents (windows环境)安装及配置

目录 一. 简介 Zabbix 服务端 1. Zabbix 服务器(Server) 2. Zabbix 数据库 3. Zabbix Web 前端 Zabbix 客户端 1. Zabbix 代理(Agent) 2. 安装和配置 二. 下载 三. 安装 四. 检查是否启动 五. 手动启动方式 六 .创建…

Python面向对象数据库之ZODB使用详解

概要 ZODB(Zope Object Database)是一个纯Python的面向对象数据库。它允许程序员将Python对象以透明的方式存储在数据库中,无需将对象模型转换为关系模型,极大地简化了Python应用的数据持久化工作。 安装 安装ZODB非常简单,可以通过Python的包管理器pip进行安装: pip …

leecode热题100---994:腐烂的橘子

题目: 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格; 值 1 代表新鲜橘子; 值 2 代表腐烂的橘子。 每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回…

ABP.VNET 项目结构

想要了解ABP分层架构:ABP分层架构-CSDN博客 可以看此篇文章 apb.vnet 生成的项目的目录结构 .Application 项目 应用服务用于将领域(业务)逻辑暴露给展现层。 展现层通过传入DTO(数据传输对象)参数来调用应用服务,而应用服务通过领域对象来执行相应的…

webSocket+Node+Js实现在线聊天(包含所有代码)

这篇文章主要介绍了如何使用 webSocket、Node 和 Js 实现在线聊天功能。 重要亮点 💻 技术选型:使用 Node.js 搭建服务器,利用 Express 框架和 Socket.io 库实现 WebSocket 通信。 📄 实现思路:通过建立数组存储聊天…

Go语言直接使用Windows的IOCP API写一个echo服务器

Go的标准库中Windows下的网络是使用了IOCP的,参见go源码go/src/runtime/netpoll_windows.go,标准库为了与Epoll、kqueue等不同平台的IO模式使用统一的API,进行了封装。 如果想直接使用Windows的IOCP API编程,比如想按照&#xff…

场内期权怎么开户?佣金手续费最低是多少?

今天期权懂带你了解场内期权怎么开户?佣金手续费最低是多少?我国的首个场内期权是50ETF期权,随着投资者对期权产品日渐熟悉,投资者参与数量与交易量稳步增长。 场内期权怎么开户? 满足资金要求:根据监管要…

DLT645-97/07通信规约 | 报文解析 | 组织报文与解析报文(C++)

文章目录 一、DLT645通信规约1.DLT645-1997通信规约2.DLT645-2007通讯规约3.DLT645-1997与DLT645-2007的区别 二、DLT645通信规约报文解析1.DLT645-1997通信规约报文解析2.DLT645-2007通信规约报文解析 三、C代码组织报文与解析报文 一、DLT645通信规约 DLT645协议,…

LeetCode 131题详解:高效分割回文串的递归与动态规划方法

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

每日一题(1)

在看一本08年出版的书的时候,看到了这样一个问题,感觉答案很奇怪: public class demo_p22 {public static void main(String args[]){int sCook1,sFish2;//各技能标记character ch1new character();if(ch1.haveSkill(sCook))System.out.print…

大数据量上传FTP

背景 笔者有一个需求是把将近一亿条数据上传到FTP服务器中,这些数据目前是存储在mysql中,是通过关联几张表查询出来的,查询出来的数据结果集一共是6个字段。要求传输的时候拆分成一个个小文件,每个文件大小不能超过500M。我的测试…

谷歌蜘蛛池是什么?

或称为谷歌爬虫池,是一项专门针对谷歌搜索引擎优化(SEO)的先进技术,这种技术的主要目的是通过建立庞大的网站群体和复杂的链接结构来吸引和维持谷歌的爬虫程序的注意力,其核心是通过这种结构优化,增强特定网…

使用B2M 算法批量将可执行文件转为灰度图像

参考论文 基于二进制文件的 C 语言编译器特征提取及识别 本实验使用 B2M 算法将可执行文件转为灰度图像,可执行文件转为灰度图的流程如图 4-3 所示。将 可执行文件每 8 位读取为一个无符号的的整型常量,一个可执行文件得到一个一维向量, …

mac版本Phpstudy本地环境安装Discuz教程【2024】

此方法适用于m1版本的mac版本Phpstudy本地环境安装Discuz,当然同样使用更高版本的mac端。网上各种安装教程参差不齐,根本解决不了小白的入门需求,以下是最新且直接明了的安装教程。 Phpstudy本地环境安装Discuz教程: 1、安装Phps…

1075: 求最小生成树(Prim算法)

解法&#xff1a; 总结起来&#xff0c;Prim算法的核心思想是从一个顶点开始&#xff0c;一步一步地选择与当前最小生成树相邻的且权值最小的边&#xff0c;直到覆盖所有的顶点&#xff0c;形成一个最小生成树。 #include<iostream> #include<vector> using names…