deepstream配置文件介绍

目录

1.deepstream概念

2.deepstream的配置文件介绍

2.1 Gst-nvinfer组件介绍

2.2 关于Gst-nvinfer组件中net-scale-factor和offsets参数。

2.3示例分析


1.deepstream概念

DeepStream是一套NVIDIA技术组装的智能视频分析(Intelligent Video Analytics)套件,将深度神经网络和其他复杂的处理任务引入到流处理管道中,以此来达到对视频和其他传感器数据的接近实时分析工作。DeepStream应用程序框架具有硬件加速构建块,可将深层神经网络和其他复杂处理任务带入流处理管道。开发者只需专注于构建核心深度学习网络和IP,而不是从头开始设计端到端解决方案。Deep Stream 工作流程也称为实时视频流分析,又叫视频结构化,包含实时视频解码和NN神经网络进行推理,应用广泛。

2.deepstream的配置文件介绍

通过配置文件对deepstream的进行配置操作,是deepstream最基础的运行方式之一,可以对deepstream的多个组件进行操作,常用的组件包括[application] / [source%d] / [sink0] / [primary-gie] / [secondary-gie]等,通过对不同组件中不同参数进行配置,可以实现对模型的运行和推理的管理,如果是一些复杂的操作或者deepstream中尚未提供相应的参数,就需要自定义相应的pipeline,并在实现pipeline的app中使用相应的函数进行自定义,将会在接下来的部分中讲到。

2.1 Gst-nvinfer组件介绍

Gst-nvinfer目前工作在以下类型的网络上:多目标检测;多标签分类;语义分割;实例分割。
Gst-nvinfer组件可以在三种模式下工作:1.主模式,全帧运行;2.次要模式,操作上游组件在meta中添加的对象;3.预处理张量输入模式,作用于与上游分量相连的张量。

在预处理张量输入模式下,Gst-nvinfer内部的预处理被完全跳过。插件寻找附加到输入缓冲区的GstNvDsPreProcessBatchMeta,并将张量原样传递给TensorRT推断函数,不做任何修改。该模式目前支持全帧和ROI处理。GstNvDsPreProcessBatchMeta是由Gst-nvdspreprocess插件附加的。

当Gst-nvinfer组件与跟踪器一起作为二级分类器运行时,它试图通过避免在每一帧中对相同对象进行重新推断来提高性能。它通过在映射中缓存分类输出,并将对象的唯一ID来实现这一点。只有当对象第一次出现在帧中(基于这个对象ID)或当对象的大小(边界框区域)增加20%或更多时,才会进行推理。只有当跟踪器作为二级分类器的上游元素添加时,这种优化才可能实现。TensorRT接口的详细文档请参见:Developer Guide :: NVIDIA Deep Learning TensorRT Documentation 该组件也支持自定义层的IPlugin接口。详细信息请参考IPlugin接口。该组件还支持自定义函数的接口,用于解析对象检测器的输出,并在有多个输入层的情况下初始化非图像输入层。参考sources/includes/nvdsinfer_custom_impl.h了解模型的自定义方法实现。

sources/includes/nvdsinfer_custom_impl.h中提供的不同模型的自定义解析函数命名如下

目标检测:NvDsInferParseCustomXXX()。如果有自定义目标检测模型的解析函数,需要在[property]组件的parse-bbox-func-name参数中说明。
分类:NvDsInferClassiferParseCustomXXX()。如果有自定义目标检测模型的解析函数,需要在[property]组件的parse-classifier-func-name参数中说明。
语义分割:NvDsInferInstanceMaskParseCustomXXX()。如果有自定义目标检测模型的解析函数,需要在[property]组件的parse-bbox-instance-mask-func-name参数中说明。

2.2 关于Gst-nvinfer组件中net-scale-factor和offsets参数。

Gst-nvinfer插件根据网络需求对输入帧执行转换(格式转换和缩放),并将转换后的数据传递给底层库。底层库对转换后的帧进行预处理(执行归一化和均值减法),并产生最终的浮动数传递给TensorRT引擎进行推理。这里执行归一化和均值减法的预处理公式如下:

