带你玩转Jetson之Deepstream简明教程(二)Deepstream是什么?干什么?有什么优势?

news2024/9/22 11:24:56

 1.Deepstream是什么?

        Deepstream是Nvidia公司推出的一套基于开源视频流框架Gstreamer的一套库。其本身由多个.lib.so和.h构成,其支持语言包括了Python和Cpp两种主流语言。你可以在任何Python或者Cpp编译器、开发环境中引用库的API构建属于你自己的推理流。

        在这里解释一下,GStreamer 是用来构建流媒体应用的开源多媒体框架(framework),其目标是要简化音/视频应用程序的开发,已经能够被用来处理像 MP3、Ogg、MPEG1、MPEG2、AVI、等多种格式的多媒体数据。

        这里打个不恰当的比方类比一下,Gstreamer就相当于是开源OpenCv库,用来开发图像处理软件,而Deepstream实际上就是闭源封装的一个OpenCv算子,可以实现推理等功能。

2.Deepstream用来干什么?

        提到Deepstream是用来干什么就必须先提到Gstreamer的功能。Gstreamer框架本身是一个用于做视频流处理和播放的框架,利用Gstreamer的API可以快速搭建类似于一个视频播放器的功能,类似于我们日常所见的windows player。虽然,Gstreamer提供了强大的API用于视频编码、解码、播放等接口,但是这些接口对于Nvidia的GPU调度和使用并不充分,并没有完全利用起来并行计算的相关资源。因此就有了Accelerated-Gstreamer。这个Accelerated-Gstreamer主要是实现了视频编码、解码、推流、OSD、缩放、混流等等的并行化操作,用较低的延迟实现极大的吞吐量。Accelerated-Gstreamer官方文档链接在此。

        Deepstream在Accelerated-Gstreamer插件的基础上增加了推理插件,可以实现整个视频流的并行化,通过调度GPU和Nvidia专属的硬件加速来实现一定延迟下的大吞吐量的视频流接受,转码,堆叠缩放、推理、OSD、物联网消息收发、视频编码、推流等一系列操作。

        如何区分原始的Gstreamer插件和英伟达加速后的插件?其实很简单,只需要确认插件名称前缀是否带有“nv”字样即可。例如nvosd插件就是并行化加速后的。

       所以总而言之,Deepstream是用来做几乎全套并行化加速的视频AI推理流应用的。

3.Deepstream具有什么优势?

        推理框架千千万,我们为什么要用Deepstream?他有什么优势?

        虽然你可以使用其他框架替换掉Deepstream的每一个环节,推理可以自己做部署,解码可以有其他的库,例如ffmpeg,显示可以用OpenCv等等。但是最核心最关键的问题是,你使用其他框架,无法调动Nvidia的所有硬件。

优势之一:调动你能想到的、想不到的底层硬件

        以Jetson为例,除了我们熟知的GPU单元,解码需要调用NVDEC硬件解码器,编码需要用到NVENC编码器,OSD操作和光流跟踪需要用到英伟达的VIC硬件,如果你的网络是比较轻量或者是网络层支持,可以直接放入英伟达DLA深度学习计算模块直接推理,以上所有硬件都可以帮助CPU和GPU缓解计算负担,如果不使用Deepstream SDK,上面这些硬件想要全部调动起来并不容易。甚至部分硬件根本没有底层API可以调用。而在Deepstream中,只需要通过程序代码设置或者TXT文档配置即可调用上述相关硬件,无需关心底层实现。

优势之二:能够用较低延迟获取极高的推理性能

        在Jetson设备上,如果我们运行原版的YoloV3,我们根据型号不同,会获得不同推理表现效果。nano上面大约5-10帧,nx可以20帧。但这对于多路摄像头取流推理根本是杯水车薪。

        Deepstream底层集成了Nvidia TensorRT量化框架,通过TensorRT量化后的模型,推理帧率可以得到倍数提升。例如很久之前做得一个塑料瓶口质量检测推理,原版yolo只能提供30fps,经过python版本的trt加速以后获得了70fps的帧率,经过Cpp的trt加速以后可以获得200fps+的帧率,推理一张500x500的图片只需要3ms+。这是其他嵌入式平台无法比拟的优势。

 

 

        但是这些并不是完全没有代价的。据我观察Deepstream系列在嵌入式Jetson上面会根据推理负载的不同产生不同的延时,比较理想的情况是在几百毫秒左右。这样对于实时性比较高的推理就需要针对性优化网络大小、图片输入大小、batch、跳帧推理、优化分辨率等。在一些监控性质的项目上对于实时性要求不高,所以使用起来基本没问题。当然你可以往上堆设备性能去解决延迟问题。

