DeepStream 3D Lidar 推理应用#
示例应用 deepstream-lidar-inference-app
位于 app/sample_apps/deepstream-lidar-inference-app/,供您参考。deepstream_lidar_inference_app
为 lidar 点云数据提供端到端推理示例。此示例应用从数据集文件读取点云数据,并将数据发送到带有 PointPillarNet 模型的 Triton 推理过滤器,推理结果是对象的 3D 边界框组。此示例应用根据不同的应用配置文件加载不同的 pipeline。示例应用中配置了 2 个 pipeline。
用于 3D 对象检测和文件转储的 Lidar Triton 推理。
Lidar Triton 推理和 3D 对象检测以及 GLES 3D 渲染。
在这些示例配置中,推理模型是基于 PointPillar 的 3D TAO 模型。有关 PointPillar 的更多详细信息,请参阅 https://arxiv.org/abs/1812.05784。
注意
TensorRT 8.5 在 FP16 模式下将此特定 TAO 模型转换为 TensorRT 引擎文件时存在错误。DeepStream 在此版本中回退到 FP32 模式。
这是 deepstream-lidar-inference-app
运行 lidar 数据推理对象检测和 GLES 3D 渲染并在屏幕上显示 3D 边界框的快照。
先决条件#
您必须安装以下开发包
GStreamer-1.0
GStreamer-1.0 基础插件
X11 客户端库
libyaml-cpp-dev
要安装这些软件包,请执行以下命令
sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev \
libgstrtspserver-1.0-dev libx11-dev libyaml-cpp-dev
Lidar 点云到 3D 点云处理和渲染#
可以根据应用配置文件将应用配置为不同的 pipeline。
Lidar 数据推理和 3D 边界框转储 pipeline
此 pipeline 从 lidar 点云、3D 点云推理到 3D 对象数据转储。
![]()
此 pipeline 由
config_lidar_triton_infer.yaml
设置。它有 3 个组件:ds3d::dataloader
用于 lidar 点云数据文件读取,ds3d::datafilter
用于点云 Triton 推理,以及ds3d::datarender
用于 3D 边界框 文件转储。
ds3d::dataloader
加载自定义库libnvds_lidarfileread.so
并通过createLidarFileLoader
函数创建 dataloader。此特定加载器由 lidar 数据集文件列表 data_config_file 配置。Gst-appsrc 将 dataloader 连接到 deepstream pipeline 中。name: lidarsource type: ds3d::dataloader out_caps: ds3d/datamap custom_lib_path: libnvds_lidarfileread.so custom_create_function: createLidarFileLoader
ds3d::datafilter
加载自定义库libnvds_tritoninferfilter.so
并通过createLidarInferenceFilter
函数创建 lidar 点云 Triton 推理过滤器。对于此特定配置,Lidar Triton 过滤器使用 TAO 模型 PointPillarNet 模型推理点云数据,并返回每个对象周围的 3D 边界框。name: lidarfilter type: ds3d::datafilter in_caps: ds3d/datamap out_caps: ds3d/datamap custom_lib_path: libnvds_tritoninferfilter.so custom_create_function: createLidarInferenceFilter
ds3d::datafilter
由nvds3dfilter
Gst-plugin 加载,它接受in_caps
作为 sink_caps,out_caps
作为 src_caps。它创建自定义的ds3d::datafilter
实例并将数据处理为ds3d/datamap
。
ds3d::datarender
加载自定义库libnvds_lidarfilewrite.so
以将检测到的 3D 边界框转储到文件中。name: lidarrender type: ds3d::datarender in_caps: ds3d/datamap custom_lib_path: libnvds_lidarfilewrite.so custom_create_function: createLidarFileDataRender
Lidar 数据推理和带有 3D 边界框显示 pipeline 的 Lidar 数据渲染
此 pipeline 从 lidar 点云数据文件、3D 点云推理到带有颜色的 3D 点云渲染。
![]()
此 pipeline 由
config_lidar_source_triton_render.yaml
设置。它有 3 个组件:ds3d::dataloader
用于 lidar 点云数据文件读取,ds3d::datafilter
用于点云 Triton 推理,以及ds3d::datarender
用于 Lidar 3D 数据 LidarXYZI 和 3D 边界框 渲染。
ds3d::dataloader
加载自定义库libnvds_lidarfileread.so
并通过createLidarFileLoader
函数创建 dataloader。此特定加载器由 lidar 数据集文件列表 data_config_file 配置。Gst-appsrc 将 dataloader 连接到 deepstream pipeline 中。name: lidarsource type: ds3d::dataloader out_caps: ds3d/datamap custom_lib_path: libnvds_lidarfileread.so custom_create_function: createLidarFileLoader
ds3d::datafilter
加载自定义库libnvds_tritoninferfilter.so
并通过createLidarInferenceFilter
函数创建 lidar 点云 Triton 推理过滤器。对于此特定配置,Lidar Triton 过滤器使用 TAO 模型 PointPillarNet 模型推理点云数据,并返回每个对象周围的 3D 边界框。name: lidarfilter type: ds3d::datafilter in_caps: ds3d/datamap out_caps: ds3d/datamap custom_lib_path: libnvds_tritoninferfilter.so custom_create_function: createLidarInferenceFilter
ds3d::datafilter
由nvds3dfilter
Gst-plugin 加载,它接受in_caps
作为 sink_caps,out_caps
作为 src_caps。它创建自定义的ds3d::datafilter
实例并将数据处理为ds3d/datamap
。
ds3d::datarender
加载自定义库libnvds_3d_gl_datarender.so
并创建 GLES Lidar 点云渲染上下文,以使用custom_create_function: createLidarDataRender
显示 XYZI 或 XYZ lidar 数据和 3D 边界框。name: lidarrender type: ds3d::datarender in_caps: ds3d/datamap custom_lib_path: libnvds_3d_gl_datarender.so custom_create_function: createLidarDataRender
入门指南#
运行 Lidar 点云数据文件读取器、点云推理过滤器以及点云 3D 渲染和数据转储示例#
准备 PointPillarNet 模型和 Triton 环境,此应用将使用 Triton 进行推理。有关 Triton 推理服务器的更多详细信息,请参阅 https://docs.nvda.net.cn/metropolis/deepstream/dev-guide/text/DS_plugin_gst-nvinferserver.html。
按照 deepstream-lidar-inference-app/README 中的说明准备测试资源和 Triton CAPI 和 gRPC 环境。
在 2 种模式下运行 lidar 点云数据推理 pipeline。
运行 lidar 数据读取器、点云 3D 对象检测推理和 3D 数据 GLES 渲染 pipeline
$ deepstream-lidar-inference-app -c configs/config_lidar_source_triton_render.yaml运行 lidar 数据读取器、点云 3D 对象推理和 3D 对象文件转储 pipeline
$ deepstream-lidar-inference-app -c configs/config_lidar_triton_infer.yaml
此部分设置 lidar 点云加载器 dataloader。然后,它将 ds3d/datamap 流式传输到下游 datafilter 组件 lidarfilter。
name: lidarsource type: ds3d::dataloader out_caps: ds3d/datamap custom_lib_path: libnvds_lidarfileread.so custom_create_function: createLidarFileLoader
它将 ds3d/datamap 流式传输到
nvds3dfilter
Gst-plugin,后者加载lidarfilter
以对点云执行 Triton 推理。有关nvds3dfilter
Gst-plugin 的更多详细信息,请参阅 Gst-nvds3dfilter。name: lidarfilter type: ds3d::datafilter in_caps: ds3d/datamap out_caps: ds3d/datamap custom_lib_path: libnvds_tritoninferfilter.so custom_create_function: createLidarInferenceFilter
model_inputs 字段是模型输入层的描述。包括层名称、层数据类型和层维度。
model_inputs: - name: points # name of the 1st layer datatype: FP32 # data type of the 1st layer shape: [1, 204800, 4] # data dimension of the 1st layer - name: num_points # name of the 2nd layer datatype: INT32 # data type of the 2nd layer shape: [1] # data dimension of the 2nd layer
model_outputs 字段是模型输出层的描述。包括层名称、层数据类型和层维度。
model_outputs: - name: output_boxes # name of the 1st layer datatype: FP32 # data type of the 1st layer shape: [1, 393216, 9] # data dimension of the 1st layer - name: num_boxes # name of the 2nd layer datatype: INT32 # data type of the 2nd layer shape: [1] # data dimension of the 2nd layer
labels 字段是点云推理模型的标签列表。
labels: # YAML list for object labels - Vehicle - Pedestrian - Cyclist
最后,数据流以 ds3d/datamap 形式传递到渲染组件。
3D 检测文件转储组件
lidarfiledump
。
name: lidarfiledump type: ds3d::datarender in_caps: ds3d/datamap custom_lib_path: libnvds_lidarfilewrite.so custom_create_function: createLidarFileDataRender
GLES lidar 数据渲染组件
lidardatarender
。
name: lidardatarender type: ds3d::datarender in_caps: ds3d/datamap custom_lib_path: libnvds_3d_gl_datarender.so custom_create_function: createLidarDataRender
查看 /opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-lidar-inference-app/README
文件以了解更多详细信息。
DeepStream Lidar 推理应用配置规范#
deepstream-lidar-inference-app [ds3d::userapp]
组设置#
下表演示了 config_lidar_triton_infer.yaml 和 config_lidar_source_triton_render.yaml 作为示例的组设置。
组 |
属性 |
含义 |
类型和范围 |
示例 |
---|---|---|---|---|
LidarFileLoader |
data_config_file |
lidar 数据列表文件路径 |
字符串 |
data_config_file: lidar_data_list.yaml |
LidarFileLoader |
points_num |
点云文件中点的数量 |
固定值 |
points_num: 204800 |
LidarFileLoader |
lidar_datatype |
数据集的数据类型 |
字符串:FP32 FP16 INT8 INT32 |
lidar_datatype: FP32 |
LidarFileLoader |
mem_type |
进程的内存类型 data:just 现在仅支持 cpu |
字符串:gpu cpu |
mem_type: cpu |
LidarFileLoader |
mem_pool_size |
数据读取池的大小 |
整数:>0 |
mem_pool_size: 4 |
LidarFileLoader |
output_datamap_key |
lidarsource 中的 datamap 键 |
字符串 |
output_datamap_key: DS3D::LidarXYZI |
LidarFileLoader |
file_loop |
文件读取循环的标志 |
布尔值 |
file_loop: False |
LidarInferenceFilter |
in_streams |
将要处理的数据类型 |
固定值 |
in_streams: [lidar] |
LidarInferenceFilter |
mem_pool_size |
输入张量池的大小 |
整数 |
mem_pool_size: 8 |
LidarInferenceFilter |
model_inputs |
模型的输入层 |
数组 |
请参考 config_lidar_triton_infer.yaml |
LidarInferenceFilter |
model_outputs |
模型的输出层 |
数组 |
请参考 config_lidar_triton_infer.yaml |
LidarInferenceFilter |
input_tensor_mem_type |
预处理后的输入张量内存类型 |
字符串:GpuCuda CpuCuda |
input_tensor_mem_type: GpuCuda |
LidarInferenceFilter |
custom_preprocess_lib_path |
预处理库路径 |
字符串 |
custom_preprocess_lib_path: /opt/nvidia/deepstream/deepstream/lib/libnvds_lidar_custom_preprocess_impl.so |
LidarInferenceFilter |
custom_preprocess_func_name |
自定义预处理函数名称 |
字符串 |
custom_preprocess_func_name: CreateInferServerCustomPreprocess |
LidarInferenceFilter |
labels |
检测模型的标签列表 |
数组 |
请参考 config_lidar_triton_infer.yaml |
LidarInferenceFilter |
postprocess_nms_iou_thresh |
NMS IOU 阈值 |
浮点数 |
postprocess_nms_iou_thresh: 0.01 |
LidarInferenceFilter |
postprocess_pre_nms_top_n |
NMS 的 TOP 数量 |
整数 |
postprocess_nms_top_n: 4096 |
LidarInferenceFilter |
config_file |
nvinferserver 配置文件 |
字符串 |
config_file: triton_mode_CAPI.txt |
LidarInferenceFilter |
gpu_id |
张量内存的 GPU ID (用于原生 Triton Server 推理) |
整数 |
gpu_id: 0 |
LidarInferenceFilter |
filter_input_datamap_key |
来自 lidarsource 的输入 datamap 键 |
字符串 |
filter_input_datamap_key: DS3D::LidarXYZI |
LidarFileDataRender |
frames_save_path |
转储文件的路径 |
字符串 |
frames_save_path: ../data/ |
LidarFileDataRender |
input_datamap_key |
来自 inferencing 对象的 custom_postprocess 的输入键 |
字符串 |
input_datamap_key: DS3D::Lidar3DBboxRawData |
LidarDataRender |
title |
渲染的标题 |
字符串 |
title: ds3d-lidar-render |
LidarDataRender |
streams |
要渲染的输入的流键 |
列表 |
streams: [lidardata] |
LidarDataRender |
width |
渲染区域宽度 |
整数 |
width: 1280 |
LidarDataRender |
height |
渲染区域高度 |
整数 |
height: 720 |
LidarDataRender |
block |
启用 block 功能的标志 |
布尔值 |
block: True |
LidarDataRender |
view_position |
lookat 向量的视图位置 |
列表 |
view_position: [0, 0, 80] |
LidarDataRender |
view_target |
lookat 向量的视图目标 |
列表 |
view_target: [0, 0, 0] |
LidarDataRender |
view_up |
可视化工具的向上向量 |
列表 |
view_up: [1, 0, 0] |
LidarDataRender |
near |
可视化工具常量的近 z 平面 |
浮点数 |
near: 0.3 |
LidarDataRender |
far |
可视化工具常量的远 z 平面 |
浮点数 |
far: 100 |
LidarDataRender |
fov |
视场角度 |
整数 |
fov: 45 |
LidarDataRender |
lidar_color |
lidar 数据的 RGB 颜色描述 |
列表,lidar_color: [0, 255, 0] |
|
LidarDataRender |
lidar_data_key |
datamap 中的 lidar 数据键名称 |
字符串 |
lidar_data_key: DS3D::LidarXYZI |
LidarDataRender |
element_size |
lidar 数据元素大小 (4, XYZI 或 3, XYZ) |
整数 |
element_size: 4 |
LidarDataRender |
lidar_bbox_key |
datamap 中的 3D bbox 数据键名称 |
字符串 |
DS3D::Lidar3DBboxRawData |
LidarDataRender |
enable_label |
指示启用标签渲染的标志 |
布尔值 |
enable_label: True |
DS3D 自定义组件配置规范#
有关更多详细信息,请参阅 DS_3D 支持的自定义组件规范 部分,请参考 DeepStream-3D 自定义应用和库教程。
从源码构建应用#
转到文件夹 sources/apps/sample_apps/deepstream-lidar-inference-app。
运行以下命令
$ sudo make $ sudo make install
注意
查看源代码以了解有关如何通过
Gst-appsrc
和Gst-appsink
加载 dataloader/datarender 的更多详细信息。datafilter 由nvds3dfilter
Gst-plugin 加载。