y = net scale factor*(x-mean)

其中,x是输入的像素值,它是一个范围为[0,255]的int8类型。

mean是对应的平均值,可以从Mean文件中读取,也可以作为offset [c],其中c是输入像素所属的通道,offset是配置文件中指定的数组。它是一个浮点数。

Net-scale-factor是配置文件中指定的像素缩放系数。它是一个浮点数。

Y为对应的输出像素值。它是一个浮点数。

例如,在使用SCRFD进行人脸检测的推理过程中,需要对输入图像的三个通道数据进行减均值127.5f后,乘以归一化因子0.0078125f的操作,在[property]组件中的配置方法如下:

net-scale-factor: 0.0078125
offsets: 127.5;127.5;127.5

2.3示例分析

以/opt/nvidia/deepstream/deepstream-6.1/samples/configs/deepstream-app/source30_1080p_dec_infer-resnet_tiled_display_int8.txt为例分析如下

执行命令:

deepstream-app -c source30_1080p_dec_infer-resnet_tiled_display_int8.txt

deepstream-app -c source30_1080p_dec_infer-resnet_tiled_display_int8.yml

该配置文件主要实现了使用resnet10_caffemodel来同时推理30路h264视频并绘制显示的功能,在NVIDIA NX平台上,30路同时进行推理运行,帧率大概为14fps,运行的结果视频如下:

out

对配置文件source30_1080p_dec_infer-resnet_tiled_display_int8.txt的内容解析如下,参考https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_ref_app_deepstream.html

[application]

enable-perf-measurement=1   #是否启用应用程序性能度量

perf-measurement-interval-sec=5 #对性能指标进行采样和打印的间隔(秒)

#gie-kitti-output-dir=streamscl #应用程序以修改后的KITTI元数据格式存储主检测器输出的现有目录的路径名

[tiled-display] #平铺显示

enable=1    #是否启用平铺显示

rows=5  #平铺二维数组中的行数

columns=6

width=1280  #平铺二维数组的宽度(像素)

height=720

gpu-id=0    # 如果有多个GPU,则元素将使用GPU几号(只适用于dGPU,不适用于Jetson)

#(0): nvbuf-mem-default - Default memory allocated, specific to particular platform

#(1): nvbuf-mem-cuda-pinned - Allocate Pinned/Host cuda memory, applicable for Tesla

#(2): nvbuf-mem-cuda-device - Allocate Device cuda memory, applicable for Tesla

#(3): nvbuf-mem-cuda-unified - Allocate Unified cuda memory, applicable for Tesla

#(4): nvbuf-mem-surface-array - Allocate Surface Array memory, applicable for Jetson

nvbuf-memory-type=0 #对于dGPU:所有值都有效;对于Jetson:只有0(零)是有效的。

#源组指定源的属性。DeepStream应用程序支持多个同时的源。对于每个源,必须在配置文件中添加一个组名为(如源%d)的单独组。

[source0]

enable=1    #启用或禁用源

#Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP。uri编码流的URI,URI可以是文件、HTTP URI或RTSP实时源。当类型为23时有效。对于MultiURI,还可以使用%d格式说明符指定多个源(如uri=http://127.0.0.1/source.mp4,uri=file:///home/ubuntu/source_%d.mp4等)。应用程序从0迭代到num sources以生成当前uri。

type=3

uri=file://../../streams/sample_1080p_h264.mp4

num-sources=15  #来源数量。仅当type=3时有效。

#drop-frame-interval=2  #放置帧的间隔。例如,5表示解码器每5帧输出一次;0表示不丢弃任何帧。

gpu-id=0    #多个GPU时元素使用的GPU ID

# (0): memtype_device   - Memory type Device

# (1): memtype_pinned   - Memory type Host Pinned

# (2): memtype_unified  - Memory type Unified

cudadec-memtype=0

[source1]

enable=1

#Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP

type=3

uri=file://../../streams/sample_1080p_h264.mp4

num-sources=15

gpu-id=0

# (0): memtype_device   - Memory type Device

# (1): memtype_pinned   - Memory type Host Pinned

