포인트 클라우드는 좌표계 중점의 데이터 집합입니다. 점은 3차원 좌표 X, Y, Z, 색상, 분류 값, 강도 값 및 시간을 포함한 풍부한 정보를 포함합니다. 포인트 클라우드는 대부분 자율 머신, 인식 모듈, 3D 모델링 등 다양한 NVIDIA Jetson 사용 사례에 일반적으로 사용되는 레이저 레이더에서 비롯됩니다.
그 중에서 관건은 원격과 고정밀 데이터 집합을 이용하여 감지, 매핑과 포지셔닝 알고리즘의 3차원 객체 검출을 실현하는 것입니다.
PointPillars는 포인트 클라우드 추론에 가장 많이 사용되는 모델 중 하나입니다. 이 글은 Jetson 개발자를 대상으로 하는 NVIDIA CUDA 가속 PointPillars 모델에 대해 설명합니다.
지금 바로 CUDA PointPillars 모델을 다운로드하세요.
CUDA-Pointpillars란?
이 문서에서는 포인트 클라우드의 객체를 검출할 수 있는 CUDA Pointpillars를 소개합니다. 프로세스는 다음과 같습니다.
- Base preprocessing: 좌표를 생성합니다.
- Preprocessing: BEV 피쳐 맵(10채널)을 생성합니다.
- TensorRT의 ONNX 모델: TensorRT에서 사용할 수 있는 ONNX 모드
- Post-processing: TensorRT 엔진의 출력을 분석하여 경계 상자를 생성합니다.
Base preprocessing
Base preprocessing은 포인트 클라우드를 기본 요소 지도로 전환합니다. 이는 다음과 같은 구성 요소를 제공합니다.
- 기본 요소 지도
- Pillar coordinates: 각 기둥의 좌표입니다.
- Parameters: 좌표들의 수.
Preprocessing
Preprocessing단계에서는 기본 피쳐 맵(4개의 채널)을 BEV 피쳐 맵(10개의 채널)으로 변환합니다.
TensorRT의 ONNX 모델
Open PCDet의 네이티브 포인트 좌표는 다음과 같은 이유로 변경되었습니다.
- 작은 작업이 너무 많고 메모리 대역폭이 낮습니다.
- NonZero와 같은 일부 작업은 TensorRT에서 지원되지 않습니다.
- SactterND와 같은 일부 작업은 성능이 낮습니다.
- 입력 및 출력으로 “dict”를 사용하므로 ONNX 파일을 내보낼 수 없습니다.
원본 OpenPCdet에서 ONNX를 내보내기 위해 모델을 수정했습니다 (그림4).
전체 ONNX 파일을 다음과 같은 섹션으로 나눌 수 있습니다.
- Inputs: BEV 피쳐 맵, 좌표 코디네이션, 파라미터. 이것들은 모두 Preprocessing 과정에서 생성되었습니다.
- Outputs: 클래스, 박스(Box), Dir_class. 이들은 Post-processing를 통해 해석되어 경계 상자(Bounding box)를 생성합니다.
- ScatterBEV : TensorRT 플러그인으로 사용할 수 있는 Pointpillar(1D)을 2D 이미지로 변환합니다.
- Others : TensorRT에서 지원합니다.
Post-processing
Post-processing는 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 파일로 변환할 수 있는 [ZG8] 스크립트를 제공했습니다. CUDA Pointpillars의 /tool
디렉토리에서 exporter.py
스크립트를 찾아보세요.
Pointpillars 하나를 얻기 위해 현재 디렉토리의 onnx 파일에서 다음 명령을 실행합니다.
$ python exporter.py --ckpt ./*.pth
퍼포먼스
다음 표는 테스트 환경과 성능을 보여 줍니다. 테스트 전 CPU 및 GPU를 부스트하십시오.
Jetson | Xavier NVIDIA AGX 8GB |
Release | NVIDIA JetPack 4.5 |
CUDA | 10.2 |
TensorRT | 7.1.3 |
Infer Time | 33 ms |
CUDA PointPillars를 시작하세요
이 게시물에서는 CUDA PointPillars가 무엇인지, 포인트 클라우드의 객체를 감지하기 위해 사용하는 방법을 보여 줍니다.
본 OpenPCDet은 ONNX를 내보낼 수 없고 TensorRT는 성능이 낮은 소형 작업이 너무 많기 때문에 CUDA PointPillars를 개발했습니다. 이 프로그램은 OpenPCDet 훈련의 본체 모델을 특수한 ONNX 모델로 내보내고 TensorRT를 통해 ONNX 모델을 추론할 수 있습니다.