搜索你想找的开源项目

输入名称、用途或关键词,也可粘贴 GitHub 仓库链接

分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

ubc-vision/solv3r

机器学习

预训练的多视图 3D 重建模型,可从图片或视频序列求解相机位姿与点图。

182
7
Python
Apache-2.0
创建于 4 天前

项目介绍

Solv3R 是一个预训练的 3D 重建模型:输入一组图片(或视频帧),输出相机位姿、深度图、置信度和世界坐标点。它以 Python 包的形式发布,核心是一个模型类,同时附带推理、评测和可视化代码。项目对应论文 Solv3R: 3D Looped Transformer as a Multi-view Solver。

它的特点是把求解过程表示为对隐状态 z 的多次循环调用,而不是一次前向推理。这种设计让几种使用方式都很自然:一次解全部视角(离线)、分批加入图片、按随机顺序加入视角,以及逐帧处理视频流。隐状态可以跨调用复用,因此求解能从已有状态继续,也能在加入新图片后更新。

目标用户是多视图几何、相机位姿估计、稠密重建和视觉定位方向的研究者与工程师。使用需要能跑 PyTorch 推理的环境,以及项目提供的预训练权重。

快速使用

克隆仓库并创建 Python 3.11 环境:

git clone https://github.com/ubc-vision/solv3r.git && cd solv3r
conda create -n solv3r python=3.11 -y && conda activate solv3r
pip install -e .

预训练权重放在 Hugging Face。Solv3R.from_pretrained() 首次调用会下载到 Hugging Face 缓存;也可以把权重放到 checkpoints/solv3r.safetensors 直接使用。

一个最小推理流程:

from solv3r import Solv3R, cameras_from_pose_enc, list_images, load_images

model = Solv3R.from_pretrained()
images = load_images(list_images("path/to/images"))
ctx = model.encode(images)          # 第一张图定义世界坐标系
z = model.solve(ctx, calls=16)      # 循环块调用 16 次
pred = model.decode(z, ctx)         # depth、depth_conf、rays、world_points、pose_enc
c2w, K = cameras_from_pose_enc(pred["pose_enc"], (ctx.H, ctx.W))

图片会缩放到长边 504、两边为 14 的倍数,且不做裁剪。想直接用仓库自带样例数据跑示例:

python examples/offline.py --images examples/data/park --out outputs/offline --sky-mask
python examples/streaming.py --frames examples/data/desk --out outputs/streaming

每个示例会输出相机与深度图(.npz)、点云(.ply)和可在浏览器打开的 .html。结果还能渲染成视频:python examples/render_video.py --input outputs/offline/solve --out outputs/offline/solve.mp4 --aerial,--aerial 适合无人机照片。

继续求解时复用返回的状态:

z = model.solve(ctx, calls=8, z=z)
new_images = load_images(list_images("path/to/more_images"), size=(ctx.H, ctx.W))
z, ctx = model.add_views(z, ctx, new_images)
z = model.solve(ctx, calls=8, z=z)

README 还提供了离线、增量、任意顺序和流式四种示例脚本,以及论文各表格对应的评测入口。

评测与预期结果

评测代码沿用已有协议、未做改动。离线基准覆盖 DTU、ETH3D、7-Scenes、ScanNet++ 和 nuScenes,数据按 DVLT 的脚本准备;流式位姿基准沿用 CUT3R 和 TTT3R 在 Sintel、TUM-dynamics 和 ScanNet 上的设置;基于地图的重定位使用 7-Scenes 和 Cambridge Landmarks。README 给出了预期数值,例如 16 次调用下 DTU AUC@3 为 84.5、ScanNet AUC@3 为 80.7,L8 配置在 Sintel 上的 ATE 为 0.157。这些是论文中的复现目标,不是本站的独立测试结果。

使用约束

  • 代码使用 Apache-2.0,但发布的模型权重基于 DVLT,采用 NVIDIA License,仅限非商业的研究与评估用途 DVLT。
  • 输入处理假定长边 504、两边为 14 的倍数且不裁剪;第一张图定义世界坐标系。
  • 评测需要外部数据集和第三方预处理脚本,只靠仓库本身无法跑通,必须有对应的数据目录。
  • 求解器性质示例和 demo 尚未发布;README 把相关演示引向项目主页的视频。

HotRepo 点评

Solv3R 是一次较新的研究发布:仓库创建于 2026-11-02,站内采样显示 Star 从 2026-11-04 的 100 增至 2026-11-06 的 158,Python 新项目榜记录 2026-11-05 至 2026-11-06 新增 48 Star。目前没有 GitHub 全语言日榜记录,现有数据只说明发布阶段有关注度,不足以判断持续趋势。周边信号与一次模型发布相符:arXiv 论文、项目主页、Hugging Face 权重和基准代码与推理代码一起发布。实际使用的主要限制是权重的 NVIDIA 非商业许可,超出研究与评估用途前需要单独考虑。

本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。