AI/Paper Review

[논문 리뷰] NeRF-SLAM: Real-Time Dense Monocular SLAMwith Neural Radiance Fields

LiDARian 2024. 4. 27. 03:27
반응형

Introduction

NeRF는 outlier에 취약하다는 문제가 있었다. 이를 해결하기 위해 depth 정보를 주고 동시에 depth estimator의 uncertainty 측정 기법을 활용하면 NeRF의 문제를 해결하면서 동시에 SLAM을 수행할 수 있다.

최종적으로 NeRF와 uncertainty information을 동시에 활용하는 SLAM method를 제안한다.

Methodology

Tracking: Dense SLAM with Covariances

이 부분은 설명이 좀 어려운 것 같다...

큰 틀은 DROID-SLAM을 따른다. 이미지 두개를 받아서 optical flow를 만들고, 그 optical flow를 기반으로 depth를 추정한다. 그리고 이 과정에서 local BA (Bundle Adjustment)를 수행한다. 

여기서 optical flow를 통해 hessian을 구하고, Schur complement를 따로 추출한 후, 이를 Cholesky decomposition을 거친다. 이 과정에서 Depth map D와 pose T를 구한다. 

이후 DROID-SLAM과 같은 방식으로 pose/depth의 변화량을 계산한다. v,w는 pose/depth의 residual?이라고한다.

그리고 여기서 depth와 pose의 marginal covariances = uncertainty를 다음과 같이 구한다.

결국, Tracking을 통해 local BA와 Depth image 생성, pose/depth uncertainty를 구하게 된 것이다.

Mapping: Probabilistic Volumetric NeRF

이제는 tracking에서 구한 정보를 통해서 NeRF를 수행하고 그 결과를 통해 loss를 정의할 것이다.

loss는 전체적으로 다음과 같이 정의된다.

여기서 depth는 다음과 같이 tracking을 통해 구한 D와 rendering 결과 D*로 L2 loss르 둔다.

여기서 rendering equation은 NeRF의 것을 그대로 따른다. di는 random하게 sampling된 depth, δi = di+1 − di 이고, σi는 volume density이다. d*는 depth가 되고, Ti는 transmittance다.

RGB 이미지를 통한 loss도 depth와 마찬가지로 입력된 이미지와 rendered image를 L2 loss를 둔다.

 

Architecture

Tracking과 mapping은 서로 다른 스레드로 구현되어 실행된다. tracking은 8프레임씩 받아 실행된다. mapping은 tracking이 고른 keyframe을 받을 때마다 새로 optimization을 수행한다

Results

정량지표는 L1과 PSNR밖에 없다. tracking이 중요한데 정작 없다.

결과 상으로는 그들의 depth uncertainty map을 활용하는 것이 압도적으로 성능을 높이는 것을 볼 수 있다. uncertainty method가 도움이 되긴 하는듯.

다음과 같이 확실히 3D reconstruction 품질은 높은 수준을 보여주는 듯하다.

아래 결과에서도 볼 수 있듯이 depth uncertainty를 통해 weight를 주는 것이 optimization에도 도움이 된다는 것을 알 수 있다.

대체로 test time에서 10FPS가 나와서 real time이 가능하다고 하는데, 8개 GPU로 1주 학습을 수행하는 DROID-SLAM을 활용한다는 점에서 비현실적인 방법론이라고 생각된다.

반응형