Lietorch

Teed 2021 · 論文

一行要約 — 3次元変換群(SO(3), RxSO3, SE(3), Sim(3))を第一級の微分可能テンソル型として実装したPyTorchライブラリ。各群要素の接空間(tangent space)で誤差逆伝播を行う(論文: “Tangent Space Backpropagation for 3D Transformation Groups”, Teed & Deng, CVPR 2021, arXiv:2103.12032)。

問題

カメラ姿勢を推定・洗練する深層ネットワークは、回転や剛体変換を通じて微分する必要があるが、これらは平坦なパラメータ空間ではなく曲がった多様体上に存在する。標準的な「埋め込み空間」自動微分(行列成分やクォータニオン成分を微分するもの)には、論文が指摘する2つの失敗モードがある。1つは、演算ごとに手動でチューニングされたテイラー近似勾配を必要とするψ/sinψ\psi / \sin\psiのような数値的に不安定な項であり、もう1つは完全に特異な勾配である——例えばSO(3)の対数写像におけるcos1((tr(X)1)/2)\cos^{-1}\big((\mathrm{tr}(X)-1)/2\big)は恒等元において導関数が未定義であり、そのため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)の接空間における摂動を関連付ける。逆方向モードの自動微分は、連鎖律LX=LYJ\frac{\partial\mathcal{L}}{\partial X} = \frac{\partial\mathcal{L}}{\partial Y} \mathbf{J}によって行ベクトル勾配を伝播する。ここでJ\mathbf{J}は接空間ヤコビアンであり——SO(3)の場合、autogradの9次元埋め込み勾配ではなく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}^{*}は正解の姿勢である——著者らはこの損失が標準的な誤差逆伝播で実装するのは困難であると指摘している。

実験結果

SLAMにおける意義

姿勢最適化を通じて学習するすべての深層SLAMや深層VOシステムは、SE(3)の要素に関する微分を必要とし、これを手作業で正しく行うのはエラーが起きやすい(特異点でのNaN、多様体からのずれ)。Lietorchは多様体上で正しい微分を再利用可能でテスト済みのライブラリとした。DROID-SLAMやDPVOなどをはじめとするシステムの姿勢層を提供している。Theseus(微分可能非線形最小二乗法)と合わせて、PyTorchにおける微分可能な幾何最適化の標準的なツールボックスを構成している。

関連ノート