vggsfm

GitHub
1.4k 112 中等 1 次阅读 2天前NOASSERTION图像视频其他
AI 解读 由 AI 自动生成,仅供参考

vggsfm 是一款由 Meta AI 与牛津大学 VGG 团队联合开源的深度学习工具,专注于从图像序列中重建高精度的三维场景结构(SfM)。它巧妙地将视觉几何原理融入深度神经网络,有效解决了传统方法在弱纹理区域匹配困难、动态物体干扰以及大规模场景重建效率低等痛点。

该工具不仅能精准估算相机姿态和生成稀疏点云,最新升级版本更支持输出稠密点云与深度图,并能通过掩码技术过滤视频中的移动物体,实现长达千帧的动态视频序列重建。此外,其结果可直接用于训练高斯泼溅(Gaussian Splatting)模型,快速生成逼真的三维场景。凭借在 CVPR2024 相机姿态估计挑战赛中夺冠的实力,vggsfm 展现了卓越的鲁棒性。

vggsfm 非常适合计算机视觉研究人员、三维重建开发者以及需要处理复杂场景的设计师使用。虽然它提供了命令行演示供技术爱好者尝试,但其核心优势在于为专业用户提供了一个高效、可扩展且精度顶尖的底层重建方案,助力大家轻松探索从静态图片到动态视频的三维数字化世界。

使用场景

某考古团队正在对一处动态拍摄的古建筑遗址进行数字化复原,需从手持摄像机拍摄的长视频中重建高精度 3D 模型。

没有 vggsfm 时

  • 传统算法难以处理视频中行人和车辆等动态物体,导致重建模型出现大量伪影和空洞。
  • 面对超过 1000 帧的连续视频输入,现有工具计算效率极低,甚至因内存溢出而中途崩溃。
  • 相机姿态估计误差较大,尤其在纹理重复或弱纹理区域,无法生成连贯的空间结构。
  • 仅能获取稀疏点云,缺乏深度细节,无法满足后续高保真渲染或测量分析的需求。
  • 流程繁琐,需人工分段处理视频并手动剔除动态干扰,耗时数天且依赖专家经验。

使用 vggsfm 后

  • 利用内置的动态物体掩膜过滤功能,自动识别并排除行人车辆干扰,还原纯净的静态建筑几何结构。
  • 专为序列帧设计的视频运行器轻松支持千帧级输入,高效完成长视频的全程自动化重建。
  • 凭借 CVPR 冠军级的姿态估计能力,在复杂光照和弱纹理下仍能精准锁定相机轨迹,确保模型几何一致性。
  • 直接输出稠密点云与深度图,细节丰富完整,可无缝对接 Gaussian Splatting 进行照片级实时渲染。
  • 一键式流水线大幅降低操作门槛,将原本数天的工作缩短至数小时,让非视觉专家也能独立完成高质量复原。

vggsfm 通过深度融合视觉几何与深度学习,彻底解决了动态场景下长视频 3D 重建的精度与效率难题。

运行环境要求

操作系统
  • Linux
GPU

需要 NVIDIA GPU,支持 CUDA 12.1(安装脚本默认配置),显存需求未明确说明(建议 8GB+ 以处理大规模重建)

内存

未说明

依赖
notes官方提供安装脚本默认创建包含 Python 3.10、PyTorch 2.1 和 CUDA 12.1 的 conda 环境。若无法安装 pytorch3d 可跳过,该库仅用于 Visdom 可视化。首次运行会自动从 Hugging Face 下载预训练模型。处理超过 400 帧的图像序列需使用视频运行器(video_demo.py)。若需生成稠密深度图,需额外克隆并安装 Depth-Anything-V2 依赖。
python3.10
torch==2.1
pytorch3d
lightglue
pycolmap
poselib
visdom
scikit-learn
gradio
vggsfm hero image

快速开始

VGGSfM:基于视觉几何的深度结构光流

预告片

Meta AI Research, GenAI牛津大学,VGG

Jianyuan WangNikita KaraevChristian RupprechtDavid Novotny