优点之三:巨快的技术回复

        Nvidia官方论坛技术支持这点必须表扬一下,Nvidia的技术论坛有问必答,只要你把完整的bug,error日志贴出来,给出具体的环境,研发人员会在美国上班时间给你回复问题。有问必答而且可以搜索其他人类似的bug,这一点是其他框架没有的。官方技术论坛链接在此。注意一定要去英文论坛,你会获得更详尽的信息。

优点之四:无脑接入TLT迁移学习框架,不会设计网络也能玩转

        Nvidia官方为Deepstream等设计了TLT迁移学习,各种模型譬如目标识别和语义分割、NLP等都有官方的模型,直接用Docker训练以后无缝接入Deepstream,如果你不会深度学习,不知道啊如何设计模型,网络结构,可以直接从官网下载模型迁移训练以后直接部署。Nvidia官方的网络基本够用,适用于对网络要求没那么高的深度学习场景。

缺点之一:和Gstreamer框架深度集成,然而Gstreamer在国内资料少

        这是目前遇到比较多问题的地方,很多Gstreamer资料国内没有,查一个Bug需要非常费劲,而且基本没有国内论坛等相关资料。Deepstream本来就是Gstreamer框架下的闭源库,你要想使用就避不开这个Gstreamer。所以需要你恶补这个Gstreamer框架。

缺点之二:偶尔会遇到神奇Bug

        之前我遇到过一些神奇Bug,而且很难追查原因。譬如我构建了一个管道,用完了释放掉,再去重新构建,反复如此多次以后莫名其妙程序会崩掉。我确认我已经按照教程正确释放了,给官方论坛也查不出结果,技术人员无法在他的环境复现我的全部程序,人也没有义务这么做,只能说让我仔细检查我的代码。

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

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

相关文章

【c++之于c的优化】

目录:前言关键字一、命名空间1.什么是命名空间2.如何使用命名空间3.如何自己创建命名空间4.为什么要使用命名空间5.命名空间起别名6.匿名命名空间二、缺省参数定义缺省参数类型注意事项三、函数重载定义函数重载的三种方式操作系统的区分方式四、引用定义引用特性使…

【4-网络八股扩展】北京大学TensorFlow2.0

课程地址:【北京大学】Tensorflow2.0_哔哩哔哩_bilibiliPython3.7和TensorFlow2.1六讲:神经网络计算:神经网络的计算过程,搭建第一个神经网络模型神经网络优化:神经网络的优化方法,掌握学习率、激活函数、损…

【LeetCode每日一题】【2023/1/24】1828. 统计一个圆中点的数目

