NerF 的协作友好型工作室

使用 nerfstudio 就像插拔一样简单!
Nerfstudio 提供了一个简单的 API,能够简化创建、训练和测试 NeRF 的端到端流程。
该库通过将每个组件模块化,实现了更易理解的 NeRF 实现方式。
借助更模块化的 NeRF,我们希望让探索这一技术的过程更加友好。
这是一个欢迎贡献者的仓库,旨在建立一个社区,让用户可以更轻松地相互协作。Nerfstudio 于 2022 年 10 月,由伯克利学生在 KAIR 实验室(隶属于 Berkeley AI Research (BAIR))作为研究项目(论文)的一部分开源。目前由伯克利学生和社区贡献者共同维护。
我们致力于提供学习资源,帮助你理解 NeRF 的基础知识(如果你是新手),并让你跟上所有 NeRF 的最新进展(如果你是资深用户)。作为研究人员,我们深知上手这项前沿技术有多困难。因此,我们通过教程、文档等方式提供帮助!
有功能需求?想添加全新的 NeRF 模型?或者有新数据集?我们欢迎 贡献! 如有任何问题,请随时通过 Discord 联系 nerfstudio 团队。
有反馈建议?如果你愿意告诉我们你是谁、为什么对 Nerfstudio 感兴趣,或者提供任何反馈,请填写我们的 Nerfstudio 反馈表单!
我们希望 nerfstudio 能帮助你更快地构建 :hammer: 共同学习 :books: 并为我们的 NeRF 社区做出贡献 :sparkling_heart:。
本项目获得了包括 Luma AI 和 BAIR commons 在内的赞助支持。
本快速入门指南将帮助你使用经典的 Blender 乐高场景,开始默认的 vanilla NeRF 训练。
如需更复杂的操作(例如,使用你自己的数据 / 设置新的 NeRF 图),请参考我们的 参考文档。
你必须在系统上安装支持 CUDA 的 NVIDIA 显卡。本库已在 CUDA 11.8 版本上测试过。你可以 在此 找到更多关于安装 CUDA 的信息。
Nerfstudio 需要 python >= 3.8。我们建议使用 conda 来管理依赖。在继续之前,请确保已安装 Conda。
conda create --name nerfstudio -y python=3.8
conda activate nerfstudio
pip install --upgrade pip
安装带有 CUDA 的 PyTorch(本仓库已在 CUDA 11.7 和 CUDA 11.8 上测试过)和 tiny-cuda-nn。
需要 cuda-toolkit 来构建 tiny-cuda-nn。
对于 CUDA 11.8:
pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118
conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit
pip install ninja git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
更多信息请参阅安装文档中的 依赖项 部分。
简单方式:
pip install nerfstudio
或者 如果你想获取最新版本:
git clone https://github.com/nerfstudio-project/nerfstudio.git
cd nerfstudio
pip install --upgrade pip setuptools
pip install -e .
或者 如果你想跳过所有安装步骤并直接开始使用 nerfstudio,请使用 Docker 镜像:
请参阅 安装文档 中的 使用 Docker 镜像 部分。
以下命令将训练一个 nerfacto 模型,这是我们对真实场景推荐的模型。
# 下载一些测试数据:
ns-download-data nerfstudio --capture-name=poster
# 训练模型
ns-train nerfacto --data data/nerfstudio/poster
如果一切正常,你应该会看到类似如下的训练进度:
导航到终端末尾的链接将加载 Web 查看器。如果你在远程机器上运行,则需要转发 WebSocket 端口(默认是 7007)。
可以通过运行以下命令加载预训练模型:
ns-train nerfacto --data data/nerfstudio/poster --load-dir {outputs/.../nerfstudio_models}
给定一个预训练模型检查点,你可以通过运行以下命令启动查看器:
ns-viewer --load-config {outputs/.../config.yml}
一旦你有了 NeRF 模型,你可以渲染一段视频或导出一个点云。
首先,我们必须为相机创建一条运动路径。这可以在查看器的“RENDER”选项卡中完成。将你的 3D 视图定位到希望视频开始的视角,然后点击“ADD CAMERA”。这将设置第一个相机关键帧。继续移动到新的视角并添加更多相机,以创建完整的相机路径。我们还提供了其他参数来进一步优化相机路径。满意后,点击“RENDER”,会弹出一个模态框,其中包含渲染视频所需的命令。终止训练任务(或者如果你有足够计算资源,打开一个新终端),然后运行该命令生成视频。
还有其他视频导出选项可用,通过运行以下命令了解更多:
ns-render --help
虽然 NeRF 模型并非为生成点云而设计,但仍然是可行的。导航到 3D 查看器中的“EXPORT”选项卡,选择“POINT CLOUD”。如果选择了裁剪选项,黄色方框内的所有内容都将被导出为点云。根据需要修改设置,然后在命令行中运行面板底部的命令。
或者,你也可以不使用查看器,直接使用 CLI。通过运行以下命令了解导出选项:
ns-export pointcloud --help
使用现有数据集很棒,但很可能你想使用自己的数据!我们支持多种使用自定义数据的方法。在数据用于 nerfstudio 之前,必须使用 ns-process-data 确定相机位置和方向,并将其转换为我们支持的格式。我们为此依赖外部工具,相关说明和信息可在文档中找到。
| 数据 | 采集设备 | 要求 | ns-process-data 速度 |
|---|---|---|---|
| 📷 图片 | 任意 | COLMAP | 🐢 |
| 📹 视频 | 任意 | COLMAP | 🐢 |
| 🌎 360 度数据 | 任意 | COLMAP | 🐢 |
| 📱 Polycam | 带 LiDAR 的 IOS | Polycam App | 🐇 |
| 📱 KIRI Engine | IOS 或 Android | KIRI Engine App | 🐇 |
| 📱 Record3D | 带 LiDAR 的 IOS | Record3D app | 🐇 |
| 📱 Spectacular AI | IOS, OAK, 其他 | App / sai-cli |
🐇 |
| 🖥 Metashape | 任意 | Metashape | 🐇 |
| 🖥 RealityCapture | 任意 | RealityCapture | 🐇 |
| 🖥 ODM | 任意 | ODM | 🐇 |
| 👓 Aria | Aria 眼镜 | Project Aria | 🐇 |
| 🛠 自定义 | 任意 | 相机姿态数据 | 🐇 |
除了 nerfacto,我们还提供其他模型。例如,如果你想训练原始的 nerf 模型,请使用以下命令:
ns-train vanilla-nerf --data DATA_PATH
查看所有包含的模型列表,请运行 ns-train --help。
每个模型都包含许多可以更改的参数,这里无法一一列出。使用 --help 命令可以查看完整的配置选项列表。
ns-train nerfacto --help
我们支持四种不同的训练跟踪方法:查看器、tensorboard、Weights and Biases 和 Comet。你可以通过在训练命令后附加 --vis {viewer, tensorboard, wandb, comet viewer+wandb, viewer+tensorboard, viewer+comet} 来指定要使用的可视化工具。同时使用查看器与 wandb 或 tensorboard 可能会导致评估步骤出现卡顿。查看器仅适用于速度较快的方法(如 nerfacto, instant-ngp),对于像 NeRF 这类较慢的方法,请使用其他日志工具。
以上就是 nerfstudio 入门的基本内容。
如果你有兴趣了解更多关于如何创建自己的流程、使用查看器进行开发、运行基准测试等方面的内容,请查看下方的一些快速链接,或直接访问我们的 文档。
| 章节 | 描述 |
|---|---|
| 文档 | 完整的 API 文档和教程 |
| 查看器 | 我们 Web 查看器的主页 |
| 🎒 教育资料 | |
| 模型描述 | nerfstudio 支持的所有模型及其组件部分的说明。 |
| 组件描述 | 解释各种模型中常见/常用模块的交互式 notebook。 |
| 🏃 教程 | |
| 入门指南 | 更深入指南,涵盖从安装到贡献的 nerfstudio 入门全过程。 |
| 使用查看器 | 如何导航查看器的快速演示视频。 |
| 使用 Record3D | 演示视频:如何在不使用 COLMAP 的情况下运行 nerfstudio。 |
| 💻 开发者指南 | |
| 创建流程 | 学习如何通过使用和/或实现新模块来轻松构建新的神经渲染流程。 |
| 创建数据集 | 有新数据集?了解如何将其与 nerfstudio 一起使用。 |
| 贡献指南 | 关于如何立即开始贡献的逐步指导。 |
| 💖 社区 | |
| Discord | 加入我们的社区进行更深入的讨论。我们很期待听到你的声音! |
| 在 Twitter 上关注 @nerfstudioteam,查看酷炫的更新和公告 | |
| 反馈表单 | 我们欢迎任何反馈!这是我们了解大家如何使用 Nerfstudio 的机会。 |
我们提供以下支持结构,让入门 NeRF 变得更容易。
如果你正在寻找一个当前不支持的功能,请不要犹豫,通过 Discord 联系 Nerfstudio 团队!
<img alt="tyro logo" src="https://brentyi.github.io/tyro/_static/logo-light.svg" width="150px" />
<img alt="tyro logo" src="https://user-images.githubusercontent.com/3310961/199084143-0d63eb40-3f35-48d2-a9d5-78d1d60b7d66.png" width="250px" />
你可以在 arXiv 上找到该框架的论文。
如果你在你的研究中使用了本库或发现文档有用,请考虑引用:
@inproceedings{nerfstudio,
title = {Nerfstudio: A Modular Framework for Neural Radiance Field Development},
author = {
Tancik, Matthew and Weber, Ethan and Ng, Evonne and Li, Ruilong and Yi, Brent
and Kerr, Justin and Wang, Terrance and Kristoffersen, Alexander and Austin,
Jake and Salahi, Kamyar and Ahuja, Abhik and McAllister, David and Kanazawa,
Angjoo
},
year = 2023,
booktitle = {ACM SIGGRAPH 2023 Conference Proceedings},
series = {SIGGRAPH '23'}
}