CVPR 2024에 게재된 3D gaussian splatting을 이용한 SLAM입니다. 

 

Code: https://github.com/muskie82/MonoGS

Video: https://youtu.be/x604ghp9R_Q/

 

 

 

이 논문의 특징은 gaussian을 이용하여 camera tracking과 mapping을 했다는 점입니다. 그리고 RGB-D, RGB(monocular) 카메라 둘 다 사용이 가능합니다.

 

전체 flowchart는 다음과 같습니다.

 

Tracking

현재 frame에 대해 camera pose를 추정하는 단계입니다. 3D 상에 존재하는 gaussian을 현재 pose에서 컬러 이미지와 depth 이미지(RGB-D인 경우)를 rendering 하여 ground truth의 컬러 이미지와 depth 이미지 간의 차이를 loss 함수로 정의하고 이 loss가 적어지는 방향으로 pose를 최적화시킵니다. 

 

 

왼쪽 - 현재 pose($T_{CW}$)에서의 gaussian으로 rendering 된 컬러 이미지와 ground truth의 컬러 이미지의 차이 

오른쪽 - 현재 pose($T_{CW}$)에서의 gaussian으로 rendering된 depth 이미지와 ground truth의 depth 이미지의 차이 

 

Tracking loss식

 

Keyframing

Tracking이 끝난 frame은 keyframe이 될 수 있는지 없는지 판단합니다.

 

이상적인 keyframe은 다음 두 가지라고 합니다.

- 중복되는 장소가 없다

- baseline이 길다.

 

이렇게 정의한 이유는 mapping 할 때 좀 더 넓은 영역을 효율적으로 표현하기 위해 이렇게 한 것 같습니다.

 

keyframe으로 선택이 되면 이 keyframe을 일정 크기의 window안에 담아 둡니다.

 

Gaussian Covisibility

앞서 말한 중복되는 장소를 판별할 때 gaussian covisibility를 이용합니다.

 

gaussian covisibility는 현재 frame과 $i$와 마지막 keyframe $j$ 간에 gaussian이 관찰되는 비율로 정의합니다.

$i$ 와 $j$ 에서 전체 관찰되는 gaussian 중 서로의 frame에서 공동으로 관찰되는 gaussian의 비율이 일정 threshold 이하면 중복되지 않는 장소로 판단합니다. 이때 관찰되는 gaussian은 raterization 단계에서 누적 $\alpha$ 값이 0.5가 되지 않으면 관찰된다고 판단합니다.

 

Gaussian Insertion and Prune

Tracking이 끝난 frame이 keyframe으로 판단 됐다면 그 keyframe을 이용해서 gaussian을 3D 상에 생성합니다.

 

Depth가 있는 경우는 3D 좌표를 복원할 수 있으므로 gaussian의 위치(mean)를 복원한 3D 좌표로 정의하고 색은 해당 이미지의 RGB 값을 이용합니다.

 

Monocular의 경우에는 depth rendering을 할 수 있으면 작은 variance로 depth rendering을 이용해 3D 좌표를 복원하고 그 위치에 gaussian을 만듭니다. Depth rendering을 할 수 없는 경우에는 큰 variance로 median dpeth로 3D 좌표를 복원하고 그 위치에 gaussian을 만듭니다. 그리고 monocular는 depth를 정확히 알 수 없으므로 gaussian의 위치가 불안정합니다. 때문에 현재 window에서 최소 3개의 keyframe(자신을 포함한 최소 4개의 keyframe)에서 gaussian이 관찰되지 않으면 그 gaussian은 위치가 불안정하다고 생각하여 제거합니다.(이는 미리 정의한 window의 사이즈만큼 keyframe이 들어온 경우에만 수행합니다.)

 

 Mapping

3D 상에 생성된 gaussian과 camera pose를 동시에 최적화시키는 단계입니다.

 

모든 keyframe들을 이용하는 것이 아니라 현재 window안에 있는 keyframe + 과거의 랜덤 한 두 개의 keyframe을 이용합니다.

 

이렇게 하는 이유는 global consistency를 유지하면서 효율적으로 3D reconstruction을 구성할 수 있기 때문입니다.

 

이렇게 모은 frame들로 그 frame의 pose에서 컬러 이미지와 depth 이미지를 rendering을 하면서 ground truth와 차이를 loss 식으로 정의합니다. loss 식은 tracking 단계의 식과 비슷합니다. 

 

이 loss식이 작아지는 pose와 gaussian의 파라미터들을 update 하여 camera pose와 mapping을 동시에 최적화시킵니다.

 

loss 식의 $E_{iso}$은 gaussian의 covariance의 regularization 역할을 합니다.

 

Mapping 단계에서 최적화가 진행될 때  그 pose에서만 rendering이 잘 되게 gaussian 파라미터들이 업데이트되므로 다른 방향에서 봤을 때는 gaussian이 날카로운 모양(gaussian의 한 축의 covariance가 다른 축 보다 큰 경우)이 있습니다.

 

이를 방지하기 위해 loss 식에 term을 추가합니다.

위의 그림은 rendering이 잘 되어 gaussian의 파라미터가 적절하게 변한 것 같지만, 아래 그림에서 다른 방향으로 봤을 때 그렇지 않다는 것을 알 수 있습니다. 오른쪽 그림은 $E_{iso}$을 적용한 후에 좀 더 smooth 하게 변한 것을 알 수 있습니다.

 

 

Keyframe Management

Optimization 후에 gaussian covisibility를 이용하여 일정 threshold 이하면 현재 window안에 있는 keyframe을 제거합니다.

(위에서 정의한 covisibilty 식과 살짝 다름)

Result

Tracking ATE

 

Rendering performance