spann3r是利用dust3r做了增量式的点云重建,这里zeroGS在前者的基础上,进行了增量式的GS重建以及进行了pose的联合优化,这是一篇dust3r与GS结合的具有启发意义的工作。
abstract
NeRF和3DGS是重建和渲染逼真图像的流行技术。然而,他们需要以SfM作为前提。虽然之前的方法可以从少量无姿态图像中重建,但它们不适用于图像无序或密集采集的情况。在本研究中,我们提出了ZeroGS,用于从数百张无姿态和无序的图像中训练3DGS。我们的方法利用预训练的基础模型作为神经场景表示。由于预测的点图精度不足以支持精确的图像配准和高保真图像渲染,我们提出通过从种子图像初始化和微调预训练模型来缓解这一问题。然后,图像逐步配准并添加到训练缓冲区中,进一步用于训练模型。我们还提出通过最小化多视角之间的点到相机光线一致性损失来优化相机姿态和点图。在LLFF数据集、MipNeRF360数据集和Tanks-and-Temples数据集上的实验表明,我们的方法比当前最先进的无姿态NeRF/3DGS方法恢复了更准确的相机姿态,甚至渲染出比使用COLMAP姿态的3DGS更高质量的图像。
1. Introduction
NeRF和3DGS正逐渐成为用于重建三维场景的最流行技术。尽管NeRF/3DGS能够重建逼真的场景,但它们需要从结构从运动(SfM)工具(如COLMAP [47])中获取准确的相机姿态。NeRF/3DGS在初始化时难以处理不准确的相机姿态,通常会生成模糊的图像。并且现在很少有研究尝试用3DGS解决这些问题。尽管CF-3DGS [21] 可以在不依赖COLMAP相机姿态的情况下训练3DGS,但它仅适用于相机姿态在连续帧之间变化不大的短序列图像。
DUSt3R [59] 提出了将相机姿态与可泛化 3D 生成系统 (3DGS) [49, 64] 的训练过程分离的方法。DUSt3R 接收一对图像作为输入,并输出在参考图像坐标系中的点对点地图。DUSt3R 使用大量包含准确相机姿态和 3D 点的真实世界数据进行训练,因此对未见过的图像对具有很好的泛化能力。然而,这些可泛化的 3DGS 方法 [49, 64] 由于严重依赖 DUSt3R,因此只能处理图像对的少量样本设置。InstantSplat [18] 利用预训练的 DUSt3R 作为一个离线工具。给定同一场景中的成对图像,InstantSplat 首先使用 DUSt3R 计算成对的点地图,然后通过联合优化相机姿态和密集点图到全局坐标系中来对齐这些密集点图。随后,InstantSplat 使用来自 DUSt3R 的对齐密集点来训练 3DGS。但是,优化密集点图所需的大量 GPU 内存限制了 InstantSplat 处理只有少量图像的场景。
我们提出了 ZeroGS,用于在不依赖 COLMAP 相机姿态的情况下训练 3DGS。我们的方法能够从数百张无序图像中重建场景(参见图 1)。具体地,我们利用一个预训练的 3D 基础模型作为神经场景表示。除了预测点图外,我们将模型扩展以预测 3D 高斯基元的属性。预训练模型已经学到了粗略的场景几何先验,这使得从零开始联合优化模型和相机参数变得容易得多。在定义了我们的神经场景表示后,我们采用了一种增量训练管道来微调模型。我们首先通过在全局坐标系中使用预测的点图计算粗略的相机姿态(使用 RANSAC 和 PnP)来注册图像。然后,通过点到相机射线的一致性损失来细化粗略的相机姿态,并在新注册的图像上进一步微调我们的模型。我们重复这一过程,直到所有图像都注册完毕。这样,我们的增量训练管道类似于经典的增量 SfM 方法 [47],但有以下不同之处:
种子初始化:增量式SfM从一对图像初始化,其中图像对的相机姿态在初始化后被固定以解决尺度自由度问题。然而,我们的方法从预训练模型和单张种子图像初始化。
图像配准:与增量式SfM逐张配准图像不同,我们的方法每次配准一批图像。配准后的图像进一步用于微调神经模型。
目标函数:我们使用渲染损失微调模型,而SfM通过重投影误差优化场景。
场景稀疏性:我们的模型预测密集的场景几何结构,而SfM输出稀疏的场景结构。
2. Related Work
3DGS:从稀疏点云初始化 3D 高斯,并通过可微分光栅化渲染场景,能够实现实时渲染性能。然而,当从无纹理区域初始化时,3DGS 在识别更多高斯点方面可能遇到困难。为了促进更好的场景几何学习,ScaffoldGS [38] 从初始点云初始化稀疏体素网格,并将 3D 高斯的特征编码到相应的特征向量中。通过避免场景表面的不必要稠密化,稀疏体素的引入减少了高斯密度。SAGS [56] 隐式地将场景结构编码到图神经网络 (GNN) 中。其他工作也尝试学习 2D 高斯 [25],以更准确地拟合场景表面 [24]。类似于 NeRF,3DGS 在光栅化过程中由于固定窗口的高斯核也会面临量化问题。这一问题在 MipSplatting [67] 以及许多后续工作中 [32, 50, 63] 得到了处理。VastGaussian [34] 及其后续工作 [14, 29, 37] 专注于开发分布式训练方法,以重建大规模场景。
尽管 3DGS 可以渲染更高保真度的图像,但它依赖于准确的相机姿态。与 NeRF 不同,许多工作已经提出了解决相机姿态不准确的问题,而 3DGS 中的相同问题尚未得到广泛解决。与我们最相关的工作是 CF-3DGS [21] 和 InstantSplat [18]。然而,CF-3DGS 需要深度估计来初始化 3D 高斯点,并且只能在短连续图像序列之间优化相机姿态和 3DGS。当相机姿态发生显著变化或图像是无序的时,CF-3DGS 非常容易失败。InstantSplat [18] 利用现有的预训练 3D 基础模型 DUSt3R [59] 来回归图像对之间的密集点图,然后通过将点图对齐到全局坐标系中来获取相机姿态。然而,对齐密集点图既耗时又耗内存。因此,InstantSplat 只能处理非常少的图像。其他相关工作包括 Splatt3R [49],它扩展了 DUSt3R,无需已知相机姿态即可预测 3D 高斯点。尽管如此,它只能处理图像对,因为 DUSt3R 生成的是参考图像的第一幅图中的点图,而不是全局坐标系中的点图。我们的工作也利用了一个基于预训练 DUSt3R 的网络,即 Spann3R [57]。然而,与 InstantSplat 和 Splatt3R 不同,我们的方法无需对齐密集点图即可在种子图像的全局坐标系中回归点,随后通过增量注册图像和微调网络来处理。我们的方法能够处理数百张图像,并且可以在 24GB 消费级 GPU 上运行。
3. Method
如图 2,我们首先使用 Spann3R 作为场景回归网络,从图像对中预测 3D 高斯点 Gk 和点图 Xk。然后,我们利用 RANSAC 和 PnP 求解器基于 2D-3D 对应关系来获取初始相机姿态。进一步,我们通过最小化 3D 点与相机中心之间的点到相机射线一致性损失来细化粗略的相机姿态。随后,我们使用细化后的相机姿态对 3D 高斯点进行光栅化以渲染图像。为了反向传播梯度,我们采用了 RGB 损失。在每个训练周期的末尾,我们通过使用 RANSAC 和 PnP 求解器注册新图像来更新我们的训练缓冲区。这个过程会一直重复,直到所有图像都注册完毕或无法再注册更多图像。
3.1. Preliminaries
我们的网络架构基于DUST3R [59]和SPANN3R [57]。 给定图像对,DUST3R预测每个图像的相应指数
,其中
表示在相机i 的坐标系中的
。
DUSt3R 使用一个 ViT [17] 作为两个图像的共享编码器,并分别为参考/源图像 i 和目标图像 j 使用两个变压器解码器。这两个解码器分别表示为参考解码器和目标解码器
,它们包含两个head
,用于将解码器特征映射到点图。
DUSt3R 在局部坐标系中重建图像对。当处理超过两张图像时,DUSt3R 使用后处理步骤是将成对的密集点图对齐到全局坐标系中,这一过程耗时且可能会OOM。
Spann3R 提出了一种特征融合机制,用于在全局坐标系中预测点图。它在第 t 个训练周期从空间特征内存中计算融合特征
。参考解码器输入融合特征进行重建,而目标解码器生成用于查询内存的特征。此外,Spann3R 使用两个额外的投影头来计算重建下一个图像对所需的关键特征和查询特征,并使用一个记忆编码器
对参考解码器生成的点图进行编码:
3.2. Neural Scene Representation
在本工作中,我们使用Spann3R[57]作为神经场景表示,并将其扩展以预测3D高斯基元。我们将我们的神经场景表示称为场景回归网络(scene regressor network),类似于pose回归或定位网络中的场景回归器[8, 9]。与稀疏场景回归器(以单张图像作为输入)不同,我们的场景回归器以一对图像作为输入,并预测全局坐标系中的密集点图(pointmaps)Xi和每个像素的3D高斯分布Gi:
其中是是参考图像,
是目标图像。然后通过对3D高斯基元集合
进行光栅化,我们使用RGB损失将梯度反向传播到模型中。
在这里,我们不是直接预测每个3D高斯的均值uu,而是预测一个偏移量ΔX,并将其应用于点图以得到均值。然后使用渲染函数:
公式(4)通过可微分光栅化器[28]计算:
其中T是相机pose,K是内参。
3.3. Incremental Reconstruction
我们使用场景回归器(scene regressor)作为神经表示,增量式地重建每个场景。我们强调,在未见过的场景上微调预训练模型(如DUSt3R或Spann3R)是具有挑战性的。这是因为现有的基于DUSt3R的模型是通过真实3D点进行训练的。然而,获取真实3D点在大多数场景中既昂贵又不可行。
3.3.1. Seed Initialization
给定一组无序图像,我们首先选择一张种子图像进行初始化。这与incremental SfM不同,后者需要一对种子图像进行双视图重建。种子图像对必须具有足够的匹配内点和宽基线。这一标准保证了初始图像对与尽可能多的其他图像重叠,以便后续的配准。为了实现类似的目标,我们使用NetVLAD[1]计算每张图像的全局描述符,然后计算每对图像之间的相似度分数。
基于NetVLAD,然后我们进一步构建一个相似度图,其中节点表示图像,边表示图像对,边权重表示相似度分数。如果边的权重小于阈值
,则丢弃该边。然后我们选择具有最大度数的节点作为种子图像
。
选择种子图像后,我们以自监督的方式微调场景回归器。具体来说,我们将种子图像设置为参考帧,并将种子图像的相机姿态设置为单位矩阵。然后我们计算RGB损失:
在初始化过程中,种子图像同时作为场景回归器的参考图像和目标图像:
3.3.2. Image Registration
在种子初始化之后,我们在每个训练周期中逐步配准一批图像。我们将一批新配准的图像添加到训练缓冲区中,并训练场景回归器。当训练收敛以后,我们选择新的一批图像来扩展训练缓冲区。重复此过程,直到所有图像都被配准。
Coarse Camera Pose Estimation.
给定一张已配准的参考图像和一张待配准的目标图像
,我们将它们传递给场景回归器,并获得全局坐标系中的3D点
。由于我们拥有每个图像像素的坐标
及其对应的3D坐标
,我们可以轻松找到2D-3D对应关系
。然后我们使用RANSAC和PnP求解器来获得粗略的相机姿态:
其中是内点数量,且
。
是参考图像,
是我们想要配准的目标图像。只有当内点数量大于内点阈值
时,我们才将目标图像
添加到训练缓冲区中。初始化后,种子图像被选为参考图像。在后续的训练批次中,我们从已配准的图像中选择参考图像,该图像与大多数未配准的图像相连。
Camera Pose Refinement.
由于场景回归器尚未见过这些图像,新配准图像的相机姿态可能不准确。由于我们使用基于Transformer的解码器,并且受GPU内存限制,我们只能在每个训练批次中使用有限的视图(实际上我们在24GB消费级GPU上使用批量大小为1),这很容易导致网络训练发散。
为了解决上述问题,我们提出通过最小化以下点对相机射线一致性损失来进一步优化粗略相机姿态:
其中是图像
的相机中心,
是3D点
与相机中心
之间的缩放因子,
是
与
之间的射线方向。在优化过程中,我们固定种子图像的相机姿态以解决尺度模糊问题,并固定种子图像与其最相似相邻图像之间的缩放因子以解决尺度模糊问题。此外,对于新的训练周期,我们固定在前一周期中配准的相机姿态,仅优化当前训练周期中配准的相机姿态,以提高优化效率。
3.3.3. Finalizing Neural Scene Reconstruction
当所有图像都已配准或无法将更多图像添加到训练缓冲区时,我们提出了一种两阶段策略来提高最终重建质量。
第一阶段是使用公式(8)优化所有相机姿态。这是因为我们在训练过程中逐步配准图像,误差会累积。在此阶段,我们仅固定种子图像的相机姿态,并将所有先前训练周期中获得的相机姿态用作优化的初始值。由于初始值足够准确,最终优化收敛得非常快。
在第二阶段,使用显式3D高斯基元[28]来优化场景细节。这是因为在训练场景回归器时,由于GPU内存限制,我们仅使用了固定的低分辨率图像。因此,场景回归器只能表示粗略的场景几何。在第二阶段,我们使用与[28]相同的策略进行3D高斯密集化和剪枝优化。
4. Experiments
我们使用预训练的Spann3R模型[57]初始化场景回归器网络。在训练过程中,所有数据集的图像分辨率均为512×512。对于种子初始化,我们通过500次迭代微调场景回归器。在增量训练过程中,我们在LLFF数据集上微调场景回归器1,000次迭代,在Mip-NeRF360数据集上微调1,500次迭代。对于新视角合成任务,图像在训练和推理过程中被下采样4倍。
在MipN-eRF360 数据集上面的新视角合成:
相机pose估计效果如下: