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。

  1. 用于 3D 对象检测和文件转储的 Lidar Triton 推理。

  2. 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 边界框的快照。

DeepStream Lidar inference for 3D point cloud processing and rendering snapshot

先决条件#

您必须安装以下开发包

  • 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。

  1. Lidar 数据推理和 3D 边界框转储 pipeline

此 pipeline 从 lidar 点云、3D 点云推理到 3D 对象数据转储。

DeepStream Lidar inference for 3D point cloud processing overview

此 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-appsrcdataloader 连接到 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::datafilternvds3dfilter Gst-plugin 加载,它接受 in_caps 作为 sink_capsout_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
  1. Lidar 数据推理和带有 3D 边界框显示 pipeline 的 Lidar 数据渲染

此 pipeline 从 lidar 点云数据文件、3D 点云推理到带有颜色的 3D 点云渲染。

DeepStream Lidar inference for 3D point cloud processing and rendering overview

此 pipeline 由 config_lidar_source_triton_render.yaml 设置。它有 3 个组件:ds3d::dataloader 用于 lidar 点云数据文件读取,ds3d::datafilter 用于点云 Triton 推理,以及 ds3d::datarender 用于 Lidar 3D 数据 LidarXYZI3D 边界框 渲染。

  • ds3d::dataloader 加载自定义库 libnvds_lidarfileread.so 并通过 createLidarFileLoader 函数创建 dataloader。此特定加载器由 lidar 数据集文件列表 data_config_file 配置。Gst-appsrcdataloader 连接到 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::datafilternvds3dfilter Gst-plugin 加载,它接受 in_caps 作为 sink_capsout_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 渲染和数据转储示例#

  1. 准备 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. 在 2 种模式下运行 lidar 点云数据推理 pipeline。

  1. 运行 lidar 数据读取器、点云 3D 对象检测推理和 3D 数据 GLES 渲染 pipeline

    $ deepstream-lidar-inference-app -c configs/config_lidar_source_triton_render.yaml
    
  2. 运行 lidar 数据读取器、点云 3D 对象推理和 3D 对象文件转储 pipeline

    $ deepstream-lidar-inference-app -c configs/config_lidar_triton_infer.yaml
    
  1. 此部分设置 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
    
  2. 它将 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
    
  1. 最后,数据流以 ds3d/datamap 形式传递到渲染组件。

    1. 3D 检测文件转储组件 lidarfiledump

    name: lidarfiledump
    type: ds3d::datarender
    in_caps: ds3d/datamap
    custom_lib_path: libnvds_lidarfilewrite.so
    custom_create_function: createLidarFileDataRender
    
    1. 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.yamlconfig_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 自定义应用和库教程

从源码构建应用#
  1. 转到文件夹 sources/apps/sample_apps/deepstream-lidar-inference-app

  2. 运行以下命令

    $ sudo make
    $ sudo make install
    

注意

查看源代码以了解有关如何通过 Gst-appsrcGst-appsink 加载 dataloader/datarender 的更多详细信息。datafilternvds3dfilter Gst-plugin 加载。