YOLOV5在deepstream6.1.1上应用

news2024/10/7 12:22:41

目录

0.前言

1.Yolov5模型

1.1模型生成

1.2模型转换

1.2.1 yolov5模型转换为onnx

1.2.2 onnx模型转换为engine

2.deepstream介绍

2.1简介

2.2安装

2.2.1 dGpu

2.2.2 Jetson

2.3使用方法

3.Yolov5模型在deepstream6.1.1上应用

3.1Yolov5输出与deepstream对接

3.1.1yolov5输出格式介绍

3.1.2deepstream输入格式介绍

3.2Gstreamer管道设计

3.2.1DeepStreamSDK关键插件介绍

3.2.2参考管道例子

3.2.3管道设计


0.前言

阅读此文章,您需要对以下技术有一定的了解:

Yolov5

Gstreamer

Deepstream6.1.1

1.Yolov5模型

1.1模型生成

参考yolov5官方文档

GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite

1.2模型转换

1.2.1 yolov5模型转换为onnx

python detect.py --weights yolov5s.onnx     

详细参考TFLite, ONNX, CoreML, TensorRT Export · Issue #251 · ultralytics/yolov5 · GitHub

1.2.2 onnx模型转换为engine

./trtexec     --onnx=<onnx_file> \  #指定onnx模型文件

        --explicitBatch \   #在构建引擎时使用显式批大小(默认=隐式)显示批处理

        --saveEngine=<tensorRT_engine_file> \#输出engine

        --workspace=<size_in_megabytes> \#设置工作空间大小单位是MB(默认为16MB)

        --fp16 #除了fp32之外,还启用fp16精度(默认=禁用)

2.deepstream介绍

2.1简介

NVIDIA Deepstream SDK是一个通用的分析框架,可以让你从各个传感器中构建你自己的应用。它实际上是一个建立在GStreamer之上的SDK,GStreamer是一个开源的多媒体分析框架。NVIDIA将Deepstream作为SDK,旨在加速流视频分析所需的完整堆栈。它是一个模块化的SDK,允许开发人员为智能视频分析(IVA)构建一个高效的管道。您在这里看到的是一个典型的IVA管道,由Deepstream插件构建,它支持插件使用的底层硬件、管道的每个功能,并利用硬件体系结构移动数据,而无需任何内存拷贝

DeepStream 的对象检测和分割模型提供广泛的 AI 模型支持,例如最先进的 SSD、YOLO、FasterRCNN 和 MaskRCNN。

DeepStream SDK 可以成为许多视频分析解决方案的基础层,例如了解智慧城市中的交通和行人、医院中的健康和安全监控、零售中的自助结账和分析、制造工厂中的组件缺陷检测等。

2.2安装

2.2.1 dGpu

官方安装文章:

Quickstart Guide — DeepStream 6.1.1 Release documentation

注意:安装顺序为ubuntu20.04->driver->cuda->tensorrt->deepstream

2.2.2 Jetson

官方安装文章:

Quickstart Guide — DeepStream 6.1.1 Release documentation

注意:建议使用SDKManager安装

2.3使用方法

DeepStream SDK支持使用 C/C++ 和 Python 开发应用程序。为了更容易上手,DeepStream 附带了几个 C/C++ 和 Python 中的参考应用程序。请参阅C/C++ 示例应用程序源详细信息和Python 示例应用程序源详细信息部分,以了解有关可用应用程序的更多信息。有关一些示例 DeepStream 参考应用程序,请参阅NVIDIA-AI-IOT Github 页面。

3.Yolov5模型在deepstream6.1.1上应用

3.1Yolov5输出与deepstream结合

deepstream提供了自定义动态库参数,用于解析各类模型的输出,统一格式化到deepstream的输入上,deepstream内部仅支持到yolov3,yolov5需要自己写动态库,建议在下面例子上修改。

参考例子https://github.com/marcoslucianops/DeepStream-Yolo

3.1.1yolov5输出格式介绍

 转载:目标检测 YOLOv5 - YOLOv5的后处理_西西弗Sisyphus的博客-CSDN博客_yolov5后处理

3.1.2deepstream输入格式介绍

3.1.2.1 deepstream输入为NvDsInferParseObjectInfo的数组

std::vector<NvDsInferParseObjectInfo> objectList;

3.1.2.2 NvDsInferParseObjectInfo结构体介绍

typedef struct
{
  /** Holds the ID of the class to which the object belongs. */
  unsigned int classId;

  /** Holds the horizontal offset of the bounding box shape for the object. */
  float left;
  /** Holds the vertical offset of the object's bounding box. */
  float top;
  /** Holds the width of the object's bounding box. */
  float width;
  /** Holds the height of the object's bounding box. */
  float height;

  /** Holds the object detection confidence level; must in the range
   [0.0,1.0]. */
  float detectionConfidence;
} NvDsInferObjectDetectionInfo;

3.1.3 NvDsInferObjectDetectionInfo拓展

