카테고리 없음

[논문 리뷰] An Energy-Efficient 3D Point Neural Network Accelerator with Fine-grained LiDAR-SoC Pipeline Structure

-운- 2025. 6. 27. 19:29

자율주행 차량이 도로 위에서 차량, 보행자, 장애물을 실시간으로 파악하려면 강력한 기술이 필요하다. LiDAR 센서가 생성하는 3D point cloud는 주변 환경을 {x, y, z} 좌표로 나타내어 정확한 인식을 가능하게 한다. 하지만 이 데이터를 실시간으로 처리하려면 엄청난 계산량과 효율적인 하드웨어가 필요하다. L-PNPU(LiDAR-Point Neural Network Processing Unit)는 이런 문제를 해결하기 위해 설계된 하드웨어 가속기다. L-PNPU는 azimuthal bin partitioning, modified PNN algorithm, fine-grained LiDAR-SoC pipeline structure라는 세 가지 key technologies를 통해 데이터를 효율적으로 처리한다. 

3D Point Cloud와 PNN

3D point cloud는 LiDAR가 주변 환경을 스캔하여 만든 3D 데이터다. 각 포인트는 {x, y, z} 좌표로 표현되며, 도로 위의 차량, 나무, 보행자를 점들로 나타낸다. 이 데이터는 unordered, unstructured, spatially sparse한 특성을 가진다. 이런 특성 때문에 2D 이미지처럼 규칙적으로 처리하기 어렵다.

PNN(Point Neural Network)은 3D point cloud를 분석하여 segmentation(도로, 차량, 보행자 등을 구분) 작업을 수행하는 신경망이다. L-PNPU는 RandLA-Net라는 PNN algorithm을 사용한다. RandLA-Net은 random sampling으로 데이터 양을 줄이고, local feature aggregation으로 중요한 정보를 유지한다. PNN은 두 단계로 작동한다:

  • Encoder: 포인트 간 관계를 정의(kNN), 특징을 추출(shared MLP), 포인트 수를 줄임(sampling)
  • Decoder: sampling 전후 포인트 간 관계를 정의(kNN), segmentation 결과를 생성(shared MLP)

기존 시스템은 LiDAR의 100ms 스캔 시간과 외부 DRAM 액세스로 인해 실시간 처리가 어려웠다.

L-PNPU는 LiDAR의 azimuth 스캔 패턴을 활용해 이 문제를 해결한다.

LiDAR의 동작, 기존 문제점

LiDAR는 360도 회전하며 레이저를 발사해 거리 정보를 수집한다.

vertical  channel(16, 32, 64 channel)에 따라 레이저를 발사하며, 각 포인트는 {r, θ, φ} (distance, azimuth, elevation angle) 형식으로 수집된다.

(azimuth는 수평방향 회전각도, elevation angle은 수직 방향으로 발사되는 각도, 64-channel LiDAR는 수직으로 64개의 레이저를 발사하며, 각 레이저는 서로 다른 elevation angle을 가짐)

이후 삼각함수 연산을 통해 {x, y, z}로 변환된다. 

 

PNN은 encoder와 decoder로 구성된다. Encoder는 kNN(k-nearest neighbor)으로 포인트 간 관계를 정의하고 shared MLP(1x1 convolution)로 특징을 추출하며 sampling으로 포인트 수를 줄인다. Decoder는 kNN과 shared MLP로 segmentation 결과를 생성한다.

 

기존 PNN 프로세서는 몇 가지 문제를 안고 있다. Cartesian-based bin partitioning은 데이터를 x-y-z 격자로 나누었지만, spatially sparse 특성으로 인해 일부 격자에 포인트가 몰려 효율이 낮았다.

 

여기서  Cartesian-based bin partitioning이란?

3D point cloud 데이터를 x-y-z 직교 좌표계로 나누어 처리하는데, 먼저 LiDAR가 수집한 {r, θ, φ}(distance, azimuth, elevation angle) 데이터를 {x, y, z}로 변환한다(x = r·cos(φ)·sin(θ), y = r·cos(φ)·cos(θ), z = r·sin(φ)). 3D 공간을 bin이라는 고정된 격자( ex) 1m x 1m x 1m)로 분할하고, 각 포인트의 {x, y, z} 좌표를 확인해 해당 bin에 할당한다({x=2.5, y=-1.3, z=0.7}은 (2, -1, 0) bin). 이후 각 bin 내 포인트를 대상으로 kNN이나 shared MLP 같은 PNN 연산을 수행한다.

 

Farthest point sampling (FPS)은 연산 복잡도가 O(M²N)으로, 고해상도 데이터 처리에 부적합했다. 또한 360도 스캔 데이터를 DRAM에 저장한 뒤 처리하므로 지연 시간이 길었다.

 

여기서 Farthest point sampling (FPS)란?

3D point cloud에서 포인트를 점진적으로 선택하여 데이터 양을 줄이는 방식이다. 먼저 3D point cloud의 모든 포인트 중 임의의 포인트를 시작점으로 선택한다. 이후 각 반복에서 남은 포인트들 중 이미 선택된 포인트들과의 L2 distance(√((xi-xj)²+(yi-yj)²+(zi-zj)²))를 계산하여 가장 먼 포인트를 선택한다. 이러한 과정을 원하는 포인트 수(M개)만큼 반복하여 sampled 포인트 집합을 생성한다.

 

L-PNPU는 LiDAR의 azimuth 스캔 패턴을 활용해 이러한 문제를 해결한다.

 

kNN 연산이 전체 처리 시간의 77.7%를 차지하므로 이를 줄이는 것이 핵심이다

L-PNPU의 Key Technologies

