Jetson-DeepStream_jetson deepstream-程序员宅基地

技术标签: 人工智能  jetson agx xavier  nvidia  

DeepStream

这篇文章主要是结合官方文档,自己的实际验证来讲DeepStream到底是个啥,我开始写的时候我也不知道这是个啥,一步步探索,以一个菜鸟的看法来写这个,如有错误还望大家指点一下。然后所有的操作都是在TX2或Jetson AGX Xavier上完成的。

一、刷机、安装DeepStream

在英伟达的板子上,TX2、Xavier这些上面,建议是使用jetson sdk直接刷机,刷机的时候选择DeepStream一并刷入可以减少很多的工作量。参考链接:https://blog.csdn.net/weixin_42743099/article/details/107231462

二、DeepStream

1、DeepStream概述

放图 ↓ :DeepStream可以加速不同的模型,高效、实时分析来自相机、传感器、IoT网关等的数据。DeepStream的关键功能之一是边缘和云之间的安全双向通信(图示的Bi-Directional IoT Messaging,这部分我还没了解,挂个官方说明)。
第一排和最后一排比较好理解,第一排就是DeepStream支持Python,C/C++,最后一排就是适用于的几种平台。
来点官方点的说明:deepstream是nvidia官方推出的一个数据流处理工具包,可以很方便的实现对视频的解码、推理等工作,高效的完成图像分类、目标检测、识别和跟踪等任务。
deepstream是在gstreamer的基础上开发的,因此使用deepstream需要一定的c语言基础和gstreamer基础。deepstream可以看成是一个壳,里面集成了gstreamer和tensorrt等工具,我们可以使用deepstream完成视频的解码、传输、神经网络推理、结果的渲染等工作。
在这里插入图片描述

2、DeepStream-app

放图 ↓ :DeepStream-app是基于GStreamer的解决方案,它由封装了低级API的GStreamer插件集组成,以形成完整的图形。该参考应用程序具有接受来自各种来源(如摄像机,RTSP输入,编码文件输入)的输入的能力,并且还支持多流/源功能。由NVIDIA实现并作为DeepStream SDK的一部分提供的GStreamer插件列表包括:

  • Stream Muxer插件(Gst-nvstreammux)从多个输入源组成一批缓冲区。

  • 基于NVIDIA TensorRT的插件(Gst-nvinfer)分别用于主要和次要(主要对象的属性分类)检测和分类。

  • 基于OpenCV的跟踪器插件(Gst-nvtracker),用于具有唯一ID的对象跟踪。

  • Multi Stream Tiler插件(Gst-nvmultistreamtiler)用于形成2D帧数组。

  • 屏幕显示(OSD)插件(Gst-nvdsosd)使用生成的元数据在合成框架上绘制阴影框,矩形和文本。

  • 消息转换器(Gst-nvmsgconv)和消息代理(Gst-nvmsgbroker)插件结合使用,可以将分析数据发送到云中的服务器。在这里插入图片描述

3、运行demo

两步搞定

$ cd /opt/nvidia/deepstream/deepstream-5.0/samples/configs/deepstream-app
$ deepstream-app -c source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt	//可以尝试运行不同配置文件

在这里插入图片描述
deepstream-app文件夹下主要配置文件的描述:(虽然有些官方标注了适用的板子,但是我试了一下感觉都可以用的)


