[CVPR 2025] VGGT: Visual Geometry Grounded Transformer

License

查看许可证 3k stars 168 forks Branches Tags Activity

facebookresearch/vggt

main BranchesTags

转到文件 代码

文件夹和文件

名称| 名称| 最后提交信息| 最后提交日期 ---|---|---|---

最新提交

历史

27 Commits docs| docs examples| examples vggt| vggt .gitattributes| .gitattributes .gitignore| .gitignore CODE_OF_CONDUCT.md| CODE_OF_CONDUCT.md CONTRIBUTING.md| CONTRIBUTING.md LICENSE.txt| LICENSE.txt README.md| README.md demo_gradio.py| demo_gradio.py demo_viser.py| demo_viser.py pyproject.toml| pyproject.toml requirements.txt| requirements.txt requirements_demo.txt| requirements_demo.txt visual_util.py| visual_util.py 查看所有文件

仓库文件导航

VGGT: Visual Geometry Grounded Transformer

Paper PDF arXiv Project Page Visual Geometry Group, University of Oxford ; Meta AI Jianyuan Wang, Minghao Chen, Nikita Karaev, Andrea Vedaldi, Christian Rupprecht, David Novotny

@inproceedings{wang2025vggt,
 title={VGGT: Visual Geometry Grounded Transformer},
 author={Wang, Jianyuan and Chen, Minghao and Karaev, Nikita and Vedaldi, Andrea and Rupprecht, Christian and Novotny, David},
 booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
 year={2025}
}

概述

Visual Geometry Grounded Transformer (VGGT, CVPR 2025) 是一个前馈神经网络,它在几秒钟内直接从场景的单个、少量或数百个视图中推断出场景的所有关键 3D 属性,包括外参和内参相机参数、点云图、深度图和 3D 点轨迹。

快速开始

首先,将此仓库克隆到本地计算机,并安装依赖项 (torch, torchvision, numpy, Pillow, 和 huggingface_hub)。

git clone git@github.com:facebookresearch/vggt.git 
cd vggt
pip install -r requirements.txt

或者,您可以将 VGGT 作为包安装(点击此处 查看详情)。 现在,尝试用几行代码运行模型:

import torch
from vggt.models.vggt import VGGT
from vggt.utils.load_fn import load_and_preprocess_images
device = "cuda" if torch.cuda.is_available() else "cpu"
# bfloat16 is supported on Ampere GPUs (Compute Capability 8.0+) 
dtype = torch.bfloat16 if torch.cuda.get_device_capability()[0] >= 8 else torch.float16
# Initialize the model and load the pretrained weights.
# This will automatically download the model weights the first time it's run, which may take a while.
model = VGGT.from_pretrained("facebook/VGGT-1B").to(device)
# Load and preprocess example images (replace with your own image paths)
image_names = ["path/to/imageA.png", "path/to/imageB.png", "path/to/imageC.png"] 
images = load_and_preprocess_images(image_names).to(device)
with torch.no_grad():
  with torch.cuda.amp.autocast(dtype=dtype):
    # Predict attributes including cameras, depth maps, and point maps.
    predictions = model(images)

模型权重将自动从 Hugging Face 下载。如果遇到加载缓慢等问题,您可以手动从这里下载并加载,或者:

model = VGGT()
_URL = "https://huggingface.co/facebook/VGGT-1B/resolve/main/model.pt"
model.load_state_dict(torch.hub.load_state_dict_from_url(_URL))

详细用法

您还可以选择性地选择要预测的属性(分支),如下所示。这与上面的例子实现了相同的结果。这个例子使用了批量大小为 1(处理单个场景),但它自然适用于多个场景。

from vggt.utils.pose_enc import pose_encoding_to_extri_intri
from vggt.utils.geometry import unproject_depth_map_to_point_map
with torch.no_grad():
  with torch.cuda.amp.autocast(dtype=dtype):
    images = images[None] # add batch dimension
    aggregated_tokens_list, ps_idx = model.aggregator(images)
        
  # Predict Cameras
  pose_enc = model.camera_head(aggregated_tokens_list)[-1]
  # Extrinsic and intrinsic matrices, following OpenCV convention (camera from world)
  extrinsic, intrinsic = pose_encoding_to_extri_intri(pose_enc, images.shape[-2:])
  # Predict Depth Maps
  depth_map, depth_conf = model.depth_head(aggregated_tokens_list, images, ps_idx)
  # Predict Point Maps
  point_map, point_conf = model.point_head(aggregated_tokens_list, images, ps_idx)
    
  # Construct 3D Points from Depth Maps and Cameras
  # which usually leads to more accurate 3D points than point map branch
  point_map_by_unprojection = unproject_depth_map_to_point_map(depth_map.squeeze(0), 
                                extrinsic.squeeze(0), 
                                intrinsic.squeeze(0))
  # Predict Tracks
  # choose your own points to track, with shape (N, 2) for one scene
  query_points = torch.FloatTensor([[100.0, 200.0], 
                    [60.72, 259.94]]).to(device)
  track_list, vis_score, conf_score = model.track_head(aggregated_tokens_list, images, ps_idx, query_points=query_points[None])