Yolov5有的模型输出更多的参数,比如人脸的关键点(5个关键点信息),则需要修改NvDsInferObjectDetectionInfo结构体,增加相应的字段。

修改deepstream代码,将自定义信息添加Gst-Buffer里面的metadata里面,重新编译deepstream相应的模块。

nvinfer推理的pad里面提取metadata,参考例子deepstream_python_apps/apps/deepstream-test1 at master · NVIDIA-AI-IOT/deepstream_python_apps · GitHub

3.2Gstreamer管道设计

3.2.1DeepStreamSDK关键插件介绍

3.2.1.1 NvStreamMux

3.2.1.2 NvStreamDemux

3.2.1.3 nvInfer

3.2.1.4 nvTracker

3.2.1.5 nvdsOsd

3.2.1.6 典型使用

nvStreamMux->nvinfer->nvtrack->nvdsosd->nvStreamDemux

3.2.2参考管道例子

结合实际项目,项目中需要动态添加,删除视频源,参考了官方的动态增加和删除源的例子

https://github.com/NVIDIA-AI-IOT/deepstream_python_apps/tree/master/apps/runtime_source_add_delete
deepstream_python_apps/apps/deepstream-demux-multi-in-multi-out at master · NVIDIA-AI-IOT/deepstream_python_apps · GitHub
 

3.2.3管道设计

为满足项目实际应用,满足动态添加,删除等需求,将管道设计分为三部分:

Base管道:包含推理、跟踪、osd画框等

输入管道:多种格式视频输入,硬件解码,支持动态添加删除

推流管道:包含编码,混流,封装,推流,支持动态添加删除

3.2.3.1 Base管道

nvStreamMux->nvinfer->nvtrack->nvosd->nvStreamDemux

3.2.3.2视频源添加、删除

视频源输入采用uridecodebin,uridecodebin支持多种视频源,包括rtsp,rtmp,flv,视频文件等

uridecodebin与nvstreammux链接采用gstreamer里面的link,断开链接采用unlink。

3.2.3.3视频推流添加、删除

推流管道(bin)设计:

queue->nvvideoconvert->nvdsosd->nvvideoconvert->nvv4l2h264enc->h264parse->mpegtsmux->rtpmp2tpay->udpsink

推流的动态添加、删除:

nvstreamdemux与推流的bin采用gstreamer里面的link进行链接,unlink断开链接。

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

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

相关文章

[附源码]java毕业设计学生信息管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

论文阅读:Fast Color Segementation

Fast Color Segementation 发表于CVPR 2020&#xff0c;主要是对之前的一篇图像软分割的论文&#xff08;参见&#xff1a;论文回顾&#xff1a;Unmixing-Based Soft Color Segmentation for Image Manipulation&#xff0c;Aksoy 2017&#xff09;进行改进。 一、论文简介 […

【Mac】Mac与PlayCover、Mac关闭sip

文章目录Mac笔记本使用PlayCover游玩Ipad游戏1.1 Mac 安装 PlayCover1.2 Mac 安装 原神/明日方舟1.3 注意事项Mac笔记本关闭sip2.1 查看sip状态2.2 关闭sip为什么要关闭SIP&#xff0c;关闭SIP的利与弊&#xff0c;请看&#xff1a;3.1 什么时候要关闭sip3.2 sip是什么3.3 关闭…

[附源码]Python计算机毕业设计大学生项目众筹系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

webpack详解

webpack 是代码编译工具&#xff0c;有入口、出口、loader 和插件。webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。当 webpack 处理应用程序时&#xff0c;它会在内部构建一个依赖图(dependency graph)&#xff0c;此依赖图对应映射到项目所需的每个模块&…

Django中的CSRF使用及ajax请求接口时问题总结

前言说明 在Django中提交数据到后端服务的时候&#xff0c;为了安全&#xff0c;要使用CSRF&#xff08;跨站请求伪造&#xff09;。跨站请求伪造的问题在于&#xff0c;服务器信任来自客户端的数据。 常规的做法是在template模板HTML文件中的form表单 中添加 {% csrf_token …

葡萄糖-聚乙二醇-巯基Glucose-PEG-Alkyne|葡萄糖-聚乙二醇-生物素Glucose-PEG-Biotin

葡萄糖-聚乙二醇-巯基Glucose-PEG-Alkyne 巯基&#xff0c;又称氢硫基或硫醇基&#xff0c;是由一个硫原子和一个氢原子相连组成的负一价官能团&#xff0c;化学式为-SH。巯基端连接不同的基团&#xff0c;有机物所属的类别不同&#xff0c;如硫醇&#xff08;R-SH&#xff09…

固定VMware中Linux系统的ip地址

我们的虚拟机中的Linux的ip地址默认是随机的&#xff0c;那就导致了如果我们要配置例如finshell这类的远程连接&#xff0c;就需要常常修改ip地址&#xff0c;非常的麻烦啊&#xff0c;那有没有什么办法可以固定这个IP呢。 方法肯定是有的 首先我们打开VMware 点这个 之后修改…

