【论文笔记】ZeroGS:扩展Spann3R+GS+pose估计

        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估计效果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/969000.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CLIP系列】4:目标检测(ViLD、GLIP)

目录 1 ViLD2 GLIP2.1 前言2.2 损失计算2.3 模型框架 1 ViLD OPEN-VOCABULARY OBJECT DETECTION VIA VISION AND LANGUAGE KNOWLEDGE DISTILLATION 从标题就能看出来,作者是把CLIP模型当成一个Teacher,去蒸馏他自己的网络,从而能Zero Shot去…

基于Docker-compose的禅道部署实践:自建MySQL与Redis集成及故障排查指南

基于Docker-compose的禅道部署实践:自建MySQL与Redis集成及故障排查指南 禅道镜像版本:easysoft/zentao:21.4 Redis版本:redis:6.2.0 Mysql版本:mysql:8.0.35 文章目录 **基于Docker-compose的禅道部署实践:自建MySQL与…

Elasticsearch:同义词在 RAG 中重要吗?

作者:来自 Elastic Jeffrey Rengifo 及 Toms Mura 探索 RAG 应用程序中 Elasticsearch 同义词的功能。 同义词允许我们使用具有相同含义的不同词语在文档中搜索,以确保用户无论使用什么确切的词语都能找到他们所寻找的内容。你可能会认为,由于…

0基础学LabVIEW

对于零基础的朋友来说,学习LabVIEW需要一个科学的学习路径和方法。通过观看优质的B站教程打好基础,再结合实际项目进行实践操作,能够快速提升LabVIEW的应用能力。以下是从入门到进阶的学习建议。 ​ 一、利用B站入门教程打基础 筛选优质教程…

7. Docker 容器数据卷的使用(超详细的讲解说明)

7. Docker 容器数据卷的使用(超详细的讲解说明) 文章目录 7. Docker 容器数据卷的使用(超详细的讲解说明)1. Docker容器数据卷概述2. Docker 容器数据卷的使用演示:2.1 宿主 和 容器之间映射添加容器卷2.2 容器数据卷 读写规则映射添加说明2.3 容器数据卷的继承和共…

零售行业线下门店的AI知识库应用实践

在竞争激烈的零售行业,线下门店的运营效率和服务质量是企业成功的关键因素之一。随着AI技术的不断发展,越来越多的零售企业开始探索如何利用AI知识库提升线下门店的运营效率和员工服务水平。 1. AI知识库在零售行业的应用背景 零售行业面临着诸多挑战&…

Unity Behavior Designer - Behavior Trees for Everyone(行为树)为什么称作AI 的“基石”之一

Behavior Designer 是 Unity 中一个用于创建行为树的插件,主要用于 AI 和 NPC(非玩家角色)的行为管理。行为树(Behavior Trees)是一种基于树形结构的决策树模型,广泛应用于游戏开发中,特别是在控…

八大排序——简单选择排序

目录 1.1基本操作: 1.2动态图: 1.3代码: 代码解释 1. main 方法 2. selectSort 方法 示例运行过程 初始数组 每轮排序后的数组 最终排序结果 代码总结 1.1基本操作: 选择排序(select sorting)也…

Jenkins 新建配置 Freestyle project 任务 六

Jenkins 新建配置 Freestyle project 任务 六 一、新建任务 在 Jenkins 界面 点击 New Item 点击 Apply 点击 Save 回到任务主界面 二、General 点击左侧 Configure Description:任务描述 勾选 Discard old builds Discard old builds:控制何时…

使用 Dockerfile 构建自定义 Nginx 镜像并集成 nginx_upstream_check_module

目录 1. 为什么需要自定义 Nginx 镜像? 2. Dockerfile 解析 2.1 基础镜像选择 2.2 安装依赖 2.3 下载并解压 Nginx 源码 2.4 应用补丁并编译 Nginx 2.5 暴露端口并设置启动命令 3. 构建并运行自定义 Nginx 镜像 3.1 构建镜像 3.2 运行容器 3.3 健康检测配…

【论文笔记】Are Self-Attentions Effective for Time Series Forecasting? (NeurIPS 2024)

官方代码https://github.com/dongbeank/CATS Abstract 时间序列预测在多领域极为关键,Transformer 虽推进了该领域发展,但有效性尚存争议,有研究表明简单线性模型有时表现更优。本文聚焦于自注意力机制在时间序列预测中的作用,提…

【MQ】Spring3 中 RabbitMQ 的使用与常见场景

一、初识 MQ 传统的单体架构,分布式架构的同步调用里,无论是方法调用,还是 OpenFeign 难免会有以下问题: 扩展性差(高耦合,需要依赖对应的服务,同样的事件,不断有新需求&#xff0…

LabVIEW与USB设备开发

开发一台USB设备并使用LabVIEW进行上位机开发,涉及底层驱动的编写、USB通信协议的实现以及LabVIEW与设备的接口设计。本文将详细介绍如何开发USB设备驱动、实现LabVIEW与USB设备的通信以及优化数据传输,帮助用户顺利完成项目开发。下面是一个详细的说明&…

kali连接xshell

1.先保证宿主机:以太网适配器 VMware Network Adapter VMnet8 和kali(net 模式)在同一个网段 windows VMnet8开启 查看是否是自动获取ip ipv4 和ipv6一样的 查看 windows VMnet8的IPv4的地址 查看 kali 的IP地址 window ping的结果&#xf…

557. 反转字符串中的单词 III 简单

557. 反转字符串中的单词 IIIhttps://leetcode.cn/problems/reverse-words-in-a-string-iii/ 给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例 1: 输入:s "Lets take LeetC…

多语言订货系统的语言适配与本地化开发策略

在全球化浪潮的席卷下,商业世界的边界日益模糊,企业纷纷踏上国际化征程,与世界各地的客户展开紧密合作。在这一背景下,多语言订货系统成为企业开拓全球市场的关键基础设施,其语言适配能力与本地化开发策略,…

OpenWRT中常说的LuCI是什么——LuCI介绍(一)

我相信每个玩openwrt的小伙伴都或多或少看到过luci这个东西,但luci到底是什么东西,可能还不够清楚,今天就趁机来介绍下,openwrt中的luci,到底是个什么东西。 什么是LuCI? 首先,LuCI是OpenWRT中…

第39周:猫狗识别 2(Tensorflow实战第九周)

目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 输出 二、数据预处理 2.1 加载数据 2.2 再次检查数据 2.3 配置数据集 2.4 可视化数据 三、构建VGG-16网络 3.1 VGG-16网络介绍 3.2 搭建VGG-16模型 四、编译 五、训练模型 5.1 上次程序的主要Bug 5.2 修改版…

vue3 描边加载动画

效果&#xff1a; 组件代码&#xff1a; <template><divclass"loading-wrap"ref"loadingWrap":style"[{ borderRadius: styles.borderRadius || 4px },{ borderColor: styles.borderColor || #409eff },{ border: loading ? 1px solid #40…

20240911 光迅科技 笔试

文章目录 1、选择题1.11.21.31.41.51.61.71.81.91.101.111.121.131.141.152、编程题2.1岗位:嵌入式软件工程师 题型:15 道选择题,1 道编程题 注意:本文章暂无解析,谨慎分辨答案对错 1、选择题 1.1 若某图有 100 个顶点、90 条边,则该图一定是 (C) 有向图连通图非连…