【DeepStream】基于英伟达DeepStream框架进行算法开发(三):Gst-nvinfer模块介绍

44 篇文章 4 订阅
12 篇文章 0 订阅

官网文档

文档

Gst-nvinfer简介

该插件接受来自上游的批处理的 NV12/RGBA 缓冲区。NvDsBatchMeta 结构必须已附加到 Gst 缓冲区。底层库(libnvds_infer)可处理任何 INT8 RGB、BGR 或 GRAY 数据,其尺寸为网络高度和网络宽度。Gst-nvinfer 插件根据网络要求对输入帧执行变换(格式转换和缩放),并将转换后的数据传递给低级库。底层库对转换后的帧进行预处理(执行归一化和均值减法),生成最终的 float RGB/BGR/GRAY 平面数据,然后传递给 TensorRT 引擎进行推理。底层库生成的输出类型取决于网络类型。预处理函数为:

y = net-scale-factor*(x-mean)

x 是输入像素值。它是一个范围为 [0,255] 的 int8。
mean 是对应的均值,可以从均值文件中读取,也可以作为偏移值[c] 读取,其中 c 表示输入像素所属的通道,offsets是在配置文件中指定的数组。它是一个 float。
net-scale-factor 是在配置文件中指定的像素缩放因子。它是一个 float。
y 是对应的输出像素值。它是一个 float。

Gst-nvinfer 插件可以运行在三种模式下:

主模式:对完整帧进行操作

次要模式:对上游组件添加的对象进行操作

预处理张量输入模式:对上游组件附加的张量进行操作

在预处理张量输入模式下运行时,Gst-nvinfer 内部的预处理完全跳过。该插件查找附加到输入缓冲区的 GstNvDsPreProcessBatchMeta,并将张量原样传递给 TensorRT 推理函数,无需任何修改。该模式目前支持对完整帧和感兴趣区域(ROI)进行处理。GstNvDsPreProcessBatchMeta 是由 Gst-nvdspreprocess 插件附加的。

当插件作为辅助分类器与跟踪器一起运行时,它通过避免在每一帧上对相同对象进行重新推理来提高性能。它通过将分类输出缓存在一个具有对象唯一 ID 作为键的映射中来实现这一点。对象仅在它首次出现在帧中(基于其对象 ID)或当对象的大小(边界框面积)增加了20%或更多时才推理。只有在将跟踪器添加为上游元素时才能进行这种优化。

下游组件接收到一个带有未修改内容及由 Gst-nvinfer 插件推理输出创建的元数据的 Gst 缓冲区。该插件可用于级联推理。也就是说,它可以直接在输入数据上执行首要推理,然后在首要推理结果上执行次要推理,依此类推。更多详情请查看示例应用程序 deepstream-test2。

输入

Gst 缓冲区

NvDsBatchMeta(附加 NvDsFrameMeta)

Caffe 模型和 Caffe Prototxt

ONNX

UFF 文件

TAO 编码模型和key

离线:支持由 TAO Toolkit SDK 模型转换器生成的引擎文件

控制参数

Gst-nvinfer 从配置文件中获取控制参数。您可以通过设置属性 config-file-path 来指定这一点。有关详细信息,请参阅 Gst-nvinfer 文件配置规范。可以通过 GObject 属性设置的其他控制参数包括:

批处理大小

推理间隔

将推理张量输出作为缓冲区元数据附加

将实例输出作为对象元数据附加

通过 GObject 属性设置的参数会覆盖 Gst-nvinfer 配置文件中的参数。

输出

Gst 缓冲区

根据网络类型和配置的参数,可能包括以下一个或多个:

(1)NvDsObjectMeta

(2)NvDsClassifierMeta

(3)NvDsInferSegmentationMeta

(4)NvDsInferTensorMeta

张量元数据

Gst-nvinfer 插件可以将由 TensorRT 推理引擎生成的原始输出张量数据附加为元数据。对于主要(全帧)模式,将其添加为 NvDsInferTensorMeta 到 NvDsFrameMeta 的 frame_user_meta_list 成员中,对于次要(对象)模式,则添加到 NvDsObjectMeta 的 obj_user_meta_list 成员中。

要读取或解析输出层推理原始张量数据
启用属性 output-tensor-meta 或在 Gst-nvinfer 插件的配置文件中启用同名属性。

作为主 GIE 运行时,NvDsInferTensorMeta 附加到每帧的(每个 NvDsFrameMeta 对象的)frame_user_meta_list。作为次要 GIE 运行时,NvDsInferTensorMeta 附加到每个 NvDsObjectMeta 对象的 obj_user_meta_list。

由 Gst-nvinfer 附加的元数据可以在附加到 Gst-nvinfer 实例下游的 GStreamer pad probe 中访问。

NvDsInferTensorMeta 对象的元数据类型设置为 NVDSINFER_TENSOR_OUTPUT_META。要获取此元数据,必须迭代 frame_user_meta_list 或 obj_user_meta_list 中引用的列表中的 NvDsUserMeta 用户元数据对象。

有关 Gst-infer 张量元数据使用的更多信息,请参阅 DeepStream SDK 示例中提供的 sources/apps/sample_apps/deepstream_infer_tensor_meta-test.cpp 源代码。

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颢师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值