cb
[논문 리뷰] VoxelNet 본문
Voxelnet: End-to-end learning for point cloud based 3d object detection
Zhou, Yin, and Oncel Tuzel. "Voxelnet: End-to-end learning for point cloud based 3d object detection - CVPR 2018
https://arxiv.org/pdf/1711.06396
0. Abstract
자율 주행 네비게이션, VR 등에 적용되기 위해 3D point clouds은 정확한 detection을 해내야 함
이전 연구들에서는 sparse한 LiDAR point cloud를 RPN으로 다루기 위해 bird-eye view와 같은 hand-crafted feature extractions를 사용함
→ manual engineering을 줄이기 위한 VoxelNet(a generic 3D detection Networt) 제안
이는 feature extraction과 bounding box prediction을 single stage에 처리하여 end-to-end 학습이 가능
Point clouds를 3D voxel로 변환하고, VFE(voxel feature encoding) layer를 통해 feature로 변환
volumetric representation을 바탕으로 RPN을 통한 detection
KITTI car detection benchmark에서 SOTA 성능을 거둠
1. Introduction
autonomous navigation, housekeeping robots, augmented/virtual reality 등에서 Point cloud 기반 3D object detection이 중요
Image based detection과 다르게, LiDAR는 depth information을 통해 물체의 위치를 정확히 localize할 수 있고, 형태를 characterize할 수 있음
LiDAR point clouds는 sparse하고, variable density를 가진다는 단점이 있음 → 이를 해결하기 위해 manually crafted feature representation이 사용되어 왔음
하지만 이와 같은 manual engineering은 3D shape information을 효과적으로 얻을 수 없고, detection task에서 다양한 불변성을 요구함
major approach는 hand-crafted features를 machine-learned feature로 옮기는 것
그로부터 제시된 PointNet은 point-wise feature를 end to end학습할 수 있도록 했음
또, 그의 향상된 버전, PointNet++에서는 그가 local structures를 각기 다른 scale에서 얻을 수 있도록 하였음
하지만 이는 computatinal cost가 높고 memory를 많이 요구함
RPN도 dense한 데이터를 요구하고, image, video와 같은 organized된 형태를 요구함
→ a generic 3D detection framework인 VoxelNet을 제안
VoxelNet은 point clouds에서 feature representation을 학습하고, 동시에 end to end 학습을 통해 정확한 3d bounding box를 예측할 수 있음

VFE(voxel feature encoding) layer를 통해 point-wise features를 3d voxel로 옮기고 3d convolution을 통해 local voxel features를 통합 (transforming the point cloud into a high-dimensional volumetric representation), 최종적으로 RPN을 통해 detection 수행
→ sparse point structure을 잘 다루고, voxel grid에서도 parallel processing을 가능케 함
bird’s eye view detection과 3D detection task에 대해 VoxelNet을 evaluate
- avoids information bottlenecks
- benefits both from the sparse point structure and efficient parallel processing on the voxel grid
- KITTI benchmark SOTA in LiDAR-based car, pedestrian, cyclist detection
2. Architecture

three functional blocks:
(1) Feature learning network
(2) Convolutional middle layers
(3) Region proposal network
2.1 Feature Learning Network
- Voxel Partition
point cloud를 입력으로 받으면, 그를 3D voxel space로 위치시킴
point clouds가 D, H, W의 차원으로 3D space로 들어갔다고 가정(각각은 Z, Y, X축)
각각의 복셀은 v_D, v_H, v_W의 사이즈를 가짐
- Grouping
voxel을 기반으로 각 포인트들을 grouping할 것
거리, occlusion, 물체의 상대적인 pose, non-uniform sampling 같은 요소로 인해 LiDAR point cloud는 sparse하고 highly variable point density를 가짐
그렇기 때문에 grouping을 수행하고 나면 한 voxel에는 여러 포인트가 있을 수도, 포인트들이 하나도 없을 수도 있음
- Random Sampling
LiDAR point cloud가 ~100k개의 포인트로 이루어져 있다고 할 때, 이를 한 번에 다 처리하는 것은 메모리나 계산 효율을 떨어뜨림
→ T개의 랜덤한 샘플을 샘플링해서 계산 효율, 복셀 당 포인트 imbalance 문제를 해결(reduces sampling bias, more variation)
- Stacked Voxel Feature Encoding

