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

智能推荐

x722网卡支持百兆吗_英特尔(Intel)X722-DA2以太网网络适配器万兆服务器网卡X722DA2...-程序员宅基地

文章浏览阅读1.4k次。英特尔 以太网网络适配器 X722-DA2基本要素产品集700 系列网络适配器(高达 40GbE)状态Launched发行日期:Q4'18垂直市场:Server中等电缆:Copper布线类型:SFP+ Direct Attached Twinaxial Cabling up to 10m支架高度:Low Profile and Full Height支持的操作系统订购与规格信息Intel Et..._塔式服务器中的intel(r) ethernet connection x722 for 1gbe是网线接口吗

Docker容器下Redis/ES/RabbitMQ/MongoDB/FastDFS启动命令总结_bitnami etcd镜像地址-程序员宅基地

文章浏览阅读1k次。1.Docker启动命令介绍例:docker run -d --name myredis -p 6379:6379 redis 命令解析: run:运行容器 -d:表示后台运行,守护进程 --name [myredis]:自定义一个名称 //[中括号内的是自己写,且命令里面没有中括号] -p 6379:6379 容器里面的端口映射到外部电脑的端口2.Docker中..._bitnami etcd镜像地址

git 使用场景 本地分支 关联 远程分支-程序员宅基地

文章浏览阅读796次,点赞8次,收藏7次。【代码】git 使用场景 本地分支 关联 远程分支。

【IDE 小程序】小程序控制台 不打印 console.log问题_微信小游戏 真机调试 无法打印任何log-程序员宅基地

文章浏览阅读1.2k次。全局搜索compress.drop_console(一般在config文件中),设置为false,再重新打开小程序即可。_微信小游戏 真机调试 无法打印任何log

整合ssm使用Vue实现前后端数据交互(详细版)_ssmvue前后端怎么连接-程序员宅基地

文章浏览阅读9.2k次,点赞19次,收藏83次。使用vue 实现前后端数据的交互创建vue工程创建ssm项目结果创建vue工程一.创建webpack骨架类型的vue项目格式参考如下:二.npm操作:安装vue-router:npm install vue-router --save-dev安装element-ui:npm i element-ui -S安装SAss加载器:npm install sass-loader node-sass --save-dev安装axios:npm install --save axios vu_ssmvue前后端怎么连接

windows安装kafka配置SASL-PLAIN安全认证_windows 安装 sasl-程序员宅基地

文章浏览阅读924次。confluent是平台化的工具,封装了kafka,让我们可以更方便的安装和使用监控kafka,作用类似于CDH对于Hadoop。confluent是由LinkedIn开发出的团队成员,基于这项技术创立了新公司ConfluentConfluent的产品也是围绕着Kafka做的。_windows 安装 sasl

随便推点

html 如何给图片打标签,图文详解HTML页面中添加图片的三种方法-程序员宅基地

文章浏览阅读6k次。在页面布局时,经常需要在页面中插入图片,那你知道如何在HTML中添加图片吗?这篇文章就给大家介绍HTML页面中插入图片的三种方法,感兴趣的朋友可以参考一下,希望对你有所帮助。方法一、用HTML中的img标签添加图片最简单,最常用的就是直接使用img标签,并且可以根据需要设置图片的大小,代码如下: 效果图:方法二、用JavaScript创建一个img元素来导入图片先创建一个img元素,再设置这个i..._html图片插入标签

oracle内核+相克军Oracle视频 看懂绝对是高级DBA了-程序员宅基地

文章浏览阅读1.3k次。1.行删除后回滚中间表exchange partition这种按月分区吧2.system的buffer cache2.索引读取次数i/o出问题指标等待事件oracle知道的,主动登记的 i./o network等待事件表gdbkslwtbctx kslwait 等待任务利用sid 找错误 spid..._相克军

【NOIP2015模拟11.2晚】舳舻牌-程序员宅基地

文章浏览阅读908次。DescriptionAlice和Bob,哦不,CZL和YYY在玩一个游戏。桌上有n张牌,每张牌对两人各有一个诱惑值,和它自己的价值。CZL先手,每次操作方喊出一个值X,然后把桌上剩下的对他诱惑值<=X的牌全部收走(至少一张),并获得其的价值。 求CZL的最大得分。Solution博弈,倒着DP。 首先把诱惑值离散化。 设Fi,j表示CZL喊到i,YYY喊道j,CZL的最大收益;Gi,j表示Y

十四、 jeecgboot路由缓存,切换Tab不刷新页面内容,保持用户选择_jeecgboot 页面切换不要刷新数据-程序员宅基地

文章浏览阅读725次,点赞9次,收藏9次。页面缓存保留用户输入数据不丢失_jeecgboot 页面切换不要刷新数据

springboot配置两个parent的方法_pom多个parent-程序员宅基地

文章浏览阅读6.4k次,点赞3次,收藏8次。在向pom.xml 文件中添加依赖之前需要先添加spring-boot-starter-parent。springboot-starter- parent主要提供了如下默认配置: .Java版本默认使用1.8.编码格式默认使用 UTF-8.提供Dependency Management进行项目依赖的版本管理。默认的资源过滤与插件配置。spring-boot-starter-paren..._pom多个parent

python3 规则引擎_几个常见规则引擎的简单介绍和演示-程序员宅基地

文章浏览阅读3.4k次。Ilog JRules是最有名的商用BRMS;Drools是最活跃的开源规则引擎;Jess是Clips的java实现,就如JRuby之于Ruby,是AI系的代表;Visual Rules(旗正规则引擎)国内商业规则引擎品牌。今天对比了一下这四个颇有代表性的规则引擎的规则语言。其中Ilog和visual rules是商业产品,没有机会实战。1.一样的If--Then 句式与Rete引擎四者都邑..._规则引擎 python

推荐文章

热门文章

相关标签