must3r:高效的多视图网络3D重建开源项目

must3r:高效的多视图网络3D重建开源项目

项目介绍

must3r 是一个基于多视图网络进行立体3D重建的开源项目,由 Naver 实验室开发。该项目旨在通过使用多视图网络对一系列图像进行相机姿态和3D结构的实时预测,实现高效、准确的3D重建。must3r 项目采用对称的 DUSt3R 架构,并引入了多层记忆机制,使其能够处理不同分辨率的图像,并在多个场景中实现出色的性能。

项目技术分析

must3r 项目采用了多种先进的技术,包括:

  • 对称的 DUSt3R 架构:该架构通过使用多个视角的图像来预测相机姿态和3D结构,从而提高了重建的准确性和效率。
  • 多层记忆机制:该机制能够存储多个时间点的图像和相机姿态信息,从而实现了在线预测和持续更新。
  • RoPE 位置嵌入:该技术用于对图像进行编码,并提高重建的精度。
  • 预训练模型:must3r 项目提供了多个预训练模型,方便用户快速进行3D重建。

项目及技术应用场景

must3r 项目在多个场景中都有广泛的应用,包括:

  • 虚拟现实和增强现实:must3r 项目可以用于创建逼真的虚拟环境和增强现实场景,从而提供更加沉浸式的体验。
  • 机器人导航和自动驾驶:must3r 项目可以用于生成精确的3D地图,从而帮助机器人进行导航和自动驾驶。
  • 历史建筑保护:must3r 项目可以用于重建历史建筑和文物,从而帮助历史建筑的保护和传承。

项目特点

must3r 项目具有以下特点:

  • 高效:must3r 项目采用了多层记忆机制和预训练模型,从而实现了高效的3D重建。
  • 准确:must3r 项目采用了多种先进的技术,从而提高了重建的准确性。
  • 易用:must3r 项目提供了详细的文档和示例代码,方便用户快速上手和使用。
  • 开源:must3r 项目是一个开源项目,用户可以自由地使用和改进该项目。

总结

must3r 是一个高效、准确、易用的多视图网络3D重建开源项目,具有广泛的应用场景。该项目采用了多种先进的技术,并提供了详细的文档和示例代码,方便用户快速上手和使用。我们相信,must3r 项目将会在3D重建领域发挥重要的作用。

使用说明

安装

micromamba create -n must3r python=3.11 cmake=3.14.0
micromamba activate must3r 
pip3 install torch==2.7.0 torchvision==0.22.0 torchaudio==2.7.0 --index-url https://download.pytorch.org/whl/cu126 # 使用与您的系统兼容的正确版本的cuda
pip3 install -U xformers==0.0.30 --index-url https://download.pytorch.org/whl/cu126

git clone --recursive https://github.com/naver/must3r.git
cd must3r
# 如果您已经克隆了must3r:
# git submodule update --init --recursive

pip install -r dust3r/requirements.txt
pip install -r dust3r/requirements_optional.txt
pip install -r requirements.txt

# 安装 asmk
pip install faiss-cpu  # 或者使用官方支持的方式(未经测试): micromamba install -c pytorch faiss-cpu=1.11.0  # faiss-gpu=1.11.0 
mkdir build
cd build
git clone https://github.com/jenicek/asmk.git
cd asmk/cython/
cythonize *.pyx
cd ..
pip install .
cd ../..

# 可选步骤:MUST3R 依赖于 RoPE 位置嵌入,您可以为更快的运行时编译一些 cuda 内核。
cd dust3r/croco/models/curope/
pip install .
cd ../../../../

示例

python demo.py --weights /path/to/MUSt3R_512.pth --retrieval /path/to/MUSt3R_512_retrieval_trainingfree.pth --image_size 512 --viser

# 使用 --amp bf16 如果您的gpu支持
# 使用 --local_network 使其在本地网络上可用,或 --server_name 手动指定url
# 使用 --server_port 更改端口,默认情况下,它将从 7860 开始搜索可用的端口
# 使用 --device 使用不同的设备,默认情况下是 "cuda"
# --viser 用于同时启动 viser 服务器(用于实时更新)。您需要打开一个新标签页来查看此内容。注意:仅启动了一个实例,因此不支持多个实例。它将在端口 8080(如果可用)上启动。
# --allow_local_files 添加一个用于从本地目录加载图像的第二个标签页

# 其他示例
# 512分辨率 bf16,允许本地文件
python demo.py --weights /path/to/MUSt3R_512.pth --retrieval /path/to/MUSt3R_512_retrieval_trainingfree.pth --image_size 512 --amp bf16 --viser --allow_local_files