[论文] [项目页面] [🤗 演示] [版本 2.0]

更新:

  • [2024年9月9日] 允许导出稠密点云!

  • [2024年9月5日] 增加了如何使用我们的结果训练高斯泼溅模型的说明!

  • [2024年8月26日]

    • 我们引入了一个视频运行器,可以处理序列帧,例如视频中的帧。它支持超过1000个输入帧的重建。通过使用掩码过滤掉移动物体,它还可以有效地从动态视频序列中恢复相机位姿和点云。
  • [2024年7月28日] 增加了使用masks过滤动态物体的支持。

  • [2024年7月10日] 现在我们支持导出稠密深度图!

  • 很高兴地分享,我们在CVPR24 IMC挑战赛中,在相机位姿(旋转与平移)估计方面获得了第1名 🥇。

目录

安装

我们提供了一个简单的安装脚本,默认会设置一个包含Python 3.10、PyTorch 2.1和CUDA 12.1的conda环境。

source install.sh
python -m pip install -e .

该脚本会安装官方的pytorch3dlightgluepycolmapposelibvisdom。如果您无法在您的机器上安装pytorch3d,可以跳过它,因为现在我们只将其用于visdom可视化(即cfg.viz_visualize=True)。

重建

1. 下载预训练模型

检查点将在首次运行时自动从Hugging Face下载。或者,您也可以手动从Hugging FaceGoogle Drive下载。如果您希望手动指定检查点路径,请将auto_download_ckpt设置为False,并在Hydra配置中将resume_ckpt更新为您指定的路径。

2. 运行演示

现在是享受您的3D重建的时候了!您可以从我们提供的示例开始:

# 使用默认设置
python demo.py SCENE_DIR=examples/kitchen 

# 指定查询方法:sp+sift(默认:aliked)
python demo.py SCENE_DIR=examples/statue query_method=sp+sift

# 将查询数量增加到4096(默认:2048)
python demo.py SCENE_DIR=examples/british_museum max_query_pts=4096 

# 假设所有帧共享一个相机模型,并且
# 使用SIMPLE_RADIAL相机模型代替默认的SIMPLE_PINHOLE
# 将查询帧数从默认的3帧增加到6帧
python demo.py shared_camera=True camera_type=SIMPLE_RADIAL query_frame_num=6

# 如果您想要快速重建而无需精细跟踪
python demo.py SCENE_DIR=examples/kitchen fine_tracking=False

所有标志的默认设置都已在cfgs/demo.yaml中指定。您可以根据需要调整这些标志,例如通过max_query_pts减少查询点的数量,或增加query_frame_num`来使用更多的帧作为查询。要强制对场景使用共享相机模型,请将shared_camera=True。要使用来自不同方法的查询点,请将query_method设置为spsiftaliked,或任何组合,如sp+sift。此外,fine_tracking```默认是启用的,但您可以将其设置为False,仅进行粗略匹配,这样可以大大加快推理速度。

重建结果(相机参数和3D点)将自动以COLMAP格式保存在SCENE_DIR/sparse下,分别为cameras.binimages.binpoints3D.bin。这种格式被最近的NeRF/高斯泼溅代码库广泛支持。您可以使用COLMAP GUIviser来查看重建结果。

这种稀疏重建模式一次最多可以处理400帧。如果需要处理更多帧(例如超过1,000帧),请参阅下面的“序列输入”部分获取指导。

3. 可视化选项

如果您希望更方便地进行可视化,我们还提供了基于 GradioVisdom 的可视化选项。

3.1 Gradio 可视化(推荐)

点击展开

可视化结果最简单的方式是使用 Gradio。只需将 gr_visualize 标志设置为 True,系统就会生成一个链接,您可以在任何设备上的任意浏览器中打开。这在远程 Linux 服务器上运行程序且没有图形界面时尤为有用,可以让您在本地计算机上查看结果。请注意,加载可能需要几秒钟。

python demo.py gr_visualize=True ...(其他标志)

3.2 Visdom 可视化

点击展开