文章目录1828. 统计一个圆中点的数目方法1:枚举1828. 统计一个圆中点的数目 LeetCode: 1828. 统计一个圆中点的数目 中等\color{#FFB800}{中等}中等 给你一个数组 points ,其中 points[i] [x_i, y_i] ,表示第 i 个点在二维平面上的坐标。多…

【算法面试】队列算法笔试面试全解(金三银四面试专栏启动)

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

02_gpio子系统

总结 驱动程序还想控制gpio 可以不用读写寄存器 直觉用gpio子系统开发的接口就能用了 轻松做输入输出 获取当前值 详细介绍 用设备树里的节点 gpio1 介绍 imx6ull.dtsi gpio1 记录了控制器相关的寄存器基地址 gpio1: gpio209c000 {compatible "fsl,imx6ul-gpio"…

三、利用迁移学习进行模型微调(Datawhale组队学习)

文章目录安装配置环境准备图像分类数据集迁移学习微调训练图像分类模型导入环境图像预处理载入图像分类数据集建立类别和索引号之间映射关系定义数据加载器查看一个batch的图像和标注可视化一个batch的图像和标注模型的构建与测试可视化常见的迁移学习训练方式训练配置模型训练…

过完2022,依然记得仰望星空

🕺作者:一名普普通通的双非大二学生迷茫的启明星🎃专栏:《数据库》《C语言从0到1专栏》《数据结构》《C语言杂谈》目录 ​编辑 一.2022之初 二.2022年中 三.2022年末 四.展望2023 一.2022之初 想起一年前这个时候&#xff0c…

07_plantform平台总线

总结 /sys/bus/plantform 平台总线其实就是继承 06_自己创建xbus总线 有了更多的玩法 和自己创建的xbus总线一样 平台总线也有dev和drv 需要这两个进行匹配之后 进行porbe调用 plantform_device 结构体中直觉继承了 struc device lantform_driver 继承了driver 详细介绍 plan…

树(基础部分)

章节目录:一、二叉树1.1 为什么要使用树?1.2 树的常用术语1.3 二叉树概念1.4 二叉树应用二、顺序存储二叉树2.1 概述2.2 基本应用三、线索化二叉树3.1 问题引出3.2 概述3.3 基本应用四、结束语一、二叉树 1.1 为什么要使用树? 数组存储方式&…

MP-2平面烟雾气体传感器介绍

MP-2平面烟雾气体传感器简介MP-2烟雾检测气体传感器采用多层厚膜制造工艺,在微型Al2O3陶瓷基片的两面分别制作加热器和金属氧化物半导体气敏层,封装在金属壳体内。当环境空气中有被检测气体存在时传感器电导率发生变化,该气体的浓度越高&…

【数据库概论】3.1 SQL简述、数据定义和索引

第三章 关系数据库标准语言SQL 目录第三章 关系数据库标准语言SQL3.1 SQL概述3.1.1 产生与发展3.1.2 SQL的特点3.1.3 SQL的基本概念3.2 数据库实例3.3 数据定义3.3.1 模式的定义和删除3.2.2基本表的定义、删除和修改1.常见数据类型2.定义基本表3.修改基本表4.删除基本表5.模式和…

英语学习打卡day3

2023.1.22 1.mariner n.水手 2.formation n.队形;组成;形成 n.形状;形式样式;表格 the formation of landscapes Keep the formation 保持队形 The chairs were arranged in the form of circle. fill in the form 填写表格 formal adj.正式的inform 通知deform 变形uniform 统…

06_平台总线匹配规则,自己搭建总线xbus

总结 bus_register() 自己创建平台总线 /sys/bux/xxx device_register() 对平台总线加入dev /sys/bus/xxx/dev driver_register() 对平台总线加入drv /sys/bus/xxx/drv 两个相匹配的时候 直接调用drv->probe 函数 进行基本的class_create() device_create()等 创建设备文件…

TryHackMe-红队-07_武器化

Weaponization 了解并探索常见的红队武器化技术。您将学习如何使用业内常见的方法来构建自定义有效负载,以获得初始访问权限。 什么是武器化 武器化是网络杀伤链模式的第二阶段。在此阶段,攻击者使用可交付的有效负载(如word文档&#xff…

七、python-PySpark篇(黑马程序猿-python学习记录)

1. pyspark定义 2. 下载 点击右下角版本 点击解释器设置 点击号 搜索pyspark 选择pyspark 勾选选项 在输入框中输入 -i https://pypi.tuna.tsinghua.edu.cn/simple 点击安装软件包 提示正在安装 等一两分钟就能安装完毕 3. 获取PySpark版本号 # 导包 from pyspark import Spar…

树,二叉树的认识

1.树概念及结构 1.1树的概念 注意:树形结构中,子树之间不能有交集,否则就不是树形结构 1.2 树的相关概念 1.3 树的表示 树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存…

(18)go-micro微服务ELK介绍

文章目录一 什么是ELK二 Beats的六种工具三 ELK系统的特点四 ELKbeats系统架构五 ELK优点六 最后一 什么是ELK ELK是三个[开源软件]的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件,新增了一个Beats。 Elasticsearch …

几种觉排序优劣

冒泡排序 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持…

23. 异常处理机制

1. 异常 即便 python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。 # int不能与str相加, 触发异常 print(22) # 0 不能作为除数, 触发异常 print(1/0) # sum未定义, 触发异常 print(num)异常以不同的类型出现…

【JavaSE专栏4】关键字、标识符和命名规范

作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…