상세 컨텐츠

본문 제목

[논문 리뷰 스터디] PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud

심화 스터디/논문 리뷰 스터디

by Imjjun 2023. 3. 23. 18:06

본문

 

Written by 16기 임정준

Introduction

본 모델은 2-stage Detector로, 1) bottom-up 3D proposal generation + 2) refining proposals in the canonical coordinates 두 가지 stage로 구성되어 있다. 다른 RGB Image나 Voxel method와 같은 다른 input을 활용하는 대신, 오직 Point Cloud만을 활용해서 stage-1에서 해당 input에 대한 3D Proposal을 생성하고, 이를 바탕으로 stage-2에서 각 proposal의 pooled(추후 언급되겠지만, pooling layer가 중요한 포인트로 사용됨) point들을 canonical coordinates로 변환하여 refinement를 수행하여 local spatial feature를 잘 학습할 수 있다.

 

Introduction

 

Introduction에 대한 내용은 결국. input에 대한 내용과 귀결되는데 다른 모델들의 경우 2D 이미지, 즉 2D-CNN 모델을 통해서 image feature를 일정 부분 조합하여 성과를 내는 방식이었다. SOTA 모델의 경우, 2D detection framework를 활용하여 point clouds를 새가 보는 것처럼 즉, 위에서 보는 방식이나 전면부 이미지, 혹은 Voxel의 형태로 변환하여 Detection Task를 수행하였는데, 이는 quantization 간 정보 손실이 크고 최적화된 방식이 아니라고 할 수 있다. 

 

* 3D Computer vision terms 

- Point Clouds: LiDAR 센서로 들어오는 데이터로, 센서를 통해 들어온 points들에 대해 3D 정보 획득

- Voxel: 격자 형태로 3D 객체를 표현한 데이터

=> 3D 데이터들의 경우, 일반적인 2D 이미지와는 다르게 Sparse Matrix이기 때문에 모델 학습 성능/GPU 가속에 있어 절대 긍정적인 영향을 줄 수 없어 이 input data에 대한 전처리도 연구 대상에 대부분 포함되며, 본 모델에서는 이를 위해 1) Bottom-up 3D proposal generation stage가 제안됨.

 

Architecture

A) Stage-1

상기 그림의 윗부분이 a) Bottom-up 3D proposal generation에 해당하는데, PointNet++가 backbone(Encoder, Decoder)으로 사용되어 point-wise feature vector를 만들어준다. 그리고 이 feature들을 활용하여 Bin-based 3D Box generation / Foreground Point Segmenetation을 각각 수행한다. Training 시에는 3D segementation GroundTruth를 알고 있기 때문에 두 모델을 병렬적으로 수행시키고, Inference 시에는 Bin-based 3D Box generation에 대한 label이 없기 때문에 Foreground Point Segmentation이 먼저 수행되고 해당 결과가 다시 box generation의 input으로 들어가게 된다. 

 

- Bin-based 3D Box generation

본 generation은 2D Detector(특히, 2 stage 계열 detector)들과 유사하게 3D proposals을 생성한다.

