统一的表面重建框架
项目页面 | 文档 | 数据集 | 示例
关于
SDFStudio是一个统一的、模块化的神经隐式表面重建框架,构建于出色的nerfstudio项目之上。我们提供了三个主要的隐式表面重建方法的统一实现:UniSurf、VolSDF 和 NeuS。SDFStudio还支持各种场景表示方法,如MLP、Tri-plane、Multi-res特征网格,以及多种点采样策略,如UniSurf中的表面引导采样和NeuralReconW的体素表面引导采样。它进一步集成了该领域的最新进展,如利用单目线索(MonoSDF)、几何正则化(UniSurf)和多视图一致性(Geo-NeuS)。得益于统一和模块化的实现,SDFStudio简化了从一种方法到另一种方法的概念转移。例如,Mono-NeuS将MonoSDF的理念应用于NeuS,Geo-VolSDF将Geo-NeuS的理念应用于VolSDF。
更新
2023.06.16: 添加 bakedangelo
,将 BakedSDF
与数值网格和 Neuralangelo
的进阶训练相结合。
2023.06.16: 添加 neus-facto-angelo
,将 neus-facto
与数值网格和 Neuralangelo
的进阶训练相结合。
2023.06.16: 支持 Neuralangelo。
2023.03.12: 支持 BakedSDF。
2022.12.28: 支持 Neural RGB-D Surface Reconstruction。
快速入门
1. 安装: 设置环境
先决条件
系统上必须安装CUDA。此库已经通过了11.3版本的测试。你可以在这里 找到更多关于安装CUDA的信息。
创建环境
SDFStudio需要 python >= 3.7
。我们建议使用conda来管理依赖关系。请确保在继续之前安装了 Conda。
conda create --name sdfstudio -y python=3.8
conda activate sdfstudio
python -m pip install --upgrade pip
依赖项
安装带有CUDA的pytorch(此仓库已测试与CUDA 11.3)和 tiny-cuda-nn
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html
pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
安装SDFStudio
git clone https://github.com/autonomousvision/sdfstudio.git
cd sdfstudio
pip install --upgrade pip setuptools
pip install -e .
# 安装命令行补全
ns-install-cli
2. 训练您的第一个模型
以下命令将训练一个 NeuS-facto 模型,
# 下载一些测试数据: 如果您的系统没有安装curl,可能需要安装它
ns-download-data sdfstudio
# 在dtu数据集scan65上训练模型
ns-train neus-facto --pipeline.model.sdf-field.inside-outside False --vis viewer --experiment-name neus-facto-dtu65 sdfstudio-data --data data/sdfstudio-demo-data/dtu-scan65
# 或者您也可以在具有单目先验的Replica数据集room0上训练模型
ns-train neus-facto --pipeline.model.sdf-field.inside-outside True --pipeline.model.mono-depth-loss-mult 0.1 --pipeline.model.mono-normal-loss-mult 0.05 --vis viewer --experiment-name neus-facto-replica1 sdfstudio-data --data data/sdfstudio-demo-data/replica-room0 --include_mono_prior True
如果一切正常,您应该看到以下训练进展:
在终端末尾的链接导航将加载webviewer(由nerfstudio开发)。如果您在远程机器上运行,您需要进行端口转发(默认7007)。使用RTX3090 GPU,在20K次迭代大概需要15分钟,但您可以在2K次迭代后在webviewer中看到合理的重建结果。
从检查点恢复/可视化现有运行
加载预训练模型的命令如下
ns-train neus-facto --trainer.load-dir {outputs/neus-facto-dtu65/neus-facto/XXX/sdfstudio_models} sdfstudio-data --data data/sdfstudio-demo-data/dtu-scan65
这将自动恢复训练。如果您不想继续训练,请在您的训练命令中添加 --viewer.start-train False
。注意命令的顺序很重要,dataparser子命令需要在模型子命令之后。
3. 导出结果
一旦你有了训练好的模型,你可以导出网格并渲染网格。
提取网格
ns-extract-mesh --load-config outputs/neus-facto-dtu65/neus-facto/XXX/config.yml --output-path meshes/neus-facto-dtu65.ply
渲染网格
ns-render-mesh --meshfile meshes/neus-facto-dtu65.ply --traj interpolate --output-path renders/neus-facto-dtu65.mp4 sdfstudio-data --data data/sdfstudio-demo-data/dtu-scan65
如果一切正常,您将获得以下视频。
渲染视频
首先我们必须创建摄像机路径,这可以在viewer中的 "RENDER" 选项卡下完成。将你的3D视图调整到你希望视频开始的位置,然后按 "ADD CAMERA"。这将设置第一个摄像机关键帧。继续到新的视点添加额外的摄像机,以创建摄像机路径。我们提供其他参数以进一步优化您的摄像机路径。满意后,按 "RENDER",这会显示一个包含生成视频命令的模态。终止训练作业(或者如果你有很多计算资源,可以创建一个新的终端)然后输入该命令以生成视频。
要查看所有视频导出选项,请运行:
ns-render --help
4. 高级选项
训练NeuS-facto以外的模型
我们提供了许多其他模型,请参阅文档。例如,如果您想训练原始的NeuS模型,请使用以下命令:
ns-train neus --pipeline.model.sdf-field.inside-outside False sdfstudio-data --data data/sdfstudio-demo-data/dtu-scan65
要查看包含的所有模型,请运行 ns-train --help
。请参考文档以获取每种方法的详细解释。
修改配置
每个模型包含许多可以更改的参数,太多无法在此列出。使用 --help
命令查看完整的配置选项列表。
注意,参数的顺序很重要!例如,您不能在 --data
参数之后设置 --machine.num-gpus
ns-train neus-facto --help
[点击查看输出]
Tensorboard / WandB
Nerfstudio支持三种不同的方法来跟踪训练进展,使用viewer, tensorboard 和 Weights and Biases。这些可视化工具也可以在SDFStudio中使用。您可以通过在训练命令中添加 --vis {viewer, tensorboard, wandb}
来指定使用哪种可视化器。请注意,同一时间只能使用一种。此外viewer仅适用于快速的方法(即 NeuS-facto
和 NeuS-acc
),对于较慢的方法如 NeuS-facto-bigmlp
,使用其他记录器。
5. 使用自定义数据
如果你想使用自定义数据集,请参考数据集 和 数据格式 文档。
构建于
- 一个适合 NeRF 的协作友好型工作室
- 由 nerfstudio团队 开发
- 易于使用的配置系统
- 由 Brent Yi 开发
- 用于加速NeRF渲染的库
- 由 Ruilong Li 开发
引用
如果您在研究中使用了这个库或认为文档对您有用,请考虑引用:
@misc{Yu2022SDFStudio,
author = {Yu, Zehao and Chen, Anpei and Antic, Bozidar and Peng, Songyou and Bhattacharyya, Apratim
and Niemeyer, Michael and Tang, Siyu and Sattler, Torsten and Geiger, Andreas},
title = {SDFStudio: A Unified Framework for Surface Reconstruction},
year = {2022},
url = {https://github.com/autonomousvision/sdfstudio},
}