2021.07.15 更新:xavier都可以使用,其他的谨慎,nano运行其他几个直接卡到死机


  • source30_1080p_resnet_dec_infer_tiled_display_int8.txt:演示30个具有主要推理功能的流解码。(仅适用于dGPU和Jetson AGX Xavier平台。)
  • source4_1080p_resnet_dec_infer_tiled_display_int8.txt:演示具有主推论,对象跟踪和三个不同的辅助分类器的四个流解码。(仅适用于dGPU和Jetson AGX Xavier平台。)
  • source4_1080p_resnet_dec_infer_tracker_sgie_tiled_display_int8_gpu1.txt:在GPU 1上针对主要推理,对象跟踪和三个不同的二级分类器演示四个流解码(对于具有多个GPU卡的系统)。仅适用于dGPU平台。
  • config_infer_primary.txt:将nvinfer元素配置为主要检测器。
  • config_infer_secondary_carcolor.txt,config_infer_secondary_carmake.txt,config_infer_secondary_vehicletypes.txt:将nvinfer元素配置为辅助分类器。
  • iou_config.txt:配置一个低级的IOU(联合上的交集)跟踪器。
  • tracker_config.yml:配置NvDCF跟踪器。
  • source1_usb_dec_infer_resnet_int8.txt:演示一台USB摄像机作为输入。
  • source1_csi_dec_infer_resnet_int8.txt:演示一个CSI摄像机作为输入;仅适用于Jetson。
  • source2_csi_usb_dec_infer_resnet_int8.txt:演示一台CSI摄像机和一台USB摄像机作为输入;仅适用于Jetson。
  • source6_csi_dec_infer_resnet_int8.txt:演示了六个CSI摄像机作为输入;仅适用于Jetson。
  • source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt:演示8解码+推断+跟踪器;仅适用于Jetson Nano。
  • source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_tx1.txt:演示8解码+推断+跟踪器;仅适用于Jetson TX1。
  • source12_1080p_dec_infer-resnet_tracker_tiled_display_fp16_tx2.txt:演示12个解码+推断+跟踪器;仅适用于Jetson TX2。
  • samples / configs / deepstream-app-trtis:用于使用Triton Inference Server进行推理的参考应用程序的配置文件
  • source30_1080p_dec_infer-resnet_tiled_display_int8.txt(30解码+推断)
  • source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt(4解码+推断+ SGIE +跟踪器)
  • source1_primary_classifier.txt(单源+全帧分类)

2021.07.15 更新:
1、DeepStream Sample App /sources/apps/sample_apps/deepstream-app
端到端示例演示了4级联神经网络(1个一级检测器和3个二级分类器)的多相机流,并显示平铺输出。
2、DeepStream Test 1 /sources/apps/sample_apps/deepstream-t
DeepStream Test 2 /sources/apps/sample_apps/deepstream-test2
简单的应用程序,建立在test1之上,显示额外的属性,如跟踪和二级分类属性。
3、DeepStream Test 3 /sources/apps/sample_apps/deepstream-test3
简单的应用程序,建立在test1的基础上,显示多个输入源和批处理使用nvstreammuxer。
4、DeepStream Test 4 /sources/apps/sample_apps/deepstream-test4
这是在Test1示例的基础上构建的,演示了“nvmsgconv”和“nvmsgbroker”插件在物联网连接管道中的使用。对于test4,用户必须修改kafka代理连接字符串才能成功连接。需要安装分析服务器docker之前运行test4。DeepStream分析文档有关于设置分析服务器的更多信息。
5、FasterRCNN Object Detector /sources/objectDetector_FasterRCNN
FasterRCNN物体探测器实例。
6、SSD Object Detector /sources/objectDetector_SSD
SSD目标探测器实例。


4、优化

2021.07.15 更新:
在优化前先看看配置文件中的内容,文件中都是有备注的
文件中主要的几个信息,需要更改的地方前面都会有标注
[tiled-display] 视频输出
[source0] 视频输入,多路视频就多写几个source,即[source1]、[source2]…
[sink0] 屏幕
[sink1] 视频文件
[sink2] 媒体流
[primary-gie] 物体检测
[tracker] 物体追踪


设置上的优化,原来的配置文件上都是deepstream根据提供的几个demo写的配置,总结一下自己的学到的一些,可以用到自己的模型上。
配置文件位置,以四路1080p的为例子

//此路径下存放的就是demo的配置信息文件
cd /opt/nvidia/deepstream/deepstream-5.0/samples/configs/deepstream-app
sudo gedit source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt 

三、DeepStream加速yolov3

  • 下载yolo配置和权重文件,prebuild.sh下载yolov2和yolov3配置和权重文件,可以用编辑器打开把yolov2的注释掉