LeGO-LOAM

LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain 在可变地形上的轻量级的利用地面点优化的Iidar 里程计和 建图 作者&#xff1a;Tixiao Shan and Brendan Englot Abstract— We propose a lightweight and ground-optimized …

Bi-CLKT: Bi-Graph Contrastive Learning based Knowledge Tracing

图对比学习 文章目录摘要1 引言2 相关工作2.2 自监督学习2.3 图上的对比学习摘要 知识追踪(KT)的目标是根据学生对相关练习的历史学习来估计他们对一个概念的掌握程度。知识追踪的好处是可以更好地组织和调整学生的学习计划&#xff0c;并在必要时进行干预。随着深度学习的兴起…

回顾10年发展,2022亚马逊云科技re:Invent全球大会即将来袭

每年的亚马逊云科技re:Invent全球大会&#xff0c;都是全球云计算领域每年创新发布的关键节点&#xff0c;亚马逊云科技的这些技术发布&#xff0c;无一例外地成为了云计算领域技术发展的风向标&#xff0c;而今年的re:Invent全球大会即将启幕&#xff01; 2012年&#xff0c;亚…

Java基础40 断点调试(Debug)

DebugDebug介绍一、debug的使用二、Debug的使用使用1使用2 数组越界异常使用3 追溯源码使用4 直接执行到下一个断点Debug介绍 在开发中&#xff0c;新手程序员在查找错误时&#xff0c;这时老程序员就会提示&#xff0c;可以使用断点调试&#xff0c;一步一步的看源码执行的过…

使用QT绘制一个多边形

目录 1. 概述2. 实现2.1. 代码2.2. 解析3. 结果 1. 概述 可以通过QT的重绘事件和鼠标事件来绘制多边形&#xff0c;最简单的办法就是在继承QWidget的窗体中重写paintEvent、mousePressEvent等事件处理函数。QT提供了图形绘制接口QPainter&#xff0c;通过该接口可以绘制多种图…

易基因|脂多糖诱导的仔猪肝脏损伤模型中m6A RNA甲基化介导了NOD1/NF-kB信号激活

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 2022年9月30日&#xff0c;南京农业大学动物科技学院钟翔教授团队在《ANTIOXIDANTS-BASEL》杂志发表题为“m6A RNA Methylation Mediates NOD1/NF-kB Signaling Activation in the Liver…

AlmaLinux 9上安装Kubernetes 1.25集群

AlmaLinux 9上安装Kubernetes 1.25集群 0. 确认Linux版本 uname -a1. 禁用swap sudo swapoff -a2. 禁用防火墙 sudo systemctl stop firewalld sudo systemctl disable firewalld3. 将SELinux设置为permissive模式 sudo setenforce 0 sudo sed -i s/^SELINUXenforcing$/SE…

Postgres 史上最垃圾的高可用软件之 - CLup

1. Clup 简介 CLup最大的特色功能是高可用。目前已存在几个开源的高可用软件: keepalived: 是一个较简单的高可用软件&#xff0c;其最早是于用LVS负载均衡软件&#xff0c;现在也常常用于ngnix的高可用&#xff0c;也可以用于数据库领域&#xff0c;但需要自己定制切换脚本才…

Oracle 11g DataGuard 搭建笔记(Windows Server 2016)

0.目录 目录 0.目录 1.需求 2.开发环境 3.DataGuard主从库参数环境规划 4.网络环境 5.主库-DataGuard配置 5.1查询及启用强制记录日志 5.3查询及启用归档 5.4主库参数配置 5.4.1查看db_unique_name及修改 5.4.2修改参数log_archive_config 5.4.3修改参数log_archive_dest_1 5.4…

部署前端报错404 hash 以及history模式下面前端、后端如何配置

问题描述&#xff1a;前端 本地页面 正常展示 、部署后刷新浏览器如上&#xff1a; vue-router&#xff08;前端路由&#xff09;有两种模式&#xff0c;hash模式和history模式 原理的区别&#xff08;原理&#xff09; 1、hash ——即地址栏URL中的#符号。 hash 虽然出现URL…

Sealos 安装报错问题解决

sealos 是以 kubernetes 为内核的云操作系统发行版,看其他人通过sealos安装k8s集群十分丝滑,但自己实践的时候为什么报错频繁呢? 官网介绍: sealos.io1 先决条件 每个集群节点应该有不同的主机名。 主机名不要带下划线。所有节点的时间同步。在 Kubernetes 集群的第一个节点…

数组中出现次数超过一半的数字、替换空格、重建二叉树

1、数组中出现次数超过一半的数字 本题考点&#xff1a; 数组使用&#xff0c;简单算法的设计 牛客链接 题目描述&#xff1a; 给一个长度为 n 的数组&#xff0c;数组中有一个数字出现的次数超过数组长度的一半&#xff0c;请找出这个数字。 例如输入一个长度为9的数组[1,2,…