Gst-nvdspostprocess (Alpha)#
Gst-nvdspostprocess 插件是一个可自定义的插件,它为推理插件(nvinfer/nvinferserver)的 Tensor 输出提供了一个自定义库接口,用于后处理。目前,该插件支持检测和分类模型的解析。该插件连接到作为插件参数提供的后处理库。解析参数可以通过配置文件指定。有关更多详细信息,请参阅下面的 Gst-nvdspostprocess 文件配置规范 部分。
为了使插件能够执行推理张量输出的解析,有必要通过在推理配置文件中将 output-tensor-meta
设置为 1
,并在推理插件中通过将 network-type
设置为 100
即网络类型为其他类型来禁用解析。同样,在 Gst-nvinferserver 中,我们可以在配置文件中启用以下配置。output_control { output_tensor_meta : true }
,为了禁用原生后处理,请更新:infer_config { postprocess { other {} } }
。
默认插件实现提供以下功能。
它解析附加到帧元数据或对象元数据的张量元数据。
将张量解析的输出附加到帧元数据或对象元数据。
插件提供的默认自定义库 (postprocesslib_impl) 实现了这些功能。它可以配置为解析检测和分类网络。对于管道中的多个推理插件,需要多个与它们对应的后处理插件实例。

输入和输出#
输入
输入视频 Gst 缓冲区
元数据 (NvDsBatchMeta)
张量元数据 (NvDsInferTensorMeta)
控制参数
postprocesslib-config-file
postprocesslib-name
gpu-id
输出
输出视频 Gst 缓冲区
原始元数据 (NvDsBatchMeta)(添加了对象元数据/分类器元数据)
特性#
下表总结了插件的特性。
Gst-nvdspostprocess 特性# 特性
描述
发布版本
检测输出解析
解析检测器张量数据并将结果作为对象元数据附加
DS 6.1
分类输出解析
解析分类张量数据并将结果作为分类器属性附加到元数据中
DS 6.1
Yolo 检测器 (YoloV3/V3-tiny/V2/V2-tiny) 解析
支持解析 Yolo 检测器输出
DS 6.1
FasterRCNN 输出解析
—
DS 6.1
单发检测器 (SSD) 输出解析
—
DS 6.1
Gst-nvdspostprocess 文件配置规范#
Gst-nvdspreprocess 配置文件使用“YAML”格式。请参阅 config_detector.yml, config_classifier_car_color.yml
等示例,这些示例位于 /opt/nvidia/deepstream/deepstream/sources/gst-plugins/gst-nvdspostprocess/
。 property
组配置插件的常规行为。 class-attrs-all
组配置检测器后处理器的所有类的参数。 class-attrs-<id>
组配置检测器后处理器的 <id>
特定类的参数。
以下两个表分别描述了 property
组和 class-attrs-<id>
组支持的键。
Gst-nvdspostprocess property 组支持的键# 属性
含义
类型和范围
示例
gpu-id
用于处理的 GPU
整数
gpu-id: 0
process-mode
操作模式:全帧(主要 1)或对象(次要 2)
整数 1=主要(全帧),2=次要(对象)
process-mode: 1
gie-unique-id
对 gie-unique-id 的输出执行张量元数据解析
整数 >0
gie-unique-id: 1
num-detected-classes
检测器网络检测到的类数
整数 >0
num-detected-classes: 4
cluster-mode
要在检测器输出上使用的聚类模式
整数 1=DBSCAN 2=NMS 3=DBSCAN+NMS 混合 4=无(无聚类)
cluster-mode: 2
output-blob-names
要解析的输出层名称数组
分号分隔的字符串
output-blob-names: conv2d_bbox;conv2d_cov/Sigmoid
network-type
要解析的网络类型
整数 0=检测器 1=分类器
network-type: 1
labelfile-path
包含模型标签的文本文件的路径名
字符串
labelfile-path: /opt/nvidia/deepstream/deepstream/samples/models/Primary_Detector/labels.txt
classifier-threshold
最小阈值标签概率。如果概率大于此阈值,则 GIE 输出具有最高概率的标签
浮点数,>0.0
classifier-threshold: 0.4
operate-on-gie-id
GIE 的唯一 ID,此 GIE 将在其元数据(边界框)上运行,适用于 process-mode=2
整数 >0
operate-on-gie-id: 1
parse-classifier-func-name
自定义分类器输出解析函数的名称。如果未指定,后处理库将使用 softmax 层的解析函数。
字符串
parse-classifier-func-name: NvDsPostProcessClassiferParseCustomSoftmax
parse-bbox-func-name
自定义边界框解析函数的名称。如果未指定,后处理库将使用 SDK 提供的 resnet 模型的函数
字符串
parse-bbox-func-name: NvDsPostProcessParseCustomResnet
Gst-nvdspostprocess class-attr-<id> 组支持的键# 属性
含义
类型和范围
示例
topk
仅保留检测得分最高的 top K 个对象。
整数,>0。 -1 表示禁用
topk: 10
nms-iou-threshold
两个提案之间的最大 IOU 分数,超过此分数后,置信度较低的提案将被拒绝。
浮点数,>0.0
nms-iou-threshold: 0.2
pre-cluster-threshold
在聚类操作之前应用的检测阈值
浮点数,>0.0
pre-cluster-threshold: 0.5
post-cluster-threshold
在聚类操作之后应用的检测阈值
浮点数,>0.0
post-cluster-threshold: 0.5
eps
DBSCAN 算法的 Epsilon 值
浮点数,>0.0
eps: 0.2
dbscan-min-score
集群中所有邻居的置信度总和的最小值,集群要被视为有效集群。
浮点数,>0.0
dbscan-min-score: 0.7
Gst 属性#
下表描述了 Gst-nvdspostprocess 插件的 Gst 属性。
Gst-nvspostprocess gst 属性# 属性
含义
类型和范围
示例注释
gpu-id
用于后处理的 GPU 的设备 ID(仅限 dGPU)
整数,0-4,294,967,295
gpu-id=1
postprocesslib-name
用于输出解析的底层后处理库
字符串
postprocesslib-name=./postprocesslib_impl/libpostprocess_impl.so
postprocesslib-config-file
设置要使用的后处理 yaml 配置文件
字符串
postprocesslib-config-file= config_detector.yml
示例管道#
下面是一些示例管道,请设置适当的配置文件和库路径。
用于多流检测器和分类器 (dGPU)
gst-launch-1.0 uridecodebin \
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4 \
! m.sink_0 nvstreammux name=m width=1920 height=1080 batch-size=2 ! \
nvinfer config-file-path=config_infer_primary_post_process.txt \
! nvdspostprocess \
postprocesslib-config-file=config_detector.yml \
postprocesslib-name= ./postprocesslib_impl/libpostprocess_impl.so \
! queue ! nvinfer \
config-file-path= config_infer_secondary_vehiclemake_postprocess.txt \
! nvdspostprocess \
postprocesslib-config-file= config_classifier_vehicle_make.yml \
postprocesslib-name= ./postprocesslib_impl/libpostprocess_impl.so ! queue ! nvinfer \
config-file-path= config_infer_secondary_vehicletypes_postprocess.txt \
! nvdspostprocess postprocesslib-config-file= \
config_classifier_vehicle_type.yml postprocesslib-name= \
./postprocesslib_impl/libpostprocess_impl.so ! queue ! nvmultistreamtiler ! nvvideoconvert \
gpu-id=0 ! nvdsosd ! nveglglessink sync=1 -v uridecodebin \
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4 ! m.sink_1
用于多流检测器和分类器 (Jetson)
gst-launch-1.0 uridecodebin \
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4 \
! m.sink_0 nvstreammux name=m width=1920 height=1080 batch-size=2 ! \
nvinfer config-file-path=config_infer_primary_post_process.txt \
! nvdspostprocess \
postprocesslib-config-file=config_detector.yml \
postprocesslib-name= ./postprocesslib_impl/libpostprocess_impl.so \
! queue ! nvinfer \
config-file-path= config_infer_secondary_vehiclemake_postprocess.txt \
! nvdspostprocess \
postprocesslib-config-file=config_classifier_vehicle_make.yml \
postprocesslib-name= ./postprocesslib_impl/libpostprocess_impl.so ! queue ! nvinfer \
config-file-path= config_infer_secondary_vehicletypes_postprocess.txt \
! nvdspostprocess postprocesslib-config-file= \
config_classifier_vehicle_type.yml postprocesslib-name= \
./postprocesslib_impl/libpostprocess_impl.so ! queue ! nvmultistreamtiler ! nvvideoconvert \
gpu-id=0 ! nvdsosd ! nv3dsink sync=1 -v uridecodebin \
uri=file:///opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4 ! m.sink_1