2019 ICCV 논문으로, point cloud registration을 다룬 논문이다.
Registration
논문에 대해 살펴 보기 전에 간단하게 Registration이 어떤 task인지 보고 넘어가자. 관찰 시점이 다른 두 영상을 정합하는 과정이 registration이다. 그림을 보면 관찰 시점이 다른 두 이미지에서 서로 같은 point를 잡아 정합을 한 것을 볼 수 있다.
일상에서 가장 쉽게 찾아 볼 수 있는 예시는 파노라마 사진을 찍을 때이다. 처음 찍은 이미지를 중심으로 카메라를 이동할 때마다 이미지상 같은 위치와 정합을 하는 방식이다. 파노라마 사진 외에도 MRI나 CT 같은 의료영상에서 병변의 진행상황을 정량적으로 측정할 때나, 자율주행에서 사용되고 있다.
논문의 task인 point cloud에서의 registration을 생각해보자. 일반 2D 이미지와 다르게 3D 데이터여서 transform에 의한 모호성이 적다는 특징이 있다. 따라서 rigid transformation만 고려하면 된다. Rigid transformation은 점들간의 거리가 유지되는 transformation을 말한다. 즉, Rotation과 Translation으로만 이루어진 transformation이다.
앞으로 논문리뷰에서 다룰 Point Cloud 표기이다. point cloud 가 rotation 와 translation 를 통해 point cloud 가 만들어진 상황을 가정하고, 우리는 를 target으로 학습을 진행 할 것이다.
Traditional method - ICP ( Iterative Closest Point)
기존의 point cloud registration algorithm인 ICP algorithm을 살펴보자. Deep Closest Point 논문에서도 중요한 부분이니 이해할 필요가 있다.
우선 설명을 위해 두 point cloud에 각각 대응되는 점이 무엇인지 알고 있다고 가정하고 시작하자. 그러면 우리의 error는 위의 식과 같아진다. Error를 최소화하면(noise가 없이 정확히 대응하는 점이라면 0이 되면) target transform을 찾을 수 있게 된다. 이는 closed form으로 solution이 주어진다. solution의 V와 U matrix는 cross covariance matix의 SVD(Singular Value Decomposition)를 통해서 구해진다.
그럼 이제 처음에 했던 가정을 없애 보자. point 와 대응되는 point 를 구하는 함수 가 필요하다. ICP에서는 단순히 현재 초기화된 을 거친 point 와 제일 가까운 point 를 대응 되는 점이라고 가정하는 방식을 채택하였다. 그렇게 각각 대응되는 점을 구한 후 STEP 2에서 closed form으로 을 구하고, 구한 를 이용해서 STEP 1에서 서로 대응되는 point를 다시 구하는 방식으로 반복하게 된다.
- 문제점
의 초기값에 따라 이 잘못 추정 될 가능성이 높다. 따라서 위의 그림처럼 local optima에 빠지기 쉽게 된다.
-해결책
정확한 을 구할 수 있다면 global optima는 closed form으로 구할 수 있다. Deep Closest Point에서는 두 point cloud의 feature를 학습해서 을 잘 추정할 수 있지 않을까 라는 아이디어에서 시작하게 된다.
Deep Closest Point
그러면 Deep Closest에서는 을 어떻게 학습 시키는지 본격적으로 살펴보자. 우선 두개의 point cloud에서 point feature를 뽑아줄 Backbone을 보자.
- PointNet vs. DGCNN
논문 저자는 backbone으로 PointNet과 DGCNN을 비교한다. [PointNetLK: Robust & Efficient Point Cloud Registration using PointNet] 논문에서 PointNet을 사용하여서 비교를 한 것으로 보인다.
PointNet은 point feature를 independent하게 뽑는다는 것이 특징이다. global feature는 max pool을 이용해서 point cloud의 전체적인 feature를 뽑게 되고, 그 feature를 concat해주는 방식으로 point feature를 뽑는다.
하지만 DGCNN의 경우에는 local geometry를 고려해서 local geometric feature를 뽑는다는 것이 특징이다. Registration task는 두 point cloud의 local feature들의 연관성을 찾아야한다는 특징을 생각해보면, DGCNN이 더 효과적일 것이라고 기대할 수 있다.
진행된 Ablation Study을 보면 Backbone으로 DGCNN을 사용한 Error가 더 작은 것을 볼 수 있다.
- Attention
DGCNN으로 뽑힌 feature 를 Transformer 구조에 넣어주게 된다. Transformer 구조를 사용한 이유에 대해서 저자의 의도뿐 아니라 내가 생각한 나름의 의미들이 있다.
우선 는 각각의 pointcloud에서 independent하게 뽑혀진 feature이다. task 특성상 두 서로의 특징을 참고하여 어느 부분이 대응되는 point일지 참고하는 과정이 필요하다. 따라서 feature를 섞는 과정으로 이를 충족 시킬수 있을 것이다.
그렇다면 왜 하필이면 Transformer 구조인가? Transformer의 attention의 의의를 생각해보자. encoder에서 encoding된 feature와 decoder에서 들어오는 input간의 유사도를 살펴서 그 유사도를 이용해서 feature를 뽑아내게된다. 이 과정을 가 를 참고하여 본인의 feature를 다시 뽑는 과정이라고 생각해보면, encoder에 를 넣어 Y의 point feature들을 뽑고, decoder에 를 넣어 Y의 point들의 feature와의 유사도를 반영할 수 있게되는 것이다. 이 과정을 통해 대응되는 point들의 feature들이 비슷해지도록 학습이 가능해진다.
결론적으로 각각 서로의 feature를 참고하여 각각의 feature를 뽑게된다.
논문의 tranformer module 그림을 보면, x에대한 feature를 뽑을 때 를 encoder에 넣고, 를 decoder에 넣은 것을 볼 수 있다. 하지만 의미상으로는 를 encoder에 넣는 것이 맞다고 생각한다. 또한 github에 공개되어 있는 코드에서도 가 encoder로 들어가는 것으로 확인하여서 그림을 잘 못 그린 것으로 판단된다.
transformer 구조를 제외한 구조(DCP-v1)과 transformer를 사용한 구조(DCP-v2)를 비교하는 ablation study를 진행하였다. 확실히 transformer를 사용한 경우가 더 성능이 좋은 것을 확인할 수 있다.
- Pointer Generation
이제 뽑아낸 point feature를 통해 를 학습 시킬 것이다. 방법은 간단하다 Transformer를 통해서 뽑아진 각 point feature들이 서로 대응되는 점이면 feature들도 비슷할 것이라는 방식이다. 하지만 학습을 위해서는 한 점으로 값이 정해지면 안되기 때문에 softmax를 이용해서 대응되는 점을 생성하게 된다.
dot product를 유사도라고 설명을 한 것이고, softmax를 통해서 와 모든 점 에 대한 유사도를 구하게 되고, 그 유사도를 이용해 대응되는 를 생성하게 된다. 이를 학습하기 위해 앞서 ICP method 설명에서 본 SVD를 이용한 closed form solution을 이용하게 된다.
- SVD Module
Pointer Generation 파트에서 대응되는 point를 찾았고, 그를 이용해서 closed form prediction solution을 찾을 수 있다.
predict 를 ground truth 를 이용해서 학습을 진행하게 되는데, 학습을 위해서는 end to end로 미분이 가능해야한다. 문제가 될 수 있는 부분은 closed form으로 prediction을 할 때 SVD를 하는 과정이다. 이는 위의 논문에서 미분 방법을 소개해두었고, 즉 미분이 가능하고 tensorflow나 pytorch에 간단하게 사용 가능하도록 구현이 이미 되어있다고 한다.
최종 Loss는 위와 같이 MSE를 사용하게 된다.
SVD를 사용하여 prediction한게 단순히 MLP를 사용한 것 보다 성능이 더 잘 나온다는 ablation study도 진행하였다.
여기까지 Deep Closest Point Architecture에 대해서 알아보았다.
Experiments
- Dataset : ModelNet 40
- Transform data:
- Rotation :
- Translation :
- Adam optimizer
ModelNet 40 dataset은 40개의 category로 이루어진 데이터다. Table 1은 모든 카테고리를 다 train에 사용한 결과이고, Table 2는 20개의 category에만 학습한 결과이다. 전자의 경우 논문에서 제시한 방법이 성능이 가장 좋지만, 후자의 경우에는 FGR model이 조금더 성능이 좋다. 딥러닝이 data driven한 것을 고려하면 나름 선방한 것으로 보인다.
Gaussian Noise
각 point에 의 노이즈를 추가한 실험 결과이다. 확실히 DCP가 성능이 더 좋은 것을 볼 수 있다. Rule based algorithm과 달리 DCP는 softmax로 point generation을 하므로 noise에 더 robust할 수 있었던 것으로 생각된다.
ICP & DCP
기존 방식 ICP의 문제는 초기값에 너무 의존한다는 점이었다. 그래서 논문에서는 DCP를 이용하여 을 구하고, 그 값을 초기값으로 ICP를 사용하면 더 좋은 registration을 기대할 수 있다고 주장하였다. DCP 방법에 ICP를 postprocessing에 사용한다고 생각해도 된다.
Inference time
Inference time에서도 다른 method 보다 빠른 것을 확인할 수 있다. attention을 사용하지 않은 DCP-v1 모델도 다른 method들 보다 성능이 좋았던 것을 생각해보면 의미가 있는 inference time이다.
Conclusion
- PointNet 대신 DGCNN을 사용하고, Attention을 사용해서 pointcloud 간의 feature를 섞어주는 등 의미적으로 풍부한 논문이었다.
- Ablation study가 장황하지 않고 compact하게 잘 되어 있는 논문이었다.
- Transformer가 나름 중요한 contribution인데, 구현 디테일이 없다는게 아쉬웠다.
- Point generation이 결국은 대응되는 point feature들이 비슷해지게 학습이 될 것이고, 그 과정이 transformer attention에서 큰 도움을 받았을 것이어서 attention을 visualizing해주었으면 좋은 결과가 있었을 것 같다는 생각을 했다.
Uploaded by Notion2Tistory v1.1.0