L-PNPU는 azimuthal bin partitioning, modified PNN algorithm, fine-grained LiDAR-SoC pipeline structure를 통해 3D point cloud를 효율적으로 처리한다.

1. Azimuthal Bin Partitioning

LiDAR는 360도 회전하며 azimuth 방향으로 데이터를 수집한다. L-PNPU는 이 특성을 활용해 3D point cloud를 azimuth (θ)와 distance range (r)로 나누는 azimuthal bin partitioning을 사용한다.

 

기존 Cartesian-based bin partitioning은 x-y-z 격자로 데이터를 나누었지만 spatially sparse 특성으로 인해 데이터 불균형이 발생했다. azimuthal bin partitioning은 데이터를 더 균일하게 분배한다.

 

LiDAR가 azimuth 방향으로 스캔하며 데이터를 생성하므로 360도 공간을 α° 단위로 나눈다.  α=20°라면 360/20 = 18개의 azimuth 구간이 생긴다.

각 azimuth 구간 내에서 포인트를 5개 distance range(r₁, r₂, r₃, r₄, r₅)로 나눈다.

이 range는 reinforcement learning (RL)으로 최적화되어 정해진다. RL은 semanticKITTI와 nuScenes dataset을 분석해 데이터 분포와 PNN 정확도를 고려하여 최적의 range를 찾는다.

 

partitioning core가 {r, θ, φ} 데이터를 받아 {x, y, z}로 변환하고 label encoder는 distance (r)를 r₁~r₅와 비교해 bin을 지정한다.

포인트는 linked-list table (LLT) 기반 메모리에 저장되며, partitioned memory management unit (MMU)가 이를 관리한다.

Figure 3(b)는 azimuthal bin partitioning이 Cartesian-based bin partitioning에 비해 kNN 연산 부담을 줄이는 것을 보여준다

 

Modified Network Architecture

PNN의 kNN 연산은 encoder와 decoder에서 각각 수행되어 연산량이 많다 . modified PNN algorithm은 unified kNN (U-kNN)을 도입해 중복 연산을 제거한다 

U-kNN은 먼저 random sampling을 수행해 포인트에 sampled(1) 또는 non-sampled(0) mask를 부여한다.

pseudo-random number generator (PRNG)가 sampling 비율에 따라 포인트를 선택한다. 

kNN core (kNNC)는 bin 내 query point (Pi)와 reference point (Pj) 간 L2 distance(√((xi-xj)²+(yi-yj)²+(zi-zj)²))를 계산한다. index selection unit (ISU)는 k개의 nearest neighbor를 찾아 encoder index(전체 포인트 대상)와 decoder index(sampled 포인트 대상)를 동시에 생성한다. 

random sampling은 O(M) 복잡도를 가지며, FPS의 O(M²N)에 비해 효율적이다.

 

 

4 Hardware Features

4.1 Overall Architecture

L-PNPU의 hardware architecture는 LiDAR 데이터를 실시간으로 처리하도록 설계되었다.주요 구성 요소는 kNN engine (kNNE), PNN engine (PNNE), global aggregation unit (GAU), attention core (ATTC), top controller, shared on-chip memory (OMEM)다.

top controller는 Ethernet interface로 LiDAR 데이터를 받아 point buffer에 double buffering으로 저장한다.( double buffering은 한 buffer가 데이터를 처리하는 동안 다른 buffer가 다음 데이터를 수집해 지연을 줄인다)

16-bit RISC가 작업을 수행하고 network-on-chip (NoC) interface가 데이터를 전송한다. kNNE는 포인트 구조를 처리하고 PNNE는 shared MLP와 FC layer를 가속화한다. GAU는 결과를 집계하고, ATTC는 max pooling과 softmax를 수행한다. OMEM은 5개 bank로 bin 데이터를 저장한다. OMEM의 5개 bank는 azimuthal bin partitioning의 5개 bin과 매핑된다.

4.2 Details of kNNE, PNNE, and GAU

kNNE는 partitioning core와 10개 kNN core (kNNC)로 구성된다. partitioning core는 coordinate transformation unit이 {r, θ, φ}를 {x, y, z}로 변환하고, label encoder가 distance (r)를 5개 distance range에 따라 bin을 지정한다. sampling unit은 PRNG로 random sampling을 수행해 mask를 생성한다. partitioned MMU는 데이터를 LLT에 저장한다.

kNNC는 distance calculation unit (DCU)로 L2 distance를 계산하고, ISU가 encoder/decoder index table을 만든다. 이는 U-kNN을 지원해 연산을 최적화한다.

PNNE는 8개 PNN core (PNNC)로 구성된다. 각 PNNC는 8x16 PE array, adder tree, weight memory (WMEM), input point memory (IPMEM), local aggregation unit (LAU)를 포함한다.

IPMEM은 데이터를 broadcast하고, WMEM은 weight를 unicast한다.

PE array는 shared MLP를 수행하며 LAU는 concat/sum 모드로 결과를 집계한다. GAU는 3개 aggregation layer로 8개 PNNC 결과를 집계한다. 이는 bin 단위 병렬 연산을 지원한다.

5 Fine-grained Pipeline Structure

 

sensor-level pipeline은 LiDAR의 360° 스캔 완료를 기다리지 않고 α° 스캔 데이터를 즉시 처리하며 task-level pipeline은 kNNE와 PNNE를 통해 PNN의 순차 연산을 병렬화한다. bin-level pipeline은 각 bin에 대해 kNNC와 PNNE가 kNN과 shared MLP를 처리한다. azimuthal bin partitioning (ABP)은 kNN 연산 전에 완료되어야 하므로 partitioning unit과 kNNC는 순차적으로 작동하며 이후 bin-level에서 병렬 처리가 이루어진다.