英伟达DeepStream学习笔记2——deepstream_sdk文件夹解析

我们在用jetpack刷了系统后,正常来说,deepstream是已经安装了,在/opt/nvidia/deepstream/deepstream-5.0/目录下就是deepstream的源码。

先了解下DeepStream的应用架构
在这里插入图片描述
DeepStream参考应用程序是基于GStreamer的解决方案,由一组GStreamer插件组成,这些插件封装了低级API,以形成完整的图形(关于GStreamer的入门介绍,可参考《Gstreamer系列教程》)。该参考应用程序具有接受来自各种来源(如Camera,RTSP输入,编码文件输入)的输入的能力,并且还支持多流/源功能。由NVIDIA实现并作为DeepStream SDK的一部分提供的GStreamer插件列表包括:

  • 流媒体插件Gst-nvstreammux:可从多个输入源组成一批缓冲区。
  • 基于TensorRT的推理插件GST-nvinfer:分别用于初级和次级(主要对象的属性分类)检测和分类。
  • 基于OpenCV的跟踪器插件Gst-nvtracker,用于具有唯一ID的对象跟踪。
  • Multi Stream Tiler插件Gst-nvmultistreamtiler:用于形成2D帧数组。
  • 屏幕显示插件Gst-nvdsosd:可使用生成的元数据在合成框架上- 绘制阴影框,矩形和文本。
  • 消息转换器Gst-nvmsgconv和消息代理Gst-nvmsgbroker插件结合使用,可以将分析数据发送到云中的服务器。

1 、整体结构

如果使用deb包安装的SDK,则安装目录位于/opt/nvidia/deepstream/deepstream-x.x。如果使用压缩包安装的,则位于我们压缩包解压的位置,利用tree -d指令进行目录分析,输出如下

.
├── samples
│   ├── configs
│   │   └── deepstream-app
│   ├── models
│   │   ├── Primary_Detector
│   │   ├── Primary_Detector_Nano
│   │   ├── Secondary_CarColor
│   │   ├── Secondary_CarMake
│   │   ├── Secondary_VehicleTypes
│   │   └── Segmentation
│   │       ├── industrial
│   │       └── semantic
│   └── streams
└── sources
    ├── apps
    │   ├── apps-common
    │   │   ├── includes
    │   │   └── src
    │   └── sample_apps
    │       ├── deepstream-app
    │       ├── deepstream-dewarper-test
    │       │   └── csv_files
    │       ├── deepstream-gst-metadata-test
    │       ├── deepstream-image-decode-test
    │       ├── deepstream-infer-tensor-meta-test
    │       ├── deepstream-nvof-test
    │       ├── deepstream-perf-demo
    │       ├── deepstream-segmentation-test
    │       ├── deepstream-test1
    │       ├── deepstream-test2
    │       ├── deepstream-test3
    │       ├── deepstream-test4
    │       ├── deepstream-test5
    │       │   └── configs
    │       └── deepstream-user-metadata-test
    ├── gst-plugins
    │   ├── gst-dsexample
    │   │   └── dsexample_lib
    │   ├── gst-nvinfer
    │   ├── gst-nvmsgbroker
    │   └── gst-nvmsgconv
    ├── includes
    ├── libs
    │   ├── amqp_protocol_adaptor
    │   ├── azure_protocol_adaptor
    │   │   ├── device_client
    │   │   └── module_client
    │   ├── kafka_protocol_adaptor
    │   ├── nvdsinfer
    │   ├── nvdsinfer_customparser
    │   └── nvmsgconv
    ├── objectDetector_FasterRCNN
    │   └── nvdsinfer_custom_impl_fasterRCNN
    ├── objectDetector_SSD
    │   └── nvdsinfer_custom_impl_ssd
    ├── objectDetector_Yolo
    │   └── nvdsinfer_custom_impl_Yolo
    └── tools
        └── nvds_logger

接下来对每个文件夹中的内容进行介绍

2、 samples文件夹

samples文件夹中含有三个子文件夹,分别是configs、models、streams文件夹,分别表示示例配置文件、运行示例应用程序的模型及流媒体文件目录

2.1 configs子文件夹

configs文件夹下是deepstream-app的各种配置文件,