# (2): memtype_unified  - Memory type Unified

cudadec-memtype=0

[sink0] #sink组指定属性并修改sink组件的行为以进行渲染、编码和文件保存

enable=1

#Type - 1=FakeSink,显示时候啥都没有; 2=EglSink,EGL based windowed sink (nveglglessink) 显示出窗口; 3:解码+分离+存文件;4:RTSP流;5:仅Jetson;6:云端

type=2

sync=1  #指示流的呈现速度。 0:尽快 1: 同步地

source-id=0 # 此接收器必须使用其缓冲区的源的ID。源ID包含在源组名称中。例如,对于组[source1]source id=1

gpu-id=0

nvbuf-memory-type=0 #CUDA内存类型的插件是分配输出缓冲区。0 :平台特定的默认值;1:host CUDA 内存;2:设备CUDA内存;3:统一CUDA内存;dGPU:所有值都是有效的。Jetson:只有0(零)是有效的

[sink1]

enable=0

type=3

container=1 #用于文件保存的容器。仅对类型=3有效。1:MP4标准 2:MKV公司。

#1=h264 2=h265

codec=1

#encoder type 0=Hardware 1=Software

enc-type=0  #编码引擎:0:NVENC(GPU)1:CPU

sync=0

#iframeinterval=10

bitrate=2000000 #编码比特率(bit/s),只对type=3(存文件)和type=4(RTSP流)时有效。

#H264 Profile - 0=Baseline 2=Main 4=High

#H265 Profile - 0=Main 1=Main10

profile=0   #编码器的配置文件格式

output-file=out.mp4

source-id=0

[sink2]

enable=0

#Type - 1=FakeSink 2=EglSink 3=File 4=RTSPStreaming

type=4

#1=h264 2=h265

codec=1

#encoder type 0=Hardware 1=Software

enc-type=0

sync=0

bitrate=4000000

#H264 Profile - 0=Baseline 2=Main 4=High

#H265 Profile - 0=Main 1=Main10

profile=0

# set below properties in case of RTSPStreaming

rtsp-port=8554  #RTSP服务端口

udp-port=5400   #udp端口

[osd]   #OSD组,指定OSD组件的属性,并修改OSD组件的行为,在视频帧上覆盖文本和矩形。

enable=1    #启用/禁用OSD (On-Screen Display)功能。

gpu-id=0    #在有多个GPU的情况下,元素使用的GPU。

border-width=1  #为对象绘制的包围框的边框宽度,以像素为单位。

text-size=15    #描述对象的文本大小(以点为单位)。

text-color=1;1;1;1; #描述对象的文本的颜色,RGBA格式。

text-bg-color=0.3;0.3;0.3;1 #描述对象的文本的背景色,RGBA格式。

font=Serif  #描述对象的文本的字体名称。

show-clock=0    #是否显示时钟。

clock-x-offset=800  #时钟时间文本的水平偏移量,以像素为单位。

clock-y-offset=820

clock-text-size=12

clock-color=1;0;0;0

nvbuf-memory-type=0 #元素分配给输出缓冲区的CUDA内存类型。0 (nvbuf-mem-default):特定于平台的默认值;1 (nvbuf-mem-cuda-pinned):固定/主机CUDA内存;2 (nvbuf-mem-cuda-device):设备CUDA内存;3 (nvbuf-mem-cuda-unified):统一CUDA内存,对于dGPU:所有值都有效。对于Jetson:只有0(零)是有效的。

[streammux] #指定和修改Gst-nvstreammux插件的属性。

gpu-id=0

##Boolean property to inform muxer that sources are live

live-source=0   #Informs the muxer that sources are live.

batch-size=30

##time out in usec, to wait after the first buffer is available

##to push the batch even if the complete batch is not formed

batched-push-timeout=40000

## Set muxer output width and height

width=1920

height=1080

##Enable to maintain aspect ratio wrt source, and allow black borders, works

##along with width, height properties

enable-padding=0    #指示通过添加黑带缩放时是否保持源宽高比。

nvbuf-memory-type=0

## If set to TRUE, system timestamp will be attached as ntp timestamp