./prebuild.sh

如果上面这个方法不行的,可以直接去github上下载(yolo)。下载完后解压,在cfg文件夹下,用到的是yolov3.cfg和yoloc3-tiny.cfg。权重文件:

wget https://pjreddie.com/media/files/yolov3.weights 
wget https://pjreddie.com/media/files/yolov3-tiny.weights 
  • 设置配置和权重文件路径
cd /opt/nvidia/deepstream/deepstream-5.0/sources/objectDetector_Yolo
sudo gedit config_infer_primary_yoloV3.txt
//找到下面两处位置,更改配置和权重文件路径,就是上面个两个文件的路径
custom-network-config=
model-file=

Makefile更改CUDA版本,CUDA_VER=10.2

cd nvdsinfer_custom_impl_Yolo
sudo gedit Makefile

编译工程

cd /opt/nvidia/deepstream/deepstream-5.0/sources/objectDetector_Yolo
make -C nvdsinfer_custom_impl_Yolo

运行例程

deepstream-app -c deepstream_app_config_yoloV3.txt

如果要运行tiny,按照上面的过程更改一下config_infer_primary_yoloV3_tiny.txt文件下的配置和权重文件的路径,编译后运行即可
放两张帧率图,在跑yolov3_tiny.weight的时候有60帧,但是在跑yolov3.weight的时候只有9帧,括号中的是五秒内的平均帧率
在这里插入图片描述
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42743099/article/details/116207876

智能推荐

pm2 常用命令_pm2 删除进程-程序员宅基地

文章浏览阅读2.6k次。先说一些废话之前学习Nodejs项目的时候使用了pm2作为生产环境的进程管理工具,最近服务器崩了需要重启一些服务,发现有些命令记得不是特别清楚,所以这里写一篇文章帮助自己记忆整理一下pm2的常用命令,后续有需要查阅一下即可~常用命令进入bin目录启动:pm2 start www / pm2 start app.jspm2 start app.js --name="fx67ll" 启动并命名为fx67ll,没有命名的话后续可以用id替代namepm2 start app.js --watch 当_pm2 删除进程

【C语言】do-while()循环_do while循环语句什么时候结束循环-程序员宅基地

文章浏览阅读2.1k次。C语言中的do—while()循环,nreak和continue在其中的应用。_do while循环语句什么时候结束循环

ECCV 2020 | 史上最强二值化网络ReActNet,精度首超ResNet-程序员宅基地

文章浏览阅读1k次。在众多卷积神经网络(CNN)压缩算法中,二值化网络(BNN)作为网络量化的极端情况,一直拥有着高压缩比,高加速比的性能优势,但是 BNN 的精度不高也一直饱受诟病,阻碍了 BNN 在实际..._reactnet

(CVE-2020-21224)浪潮ClusterEngineV4.0 远程命令执行漏洞复现-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏3次。简介浪潮 Inspur ClusterEngine是中国浪潮公司的一个应用软件。提供管理集群系统中软硬件提交的作业。漏洞描述浪潮服务器群集管理系统存在危险字符未过滤,导致远程命令执行影响版本浪潮ClusterEngineV4.0FOFAtitle="TSCEV4.0"复现过程FOFA搜索:登录页面:输入账号密码,进行抓包:页面不存在验证码,且存在用户名枚举,进行暴力破解:通过fuzz,发现在用户名或密码任意一处添加 ’ ,会报错:正常输入:添加单引号:添加分号,_cve-2020-21224

【解决】1251--Client does not support authentication protocol requested by server 的解决办法_1251-client does not support authentication protoc-程序员宅基地

文章浏览阅读3k次。出现错误:报错(客户端不支持),Navicat版本过低,这儿解决办法分为两种,第一种,升级客户端;第二种,降低服务器端;在镜像拉取的时候,不知道各位注意到没有,镜像的TAG为latest,关于最新版的MySQL才出来没多久,也作了比较多的优化和新能提升,当然就不在这人阐述了,如果对新的版本了解不多的,建议就不要强撑了(会踩到很多坑),所以这儿就建议使用在生产环境中还是选择5.x的吧。(这儿只是建议)拉取5.x的MySQL镜像,如下图:正常启动镜像,如下图:在Navicat客户端中进行连接测试_1251-client does not support authentication protocol requested by server; consid

