본문 바로가기

논문 리뷰

[논문 리뷰] PointGroup: Dual-Set Point Grouping for 3D Instance Segmentation

PointGroup은 2020 CVPR에 accept된 point cloud instance segmentation 논문이다.

PointGroup

PointGroup은 보는 것과 같이 RGB indoor pointcloud data에서의 Instance segmentation task를 다룬다. point cloud에서 point feature를 뽑아내 sementic segmentation을 진행하고, clustering을 하여 instance를 구분한다. 단순히 rule based clustering algorithm을 사용하므로 clustering이 힘든 점을 감안하여 point들을 instance의 center로 모아주는 offset shift를 학습시킨다.


Backbone Network

point cloud backbone에는 다양한 방법이 있다. 하지만 이 논문에서는 가장 간단하게 생각해낼 수 있는 voxelization 후 CNN을 사용하는 방법을 채택했다. point cloud를 voxelize하면 생길 수 있는 문제가 두가지가 있다.

하나는 한 voxel에 두개 이상의 point가 존재할 수 있다는 점이고, 이는 average pooling으로 해결했다고한다. 다른 하나는 point cloud 데이터 특성상 빈 voxel이 너무 많아진다는 것이다. 이 것은 sparse convolution으로 해결했다.


Sparse Convolution

빈 공간이 많은 data에 convolution을 적용하면 위의 그림처럼 convolution이 진행되게된다.

data가 있는 곳만 convolution을 진행하면 feature가 sperse해지지 않을 뿐더러 cost efficient하다. 이렇게 data가 있는 곳만 convolution을 진행하는 것이 "Sparse Convolution"이다.

출처: https://github.com/facebookresearchSparseConvNet


이렇게 뽑혀진 point feature는 Sementic Branch와 Offset Branch로 들어가게 된다.

  1. Semantic Segmentation Branch

    feature를 단순히 MLP를 이용하여 semantic segmenation을 진행한다.

  1. Offset Prediction Branch

Offset shift는 이 논문의 주요 contribution이다. 현재 우리의 상황은 semantic segmentation branch를 통해 semantic segmentation만 되어 있는 위쪽 그림의 상황이다. 파란색의 염소들을 아래 처럼 clustering을 하는것은 물체들끼리 겹쳐있어서 어렵게 된다. 3D의 경우에도 물체들 끼리 붙어있게되면 instance들 끼리 clustering 하는 것은 어렵게 된다.

출처 : Qi, Charles R., et al. "Deep hough voting for 3d object detection in point clouds." Proceedings of the IEEE/CVF International Conference on Computer Vision. 2019.

그래서 본 논문에서는 VoteNet에서 사용한 방식을 사용하게 된다. instance 들의 center와의 점들의 거리를 ground truth로 offset shift를 학습하는 것이다. VoteNet과의 다른점이라면, VoteNet은 bounding box의 center를 사용하지만, PointGroup은 instance point들의 average를 center로 사용한다.

사용되는 Loss는 위와 같은데, 아래에 offset direction loss가 추가된 것을 볼 수 있다. 이는 instance 들 간의 크기가 제각각이어서 정확한 shift regression이 힘들어서 center로의 direction을 추가적으로 학습 시켜준 것이다. cosine similarity를 사용하였다.

Clustering Part

Clustering은 단순한 rule based algorithm을 사용한다. 점들 간의 거리가 r(hyper parameter)보자 작으면 같은 cluster로 판단하는 방법이다. 우리는 offset shift를 통해 instance들을 모아뒀으므로 조금더 잘 clustering 될 것이다. 여기서 주목할 점이 있는데 shift된 point cloud 뿐만아니라 original point cloud도 clustering을 진행한다는 것이다. 논문에서는 shifted point cloud가 cluster들을 더 잘 clustering하게는 해주지만 boundary 부분에 강인하게 하기 위해 original point cloud도 clustering을 해준다고 주장하였다. 결과적으로, 두 가지 cluster 방식으로 뽑힌 cluster 모두를 ScoreNet에서 사용하게 된다.

original에서의 clustering(P)와 shifted에서의 clustering(Q)에 대한 ablation study이다. P가 boundary를 더 잘 잡아내 준다는 것이 정확히 어떤 점인지에대한 설명은 잘 안나와 있지만, Q를 썼을 때 instance들이 확실히 더 잘 구분되는 것을 볼 수는 있다. 또한 P와 Q를 같이 사용했을 때 더 좋은 결과가 나왔다는 것을 실험으로 증명하였다.

ScoreNet

Backbone에서와 마찬가지로 cluster 별로 voxelization을 하여 UNet을 사용한다. input은 Backbone에서 뽑은 point feature들을 사용하고, output은 cluster의 confidence, 즉 score를 뽑아낸다. Detection task에서 주로 사용되는 region proposal을 생각하면 된다.

Target Score는 cluster가 가장 많이 겹치는 instance를 기준으로 iou가 θl\theta_l보다 작으면 instance 예측을 못했다고 판단, θh\theta_h보다 높으면 있는 instance로 판단하고 그 사이는 linear하게 target score를 설정해준다. Loss는 BCELoss를 사용한다.

Inference

RGB point들이 Backbone을 거치고 Sementic segmantation이 되고, cluster들의 score가 뽑아진 상황이다. 이제는 이 정보들을 이용해 inference를 해야한다. inference는 단순하게 detection에서 많이 사용하는 방식인 NMS(non-maximum suppression)을 사용한다. 겹치는 cluster가 있으면 score가 더 큰 cluster만 남기고 나머지는 버리는 방식이다. 제대로 prediction을 했다면 PointGroup에서는 두가지 (original, shifted) proposal이 있으므로 두개의 cluster 중 하나만 고르게 될 것이다.


Experiments

  • 최종 Loss는 4가지 Loss를 weight 없이 sum해서 사용한다.
  • Datasets
    • ScanNet v2
    • S3DIS
  • voxelization voxel size : 0.02m
  • clustering radius r size : 0.03m
    Ablation Study: clustering radius r

ScanNet v2

S3DIS


Conclusion

  1. two-branch network를 사용하여 semantic label과 per-point offset vector를 각각 학습하였다.
  1. clustering을 original point coordinate와 offset-shifted point coordinate 두개 모두에서 진행하여 robustness를 챙겼다.
  1. ScoreNet을 사용하여 candidate cluster를 평가하였다.