.
├── configs
│   └── deepstream-app
│       ├── config_infer_primary_nano.txt(在nano上将 nvinfer 元素配置为主要检测器)
│       ├── config_infer_primary.txt(将 nvinfer 元素配置为主要检测器)
│       ├── config_infer_secondary_carcolor.txt(将 nvinfer元素配置为辅助分类器)
│       ├── config_infer_secondary_carmake.txt(将 nvinfer元素配置为辅助分类器)
│       ├── config_infer_secondary_vehicletypes.txt(将 nvinfer元素配置为辅助分类器)
│       ├── iou_config.txt(配置一个低级的IOU(联合上的交集)跟踪器)
│       ├── source1_usb_dec_infer_resnet_int8.txt(演示一个USB摄像机作为输入)
│       ├── source30_1080p_dec_infer-resnet_tiled_display_int8.txt    
│       │  (演示301080P视频输入解码、推理、显示)
│       ├── source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8_gpu1.txt
│       │  (演示在gpu1上41080P视频输入解码、推理、跟踪、显示)                                      
│       ├── source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt
│       │  (演示41080P视频输入解码、推理、跟踪、显示)
│       └── tracker_config.yml

2.2 models子文件夹

├── models
│   ├── Primary_Detector(一级检测器)
│   │   ├── cal_trt.bin
│   │   ├── labels.txt
│   │   ├── resnet10.caffemodel
│   │   └── resnet10.prototxt
│   ├── Primary_Detector_Nano(一级检测器,适用于nano)
│   │   ├── labels.txt
│   │   ├── resnet10.caffemodel
│   │   └── resnet10.prototxt
│   ├── Secondary_CarColor(二级检测器,车辆颜色分类)
│   │   ├── cal_trt.bin
│   │   ├── labels.txt
│   │   ├── mean.ppm
│   │   ├── resnet18.caffemodel
│   │   └── resnet18.prototxt
│   ├── Secondary_CarMake(二级检测器,车辆颜色分类)
│   │   ├── cal_trt.bin
│   │   ├── labels.txt
│   │   ├── mean.ppm
│   │   ├── resnet18.caffemodel
│   │   └── resnet18.prototxt
│   ├── Secondary_VehicleTypes(二级检测器,车辆种类分类)
│   │   ├── cal_trt.bin
│   │   ├── labels.txt
│   │   ├── mean.ppm
│   │   ├── resnet18.caffemodel
│   │   └── resnet18.prototxt
│   └── Segmentation(分割模型)
│       ├── industrial
│       │   └── unet_output_graph.uff
│       └── semantic
│           └── unetres18_v4_pruned0.65_800_data.uff

模型的具体参数如下
在这里插入图片描述

2.3 streams子文件夹

该文件夹主要包含一些测试文件,文件对应的类型如图所示
在这里插入图片描述

3 、sources文件夹

该文件夹中包含各种示例程序和插件的源代码,主要有以下几个文件夹

.
├── apps(deepstream-app的测试代码)
├── gst-plugins(gstreamer插件)
├── includes(各种头文件)
├── libs(各种库)
├── objectDetector_FasterRCNN(faster rcnn目标检测器)
├── objectDetector_SSD(SSD目标检测器)
├── objectDetector_Yolo(yolo目标检测器)
└── tools(日志工具)

我们能用到的主要是apps中的sample_app示例代码、gst-plugins和三种目标检测器

3.1 apps子文件夹