padding用法-程序员宅基地

文章浏览阅读755次。<html> <head> <title></title> <style> span{ background-color: rgb(76, 236, 71); } i{/*padding是内边距,向内扩展,与margin正好相反*/ background-color: rg._padding用法

随便推点

JJwt生成Token-程序员宅基地

文章浏览阅读646次。JJwt生成tokenjava中通过jjwt生成tokenpackage com.zom.statistics.tools;import com.zom.statistics.DTO.JwtParams;import com.zom.statistics.DTO.RtvConsoleUser;import com.zom.statistics.exception.LogonException;import io.jsonwebtoken.*;import org.slf4j.Logger_jjwt生成token

电池充电方案总结-程序员宅基地

文章浏览阅读1.3w次。锂离子电池低电压充电(12V以下):多种化学成分电池充电器电路+源码+上位机等http://www.cirmall.com/circuit/3673/%E5%A4%9A%E7%A7%8D%E5%8C%96%E5%AD%A6%E6%88%90%E5%88%86%E7%94%B5%E6%B1%A0%E5%85%85%E7%94%B5%E5%99%A8%E7%94%B5%E8%B7%AF%2B%..._stm32单片机支持13种快冲协议的充电器源码和原理图

如何替换Citrix XenDesktop中使用的vCenter server地址-程序员宅基地

文章浏览阅读477次。一、问题描述:客户重装Vcenter之后(Hostname与之前保持一致)出现如下报错:1.计算机目录显示无法联系到vCenter server2.VM电源状态未知3.测试connection出现如下错误:Attempting to connect to the VCenter server failed due to a certificate error. Check ..._citrix vcenter替换

Android Studio Lint 工具看完这一篇还不够-程序员宅基地

文章浏览阅读6.5k次,点赞12次,收藏24次。前言以前对下面的问题,我的态度是,不报错就是没问题,报错就用快捷键,根据Android Studio提示修复问题,从来不去问个为什么?现在代码洁癖症越来越严重的我,忍不住想看清什么东西在搞鬼。认真看完本文,一定可以学到最新的知识。就算看不下去,也要点个赞收藏,绝对不亏。本文并不是吐槽Lint的不好,而是在学习Lint过程碰到问题,心态是奔溃的,以及解决每个问题带来的喜感。不知道大家有没有注意..._android studio lint

CDH激活分发parcel时因为意外错误卡住不能修改问题解决方案_cdh parcel激活一直卡住-程序员宅基地

文章浏览阅读2.7k次。问题背景:今天因为业务需求需要在CDH集群上安装StreamSets,结果因为权限的原因,之前我把这个parcel文件的权限变更为cloudera-scm,结果后面遇到这个问题了,问了之前部署CDH的人才知道他那时候用的权限是Root用户,所以现在卡在这里,也没有地方可以直接暂停:然后我点进去看详细的信息:可以看到cluster2-1这个结点因为权限的问题,导致不能激活。解决方案:Cloudera并没有在控制台开发Cancel或者回滚的入口,此时服务状态就是卡住页面无法操作。通过_cdh parcel激活一直卡住

TinyRayTracer 用256行C++代码构建一个可理解的光线追踪器(1)_understandable raytracing in 256 lines of bare c++-程序员宅基地

文章浏览阅读1.6k次,点赞7次,收藏13次。网上有大量的光线追踪相关的文章,然而问题在于几乎所有的这些文章都在展示那些成熟的非常难以理解程序。举个例子,非常著名的 明信片光线追踪器 挑战。这段简洁的程序令人印象深刻,但却很难让人理解它是怎么工作的。我想详细地教你怎样实现,而不是向你展示我能完成图像渲染。_understandable raytracing in 256 lines of bare c++

推荐文章

热门文章

相关标签