4DRotorGS阅读笔记(Rotor表示4D空间旋转的动态场景重建方法)
相关文档
- 项目链接:https://weify627.github.io/4drotorgs/
- 代码链接:https://github.com/weify627/4D-Rotor-Gaussians
- 论文链接:https://arxiv.org/abs/2402.03307
Introduction
- 当前的 3D 场景重建主要分为静态和动态两种场景,动态场景由于物体运动的原因,导致 NVS 的效果都比较差。
- 目前一些方法会把 3D 场景和它的动态变化一起建模,但这样很复杂,会由于高度纠缠的空间&时间维度,导致 NVS 的细节很差。
- 还有一些方法是把动态和静态空间解耦,先构建一个静态的规范空间,然后预测一个变形场来表示动态变化。但这种方法对于物体突然出现和突然消失的情况仍然不适用。
- 作者提出方法的时期,针对动态场景的重建,主要都是 NeRF-Based 的方法,要用大量的 ray 实现渲染,无法满足实时性。
- 本文的主要是在 3dgs 的基础上,将场景从 3D 扩展成 4D。核心思想是,每一个 t 时刻的 3D 场景,可以当做是 4D 时空椭球在 t 时刻的切面。以下图所示:
- 图中展示的是 3D 切 2D 的情况,4D 切 3D 也类似,每个 t 时刻,切出来的就是一组 3D 的椭球,这样再继续往 2d 上投影,就和单帧的 3dgs 一样了。并且这样的建模方式,可以很好的解决物体突然出现和突然消失的问题。
- 作者使用𝑁-Dimensional Rigid Body Dynamics中的方法描述 4D 的旋转,同时如果把时间维度置零,这个 4D 的旋转就和 3D 维空间的旋转是一样的了,这样就和 3DGS 没什么区别。因此本文既可以用于动态的 4D 空间重建,也可以用于静态的 3D 空间重建。
- 文章还额外提出两种新的正则化项:
- 熵损失,推动高斯球的不透明度更趋向于 0 或者 1,这样可以有效的减少重建后的“漂浮物”
- 4D 一致性 loss,规范高斯的运动,并产生一致的动态重建
Method
3DGS
-
3DGS 用 N 个各向异性的 3D 高斯椭球体来建模一个静态场景。每个椭球体用自身的协方差矩阵和中心点表示:
-
为了确保优化过程中协方差矩阵半正定有效,被分解为缩放矩阵和旋转矩阵来表征椭球体的形状:
其中, 。除此之外,每个高斯椭球体还有一些可学习的参数,例如不透明度,k 阶的球谐系数表征颜色。
-
3DGS 投影到 2D 平面上时,是计算相机空间的协方差矩阵。其中是仿射变换的近似雅可比,是相机空间到世界空间的变换矩阵。然后根据高斯球距离相机平面的距离,按照 depth 进行排序距离越近越先投影。
其中是第个高斯球的颜色,是第个高斯球的不透明度和 2D 投影结果的乘积。
4DGS
- 整体框架如下图所示:
Rotor-Based 的 4DGS 表示
- 类似于 3DGS,4DGS 也可以用一个 4 维的中心点以及一个 4D 的协方差矩阵来表示
-
同时,协方差矩阵也可以用 4D 的缩放矩阵和 4D 的旋转矩阵表示:
其中的表示形式比较简单,但是**如何描述一个 4D 的旋转矩阵呢?**参考𝑁-Dimensional Rigid Body Dynamics这篇文章,使用 rotor 描述 4D 的旋转。这里 rotor 由一组 8 个组件组成:
其中,$\bold{e}{0123} = \bold{e}{0} \wedge \bold{e}{1} \wedge \bold{e}{2} \wedge \bold{e}_3 $,并且 表示四维欧几里得空间中标准正交基对应的轴之间的外积。因此,4D 的旋转,可以通过 8 个系数确定。
-
与四元数类似,4D 旋转的 rotor 也可以转换成 4D 的旋转矩阵的形式。先对 rotor 进行归一化,然后再映射到 4D 旋转矩阵的形式:
-
rotor 的 8 个分量中,前 4 个分量代表 3D 的空间旋转,后 4 个分量代表时空旋转,即空间平移。此时如果把后 4 个分量置零,那就等价于 3D 空间中的 4 元数,那么该方法就可以用于 3D 静态空间的重建。
时间切片的 4DGS
- 给定 4D 的协方差矩阵和逆矩阵,其组成为:
- 此时,给定一个时间,对应的 3D 高斯椭球可以表示为:
其中,
-
和原始的 3DGS 的公式相比,这里多了一个时间衰减项,随着时间 t 推移,当 t 足够接近时间位置时,高斯点首先出现,并开始增长,当时,不透明度达到峰值,之后三维高斯密度逐渐缩小,直到 t 距离足够远。
-
除此之外,切片的 3DGS 在高斯的中心位置上增加了一个运动项。从理论上来说,三维高斯函数的线性运动来自于 4D 的切片,并且假设在很小的时间范围内,运动可以近似为线性运动。这样就可以把这个运动拆解为两部分为时间,为速度。将其可视化后,即可得到每个时刻下,每个部分的运动场(速度场)。
优化
- 额外引入了两个 loss
Entropy Loss 交叉熵 loss
- 期望每个高斯椭球的不透明度都接近于 1 或者 0,因此引入了一个交叉熵 loss,使得噪声的不透明度都趋近于 0,避免了“漂浮物”的出现。
4D 一致性 loss
- 在 4D 空间中,高斯的运动应该和附近的点的运动是类似的,因此作者额外引入了一个一致性 loss,对于 t 时刻下的每个高斯点,选择其附近的 K 个最近邻的高斯点,计算其运动的均值,并与当前高斯点的运动进行比较,计算 L1 loss。(注意,这里计算的最近邻点是在 4D 空间中计算的欧氏距离,而不是 3D 空间)