CodeSLAM

Bloesch 2018 · 논문

한 줄 요약 — CodeSLAM (CVPR 2018)은 각 키프레임의 dense depth map을 이미지 조건형 variational autoencoder로부터 나온 작은 latent code로 표현하여, dense geometry를 카메라 포즈와 함께 동시에 최적화할 수 있을 만큼 컴팩트하게 만듭니다.

문제

실시간 3D 인식에서 geometry의 표현은 여전히 중요한 미해결 문제로 남아 있습니다. Dense map은 완전한 표면 형태를 포착하지만 높은 차원성으로 인해 저장과 처리 비용이 크고 엄밀한 확률적 추론에 부적합합니다; sparse 특징 기반 표현은 구조와 모션의 결합 확률적 추론을 가능하게 하지만 장면 정보의 일부만 포착하며 주로 localization에만 유용합니다. 그러나 자연스러운 장면의 geometry는 매우 정돈되어 있습니다 — 이웃하는 깊이 값들은 강하게 상관되어 있으므로, dense한 표현이 실제로 많은 파라미터를 필요로 할 이유는 없습니다. CodeSLAM은 dense하면서도 컴팩트하고 최적화 가능한 표현을 추구합니다: 결합 확률적 최적화 안에 들어갈 수 있을 만큼 적은 파라미터로 완전한 표면 geometry를 표현하는 것입니다.

방법 및 아키텍처

밝기값 조건형 깊이 오토인코딩. Variational autoencoder가 키프레임의 depth map을 압축하지만, 이미지만으로 예측할 수 없는 것만 code가 유지하도록 밝기값 이미지를 조건으로 합니다:

D=D(I,c)D = D(I, \boldsymbol{c})

여기서 II는 밝기값 이미지이고 c\boldsymbol{c}는 latent code (참조 네트워크에서 128차원)입니다. U-Net이 II를 다중 스케일 특징으로 분해하여 대응하는 해상도에서 깊이 encoder/decoder에 결합합니다; variational bottleneck (두 개의 512채널 fully connected 레이어, KL로 정규화됨)이 code-to-depth 매핑을 매끄럽게 유지합니다. c=0\boldsymbol{c}=0으로 설정하면 가장 가능성 높은 단일 뷰 깊이 예측 D(I,0)D(I,0)이 나옵니다.

불확실성을 인지하는 학습. 네트워크는 픽셀별 평균 μ\mu와 불확실성 bb를 예측하며, 관측된 깊이 d~\tilde{d}에 대해 4개의 pyramid 레벨에서 Laplace 분포의 negative log-likelihood로 학습됩니다:

logp(d~μ,b)=d~μb+log(b)-\log p(\tilde{d}\mid\mu,b) = \frac{|\tilde{d}-\mu|}{b} + \log(b)

깊이는 근접도(proximity) p=a/(d+a)p = a/(d+a) (평균 깊이 aa)로 재파라미터화되어, [0,][0,\infty][0,1][0,1]로 매핑합니다. 학습은 SceneNet RGB-D를 ADAM으로 사용합니다 (학습률 10410610^{-4}\to10^{-6}, 6 epoch). 선형 decoder가 사용되어 야코비안 D/c\partial D/\partial\boldsymbol{c} (그렇지 않으면 평가에 약 1초까지 걸림)를 키프레임당 한 번만 미리 계산할 수 있습니다.

Dense 워핑과 결합 최적화. 뷰들 사이의 포즈 TAB=(RAB,BtAB)\boldsymbol{T}_A^B=(\boldsymbol{R}_A^B, {}_B\boldsymbol{t}_A^B)를 가지고, 각 픽셀 u\boldsymbol{u}는 다음과 같이 워프됩니다.

w(u,cA,TAB)=π(RABπ1(u,DA[u])+BtAB)w(\boldsymbol{u},\boldsymbol{c}_{A},\boldsymbol{T}_{A}^{B})=\pi\big(\boldsymbol{R}_{A}^{B}\,\pi^{-1}(\boldsymbol{u},D_{A}[\boldsymbol{u}])+{}_{B}\boldsymbol{t}_{A}^{B}\big)

여기서 π,π1\pi,\pi^{-1}는 투영/역투영 연산자이고 DA[u]D_A[\boldsymbol{u}]는 픽셀 조회입니다. N-frame structure-from-motion 백엔드는 모든 프레임에 미지의 code (초기값 0)와 포즈 (초기값 항등)를 할당하고, 겹치는 모든 프레임 쌍에 대해 photometric 및 geometric 잔차를 최소화합니다,

Epho=Lp(IA[u]IB[w(u,cA,TAB)]),Egeo=Lg(DA[u]DB[w(u,cA,TAB)])E_{\mathrm{pho}} = L_{p}\big(I_{A}[\boldsymbol{u}]-I_{B}[w(\boldsymbol{u},\boldsymbol{c}_{A},\boldsymbol{T}_{A}^{B})]\big), \qquad E_{\mathrm{geo}} = L_{g}\big(D_{A}[\boldsymbol{u}]-D_{B}[w(\boldsymbol{u},\boldsymbol{c}_{A},\boldsymbol{T}_{A}^{B})]\big)

여기서 손실 Lp,LgL_p, L_g는 유효하지 않은 대응점을 마스킹하고, 두 오차 유형에 가중치를 부여하며, Huber 가중치를 적용하고, 경사지거나 가려진 픽셀을 다운웨이트합니다. 감쇠된 Gauss–Newton 솔버가 모든 code와 포즈를 업데이트합니다. Tracking은 동일한 메커니즘 (photometric 비용만, coarse-to-fine)으로 현재 프레임을 마지막 키프레임에 정렬하며, 전체 PTAM 스타일 시스템은 tracking과 mapping을 번갈아 수행하면서 오래된 키프레임을 선형 사전 분포로 소거(marginalise)합니다.

실험 결과

SLAM에서의 의미

CodeSLAM은 DTAM 이후 dense SLAM을 막고 있던 질문에 답했습니다: dense geometry를 사후에 융합하는 대신 결합 확률적 최적화 안에 포함시키는 방법입니다. 그 핵심 교훈 — 최적화기와 dense map 사이에 학습된 저차원 파라미터화를 두는 것 — 은 학습 기반 SLAM에서 가장 영향력 있는 아이디어 중 하나이며 (CVPR 2018 best paper honourable mention), SceneCode, DeepFactors, NodeSLAM, CodeMapping을 낳았고, 네트워크 파라미터가 다시 컴팩트한 최적화 가능 geometry로 기능하는 neural-implicit SLAM (iMAP, NICE-SLAM)을 개념적으로 예견했습니다.

관련 문서