此外,如果输入帧中的某些像素是不需要的(例如,反射表面、天空或水),您可以简单地通过将相应的像素值设置为 0 或 1 来屏蔽它们。不需要精确的分割掩码 - 简单的边界框掩码即可有效工作(查看此问题 以获取示例)。

可视化

我们提供了多种可视化 3D 重建和跟踪结果的方法。在使用这些可视化工具之前,请安装所需的依赖项:

pip install -r requirements_demo.txt

交互式 3D 可视化

请注意: VGGT 通常在不到 1 秒的时间内重建场景。但是,由于第三方渲染,可视化 3D 点可能需要几十秒钟,这与 VGGT 的处理时间无关。当图像数量很大时,可视化速度会很慢。

Gradio Web 界面

我们基于 Gradio 的界面允许您上传图像/视频、运行重建,并在浏览器中交互式探索 3D 场景。您可以在本地计算机上启动它,也可以在 Hugging Face 上尝试。

python demo_gradio.py

点击预览 Gradio 交互界面 Gradio Web Interface Preview

Viser 3D 查看器

运行以下命令以运行重建并在 viser 中可视化点云。请注意,此脚本需要包含图像的文件夹的路径。它假定文件夹下只有图像文件。您可以设置 --use_point_map 以使用来自点云图分支的点云,而不是基于深度的点云。

python demo_viser.py --image_folder path/to/your/images/folder

跟踪可视化

要可视化多个图像上的点轨迹:

from vggt.utils.visual_track import visualize_tracks_on_images
track = track_list[-1]
visualize_tracks_on_images(images, track, (conf_score>0.2) & (vis_score>0.2), out_dir="track_visuals")

这会将轨迹绘制在图像上,并将其保存到指定的输出目录。

单视图重建

我们的模型在单视图重建上表现出令人惊讶的良好性能,尽管它从未为此任务进行过训练。该模型不需要将单视图图像复制成一对,而是可以直接从单视图图像的token中推断出3D结构。 欢迎使用我们的演示进行尝试,它自然适用于单视图重建。

我们自己没有定量测试单目深度估计性能,但 @kabouzeid 慷慨地提供了 VGGT 与最新方法的比较此处。与最新的单目方法(如 DepthAnything v2 或 MoGe)相比,VGGT 显示出有竞争力或更好的结果,尽管它从未经过单视图任务的明确训练。

运行时和 GPU 内存

我们在一张 NVIDIA H100 GPU 上,针对各种输入大小,对 VGGT 的 aggregator 的运行时和 GPU 内存使用情况进行了基准测试。

输入帧数 | 1 | 2 | 4 | 8 | 10 | 20 | 50 | 100 | 200 ---|---|---|---|---|---|---|---|---|--- 时间 (s) | 0.04 | 0.05 | 0.07 | 0.11 | 0.14 | 0.31 | 1.04 | 3.12 | 8.75 内存 (GB) | 1.88 | 2.07 | 2.45 | 3.23 | 3.63 | 5.58 | 11.41 | 21.15 | 40.63

请注意,这些结果是使用 Flash Attention 3 获得的,它比默认的 Flash Attention 2 实现更快,同时保持几乎相同的内存使用量。欢迎从源代码编译 Flash Attention 3 以获得更好的性能。

研究进展

我们的工作建立在一系列先前的研究项目之上。如果您有兴趣了解我们的研究如何发展,请查看我们以前的作品:

Deep SfM Revisited | ──┐ ---|--- PoseDiffusion | ─────► | VGGSfM ──► VGGT CoTracker | ──┘

致谢

感谢这些出色的仓库:PoseDiffusion, VGGSfM, CoTracker, DINOv2, Dust3r, Moge, PyTorch3D, Sky Segmentation, Depth Anything V2, Metric3D 以及社区中许多其他鼓舞人心的作品。

待办事项

许可证

有关此代码可用的许可证的详细信息,请参阅 LICENSE 文件。

关于

[CVPR 2025] VGGT: Visual Geometry Grounded Transformer

资源

自述文件

许可证

查看许可证

行为准则

行为准则

安全策略

安全策略 Activity Custom properties

Stars

3k stars

Watchers

86 watching

Forks

168 forks 举报仓库

Releases

未发布任何版本

Packages 0

未发布任何包

Contributors 5

语言

页脚

© 2025 GitHub, Inc.

页脚导航

你现在无法执行此操作。