【论文笔记】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估计效果如下:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Webpack相关优化总结

在使用webpack时提供了各种配置,这里结合在业务中常用的配置汇总一下可以进行的一系列的webpack优化 缩小文件搜索范围 其原理是在构建时,会以用户配置的Entry为开始依次递归遍历每个Module,在遍历每个Module时会调用相应合适的Loader对原模…

【操作系统】操作系统结构

内核 什么是内核? 内核作为应用程序连接硬件设备的桥梁,使得应用程序只需关心与内核交互,不用关心硬件细节。 内核有哪些能力呢? 内核是怎么工作的? Linux 的设计 MultiTask SMP ELF ELF 的意思是可执行文件链接格式…

【无线感知会议系列-22 】Vivisecting Mobility Management in 5G Cellular Networks

这篇是发表在SIGCOMM上的一篇paper 研究方向国内一些移动应用APP厂商:比如抖音,腾讯可以借鉴一下,和终端 厂商联合开发,提高其QOE。 摘要 随着5G技术对多种无线电频段和不同部署模式(例如独立组网(SA)与…

【RAG落地利器】Weaviate、Milvus、Qdrant 和 Chroma 向量数据库对比

什么是向量数据库? 向量数据库是一种将数据存储为高维向量的数据库,高维向量是特征或属性的数学表示。每个向量都有一定数量的维度,根据数据的复杂性和粒度,可以从数十到数千不等。 向量通常是通过对原始数据(如文本、图像、音频、视频等)…

算法18(力扣136)只出现一次的数字

1、问题 给你一个 非空 整数数组 nums,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 2、示例 (1&…

【鸿蒙开发】第三十章 应用稳定性-检测、分析、优化、运维汇总

目录​​​​​​​ 1 概述 2 使用Asan检测内存错误 2.1 背景 2.2 原理概述 2.3 使用约束 2.4 配置参数 2.4.1 在app.json5中配置环境变量 2.4.2 在Run/Debug Configurations中配置环境变量 2.5 Asan使能 方式一 方式二 运行ASan 2.6 ASan异常检测类型 heap-buf…

20250214在ubuntu20.04下使用obs studio录制外挂的1080p的USB摄像头【下载安装】

20250214在ubuntu20.04下使用obs studio录制外挂的1080p的USB摄像头 2025/2/14 9:10 缘起:笔记本电脑在ubuntu20.04下使用Guvcview录制自带的摄像头,各种问题。 1、降帧率。WIN10/11自带的相机应用可以满速30fps,马上重启到ubuntu20.04&#…

phpipam1.7安装部署

0软件说明 phpipam是一个开源Web IP地址管理应用程序(IPAM) phpipam官网:https://www.phpipam.net/ 1安装环境 操作系统:Rocky Linux9.5x86_64 phpipam版本:1.7 php版本:8.0.30 数据库版本&#xff1a…

「vue3-element-admin」Vue3 + TypeScript 项目整合 Animate.css 动画效果实战指南

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …

LabVIEW用户界面(UI)和用户体验(UX)设计

作为一名 LabVIEW 开发者,满足功能需求、保障使用便捷与灵活只是基础要求。在如今这个用户体验至上的时代,为 LabVIEW 应用程序设计直观且具有美学感的界面,同样是不容忽视的关键任务。一个优秀的界面设计,不仅能提升用户对程序的…

AWTK-WEB 快速入门(4) - JS Http 应用程序

XMLHttpRequest 改变了 Web 应用程序与服务器交换数据的方式,fetch 是 XMLHttpRequest 继任者,具有更简洁的语法和更好的 Promise 集成。本文介绍一下如何使用 JS 语言开发 AWTK-WEB 应用程序,并用 fetch 访问远程数据。 用 AWTK Designer 新…

餐饮油烟在线监测仪,守护蓝天的隐形卫士

在城市化的快速发展中,餐饮业作为人们日常生活不可或缺的一部分,带来了便捷与美味的同时,也产生了大量餐饮油烟污染问题。据研究表明,长期暴露于高浓度油烟环境中不仅影响人体健康,还对空气质量造成严重破坏。为了有效…

从Sora到有言:3D视频生成技术的突破与应用

近年来,AIGC领域飞速发展,这个词也越来越高频地出现在了大家的生活中。AIGC 能完成的任务也越来越多,大模型的能力飞速增长 —— 从Deepseek生成文字,到StableDiffusion生成图像,再到Sora可以生成视频。 而现在&#x…

xiao单栏/网格布局typecho主题模板源码

源码介绍 xiao单栏/网格布局typecho主题模板源码 一款基于 bootstrap5.3.3 开发的 typecho 单栏主题 效果预览 源码获取 xiao单栏/网格布局typecho主题模板源码

如何运用边缘计算控制器提升智能工厂的竞争力?

制造业正经历一场深刻的变革。其中,边缘计算作为一项关键技术,在提升生产效率、降低成本以及实现智能制造方面发挥着至关重要的作用。本文将探讨边缘计算在智能工厂中的应用场景及其带来的价值。 边缘计算简介 边缘计算是一种分布式计算范式&#xff0…

今日学习总结

复习了dfs的相关内容&#xff0c;完成了一道dfs相关的题目。 P2371挑战算周长 #include <stdio.h> // 定义一个二维字符数组 map 用于存储地图信息&#xff0c;大小为 25x25 char map[25][25]; // 定义一个常量二维数组 d 作为方向增量数组&#xff0c;用于表示 8 个不同…

SpringMVC学习使用

一、SpringMVC简单理解 1.1 Spring与Web环境集成 1.1.1 ApplicationContext应用上下文获取方式 应用上下文对象是通过new ClasspathXmlApplicationContext(spring配置文件) 方式获取的&#xff0c;但是每次从容器中获得Bean时都要编写new ClasspathXmlApplicationContext(sp…

HCIA项目实践---OSPF的知识和原理总结

9.5 OSPF 9.5.1 从哪些角度评判一个动态路由协议的好坏&#xff1f; &#xff08;1&#xff09;选路佳&#xff08;是否会出环&#xff09; OSPF 协议采用链路状态算法&#xff0c;通过收集网络拓扑信息来计算最短路径&#xff0c;从根本上避免了路由环路的产生。 &#xff08…

算法题(67):最长连续序列

审题&#xff1a; 需要我们在O&#xff08;n&#xff09;的时间复杂度下找到最长的连续序列长度 思路&#xff1a; 我们可以用两层for循环&#xff1a; 第一层是依次对每个数据遍历&#xff0c;让他们当序列的首元素。 第二层是访问除了该元素的其他元素 但是此时时间复杂度来到…

2021年全国研究生数学建模竞赛华为杯E题信号干扰下的超宽带(UWB)精确定位问题求解全过程文档及程序

2021年全国研究生数学建模竞赛华为杯 E题 信号干扰下的超宽带(UWB)精确定位问题 原题再现&#xff1a; 一、背景   UWB&#xff08;Ultra-Wideband&#xff09;技术也被称之为“超宽带”&#xff0c;又称之为脉冲无线电技术。这是一种无需任何载波&#xff0c;通过发送纳秒…