点云是坐标系中的点数据集。点包含丰富的信息,包括三维坐标(X、Y、Z)、颜色、分类值、强度值和时间等。点云主要来自于各种NVIDIA Jetson用例中常用的激光雷达,如自主机器、感知模块和3D建模。
其中一个关键应用是利用远程和高精度的数据集来实现3D对象的感知、映射和定位算法。
PointPillars是最常用于点云推理的模型之一。本文将探讨为Jetson开发者提供的NVIDIA CUDA加速PointPillars模型。马上下载CUDA-PointPillars模型。
什么是CUDA-Pointpillars
本文所介绍的CUDA-Pointpillars可以检测点云中的对象。其流程如下:
基本预处理:生成柱体。
预处理:生成BEV特征图(10个通道)。
用于TensorRT的ONNX模型:通过TensorRT实现的ONNX模式。
后处理:通过解析TensorRT引擎输出生成边界框。
图 1 。 CUDA 点柱管道。
基本预处理
基本预处理步骤将点云转换为基本特征图。基本特征图包含以下组成部分:
基本特征图。
柱体坐标:每根柱体的坐标。
参数:柱体数量。
图 2 。将点云转换为基础要素地图
预处理
预处理步骤将基本特征图(4个通道)转换为 BEV 特征图(10个通道)。
图 3 。将基本要素地图转换为 BEV 要素地图
用于TensorRT的ONNX模型
出于以下原因修改OpenPCDet的原生点柱:
小型操作过多,并且内存带宽低。
NonZero等一些TensorRT不支持的操作。
ScatterND等一些性能较低的操作。
使用“dict”作为输入和输出,因此无法导出ONNX文件。
为了从原生OpenPCDet导出ONNX,我们修改了该模型(图4)。
图 4 。 CUDA Pointpillars 中 ONNX 模型概述。
您可把整个ONNX文件分为以下几个部分:
输入:BEV特征图、柱体坐标、参数,均在预处理中生成。
输出:类、框、Dir_class,在后处理步骤中解析后生成一个边界框。
ScatterBEV:将点柱(一维)转换为二维图像,可作为TensorRT的插件。
其他:TensorRT支持的其他部分。
图 5 。将点支柱数据散射到二维主干的二维图像中。
后处理
在后处理步骤中解析TensorRT引擎的输出(class、box和dir_class)和输出边界框。图6所示的是示例参数。
图 6 。边界框的参数。
使用 CUDA PointPillars
若要使用CUDA-PointPillars,需要提供点云的ONNX模式文件和数据缓存:
std::vectornms_pred; PointPillar pointpillar(ONNXModel_File, cuda_stream); pointpillar.doinfer(points_data, points_count, nms_pred);
将OpenPCDet训练的原生模型转换为CUDA-Pointpillars的ONNX文件
我们在项目中提供了一个Python脚本,可以将OpenPCDet训练的原生模型转换成CUDA-Pointpillars的ONNX文件。可在CUDA-Pointpillars的/tool 目录下找到exporter.py 脚本。
可在当前目录下运行以下命令获得pointpillar.onnx文件:
$ python exporter.py --ckpt ./*.pth
性能
下表显示了测试环境和性能。在测试之前提升CPU和GPU的性能。
表 1 测试平台与性能
开始使用 CUDA PointPillars
本文介绍了什么是CUDA-PointPillars以及如何使用它来检测点云中的对象。
由于原生OpenPCDet无法导出ONNX,而且对于TensorRT来说,性能较低的小型操作数量过多,因此我们开发了CUDA-PointPillars。该应用可以将OpenPCDet训练的原生模型导出为特殊的ONNX模型,并通过TensorRT推断ONNX模型。
关于作者
Lei Fan 是 NVIDIA 的高级 CUDA 软件工程师。他目前正与 TSE 中国团队合作,开发由 CUDA 优化软件性能的解决方案。
Lily Li 正在为 NVIDIA 的机器人团队处理开发人员关系。她目前正在 Jetson 生态系统中开发机器人技术解决方案,以帮助创建最佳实践。
审核编辑:郭婷
-
NVIDIA
+关注
关注
14文章
4949浏览量
102837 -
数据集
+关注
关注
4文章
1205浏览量
24649
发布评论请先 登录
相关推荐
评论