VGG组联合Meta改进了dust3r,输入图片,输出对应的一系列3D属性,被CVPR2025收录!

1.abstract

我们提出了VGGT,一种前馈神经网络,能够直接从场景的一个、几个或数百个视角推断出所有关键的3D属性,包括相机参数、点云图、深度图和3D点轨迹。VGGT不仅简单高效,能在不到一秒的时间内重建图像,而且在无需视觉几何优化技术后处理的情况下,仍然优于其他替代方案。该网络在多个3D任务中实现了最先进的成果,包括相机参数估计、多视角深度估计、密集点云重建和3D点跟踪。我们还展示了使用预训练的VGGT作为特征骨干网络,能显著提升下游任务的性能,如非刚性点跟踪和前馈式新视角合成。

2.introduction

DUSt3R [129]及其改进版MASt3R通过神经网络直接解决3D重建任务,几乎完全避免了几何后处理。但这些网络一次只能处理两张图像,并依赖后处理来重建更多图像,融合成对重建。

本文进一步推进了减少后处理中对3D几何优化的需求。我们提出了视觉几何基础Transformer(VGGT),这是一种前馈神经网络,能够从一个、几个甚至数百个场景输入视图中进行3D重建。VGGT预测包括相机参数、深度图、点云图和3D点轨迹在内的完整3D属性集,并在几秒钟内完成一次前向传递。

我们还表明,无需为3D重建设计特殊网络。VGGT基于一个相当标准的大型Transformer [119],没有特定的3D或其他归纳偏差(除了在帧间和全局注意力之间交替),但在大量带有3D注释的公开数据集上训练。因此,VGGT与自然语言处理和计算机视觉中的大型模型(如GPTs [1, 29, 148]、CLIP [86]、DINO [10, 78]和Stable Diffusion [34])构建方式相同。这些模型已成为多功能骨干,可以微调以解决新的特定任务。同样,我们展示了VGGT计算的特征可以显著增强下游任务,如动态视频中的点跟踪和新视角合成。

最近有几个大型3D神经网络的例子,包括DepthAnything [142]、MoGe [128]和LRM [49]。然而,这些模型只专注于单一的3D任务,如单目深度估计或新视角合成。而VGGT使用共享骨干网络预测所有感兴趣的3D量。我们证明了学习预测这些相互关联的3D属性可以提高整体准确性,尽管可能存在冗余。同时,我们展示了在推理过程中,可以从单独预测的深度和相机参数中导出点图。

3. Method

3.1问题设定

输入是N个RGB图片序列,VGGT的transformer是一个从图片序列到对应的一组3D属性的函数,对于每一张输入图片,输出相机内参和外参,深度图,点图,C点追踪维特征网格

1)相机参数

和SfM的框架一致,相机参数表示为,其中q为四元数,t为平移向量,f为视场角。

2)深度图

图像 ​ 的域定义为:

深度图定义为,是每一个像素对应的深度值,其中是像素位置。

3)点图

与dust3r一样,每一个像素对应一个3D点:, 3D 点 定义在第一个相机 g1​ 的坐标系中,将其作为世界参考系。

4)关键点跟踪

对于关键点跟踪,采用类似 Track-Any-Point [25, 57] 的方法。给定查询图像 ​ 中的一个固定查询点 ​,网络输出一个轨迹:

Transformer 并不直接输出轨迹,而是输出特征 。跟踪任务由一个单独的模块完成,该模块实现函数:

两个网络 f 和 T 是端到端联合训练的。

输入图像序列的顺序是任意的,但第一张图像被选为参考帧,

3.2. Feature Backbone

最近的研究表明,3D 深度学习可以通过减少对模型的先验假设(归纳偏置),让模型从大量 3D 标注数据中学习到更好的表示。因此,我们的模型 f 是一个基于 Transformer 的大型网络。

输入图像首先通过 DINO被变成一组 token ,所有帧的 token 被组合起来,输入主网络结构进行处理,交替使用帧内自注意力层和全局自注意力层。

标准 Transformer 使用全局自注意力,本文引入了交替注意力机制(Alternating-Attention)

帧内自注意力(frame-wise self-attention)分别关注每帧内的 token ​,而全局自注意力(global self-attention)则联合关注所有帧的 token ,这种设计在整合不同图像信息和归一化每帧内 token 激活之间取得了平衡。这样,我们的架构没有使用任何交叉注意力层,仅使用自注意力层

3.3. Prediction heads

在这里,我们描述模型 f 如何预测相机参数、深度图、点云图和点轨迹。首先需要小补一个知识点:

ICLR2024收录了一篇来自Meta和Inria的文章VISION TRANSFORMERS NEED REGISTERS,这篇文章主要针对ViT在处理图像时的局限性提出了一种新的改进方法——“registers”(寄存器)

ViT的一个局限:ViT在处理图像时,某些区域(如背景或边缘)可能缺乏足够的信息,导致模型在这些区域的注意力分配不够合理。这种信息稀疏性可能影响模型的整体性能,尤其是在处理复杂场景时Registers是一种额外的可学习参数,类似于Transformer中的特殊token(如[CLS] token)。它们被添加到输入序列中,用于捕捉图像中未被充分利用的信息(如背景或边缘)。提供额外的“存储空间”,帮助模型更好地处理信息稀疏的区域。增强模型对全局和局部信息的整合能力,提升特征提取效果。

具体的做法是:在ViT的输入序列中引入一组可学习的registers。这些registers与图像patches一起输入到Transformer中,参与自注意力机制的计算。Registers在训练过程中通过反向传播优化,逐渐学会捕捉图像中的有用信息。它们不依赖于特定图像内容,而是通用的辅助特征

现在我们回到主题,关注于网络的head,先来介绍一些架构内的设置:

加入寄存器:首先,对于每张输入图像,为其对应的图像 token 添加一个额外的相机 token 和四个寄存器 token,然后拼接起来送入AA中,得到输出token ,前面也提到过,我们要把第一帧图片的相机坐标系作为模型的世界坐标系,所以为了区别第一帧,第一帧的相机 token 和寄存器 token设置为,其他帧为,经过优化以后,每一帧的相机token和寄存器都是特定的,然后根据上述论文,结束训练以后丢弃寄存器,使用进行预测。

对于坐标系,我们使用了第一帧图片的相机坐标系作为模型的世界坐标系,因此第一帧的旋转四元数与平移为,相机和寄存器token为

接下来,我们还是和3.1一样,按照输出来一个一个解释:

1)相机pose

相机参数 ​ 通过输出的相机 token ​ 预测得到,这个camera head是四个额外的自注意力层和一个线性层。

2)深度图与pointmap

首先通过 DPT 层 [87] 转换为密集特征图,然后,每个  通过一个 3×3 卷积层映射到对应的深度图和点图 ,我们还为每个深度图和点云图分别预测了随机不确定性,不确定性图用于损失函数中,并且在训练后与模型对预测的置信度成正比。

3)点跟踪

同3.1中提到的,点跟踪是另外一个网络,但是我们先要得到特征,在2)中,DPT 头还输出密集特征,作为跟踪头的输入,给定查询图像  中的一个查询点 

跟踪头  预测所有图像 ​ 中与  对应的 2D 点集,这个过程是,使用 CoTracker2 架构通过相关性计算和自注意力层预测查询点在其他图像中的对应点。

我们的跟踪器不假设输入帧的任何时间顺序,因此可以应用于任何输入图像集,而不仅仅是视频。

3.4. Training

我们使用多任务损失端到端训练 VGGT:

我们发现相机损失、深度损失和点图损失的范围相似,因此不需要额外加权。跟踪损失的 λ=0.05。

1)pose损失

使用Huber 损失:

2)深度与点图loss

遵循 DUSt3R [129],通过预测的不确定性图加权计算了各自loss,实现了基于随机不确定性的损失:

3)点跟踪loss

训练配置

数据集包括:Co3Dv2 [88]、BlendMVS [146]、DL3DV [69]、MegaDepth [64]、Kubric [41]、WildRGB [135]、ScanNet [18]、HyperSim [89]、Mapillary [71]、Habitat [107]、Replica [104]、MVS-Synth [50]、PointOdyssey [159]、Virtual KITTI [7]、Aria Synthetic Environments [82]、Aria Digital Twin [82] 以及一个类似于 Objaverse [20] 的艺术家创建的合成数据集。这些数据集涵盖了各种领域,包括室内和室外环境,并包含合成和真实场景。这些数据集的 3D 注释来自多种来源,例如直接传感器捕获、合成引擎或 SfM 技术 [95]。

使用 L=24 层全局和帧内注意力。模型总共包含约 12 亿个参数。输入帧、深度图和点云图的最大尺寸调整为 518 像素。训练在 64 个 A100 GPU 上运行,耗时 9 天。我们使用梯度范数裁剪,阈值为 1.0,以确保训练稳定性。利用 bfloat16 精度和梯度检查点来提高 GPU 内存和计算效率。

4.实验

4.1pose估计

使用标准指标 AUC@30,结合 RRA(相对旋转精度) 和 RTA(相对平移精度)。VGGT 的预测结果(相机姿态、点云图和深度图)可以作为 捆绑调整(BA) 的良好初始化,从而进一步提升精度。结合 BA 后,VGGT 的优化时间仅需 2 秒,远快于传统方法(如 [125] 中的三角测量和迭代优化)。尽管 VGGT 的前馈模式已经优于所有现有方法,但后优化仍能带来进一步的性能提升

4.2. Multi-view Depth Estimation

使用 DTU 标准指标,包括:Accuracy、Completeness、OverallVGGT 的 多图像训练方案 使其能够自然地推理多视角三角测量,而不是像 DUSt3R 那样依赖临时的对齐操作(如平均多个成对相机三角测量结果)。这种设计使 VGGT 在多视角深度估计任务中表现出色

4.3. Point Map Estimation

在ETH3D 数据集 上进一步评估了 VGGT 在点云预测任务中的性能,并与 DUSt3R 和 MASt3R 进行了对比,如表 3 和图 4 

4.4. Image Matching

 ScanNet 数据集 上评估了 VGGT 在 两视图图像匹配任务的性能,

两视图图像匹配是计算机视觉中的一个经典问题,属于刚性点跟踪的特例(仅限于两个视图)。尽管 VGGT 并非专门针对此任务设计,但它仍可作为评估跟踪精度的基准。对每对图像提取匹配点,并使用这些匹配点估计本质矩阵(Essential Matrix),进而完成相机标定,即SVD得到相对相机姿态。

最终指标是相对pose精度,通过 AUC 衡量。尽管 VGGT 未针对两视图匹配任务进行专门训练,但其在 ScanNet 数据集 上的表现优于所有基线方法,取得了最高的精度

5. Discussions

当前模型仅适用于常规视角图像,无法处理鱼眼或全景图像。并且当输入图像存在极端旋转时,重建性能会显著下降。然模型能够处理轻微的非刚性运动,但在显著非刚性变形(如大幅度的物体形变)场景中表现不佳。

改进方法

模型架构设计灵活,能够通过微调和最小限度的修改适应新的场景或任务。通过在目标数据集上微调模型,可以解决上述局限性,而无需对架构进行大规模修改。

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

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

相关文章

idea2025.2中maven编译中文乱码

