使用NVIDIA CUDA-Pointpillars檢測點雲中的對象

fans news 發佈 2022-01-16T16:31:41+00:00

本文介紹了什麼是 CUDA-PointPillars 以及如何使用它來檢測點雲中的對象。由於原生 OpenPCDet 無法導出 ONNX,而且對於 TensorRT 來說,性能較低的小型操作數量過多,因此我們開發了 CUDA-PointPillars。

點雲是坐標系中的點數據集。點包含豐富的信息,包括三維坐標(X、Y、Z)、顏色、分類值、強度值和時間等。點雲主要來自於各種 NVIDIA Jetson 用例中常用的雷射雷達,如自主機器、感知模塊和 3D 建模。


其中一個關鍵應用是利用遠程和高精度的數據集來實現 3D 對象的感知、映射和定位算法。


PointPillars 是最常用於點雲推理的模型之一。本文將探討為 Jetson 開發者提供的 NVIDIA cuda 加速 PointPillars 模型


什麼是CUDA-Pointpillars


本文所介紹的 CUDA-Pointpillars 可以檢測點雲中的對象。其流程如下:

  • 基本預處理:生成柱體。
  • 預處理:生成 BEV 特徵圖(10 個通道)。
  • 用於 TensorRT 的 ONNX 模型:通過 TensorRT 實現的 ONNX 模式。
  • 後處理:通過解析 TensorRT 引擎輸出生成邊界框。



基本預處理


基本預處理步驟將點雲轉換為基本特徵圖。基本特徵圖包含以下組成部分:

  • 基本特徵圖。
  • 柱體坐標:每根柱體的坐標。
  • 參數:柱體數量。



預處理


預處理步驟將基本特徵圖(4 個通道)轉換為 BEV 特徵圖(10 個通道)。



用於TensorRT的ONNX模型


出於以下原因修改 OpenPCDet 的原生點柱:

  • 小型操作過多,並且內存帶寬低。
  • NonZero 等一些 TensorRT 不支持的操作。
  • ScatterND 等一些性能較低的操作。
  • 使用「dict」作為輸入和輸出,因此無法導出 ONNX 文件。


為了從原生 OpenPCDet 導出 ONNX,我們修改了該模型(圖 4)。



您可把整個 ONNX 文件分為以下幾個部分:

  • 輸入:BEV 特徵圖、柱體坐標、參數,均在預處理中生成。
  • 輸出:類、框、Dir_class,在後處理步驟中解析後生成一個邊界框。
  • ScatterBEV:將點柱(一維)轉換為二維圖像,可作為 TensorRT 的插件。
  • 其他:TensorRT 支持的其他部分。



後處理


在後處理步驟中解析 TensorRT 引擎的輸出(class、box和dir_class)和輸出邊界框。圖6 所示的是示例參數。



使用CUDA-PointPillars


若要使用 CUDA-PointPillars,需要提供點雲的 ONNX 模式文件和數據緩存:


std::vector<Bndbox> nms_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 的性能。


Jetson

Xavier NVIDIA AGX 8GB

版本

NVIDIA JetPack 4.5

CUDA

10.2

TensorRT

7.1.3

推理時間

33 ms

表1 測試平台和性能


開始使用CUDA-PointPillars


本文介紹了什麼是 CUDA-PointPillars 以及如何使用它來檢測點雲中的對象。


由於原生 OpenPCDet 無法導出 ONNX,而且對於 TensorRT 來說,性能較低的小型操作數量過多,因此我們開發了 CUDA-PointPillars。該應用可以將 OpenPCDet 訓練的原生模型導出為特殊的 ONNX 模型,並通過 TensorRT 推斷 ONNX 模型。


點擊連結:https://github.com/NVIDIA-AI-IOT/CUDA-PointPillars

立即下載 CUDA-PointPillars

關鍵字: