Wang 2021 - DSP-SLAM - Object Oriented SLAM with Deep Shape Priors 논문 리뷰
Abstract 요약
- 기존의 SLAM이 3D sparse landmark들을 map으로써 구성하는데에 비해, 3D object shape까지 map의 요소로써 구성하는 SLAM.
- 실시간으로 동작이 가능하며, Monocular, Stereo, Stereo+LiDAR 조합으로 사용가능함.
- Input 데이터로써는 1. ORB-SLAM2를 사용해 얻어낸 3D point cloud 정보, 2. 3D shape prior 정보를 필요로 함.
- Bundle adjustment는 기존의 sparse landmark만 수행하는 것이 아닌, object에 대한 정보까지 함께 최적화를 함.
Introduction
- 많은 state-of-the-art SLAM들은 정확한 trajectory와 고품질의 geometric map을 추정할 수 있음. 이를 이용해 많은 경로추정 또는 장애물 회피 기능들이 구현되기도 함.
- 하지만 이 정보만으로는 높은 수준의 scene understanding을 달성할 수 없음. Point cloud와 같은 geometric map은 시맨틱 정보를 가지고 있지 않음.
- SemanticFusion, Suma++ 와 같은 논문들은 이를 해결하기 위해 geometric map에 시맨틱 정보를 입히는 시도를 하였음. 하지만, 이 논문들도 point cloud에서 포인트 하나하나가 어떤 class에 해당하는지만 구분할 뿐, object 자체를 다루지는 않았음. 즉, 특정 class에 해당하는 object가 몇개가 있는지, 특정 object instance에 대한 정보가 전혀 없었던 것.
- 이를 넘어서는 개념이 object-aware SLAM이 됨. Object-aware SLAM은 object가 존재한다는 것을 인지할 수 있어야하며, SLAM으로써 object에 대한 정보를 frontend/backend에서 처리할 수 있어야함.
- 초창기 object-level SLAM는 한계점이 분명했음.
- 예를 들어 SLAM++ 같은 경우는 object에 대해서 정확하게 shape을 알고 있어야했고,
- MaskFusion이나 MID-Fusion, Fusion++와 같은 경우는 시맨틱 정보만 가지고 있고 shape에 대한 정보가 전혀 없었기에, shape에 대한 정보는 완전 자체적으로 전부 추론해야했음.
- DSP-SLAM은 이를 해결하기 위해 shape prior - 즉 특정 class의 물체의 shape에 대해 template을 학습을 했음. 이 template은 latent code
로써 존재하고, generative model 를 통해 완성된 3D dense model로 디코딩 될 수 있음. - 이 방법에 대한 장점은 극명함. Partial view - object를 부분적으로만 바라봤음에도 generative model을 통해 나온 결과는 완성된 3D model이 나오게 됨. 또한, latent code는 굉장히 컴팩트한 데이터이기 때문에 back-propagation을 통해 충분히 실시간으로 업데이트 될 수 있음.
- DSP-SLAM은 ORB-SLAM2 를 이용해 카메라 트랙킹과 sparse mapping을 백본으로써 사용함. 여기서 실시간으로 생성되는 sparse map에 latent code를 끼워맞춰보면서 object instance를 찾아내고, 이후 3D surface consistency와 rendered depth loss를 이용해서 정확한 shape을 찾아냄.
- 이러한 파이프라인을 택함으로써 1. 기존의 ORB-SLAM이 제공하는 trajectory estimation + sparse mapping 기능도 그대로 사용할 수 있으며, 2. Dense 3D object shape을 얻어낼 수 있음.
- Node-SLAM과 같은 경우도 실시간으로 shape prior를 사용하기 때문에 비슷해보일 수 있지만, Node-SLAM은 RGB-D SLAM임. DSP-SLAM은 monocular, stereo, stereo+LiDAR 사용 가능.
- FroDO 는 monoucular에서도 돌아갈 수 있지만, DSP-SLAM 처럼 실시간으로 돌지 못함.
Related works
- 초창기 Object-aware SLAM
- SLAM++
- 카메라 포즈와 오브젝트 포즈에 대한 정보를 기반으로 한 pose graph를 제안
- Object shape에 대한 정보를 사전에 스캔을 통해 얻어 데이터베이스를 만들어놔야함
- 이 데이터베이스를 기반으로한 3D detector와 ICP 알고리즘을 기반으로 object pose를 얻어내고, pose-graph optimization을 통해 SLAM 진행.
- 비슷한 방법들도 제안되었지만, 결국 이와 같은 instance-based approach는 다양한 object를 커버하기 어렵고 또 사전에 object model을 준비해야한다는 단점이 있다는 점을 알게 되었다.
- SLAM++
- 최신 object-aware SLAM
- Known-instance database 방식을 사용하지 않는다.
- QuadricSLAM의 경우, object들을 검출한 후, 하나의 3D 타원 (ellipsoid) 랜드마크로 취급한다.
- CubeSLAM의 경우, 단안 이미지에서 보인 detection 결과를 기준으로 3D bounding box (cuboid)로 취급하며, 추후 bundle adjustment를 통해 object / camera pose 최적화를 수행한다.
- 이런 방법들은 다양한 클래스의 물체들을 검출할 수 있는 generalized object detector가 있을 때 사용하기 좋지만, object들마다 가지고 있는 특성들 (i.e. semantic prior)를 사용하지 못한다.
- Class 정보만으로는 geometry 정보를 알 수 없다. 예를 들어, ‘자동차’라는 class에 대해 appearance를 학습해서 이미지 기반 object detection을 수행할 수 있지만, 자동차에 바퀴가 4개가 달려있다던지, 앞에는 후드가, 뒤에는 트렁크가 있다던지 하는 geometry에 대해 알고있지는 않다.
- 3D Shape prior를 이용해 shape 최적화를 하는 방법
- 3D shape에 대한 정보를 컴팩트한 벡터 형태로 저장을 할 수 있다. 주로 autoencoder 와 같은 방법을 사용해서 latent vector / shape embedding 형태로 압축을 하고, 이 벡터를 최적화함으로써 원하는 파라미터를 업데이트한 후, decoder를 사용해서 3D shape을 만드는 방법이다.
- 논문에서 이야기하는 방법들로는 variational autoencoder를 사용한다거나, PCA를 사용해서 shape embedding에 대한 중요한 정보만 뽑아내는 방법을 소개한다.
- 이 중, DeepSDF에 집중하는 편이다.
- DeepSDF는 특정 object category에 대해 autoencoder를 사용해서 signed distance function (SDF) 형태로의 shape을 만들 수 있는 기능이다.
- 기존의 논문은 single view 이미지를 보고 shape을 추론하는 방법이였다.
- DSP-SLAM에서도 DeepSDF 방식을 이용하지만, sparse point cloud를 input으로 사용해서 SLAM 방식으로 만든다는 점이 차이가 있다.
- 이러한 방법들은 결국 FroDO, Node-SLAM, DeepSLAM++ 도 사용하지만, DSP-SLAM에는 미묘하게 방법이 차이가 난다.
- FroDO는 batch로 멀티뷰 데이터를 최적화하지만, DSP-SLAM은 실시간 SLAM처럼 sequential하게 작업을 수행하고,
- DeepSLAM++은 Pix3D를 이용해서 shape generation을 하지만, 종종 이 방식은 불안정하다는 단점이 있다.
System Overview
DSP-SLAM은 기본적으로 ORB-SLAM과 같이 sparse landmark와 카메라 포즈를 만들어내는 것에 더해, dense object shape을 생성할 수 있는 시스템이다.
- Object를 표현하는 방법은 다음과 같다.
- Object는 기본적으로 DeepSDF의 shape embedding 형태를 사용해서 저장한다. 이 값은 SLAM의 최적화를 통해 업데이트 될 수 있는데, 값을 업데이트 한 후 decoder로 3D shape을 풀어냈을 때 shape이 살짝 다르게 생기게 나타나게 된다 (e.g. 길이가 길어진다던지, 넓이가 좁아진다던지)
- DeepSDF는 64차원의 shape code
와 3D query location을 인풋으로 받아, shape을 표현할 때 자주 사용되는 signed distance function (SDF)를 만들어낸다. - 이 식을 우리는
라고 표현한다.
- 이 식을 우리는
- Sparse SLAM backbone은 다음과 같다.
- ORB-SLAM2를 사용한다. Monocular/Stereo 시퀀스로 사용할 수 있으며, 멀티쓰레드 구조를 가지고 실시간 트랙킹과 비실시간 맵핑이 동시에 일어나는 구조이다.
- Object detection을 수행하는 방법은 다음과 같다.
- 매 keyframe마다 MaskRCNN을 이용해 2D bounding box와 segmentation mask를 동시에 얻어낸다.
- 또, 3D bounding box detection을 통해 object pose의 initial 값을 얻어낸다.
- 검출된 object instance
는 2D bounding box , 2D mask , 해당 object에서 검출된 3D point cloud를 기반으로 얻어낸 depth , 초기 object pose 이 있다. 여기에서 co는 camera->object를 뜻한다. - 여기서
는 stereo SLAM으로 얻어낸 point cloud일수도 있고, LiDAR로 얻어낸 것일 수도 있다.
- 여기서
Object reconstruction with shape priors
- Object reconstruction의 목표는 full dense shape
와 7-Dof pose 를 추정하는 것이다. 이를 위해 DSP-SLAM에서는 shape code와 object pose를 동시 최적화 (joint optimization)을 하기 위한 방법으로써 2개의 energy term 와 를 제안했다. 최적화는 analytical Jacobian 기반으로 Gauss-Newton solver를 이용해 푼다.
Surface consistency term
에 대해 먼저 이야기해보자. Surface consistency term 이라고도 불리는 이 값은 위와 같은 수식을 가진다. - SLAM에 아직 익숙하지 않은 사람들은 이 수식을 이해하지 못할 수 있다.
- 하나씩 읽어보자. 오른쪽에
를 보면, 이는 픽셀 위치에 대해서 depth 값을 매칭해 3D landmark의 위치를 추정한다는 것이다. 여기에 를 곱한다는건, 카메라의 위치에서 이 점을 바라본다는 것을 의미한다. 여기에 는 DeepSDF의 generator function을 이용해서 dense surface를 만드는것이고, 이 값을 - 3D point 들의 pixel coordinate에 대해서 surface residual을 구하는 것을 의미한다. - (수식이 매우 별로다. 좀 더 쉽게 풀어줬으면 좋았을련만!)
- 논문의 Figure 5에서 보이는 것 처럼
만 가지고 최적화했을 경우 결과가 좋지 않다. 제대로 된 shape estimation을 위해 rendering loss를 함께 사용해야한다고 한다. 이 rendering loss는 instance segmentation을 수행한 후, 이 mask와 shape의 실루엣이 동일해야한다고 한다.
(거의 다 적었습니다!! 곧 나머지 내용 업로드하겠습니다)