目录
2.2 关于Gst-nvinfer组件中net-scale-factor和offsets参数。
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为例分析如下
执行命令:
|
或
|
该配置文件主要实现了使用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
|
config-file对应的config_infer_primary.tx,内容如下,参考https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_plugin_gst-nvinfer.html
|