sample_apps
├── deepstream-app
├ 端到端示例演示了4级联神经网络(1个一级检测器和3个二级分类器)的多相机流,并显示平铺输出。
├── deepstream-dewarper-test
├ 演示单个或多个360度摄像机流的扭曲功能。从CSV文件读取相机校准参数,
├ 并在显示屏上渲染过道和斑点表面。
├── deepstream-gst-metadata-test
├ 演示如何在DeepStream管道中的Gst-nvstreammux插件之前设置元数据,
├ 以及如何在Gst-nvstreammux之后访问元数据。
├── deepstream-image-decode-test
├ 建立在deepstream-test3上,以演示图像解码而不是视频。本示例使用自定义解码箱,
├ 因此可以将MJPEG编解码器用作输入。
├── deepstream-infer-tensor-meta-test
├ 演示如何将nvinfer张量输出作为元数据传递和访问。
├── deepstream-nvof-test
├ 演示单个或多个流的光流功能。本示例使用两个GStreamer插件(Gst-nvof和Gst-nvofvisual)。
├ Gst-nvof元素生成MV(运动矢量)数据并将其作为用户元数据附加。Gst-nvofvisual元素使用
├ 预定义的色轮矩阵可视化MV数据。
├── deepstream-perf-demo
├ 对目录中的所有流顺序执行单通道级联推理和对象跟踪。
├── deepstream-segmentation-test
├ 演示使用语义或工业神经网络对多流视频或图像进行分割,并将输出呈现到显示器。
├── deepstream-test1
├ 有关如何对单个H.264流使用DeepStream元素的简单示例:filesrc→decode解码→nvstreammux→nvinfer
├ (主检测器)→nvosd→renderer渲染器。
├── deepstream-test2
├ 简单的应用程序,建立在test1之上,显示额外的属性,如跟踪和二级分类属性。
├── deepstream-test3
├ 基于deepstream-test1(简单测试应用程序1)构建,以演示如何:
├ •在管道中使用多个来源
├ •使用uridecodebin接受任何类型的输入(例如RTSP /文件),任何GStreamer支持的容器格式以及任何编解码器
├ •配置Gst-nvstreammux生成一批帧并推断出这些帧以提高资源利用率
├ •提取流元数据,其中包含有关批处理缓冲区中的帧的有用信息
├── deepstream-test4
├ 基于deepstream-test1 构建单个H.264流:filesrc,decode,nvstreammux,nvinfer,nvosd, renderer演示如何:
├ •在管道中使用Gst-nvmsgconv和Gst-nvmsgbroker插件
├ •创建NVDS_META_EVENT_MSG类型的元数据并将其附加到缓冲区
├ •将 NVDS_META_EVENT_MSG用于不同类型的对象,例如车辆和人
├ •实现元数据通过extMsg字段扩展的“复制”和“免费”功能
├── deepstream-test5
├ 建立在deepstream-app之上。展示:
├ •在管道中将Gst-nvmsgconv和Gst-nvmsgbroker插件用于多流
├ •如何从配置文件中将Gst-nvmsgbroker插件配置为接收器插件(适用于KAFKA,Azure等)
├ •如何处理来自RTSP服务器或摄像机的RTCP发送者报告,以及如何将Gst Buffer PTS转换为UTC时间戳。
├ 欲了解更多详情,请参阅该RTCP发送者报告回调函数test5_rtcp_sender_report_callback注册和使用的 deepstream_test5_app_main.c。
├ 使用rtpmanager元素的“ handle-sync”信号进行GStreamer回调注册的过程记录在apps-common /src / deepstream_source_bin.c中。
├──deepstream-user-metadata-test
├ 演示如何向DeepStream的任何组件中添加自定义或用户特定的元数据。测试代码将一个填充有用户
├ 数据的16字节数组附加到所选组件。数据在另一个组件中检索。

3.2 gst-plugins子文件夹

gst-plugins
├── gst-dsexample(模板插件,用于将自定义算法集成到DeepStream SDK图形中)
│   └── dsexample_lib
├── gst-nvinfer(用于推理的GStreamer Gst-nvinfer插件的源代码)
├── gst-nvmsgbroker(GStreamer Gst-nvmsgbroker插件的源代码,用于将数据发送到服务器)
└── gst-nvmsgconv(GStreamer Gst-nvmsgconv插件的源代码,用于将元数据转换为架构格式。)

3.3 libs子文件夹

libs
├── amqp_protocol_adaptor(测试AMQP的应用程序。)
├── azure_protocol_adaptor(测试Azure MQTT的应用程序。)
│   ├── device_client
│   └── module_client
├── kafka_protocol_adaptor(测试Kafka的应用程序)
├── nvdsinfer(NvDsInfer 库的源代码,由Gst-nvinfer GStreamer插件使用。)
├── nvdsinfer_customparser(用于检测器和分类器的定制模型输出解析示例)
└── nvmsgconv(Gst-nvmsgconv GStreamer插件所需的NvMsgConv库的源代码)

3.4 目标检测文件夹

在这里插入图片描述

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值