# 224分辨率,fp16,允许本地文件
python3 demo.py --weights /path/to/MUSt3R_224_cvpr.pth --retrieval /path/to/MUSt3R_224_retrieval_trainingfree.pth --image_size 224 --viser --allow_local_files --amp fp16
# 768分辨率(将使用插值位置嵌入)
python demo.py --weights /path/to/MUSt3R_512.pth --retrieval /path/to/MUSt3R_512_retrieval_trainingfree.pth --image_size 768 --amp bf16 --viser

选择图像

"细化迭代次数" 增加它以在关键帧上进行多次传递(对于回路闭合很有用)

重要
"最大批处理大小" -> 如果您使用的是小型gpu或您有很多图像,请将其设置为1以限制vram使用。

模式: 1 - 对于简单的视频序列,将其保留为 "序列:linspace"
2 - 对于无序的图像集合,更改为 "无序:检索"

这两个模式共享相同的参数:

选择内存图像数量(我会说尽可能多,但不要超过300,图像越多,速度越慢/内存需求越大)
将 "渲染一次" 切换关闭。 如果 "细化迭代次数" > 0,您可以将其切换为打开

3 - 对于较长的视频序列: "序列:slam关键帧"
4 - 对于较长的视频序列,如果 KDTree/slam 对您来说太慢: "序列:本地上下文和linspace关键帧"

默认参数应该足够好,可能在高分辨率下增加 slam 的子采样。
在线版本等价于 "序列:slam关键帧" 且 local_context=0。

点击 "运行"

在线视觉里程计演示 (open3d)

# 示例
# 从网络摄像头进行 slam 演示(512模型)
python slam.py --chkpt /path/to/MUSt3R_512.pth --res 512 --subsamp 4 --gui --input cam:0 

# 从图像目录进行 slam 演示(224模型)
python slam.py \
	--chkpt "/path/to/MUSt3R_224_cvpr.pth" \
	--res 224 \
	--subsamp 2 \
  --keyframe_overlap_thr 0.05 \
  --min_conf_keyframe 1.5 \
  --overlap_percentile 85 \
	--input "/path_to/TUM_RGBD/rgbd_dataset_freiburg1_xyz/rgb" \  # 可以是一个视频帧的文件夹,或网络摄像头:cam:0
	--gui

# 没有gui的 slam 演示(它将写入最终内存状态 <memory.pkl> 和相机轨迹 <all_poses.npz>,可选重新渲染 with --rerender)
python slam.py --chkpt /path/to/MUSt3R_512.pth --res 512 --subsamp 4 --input /path/to/video.mp4 --output /path/to/export

在右上角点击启动切换

培训

注意事项

must3r 的培训自 CVPR 以来已经发展,我将写一些注意事项:

  • 首先,MUSt3R 是实现的

重要
"最大批处理大小" -> 如果您使用的是小型gpu或您有很多图像,请将其设置为1以限制vram使用。

模式: 1 - 对于简单的视频序列,将其保留为 "序列:linspace"
2 - 对于无序的图像集合,更改为 "无序:检索"

这两个模式共享相同的参数:

选择内存图像数量(我会说尽可能多,但不要超过300,图像越多,速度越慢/内存需求越大)
将 "渲染一次" 切换关闭。 如果 "细化迭代次数" > 0,您可以将其切换为打开

3 - 对于较长的视频序列: "序列:slam关键帧"
4 - 对于较长的视频序列,如果 KDTree/slam 对您来说太慢: "序列:本地上下文和linspace关键帧"

默认参数应该足够好,可能在高分辨率下增加 slam 的子采样。
在线版本等价于 "序列:slam关键帧" 且 local_context=0。

点击 "运行"

在线视觉里程计演示 (open3d)

# 示例
# 从网络摄像头进行 slam 演示(512模型)
python slam.py --chkpt /path/to/MUSt3R_512.pth --res 512 --subsamp 4 --gui --input cam:0 

# 从图像目录进行 slam 演示(224模型)
python slam.py \
	--chkpt "/path/to/MUSt3R_224_cvpr.pth" \
	--res 224 \
	--subsamp 2 \
  --keyframe_overlap_thr 0.05 \
  --min_conf_keyframe 1.5 \
  --overlap_percentile 85 \
	--input "/path_to/TUM_RGBD/rgbd_dataset_freiburg1_xyz/rgb" \  # 可以是一个视频帧的文件夹,或网络摄像头:cam:0
	--gui

# 没有gui的 slam 演示(它将写入最终内存状态 <memory.pkl> 和相机轨迹 <all_poses.npz>,可选重新渲染 with --rerender)
python slam.py --chkpt /path/to/MUSt3R_512.pth --res 512 --subsamp 4 --input /path/to/video.mp4 --output /path/to/export

在右上角点击启动切换

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伏崴帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值