여기서 loss를 크게 center() localization loss, size() estimation loss, orientation() loss로 세가지로 나눌 수 있으며, 그리고 center localization loss( loss와  loss로 나눌 수 있다. center localization은 상기 그림과 같이  축을 discrete한 bin들로 쪼개서 loss 계산을 수행한다.

 

center localization loss:

*여기서 bin이란 x/y/z 격자로 쪼개어진 차원에서 일반적으로 1*1*1 box 하나를 의미한다.

localization:

(1)bin-based classification: 어떤 bin에 물체가 속하고 있는지 찾는다.

(2)residual regression: bin 내의 regression(refinement)를 수행하여 더 정확한 위치를 조정하는 것이다.
 방향 center localization: (x,z)에서 classification이 수행되었기 때문에 smooth L1 Loss로 위치에 대한 loss만 계산

size() estimation loss:

절대적인 사이즈를 기준으로 하는 것이 아니라 물체의 평균 크기에 대한 Residual을 활용하여 이를 smooth L1 Loss로 계산한다(ResNet과 전체적인 원리는 비슷).

orientation() loss:

( localization loss의 (2)와 유사하게,  개(논문에서는 n=12로 구현)의 bin으로 쪼개고 bin 안에서의 residual을 regression loss를 계산한다.

 

- Foreground Point Segmentation

 

Foreground Point Segmentation의 특징은 PointNet++에서 나온 Segmentation Feature들을 foreground point/background point로 나누어 Box generation에 해당 point들을 활용한다는 점이다.

저자들은 2차원 공간에서와 달리, 3차원 공간에서의 경우 오히려 Bounding Box가 겹치는 일이 일어나지 않기 때문에, 3D Bounding box를 segmentation label로 활용할 수 있을 것이라고 가정하고 모델을 학습시킬 수 있었다고 언급하였다. 실제로, 이를 통해 Segmentation Loss를 계산하고, 본 네트워크가 point들을 foreground/background로 분류하였다. 

 

Foreground Point Segmentation의 경우, foreground보다 background가 더 많은 구조이기 때문에 일반적인 loss가 아닌 Focal Loss를 활용하여 데이터 불균형 문제를 해소한다. 또한, training 시에는 ground truth box를 0.2m 씩 늘려서 경계가 겹치는 background point들에 대하여 무시하여 더 robust한 모델을 만드는데 그 목적이 있다.

 

B) Stage-2

 

 Point cloud Region Pooling를 활용하여 Stage-1의 전체적인 정보를 한꺼번에 Encoding될 수 있도록 한다. pooling을 하기 전에 proposal을  방향으로 각각 만큼 늘려주고, 모든 LiDAR point들에 대해 늘어난 proposal box 안에 있는지 아닌지를 판단하고(inside/outside test) box 내 point들과 point의 feature를 해당 box의 refinement에 사용한다. 

상기 Architecture 그림에서 점선이 어떤 정보를 가져오는지 알 수 있다.

- Point coordinates
- semantic features
- foreground/background segmentation mask: box를 임의로 키웠기 때문에, Segmentation 정보를 다시 조합해줄 필요가 있다.

- 3D RoIs from the final net of stage-1

 

그리고 해당 Pooling을 바탕으로 Canonical 3D Box refinement를 수행한다.

*Canonical Transformation

Canonical transformation은 point들의 좌표를 box proposal의 local spatial coordinates로 변환해준다. Canonical transformation을 해주게 되면 local spatial feature(지역 공간 특성)를 더 잘 파악할 수 있는데, 해당 객체를 중심으로 해당 객체가 향하고 있는 방향에 근거하여 Prediction 및 Refinement가 진행되기 때문이다. Transformation 과정은 다음과 같다. 

(1) 원점(0,0)을 box proposal의 center로 옮긴다.

(2) 새로운 좌표축을 이라고 가정한다면, 지면에 수직인 은 기존의 와 동일하게 유지하되, 은 지면에 평행임을 유지하되 은 proposal이 가리키고 있는 방향,  에 수직이 되도록 정한다.

 

하지만 이렇게 Canonical Transformation이 이루어진 객체는 그 'Depth(물체가 멀리 떨어져 있으면 LiDAR 데이터 특성상 그 수가 적을 수 밖에 없는 깊이 정보)'가 사라질 수 밖에 없고(해당 객체에 맞춰서 좌표계 변환이 이루어지기 때문에 거리감까지 담을 수 없음)' 이 정보를 담기 위하여 LiDAR 원점에서 point까지의 거리 (를 각 point마다 붙여주게 된다.

 

즉, Canonical Features는 다음과 같다.

- canonical coordinates로 변환한 p

- point의 reflection density r

- LiDAR에서 원점까지의 거리 d

- Stage-1에서 얻은 foreground/background segmentation mask m

를 모두 concat하여 MLP(Fully connected layer)를 통과시켜 (global) Semantic features와 concat할 수 있도록 차원을 맞춰준 후, 이 local spatial features와 semantic features를 concat하여 merged feature를 만든다. 이를 다시 Point Cloud Encoder로 넣어서 confidence prediciton과 Bin-based 3D Box refinement를 수행한다.

 

- Confidence prediction

* 하나의 모델이 전체 클래스별로 확률을 내는 Softmax 개념이 아니라, Class 별로 구분된 Detector 모델의 Binary Classification으로 Prediction이 이루어진다. 따라서 GroundTruth와 IoU에 따라서 Positive/Negative를 결정한다.

(1) GroundTruth Box를 3D IoU가 0.55보다 큰 Proposal에 할당한다.

(2) GroundTruth Box가 할당된 객체에는 Positive, 아닌 것에는 Negative를 할당한다.

(3) Cross Entropy Loss를 계산한다.

 

- Box Refinement

GroundTruth가 할당된 Box에서만 수행되며, Center/size/orientation에 대해서 각각 refinement가 이루어진다.

(1) Center Refinement: proposal center와 GroundTruth의 center로의 regression을 수행(stage-1의 bin-based localizaiton과 유사)

(2) Size Refinement: Average object size의 residual에 대한 Regression 수행

(3) Orientation Refinement: IoU가 0.55 이상인 proposal만 취했기 때문에 refinement 범위를 [-pi/4,pi/4]로 한정하여 수행

 

최종적으로 BEV IoU threshold=0.01로 Oriented NMS를 수행하여 최종적인 3D Bounding Box를 도출한다. 

 

Reference:
https://arxiv.org/abs/1812.04244
https://github.com/sshaoshuai/PointRCNN
https://velog.io/@intuition/PointRCNN

관련글 더보기

댓글 영역