Lietorch

Teed 2021 · 논문

한 줄 요약 — SO(3), RxSO3, SE(3), Sim(3) 등 3D 변환 그룹을 미분 가능한 1급 텐서 타입으로 구현한 PyTorch 라이브러리로, 각 그룹 원소의 탄젠트 공간에서 역전파를 수행한다(논문: “Tangent Space Backpropagation for 3D Transformation Groups”, Teed & Deng, CVPR 2021, arXiv:2103.12032).

문제

카메라 pose를 추정하거나 정제하는 심층 신경망은 회전과 rigid-body 변환을 미분해야 하지만, 이들은 평평한 파라미터 공간이 아니라 휘어진 매니폴드 위에 존재한다. 표준적인 “embedding space” 자동미분(행렬 원소나 quaternion 성분을 직접 미분)은 논문이 분석하는 두 가지 실패 모드를 갖는다: ψ/sinψ\psi / \sin\psi와 같이 수치적으로 불안정한 항 — 이 항의 Taylor 근사 기울기는 연산마다 수작업으로 조정해야 한다 — 그리고 완전히 특이한(singular) 기울기 — 예를 들어 SO(3) 로그의 cos1((tr(X)1)/2)\cos^{-1}\big((\mathrm{tr}(X)-1)/2\big)는 identity에서 미분이 정의되지 않아, PyTorch3D의 행렬 로그는 그 지점에서 NaN 기울기를 반환한다. Lietorch 이전에는 모든 딥 SLAM 프로젝트가 이 매니폴드 연산 기계를 각자 손으로 재구현해야 했다.

방법 및 아키텍처

Df(X)[v]=limt0f(tvX)f(X)t,Df(X)[\mathbf{v}] = \lim_{t\to 0} \frac{f(t\mathbf{v} \oplus X) \ominus f(X)}{t},

이는 XX의 탄젠트 공간에서의 섭동을 f(X)f(X)의 탄젠트 공간에서의 섭동과 연관짓는다. 역모드 자동미분은 chain rule LX=LYJ\frac{\partial\mathcal{L}}{\partial X} = \frac{\partial\mathcal{L}}{\partial Y} \mathbf{J}에 따라 행벡터 기울기를 전파하는데, 여기서 J\mathbf{J}는 탄젠트 공간 Jacobian이다 — SO(3)의 경우 autograd의 9차원 embedding 기울기 대신 3차원 기울기가 된다.

L(T1,,TK)=kLog(Tk1T),\mathcal{L}(\mathbf{T}_1,\ldots,\mathbf{T}_K) = \sum_k \|\operatorname{Log}(\mathbf{T}_k^{-1} \cdot \mathbf{T}^{*})\|,

여기서 T\mathbf{T}^{*}는 ground-truth pose다 — 저자들은 이 손실이 표준 역전파로는 구현하기 어렵다고 지적한다.

실험 결과

SLAM에서의 의미

pose 최적화를 통해 학습하는 모든 딥 SLAM 또는 딥 VO 시스템은 SE(3) 원소에 대한 미분이 필요하며, 이를 손으로 정확히 구현하는 것은 오류가 발생하기 쉽다(특이점에서의 NaN, 매니폴드 이탈 drift). Lietorch는 매니폴드에 부합하는 미분을 재사용 가능하고 검증된 라이브러리로 만들었으며, DROID-SLAM과 DPVO를 비롯한 여러 시스템의 pose 레이어를 제공한다. Theseus(미분 가능한 비선형 최소자승법)와 함께, PyTorch에서 미분 가능한 기하학적 최적화를 위한 표준 도구 상자를 이룬다.

관련 문서