Lietorch

Teed 2021 · 论文

一句话总结 — 一个PyTorch库,将三维变换群(SO(3)、RxSO3、SE(3)、Sim(3))实现为一等可微张量类型,反向传播在每个群元素的切空间中进行(论文:“Tangent Space Backpropagation for 3D Transformation Groups”,Teed & Deng,CVPR 2021,arXiv:2103.12032)。

问题

用于估计或优化相机位姿的深度网络必须对旋转和刚体变换求导,但这些量位于弯曲的流形上,而不是平坦的参数空间中。标准的”嵌入空间”自动微分(对矩阵元素或四元数分量求导)存在论文剖析的两种失效模式:一是像ψ/sinψ\psi / \sin\psi这样数值不稳定的项,其泰勒近似梯度必须针对每个运算手工调整;二是完全奇异的梯度——例如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)而言是3维梯度,而不是autograd的9维嵌入梯度。

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中可微几何优化的标准工具箱。

相关条目