要开始使用 Visdom,请在命令行中输入 visdom 启动服务器。服务器启动后,在您的浏览器中访问 http://localhost:8097 即可进入 Visdom 界面。现在,通过启用 viz_visualize=True,每次重建的结果都可以在 Visdom 服务器上可视化并保存:

python demo.py viz_visualize=True ...(其他标志)

您应该会看到如下界面:

UI

3.3 其他可视化功能

  • 可视化 2D 重投影:

    • 要可视化重建的 3D 点的 2D 重投影,请将 make_reproj_video 标志设置为 True。这将在 SCENE_DIR/visuals 目录下生成名为 reproj.mp4 的视频。例如:

    reproj

  • 可视化轨迹预测:

    点击展开
    • 若要可视化我们轨迹预测器的原始预测结果,启用 visual_tracks=True 将生成 track.mp4。在该视频中,透明点表示可见性或置信度较低。

4. 使用您自己的数据

您只需指定数据的路径即可。例如,建议从以下命令开始:

python demo.py SCENE_DIR=/YOUR_FOLDER camera_type=SIMPLE_RADIAL gr_visualize=True make_reproj_video=True

请确保图像存储在 YOUR_FOLDER/images 中。该文件夹应仅包含图像。您可以参考 examples 文件夹中的数据结构示例。

5. 生成更密集的点云

要生成更密集的点云,可以通过设置 extra_pt_pixel_interval 参数来三角测量额外的 3D 点。对于每一帧,都会以 extra_pt_pixel_interval 定义的像素间隔采样一个 2D 网格,该网格用作查询点来估计轨迹,然后将其三角测量为 3D 点。去除噪声点后,这些点会被添加到现有点云中。由于这些额外的 3D 点未在光束法平差过程中优化,因此该方法速度较快,同时仍能保持合理的质量。通常可以从 python demo.py extra_pt_pixel_interval=10 concat_extra_points=True 开始。如果 concat_extra_points=True,额外的点将与现有点合并,从而可以直接用于高斯溅射。这些额外点的详细信息会保存在 additional/additional_points_dict.pt 中。您还可以设置 extra_by_neighbor 来控制每个额外点所考虑的相邻帧数量,以便在处理大量帧时实现高效的推理。

6. 密集深度预测(测试版)