VFE layer를 연쇄적으로 처리하는 것
(사진에서 볼 수 있듯이) 한 복셀에 대해 인코딩 과정을 계층적으로 수행함
V를 t개의 라이다 포인트를 가진 복셀이라고 하자
$V = \{p_i = [x_i, y_i, z_i, r_i]^T ∈ R^4 \}_{i=1...t}$
복셀 안에 들어있는 라이다 포인트 p들은 XYZ 좌표를 갖고, r은 reflectance을 의미함
먼저, 모든 점의 centroid를 계산하기 위해 local mean을 계산함
그런 다음 각 포인트 p_i를 centroid에 맞춰 scailing한 새로운 점을 추가해 V_in을 만들어줌
$V_{in} = \{ \hat{p_i} = [x_i, y_i, z_i, r_i, x_i-v_x, y_i-v_y, z_i-v_z]^T ∈ R^7 \}_{i=1...t}$
각 hat{p_i}는 FC(linear+batch norm+ReLU) 를 통해 피처 공간으로 변환되고, point features($f_i$) 를 얻음
그런 다음 element-wise maxpool을 진행하여 복셀을 만들기 위한 locally aggregated feature($\tilde{y}$)을 얻음
→ 각 $f_i$와 $\tilde{f}$를 concat하여 $f_i^{out} - [f_i^T, \tilde{f}^T]^T ∈ R^{2m}$ 을 얻음
이는 곧 복셀 하나하나를 의미하게 되고, $V_{out} = \{f_i^{out}\}_{i...t}$ 를 얻을 수 있게 됨
모든 non-empty voxels는 같은 과정으로 인코딩됨
VFE-i(c_in, c_out)은 i번째 VFE 레이어를 의미함
linear layer는 c_in * (c_out/2) 의 크기로 출력을 내놓고, 최종적으로 concat된 output은 c_out의 크기로 출력됨
VFE-n까지 다 거치고 나면 최종 feature는 FC, Maxpool을 거쳐 최종적인 Voxel wise-feature로 변환됨
- Sparse Tensor Representation
non-empty voxels를 모두 처리하고 얻은 voxel-wise feature는 4D(C * D’ * H’ * W’)로 변환됨
point clouds가 ~100k의 points를 가진다고 해도, 90% 이상의 복셀은 거의 비어 있을 것
위 과정에서 non-empty voxel들만 처리했기 때문에 해당 방법은 memory usage, computational cost에서 효율
2.2 Convolutional Middle Layers
각 convolutional middel layer가 3d convolution, BN, ReLU를 적용함
→ receptive field를 넓히면서 voxel wise features를 통합할 수 있음
2.3 Resion Proposal Networks
RPN이 object detection에서 top-performing
feature learning network, convolutional middle layers와 RPN을 합하여 end-to-end 학습이 가능하도록 함
RPN의 입력은 conv mid layers에서 얻어진 마지막 feature map

네트워크는 fully convolutional layers를 가지는 3개의 블록으로 구성되어 있음
각 레이어 블록: feature map을 절반으로 downsample, BN, ReLU
고정된 사이즈로 모든 블록을 upsample, high resolution feature map을 위해 concat
→ 최종적으로 probability score map, regression map 의 두 갈래로 나눠져 각각을 학습하게 됨
Loss Function
class score, bbox regression 총 두 가지에 대한 손실함수를 의미
grid 마다 2개의 anchor box가 존재하게 되어 cls 채널 2개, bbox regression 채널 14개를 가지게 됨
→ anchor box와 GT box의 IOU를 구하고, 이 값이 threshold를 넘으면 positive anchor, 넘지 않으면 negative anchor라 함
a^pos: set of N_pos positive anchors
a^neg: set of N_neg negative anchors
ground box parameter: (x^g, y^g, z^g, l^g, w^g, h^g, θ^g)
positive anchor parameter: (x^a, y^a, z^a, l^a, w^a, h^a, θ^a)

p^pos, p^neg는 각각 a를 softmax 거친 출력
u, u^*는 regression 출력

처음 두 term은 cls를 위한 term, 세 번째는 regression을 위한 term
Experiments

Wrap Up
VoxelNet은 인용 수도 4000?개가 넘을 만큼 아주 유명한 논문
Voxel을 활용하여 3d segmentation을 진행했는데, 아무런 point가 들어있지 않은 voxel에 대해서는 연산을 하지 않아 computational cost, memory 사용량에서 효율을 얻었다는 점을 꼭 기억할 것!
또, 전 과정이 end-to-end로 진행된다는 사실 기억하기
'ai - paper' 카테고리의 다른 글
[논문리뷰] One-2-3-45 (1) | 2024.09.28 |
---|---|
[논문리뷰] Pix2Pix (0) | 2024.09.28 |
[논문 리뷰] Frustum PoinNet (0) | 2024.08.02 |
[모델 정리] 딥러닝 논문리뷰 및 정리 II (0) | 2024.05.07 |
[모델 정리] 딥러닝 논문리뷰 및 정리 I (0) | 2024.05.07 |