NVIDIA CUDA-PointPillars による点群内の物体検出
点群とは、ある座標系内の点のデータセットのことで、1 つの点には、3 次元座標 X/Y/Z、色、分類値、強度、時間など、さまざまな情報が含まれます。点群は主に、自律型マシン、認識モジュール、3D モデリングなど、NVIDIA Jetson のさまざまなユース ケースでよく使用される LiDAR から取得されます。
点群の主な用途として、長距離の高精度データセットを利用して、認識、マッピング、位置特定アルゴリズム用の 3 次元物体を検出することが挙げられます。
PointPillars は、点群推論でよく使用されているモデルです。今回の記事では、Jetson 開発者向けの NVIDIA CUDA のアクセラレーションを活用した PointPillars モデルについてご説明します。
CUDA-PointPillars モデルは、こちらからダウンロードできます。
CUDA-PointPillars とは
この記事では、点群内の物体を検出する CUDA-PointPillars をご紹介します。処理の流れは以下のとおりです。
- 基本の前処理: ピラー (柱) を生成する。
- 前処理: BEV 特徴マップ (チャネル数 10) を生成する。
- TensorRT 用 ONNX モデル: TensorRT で実装可能な ONNX モデル。
- 後処理: TensorRT エンジンの出力を解析してバウンディング ボックスを生成する。
基本の前処理
基本の前処理では、点群を基本特徴マップに変換します。以下のコンポーネントが提供されます。
- 基本特徴マップ
- ピラー座標: 各ピラーの座標
- パラメータ: ピラーの数
前処理
前処理では、基本特徴マップ (チャネル数 4) を BEV 特徴マップ (チャネル数 10) に変換します。
TensorRT 用 ONNX モデル
以下の理由により、OpenPCDet のネイティブ PointPillars を修正しました。
- メモリ帯域幅が限られているのに、細かい演算が多すぎる。
- NonZero などの一部の演算は TensorRT でサポートされていない。
- ScatterND などの一部の演算のパフォーマンスが低い。
- 入出力に、ONNX ファイルをエクスポートできない “dict” を使用している。
ネイティブの OpenPCDet から ONNX をエクスポートするために、図 4 のようにモデルを修正しました。
ONNX ファイルは以下の要素に分割できます。
- 入力: BEV 特徴マップ、ピラー座標、パラメータ。すべて前処理で生成。
- 出力: Class、Box、Dir_class。後処理で解析され、バウンディング ボックスを生成。
- ScatterBEV: PointPillars (1 次元) を 2 次元画像に変換。TensorRT のプラグインとして機能。
- その他: TensorRT でサポート。[OTHER WHAT?]
後処理
後処理では、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 ファイルに変換
このプロジェクトでは、OpenPCDet でトレーニングしたネイティブ モデルを CUDA-PointPillars 用の ONNX ファイルに変換する Python スクリプトを提供しています。exporter.py スクリプトは、CUDA-PointPillars の /tool ディレクトリ内にあります。
カレント ディレクトリ内の pointpillar.onnx ファイルを取得するには、以下のコマンドを実行します。
$ python exporter.py — ckpt ./*.pth
パフォーマンス
以下の表に、テスト環境とパフォーマンスを示します。テスト前に、CPU および GPU ブーストを行いました。
CUDA-PointPillars の利用を開始
今回は、CUDA-PointPillars の概要と、点群内の物体を検出する方法をご説明しました。
ネイティブの OpenPCDet では ONNX をエクスポートできず、細かい演算が多すぎて TensorRT 向けのパフォーマンスが低いことから、CUDA-PointPillars が開発されました。このアプリケーションを使用して、OpenPCDet でトレーニングしたネイティブ モデルから専用の ONNX モデルをエクスポートし、TensorRT で ONNX モデルの推論を行うことができます。
ぜひ CUDA-PointPillars をダウンロードしてご活用ください。