Uncategorized

NVIDIA CUDA Pointpillars를 사용하여 포인트 클라우드의 객체 탐지하기

Reading Time: 3 minutes

포인트 클라우드는 좌표계 중점의 데이터 집합입니다. 점은 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 엔진의 출력을 분석하여 경계 상자를 생성합니다.
Image shows the pipeline of CUDA-Pointpillars, which has four parts and uses a point cloud as input and output-bounding box.
그림 1.CUDA-Pointpillars 파이프라인

Base preprocessing

Base preprocessing은 포인트 클라우드를 기본 요소 지도로 전환합니다. 이는 다음과 같은 구성 요소를 제공합니다.

  • 기본 요소 지도
  • Pillar coordinates: 각 기둥의 좌표입니다.
  • Parameters: 좌표들의 수.
Image shows how to convert points cloud into base feature maps and what is the struct of base feature maps.
그림 2.포인트 클라우드를 기초요소지도로 전환

Preprocessing

Preprocessing단계에서는 기본 피쳐 맵(4개의 채널)을 BEV 피쳐 맵(10개의 채널)으로 변환합니다.

Image shows how to convert 4 channels from base feature maps into 0 channels of BEV feature maps.
그림 3.기본 요소 맵을 BEV 요소 맵으로 변환

TensorRT의 ONNX 모델

Open PCDet의 네이티브 포인트 좌표는 다음과 같은 이유로 변경되었습니다.

  • 작은 작업이 너무 많고 메모리 대역폭이 낮습니다.
  • NonZero와 같은 일부 작업은 TensorRT에서 지원되지 않습니다.
  • SactterND와 같은 일부 작업은 성능이 낮습니다.
  • 입력 및 출력으로 “dict”를 사용하므로 ONNX 파일을 내보낼 수 없습니다.

원본 OpenPCdet에서 ONNX를 내보내기 위해 모델을 수정했습니다 (그림4).

Image shows an ONNX model in CUDA-Pointpillars, which was exported from OpenPCDet and simplified by onnx-simplifier.
그림 4.CUDA Pointpillars의 ONNX 모델 개요

전체 ONNX 파일을 다음과 같은 섹션으로 나눌 수 있습니다.

  • Inputs: BEV 피쳐 맵, 좌표 코디네이션, 파라미터. 이것들은 모두 Preprocessing 과정에서 생성되었습니다.
  • Outputs: 클래스, 박스(Box), Dir_class. 이들은 Post-processing를 통해 해석되어 경계 상자(Bounding box)를 생성합니다.
  • ScatterBEV : TensorRT 플러그인으로 사용할 수 있는 Pointpillar(1D)을 2D 이미지로 변환합니다.
  • Others : TensorRT에서 지원합니다.
Image shows how to scatter point pillars into 2D image for 2D backbone, which detects objects.
그림 5.2D 백본(Backbone)용 2D 영상으로 Pointpillar 데이터를 산란(Scatter)합니다.

Post-processing

Post-processing는 TensorRT 엔진(class, boxdir_class) 및 경계 상자의 출력을 해석합니다. 그림 6에서 파라미터의 예시를 확인할 수 있습니다.

Image shows members of a bounding box and their physical significance.
그림 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
 
표 1.플랫폼 및 성능 테스트

CUDA PointPillars를 시작하세요

이 게시물에서는 CUDA PointPillars가 무엇인지, 포인트 클라우드의 객체를 감지하기 위해 사용하는 방법을 보여 줍니다.

본 OpenPCDet은 ONNX를 내보낼 수 없고 TensorRT는 성능이 낮은 소형 작업이 너무 많기 때문에 CUDA PointPillars를 개발했습니다. 이 프로그램은 OpenPCDet 훈련의 본체 모델을 특수한 ONNX 모델로 내보내고 TensorRT를 통해 ONNX 모델을 추론할 수 있습니다.

지금 CUDA PointPillars를 다운로드하세요.

Discuss (0)

Tags

답글 남기기