## If set to FALSE, ntp timestamp from rtspsrc, if available, will be attached

# attach-sys-ts-as-ntp=1

# config-file property is mandatory for any gie section.

# Other properties are optional and if set will override the properties set in

# the infer config file.

[primary-gie]

enable=1

gpu-id=0

model-engine-file=../../models/Primary_Detector/resnet10.caffemodel_b30_gpu0_int8.engine    #模式预生成的序列化引擎文件的路径。

#Required to display the PGIE labels, should be added even when using config-file

#property

batch-size=30   #在批处理中一起推断的帧数(P.GIE)/对象数(S.GIE)。

#Required by the app for OSD, not a plugin property

bbox-border-color0=1;0;0;1

bbox-border-color1=0;1;1;1

bbox-border-color2=0;0;1;1

bbox-border-color3=0;1;0;1

interval=0

#Required by the app for SGIE, when used along with config-file property

gie-unique-id=1 #分配给nvinfer实例的唯一组件ID。用于标识实例生成的元数据。

nvbuf-memory-type=0

config-file=config_infer_primary.txt    #指定Gst-nvinfer插件属性的配置文件的路径名。除了config-file本身,它可以包含该表中描述的任何属性。属性必须定义在名为[property]的组中。有关参数的详细信息,请参见《DeepStream 4.0插件手册》中的“Gst-nvinfer文件配置规范”。

[tests] #测试组用于诊断和调试。

file-loop=0 #指示输入文件是否应无限的循环。

config-file对应的config_infer_primary.tx,内容如下,参考https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_plugin_gst-nvinfer.html

[property]

gpu-id=0

net-scale-factor=0.0039215697906911373  #指定的像素缩放系数。它是一个浮点数。

model-file=../../models/Primary_Detector/resnet10.caffemodel

proto-file=../../models/Primary_Detector/resnet10.prototxt

model-engine-file=../../models/Primary_Detector/resnet10.caffemodel_b30_gpu0_int8.engine

labelfile-path=../../models/Primary_Detector/labels.txt

int8-calib-file=../../models/Primary_Detector/cal_trt.bin

batch-size=30

process-mode=1  #主处理器为1,从处理器为2,#1-Primary 2-Secondary.

model-color-format=0    #输入的处理数据格式Integer 0: RGB 1: BGR 2: GRAY

## 0=FP32, 1=INT8, 2=FP16 mode

network-mode=1

num-detected-classes=4

interval=0

gie-unique-id=1 #分配给GIE的唯一ID,使应用程序和其他元素能够识别检测到的边界框和标签

output-blob-names=conv2d_bbox;conv2d_cov/Sigmoid    #输出层名称数组

force-implicit-batch-dim=1  ##当网络同时支持隐式批处理维度和全维时,强制使用隐式批处理维度模式。

#parse-bbox-func-name=NvDsInferParseCustomResnet    #自定义边界框解析函数的名称。如果没有指定,Gst-nvinfer使用SDK提供的resnet模型的内部函数。

#custom-lib-path=/path/to/libnvdsparsebbox.so

## 1=DBSCAN, 2=NMS, 3= DBSCAN+NMS Hybrid, 4 = None(No clustering)

cluster-mode=2

#scaling-filter=0

#scaling-compute-hw=0

#Use the config params below for dbscan clustering mode

#[class-attrs-all]

#detected-min-w=4

#detected-min-h=4

#minBoxes=3

#Use the config params below for NMS clustering mode

[class-attrs-all]   #组配置所有类的检测参数。组[class-attrs-<class-id>]配置类<class-id>的检测参数。例如,组[class-attrs-23]配置类ID为23的检测参数。[class-attrs-all]配置所有类型的有与相同的参数。

topk=20 #只保留检测分数最高的前K个对象。

nms-iou-threshold=0.5   #非极大值抑制的IOU阈值

pre-cluster-threshold=0.2   #在聚类操作之前应用的检测阈值

## Per class configurations

[class-attrs-0] #配置类ID为0的检测参数

topk=20

nms-iou-threshold=0.5

pre-cluster-threshold=0.4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值