问题描述:使用idea2025.2编译器中maven编译java文件后中文出现乱码情况解决方案:添加指令: JAVA_TOOL_OPTIONS-Dfile.encodingUTF-8 在下图位置注意:再次编译时,可以在原本文件中小范围修改一点内容(打个…

【适度精简】Windows 7 旗舰版-emmy精简系统

Windows 7旗舰版曾是非常受欢迎的操作系统,但随着时间推移和技术发展,其在一些场景下暴露出了诸多问题,适度精简的Windows 7旗舰版正是为解决这些问题而出现,以下是从用户软件痛点角度对其背景和作用的分析。 添加图片注释&#x…

数据分析编程第七步:分析与预测

7.1 销售趋势分析利用历史销售数据统计月销售额,计算季节化因子,获取去季节化销售数据,然后进行线性拟合,最后预测接下来的某个月的销售额。第一步:读数,统计月销售额A1file(“sales.csv”).importtc(order…

【web3】十分钟了解web3是什么?

十分钟了解web3是什么?Web3的核心概念区块链与去中心化智能合约加密货币与代币去中心化应用(DApps)钱包与身份验证DAO(去中心化自治组织)Web3 国内产品Web3 国际产品Web3 基础设施Web3 应用场景技术实现特点挑战与未来Web3的核心…

联合体和枚举——嵌入式学习笔记

目录 前言 一、联合体(共用体) 1、基本概念 2、初始化和引用 (1)初始化 (2)引用 二、枚举 前言 在C语言的编程世界中,我们早已熟悉了结构体struct这种能将不同数据类型捆绑在一起的“打包…

SRE命令行兵器谱之思想篇:像SRE一样思考——命令行不只是工具,更是你的战友

SRE命令行兵器谱之思想篇:像SRE一样思考——命令行不只是工具,更是你的战友 欢迎来到《SRE命令行兵器谱》系列。在深入研究 grep, lsof, tcpdump 这些强大“兵器”的细节之前,我们必须先回答一个更重要的问题: 一个SRE(网站可靠性工程师)在黑色的终端窗口前,脑子里想的…

STL库——list(类模拟实现)

ʕ • ᴥ • ʔ づ♡ど 🎉 欢迎点赞支持🎉 个人主页:励志不掉头发的内向程序员; 专栏主页:C语言; 文章目录 前言 一、基本框架 二、构造函数 三、析构函数 四、赋值重载 五、增删查改 5.1、push_front/pus…

在PowerPoint和WPS演示让蝴蝶一直跳8字舞

如何让PPT中插入的对象按指定的轨迹运动并且一直“停不下来”?简单三步:①插入对象、②设置路径动画、③设置动画重复。本文以蝴蝶图片一直跳8字舞为例进行实际操作讲解,PowerPoint和WPS演示都一样操作,本文以WPS演示进行讲解。第…

并发编程——06 JUC并发同步工具类的应用实战

0 常用并发同步工具类的真实应用场景JDK 提供了比synchronized更加高级的各种同步工具,包括ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等,可以实现更加丰富的多线程操作;1 ReentrantLock(可重入的占用锁&#xff0…

Apple登录接入记录

Apple文档——通过 Apple 登录 使用入门 - 通过 Apple 登录 - Apple Developer Apple文档——设计要求——登录通过 Apple 登录 | Apple Developer Documentation 插件github版——apple-signin-unity(README 中为接入步骤) GitHub - lupidan/apple-…

【小程序-慕尚花坊04】网络请求并发与loading

网络请求并发与loading一,网络请求并发与loading1,并发处理1.1,异步实现方式2.2,Promise.all异步方式封装2,loading加载2.1,loading的基本使用2.2,loading与并发结合案例2.3,loading…

CentOS 7 升级 OpenSSH 10.0p2 完整教程(含 Telnet 备份)

🔹 CentOS 7 升级 OpenSSH 10.0p2 完整教程(含 Telnet 备份) 注意:为了避免升级 SSH 时无法远程登录,建议先启用 Telnet 服务 作为备用连接方式。 CentOS 7 默认 OpenSSH 版本是 7.x,升级到 10.0p2 需要 源…

aragfw9.dll aqnky-ef.dll aqua dock.dll apscon~1.dll apropdll.dll app_web_yqnqasrp.dll app_web_

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

rabbitMQ延时队列实现,怎么保证消息的幂等

一、RabbitMQ 延时队列实现方式 基于 TTL(Time-To-Live) 死信队列(Dead Letter Queue) 这是最常用的实现方式,核心思路是: (1)消息设置过期时间(TTL) (2)消息过期后进入绑定的死信队…

前沿技术观察:从AI 时代到量子计算的下一站

前沿技术观察:从AI 时代到量子计算的下一站🚀 技术的浪潮一波接一波,从 人工智能 到 区块链,再到 边缘计算、元宇宙、量子计算,这些前沿技术正在深刻影响我们的生活与产业格局。 对于开发者和技术爱好者来说&#xff0…

通过Kubernetes安装mysql5服务

以下是清晰、结构化的操作流程优化说明,按步骤梳理从部署到配置持久化、暴露服务的完整过程:一、基础部署:快速验证 MySQL 可用性创建有状态工作负载进入 KubeSphere 项目 → 工作负载 → 有状态副本集 → 创建,选择 通过镜像创建…

【mysql】SQL 中 IS 与 = 的区别:一个 NULL 值引发的思考

SQL 中 IS 与 的区别:一个 NULL 值引发的思考为什么查询结果总是少一条数据?可能是 NULL 在捣鬼在 SQL 查询中,很多开发者都曾遇到过这样的困惑:明明看起来正确的查询语句,返回的结果却总是与预期不符。这往往是因为没…

openGauss笔记

1、安装 直接用docker安装 2、国产化 符合国产化要求 3、客户端 3.1 dbeaver 社区版本(25.1.4)即可,驱动建议用离线版本,在官网下载最新的,然后在驱动管理里面进行添加本地的jar 3.1.1 驱动配置3.1.2 依赖 需要java版本…

SQL语言增删改查之C与R

本节通关要求1、掌握 SQL 语句对数据库进行的创建 Create 和读取 Retireve 操作的指令;2、多练习🎮说明:操作对象是数据表中的数据行,也就是表中的记录。请明确操作对象,不要误伤友军。背景:create table i…

栈溢出问题

brpc 的 bthread 默认协程栈大小是 128KB(非 pthread 模式)。如果在一个bthread中,它执行的函数内定义了一个局部变量map,有很多个元素,map的大小超过了128KB,协程会自动申请新的栈空间吗?这里要…