点击展开 我们支持借助 [Depth-Anything-V2](https://github.com/DepthAnything/Depth-Anything-V2) 提取密集深度图。其基本原理是利用 VGGSfM 预测的稀疏 SfM 点云对 Depth-Anything-V2 的密集深度预测进行配准。要启用此功能,请先克隆 Depth-Anything-V2 并安装 scikit-learn:
pip install scikit-learn
git clone git@github.com:DepthAnything/Depth-Anything-V2.git dependency/depth_any_v2
python -m pip install -e .

要启用密集深度预测,在运行 demo.py 时设置 dense_depth=True 即可。生成的深度图将保存在 cfg.SCENE_DIR 下的 depths 文件夹中,采用 COLMAP 格式(如 *.bin)。要在 Visdom 中可视化密集点云(未投影的密集深度图),请设置 visual_dense_point_cloud=True。请注意,由于点的数量较多,我们仅支持在 Visdom 中进行 visual_dense_point_cloud,而不支持在 Gradio 中进行可视化。

7. 顺序输入

对于有序帧输入(如视频),我们支持以滑动窗口方式执行重建,从而可以处理超过 1,000 帧的数据。

其启动脚本 video_demo.py 与上述 demo.py 采用相同的约定。您需要将图像按顺序命名为 0000.png0001.png0002.png 等,放置在 YOUR_VIDEO_FOLDER/images 目录下。然后,只需运行以下命令:

python video_demo.py SCENE_DIR=/YOUR_VIDEO_FOLDER

请注意,video_demo.py 的配置已在 cfgs/video_demo.yaml 中初始化。您可以调整 init_window_sizewindow_size 来控制每个窗口的帧数。joint_BA_interval 标志用于控制在整个序列中联合光束法平差的频率。其他标志,如有关输出保存或可视化的内容,与 demo.py 完全相同。

8. 动态/移动物体

有时,输入帧中可能包含动态或移动物体。当动态物体相对较小的时候,我们的方法通常能够很好地处理。然而,如果动态物体占据了帧的很大一部分,尤其是在相机运动很小的情况下,我们建议过滤掉这些动态像素。

该代码库支持使用掩码来过滤掉动态像素。掩码应放置在 cfg.SCENE_DIR 下的 masks 文件夹中,文件名需与对应的图像匹配(如 images/0000.pngmasks/0000.png)。这些掩码应为二值图像,其中 1 表示需要过滤掉的像素(即动态像素),0 表示保留的像素。您可以参考 DAVIS 数据集中的掩码作为示例。

掩码可以通过目标检测、视频分割或手动标注来生成。这里提供一份关于如何使用 SAM 和 Track-Anything 构建此类掩码的说明SAM2 也是生成这些掩码的一个不错的选择。

9. 训练高斯溅射模型

如果您已使用上述命令成功重建场景,则应在您的 SCENE_DIR 下生成一个名为 sparse 的文件夹,其结构如下:

SCENE_DIR/
├── images/
└── sparse/
    ├── cameras.bin
    ├── images.bin
    └── points3D.bin

现在您可以使用 gsplat 来训练您自己的高斯溅射模型。请按照其官方说明安装 gsplat。我们假设您正在使用 gsplat==1.3.0

训练模型的示例命令如下:

cd gsplat
python examples/simple_trainer.py  default --data_factor 1 --data_dir /YOUR/SCENE_DIR/ --result_dir /YOUR/RESULT_DIR/

10. 常见问题解答

如果遇到内存不足错误该怎么办?

当输入帧数或查询点数量过多时,可能会出现内存不足的错误。在 v2.0 中,我们通过将点分割成若干块并分别进行预测来解决这个问题。这涉及两个硬编码的超参数:predict_tracks 中的 max_points_num=163840,以及 triangulate_tracks 中的 max_tri_points_num=819200。这些值是针对配备 32GB 显存的 GPU 设定的。如果您的 GPU 显存较少或较多,请相应地减少或增加这些值。

如何处理视图重叠极少的稀疏数据?

对于视图稀疏且重叠极少的情况,最简单的解决方案是将 query_frame_num 设置为您图像的总数量,并将 max_query_pts 设置为 4096 或更高。这样可以确保所有帧都被注册。由于只有稀疏视图,推理过程仍然非常快速。例如,以下命令大约用了 20 秒就重建了一个包含 8 帧的场景:

python demo.py SCENE_DIR=a_scene_with_8_frames query_frame_num=8 max_query_pts=4096 query_method=aliked
何时应将 shared_camera 设置为 True?

当您确定输入帧是由同一台相机拍摄,且相机焦距在拍摄过程中没有显著变化时,可将 shared_camera 设置为 True。这一假设通常适用于从视频中提取的图像。

测试

我们仍在准备 VGGSfM v2 的测试脚本。不过,您可以使用我们的 VGGSfM v1.1 代码来复现论文中的基准测试结果。请参考分支 v1.1

致谢

我们深受 colmappycolmapposediffusioncotrackerkornia 的启发。

许可证

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

引用 VGGSfM

如果您觉得我们的仓库很有用,请考虑给它点赞 ⭐,并在您的工作中引用我们的论文:

@inproceedings{wang2024vggsfm,
  title={VGGSfM: 视觉几何驱动的深度结构光运动},
  author={Wang, Jianyuan and Karaev, Nikita and Rupprecht, Christian and Novotny, David},
  booktitle={IEEE/CVF 计算机视觉与模式识别会议论文集},
  pages={21686--21697},
  year={2024}
}

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|昨天
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|昨天
开发框架图像Agent

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.9k|★★☆☆☆|今天
开发框架图像Agent

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|今天
语言模型图像Agent

Deep-Live-Cam

Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。

88.9k|★★★☆☆|昨天
开发框架图像Agent

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频