UnboundedNeRFPytorch
UnboundedNeRFPytorch 是一个基于 PyTorch 构建的开源项目,专注于实现高性能的无边界(Unbounded)及大规模神经辐射场(NeRF)重建。它主要解决了传统 NeRF 在处理广阔户外场景或大范围空间时,因坐标范围限制导致渲染质量下降或显存爆炸的难题,让用户能够轻松生成覆盖从室内房间到城市街区等无限延伸场景的高保真 3D 视图。
该工具特别适合计算机视觉研究人员、图形学开发者以及需要处理大场景三维重建的工程师使用。其核心理念是“简约而不简单”,摒弃了庞大复杂的代码架构,提供了一个轻量级且易于理解的代码库,同时保持了业界领先(SOTA)的性能表现。在 Tanks & Temples 和 Mip-NeRF-360 等权威基准测试中,UnboundedNeRFPytorch 的渲染精度(PSNR)均超越了 NeRF++、Plenoxels 及原版 Mip-NeRF-360 等知名算法。此外,它还集成了多种前沿的大规模辐射场算法供对比研究,并支持 Waymo 等城市级数据集的训练,是探索大场景三维重建技术的理想起点。
使用场景
某数字孪生团队正试图利用无人机航拍数据,重建一个包含广阔地形与精细建筑的城市公园三维模型,以用于虚拟现实漫游。
没有 UnboundedNeRFPytorch 时
- 场景尺度受限:传统 NeRF 算法难以处理“无边界”的大尺度场景,强行训练会导致远处背景模糊或几何结构崩塌,无法完整还原公园全貌。
- 渲染质量平庸:在 Tanks & Temples 等复杂基准测试中,现有开源方案的 PSNR(峰值信噪比)往往停留在 20.5 以下,生成的视频存在明显伪影和闪烁。
- 代码集成困难:为了追求大场景效果,开发者不得不拼凑多个复杂的科研代码库,导致环境配置繁琐、调试周期长达数周。
- 训练效率低下:缺乏针对大规模场景优化的采样策略,显存占用极高且收敛速度慢,难以在有限算力下完成高精度建模。
使用 UnboundedNeRFPytorch 后
- 完美支持大场景:凭借专为无边界场景设计的架构,轻松容纳从近处花草到远处山脉的无限延伸空间,几何结构完整且自然。
- 画质达到 SOTA 级别:在同等数据集下,PSNR 提升至 20.85 甚至更高(Mip-NeRF-360 基准达 28.98),输出的漫游视频清晰流畅,细节丰富。
- 代码简洁易上手:提供了一个精简且高性能的代码库,无需魔改即可复现顶尖论文效果,将原本数周的工程适配时间缩短至几天。
- 训练快速稳定:内置高效的采样与优化机制,显著降低显存压力并加速收敛,让大规模场景重建在单卡或多卡环境下均能高效运行。
UnboundedNeRFPytorch 通过极简的代码实现突破了大尺度场景重建的质量瓶颈,让高保真三维数字化变得触手可及。
运行环境要求
- Linux
必需 NVIDIA GPU,需安装与 PyTorch 兼容的 CUDA(示例中为 CUDA 11.6),需运行 nvcc 编译自定义 CUDA 算子
未说明

快速开始
PyTorch 中的无界神经辐射场
1. 引言
这仍然是一个正在进行中的研究项目。
本项目旨在对几种最先进的大规模辐射场算法进行基准测试。我们交替使用“无界 NeRF”和“大规模 NeRF”这两个术语,因为我们发现它们背后的技术密切相关。
我们不追求庞大而复杂的代码体系,而是致力于打造一个简洁的代码库,同时实现无界 NeRF 的 SOTA 性能。
您有望在本仓库中获得以下结果:
| 基准测试 | 方法 | PSNR |
|---|---|---|
| 无界 Tanks & Temples | NeRF++ | 20.49 |
| 无界 Tanks & Temples | Plenoxels | 20.40 |
| 无界 Tanks & Temples | DVGO | 20.10 |
| 无界 Tanks & Temples | 我们的方法 | 20.85 |
| Mip-NeRF-360 基准测试 | NeRF | 24.85 |
| Mip-NeRF-360 基准测试 | NeRF++ | 26.21 |
| Mip-NeRF-360 基准测试 | Mip-NeRF-360 | 28.94 |
| Mip-NeRF-360 基准测试 | DVGO | 25.42 |
| Mip-NeRF-360 基准测试 | 我们的方法 | 28.98 |
展开/收起定性结果。
Tanks and Temples:
- 游乐场:
- 卡车:
- M60:
- 火车:
Mip-NeRF-360 基准测试:
- 自行车:
- 树桩:
- 厨房:
- 盆景:
- 花园:
- 柜台:
- 房间:
旧金山使命湾(由 Block-NeRF 发布的数据集):
希望我们的努力能够帮助您的研究或项目!
2. 最新消息
- [2023.3.20] 本项目更名为“UnboundedNeRFPytorch”,因为我们认为从严格意义上讲,我们的工作规模还不够大(例如未达到城市级别)。
展开/收起过往新闻。
- [2023.2.27] 我们的仓库进行了重大更新,性能更优,并完整开源代码。
- [2022.12.23] 发布了数周来的 NeRF 相关内容。最近论文太多,更新速度较慢。
- [2022.9.12] 在 Waymo 数据集上训练 Block-NeRF,PSNR 达到 24.3。
- [2022.8.31] 在 Waymo 数据集上训练 Mega-NeRF,但损失仍为 NAN。
- [2022.8.24] 支持完整的 Mega-NeRF 流程。
- [2022.8.18] 支持每周分类的 NeRF 中的所有先前论文。
- [2022.8.17] 支持每周 NeRF 的分类功能。
- [2022.8.16] 支持评估脚本和数据格式标准,已取得一些成果。
- [2022.8.13] 添加估计的相机位姿并发布了一个更好的数据集。
- [2022.8.12] 添加每周 NeRF 功能。
- [2022.8.8] 添加用于自定义目的的 NeRF 重建代码和文档。
- [2022.7.28] 数据预处理脚本已完成。
- [2022.7.20] 本项目正式启动!
3. 安装
展开/收起安装步骤。
克隆本仓库。使用深度 == 1 以避免下载庞大的历史记录。
git clone --depth=1 git@github.com:sjtuytc/LargeScaleNeRFPytorch.git mkdir data mkdir logs创建 conda 环境。
conda create -n large-scale-nerf python=3.9 conda activate large-scale-nerf安装 PyTorch 和其他库。请确保您的 PyTorch 版本与您的 CUDA 兼容。
pip install --upgrade pip conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.6 -c pytorch -c nvidia pip install -r requirements.txt安装基于网格的算子,以避免每次运行时都重新编译,需要 CUDA 库。(通过运行 “nvcc -V” 检查是否已安装最新版本的 CUDA。)
apt-get install g++ build-essential # 确保您已安装 g++ 和其他构建工具,需具有 sudo 权限。 cd FourierGrid/cuda python setup.py install cd ../../安装其他用于重建自定义场景的库。仅当您需要构建自己的场景时才需要执行此步骤。
sudo apt-get install colmap sudo apt-get install imagemagick # 需要 sudo 权限 conda install pytorch-scatter -c pyg # 或通过 https://github.com/rusty1s/pytorch_scatter 安装如果您的服务器没有 sudo 权限,也可以使用笔记本电脑版 COLMAP。不过,我们发现如果 COLMAP 参数设置不当,就无法达到 SOTA 性能。
4. 公开数据集上的无界NeRF
点击以下子章节标题以展开/折叠步骤。
4.1 下载处理后的数据。
- 免责声明:用户需获得原始数据集提供方的许可。任何对数据的使用都必须遵守数据集所有者的许可协议。
(1) Unbounded Tanks & Temples。从这里下载数据,然后解压。
cd data
gdown --id 11KRfN91W1AxAW6lOFs4EeYDbeoQZCi87
unzip tanks_and_temples.zip
cd ../
(2) Mip-NeRF-360 数据集。
cd data
wget http://storage.googleapis.com/gresearch/refraw360/360_v2.zip
mkdir 360_v2
unzip 360_v2.zip -d 360_v2
cd ../
(3) San Fran Cisco Mission Bay。 在下载数据前需要了解以下几点:
- 我们的处理后Waymo数据相比原始版本要小得多(19.1GB vs. 191GB),因为我们存储的是相机位姿而非原始光线方向。此外,我们的处理数据更适合PyTorch的数据加载器。请在Google Drive中下载数据。您可以使用gdown通过命令行下载文件。如果您有兴趣自行处理原始Waymo数据,请参阅这篇文档。
下载后的数据结构如下:
data
|
|——————360_v2 // Mip-NeRF-360基准测试的根目录
| └——————bicycle // Mip-NeRF-360基准测试中的一个场景
| | └——————images // RGB图像
| | └——————images_2 // 缩放2倍的RGB图像
| | └——————sparse // 相机位姿
| ...
|——————tanks_and_temples // Tanks&Temples的根目录
| └——————tat_intermediate_M60 // Tanks&Temples中的一个场景
| | └——————camera_path // 渲染分割的相机位姿、内参和外参
| | └——————test // 测试分割
| | └——————train // 训练分割
| | └——————validation // 验证分割
| ...
|——————pytorch_waymo_dataset // San Fran Cisco Mission Bay的根目录
| └——————cam_info.json // 提取的相机到图像信息,以字典形式存储
| └——————coordinates.pt // Mega-NeRF中使用的全局相机信息,已弃用
| └——————train // 训练数据
| | └——————metadata // 每张图像的元数据(相机信息等)
| | └——————rgbs // RGB图像
| | └——————split_block_train.json // 分块分割信息
| | └——————train_all_meta.json // 训练文件夹中的所有元数据
| └——————val // 验证数据,结构与训练数据相同
4.2 训练模型并查看结果!
您只需运行“python run_FourierGrid.py”即可完成训练-测试-渲染的整个流程。部分参数说明如下:
--program: 要运行的程序,通常只需使用--program train即可。
--config: 指向场景配置文件的路径,例如--config FourierGrid/configs/tankstemple_unbounded/truck_single.py。
--num_per_block: 大规模NeRF中使用的块数,通常设置为-1,除非有特殊需求。
--render_train: 在训练集上渲染训练好的模型。
--render_test: 在测试集上渲染训练好的模型。
--render_video: 在渲染分割上生成视频。
--exp_id: 添加实验编号以便区分不同的实验。例如--exp_id 5。
--eval_ssim / eval_lpips_vgg: 报告SSIM / LPIPS(VGG)分数。
虽然我们在scripts/train_FourierGrid.sh脚本中列出了主要命令,但为了更好地复现结果,我们在此列出部分命令。
# Unbounded tanks and temples
python run_FourierGrid.py --program train --config FourierGrid/configs/tankstemple_unbounded/playground_single.py --num_per_block -1 --render_train --render_test --render_video --exp_id 57
python run_FourierGrid.py --program train --config FourierGrid/configs/tankstemple_unbounded/train_single.py --num_per_block -1 --render_train --render_test --render_video --exp_id 12
python run_FourierGrid.py --program train --config FourierGrid/configs/tankstemple_unbounded/truck_single.py --num_per_block -1 --render_train --render_test --render_video --exp_id 4
python run_FourierGrid.py --program train --config FourierGrid/configs/tankstemple_unbounded/m60_single.py --num_per_block -1 --render_train --render_test --render_video --exp_id 6
# 360度数据集
python run_FourierGrid.py --program train --config FourierGrid/configs/nerf_unbounded/room_single.py --num_per_block -1 --eval_ssim --eval_lpips_vgg --render_train --render_test --render_video --exp_id 9
python run_FourierGrid.py --program train --config FourierGrid/configs/nerf_unbounded/stump_single.py --num_per_block -1 --eval_ssim --eval_lpips_vgg --render_train --render_test --render_video --exp_id 10
python run_FourierGrid.py --program train --config FourierGrid/configs/nerf_unbounded/bicycle_single.py --num_per_block -1 --eval_ssim --eval_lpips_vgg --render_train --render_test --render_video --exp_id 11
python run_FourierGrid.py --program train --config FourierGrid/configs/nerf_unbounded/bonsai_single.py --num_per_block -1 --eval_ssim --eval_lpips_vgg --render_train --render_test --render_video --exp_id 3
python run_FourierGrid.py --program train --config FourierGrid/configs/nerf_unbounded/garden_single.py --num_per_block -1 --eval_ssim --eval_lpips_vgg --render_train --render_test --render_video --exp_id 2
python run_FourierGrid.py --program train --config FourierGrid/configs/nerf_unbounded/kitchen_single.py --num_per_block -1 --eval_ssim --eval_lpips_vgg --render_train --render_test --render_video --exp_id 2
python run_FourierGrid.py --program train --config FourierGrid/configs/nerf_unbounded/counter_single.py --num_per_block -1 --eval_ssim --eval_lpips_vgg --render_train --render_test --render_video --exp_id 2
#旧金山使命湾数据集
python run_FourierGrid.py --program train --config FourierGrid/configs/waymo/waymo_no_block.py --num_per_block 100 --render_video --exp_id 30
旧版的Block-NeRF仍然提供作为基线,但很快就会被弃用。我们后续将主要致力于基于网格的模型,因为它们简单且速度快。运行以下命令以复现旧版Block-NeRF实验:
bash scripts/block_nerf_train.sh
bash scripts/block_nerf_eval.sh
5. 构建自定义无界NeRF(已废弃)
展开/折叠构建自定义NeRF世界的步骤。
将你的图像放入data文件夹中。结构应如下所示:
data |——————Madoka // 这里填写你的文件夹名称。 | └——————source // 源图像应放在此处。 | └——————---|1.png | └——————---|2.png | └——————---|...示例数据已在我们的Google Drive文件夹中提供。Madoka和Otobai可以在这个链接找到。
使用COLMAP重建场景。这可能需要较长时间。
python FourierGrid/tools/imgs2poses.py data/Madoka你可以将data/Madoka替换为你自己的数据文件夹。 如果你的COLMAP版本高于3.6(如果你使用apt-get安装应该不会出现这种情况),你需要在colmap_wrapper.py中将export_path改为output_path。
训练NeRF场景。
python FourierGrid/run_FourierGrid.py --config configs/custom/Madoka.py你可以将configs/custom/Madoka.py替换为其他配置文件。
验证训练结果以生成飞行穿越视频。
python FourierGrid/run_FourierGrid.py --config configs/custom/Madoka.py --render_only --render_video --render_video_factor 8
6. 引用与致谢
我们关于基于网格模型的最新理论工作(CVPR24口头报告、最佳论文候选,并获得全评审分数5/5/5):
@misc{zhao2024grounding,
title={Grounding and Enhancing Grid-based Models for Neural Fields},
author={Zelin Zhao和Fenglei Fan和Wenlong Liao和Junchi Yan},
year={2024},
eprint={2403.20002},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
请考虑引用以下优秀的工作:
@inproceedings{dvgo,
title={Direct voxel grid optimization: Super-fast convergence for radiance fields reconstruction},
author={Sun, Cheng和Sun, Min和Chen, Hwann-Tzong},
booktitle={IEEE/CVF计算机视觉与模式识别会议论文集},
pages={5459--5469},
year={2022}
}
@InProceedings{Tancik_2022_CVPR,
author = {Tancik, Matthew和Casser, Vincent和Yan, Xinchen和Pradhan, Sabeek和Mildenhall, Ben和Srinivasan, Pratul P.和Barron, Jonathan T.和Kretzschmar, Henrik},
title = {Block-NeRF: Scalable Large Scene Neural View Synthesis},
booktitle = {IEEE/CVF计算机视觉与模式识别会议(CVPR)论文集},
month = {六月},
year = {2022},
pages = {8248-8258}
}
我们参考了来自DVGO、nerf-pl和SVOX2的代码和数据,感谢他们的杰出工作!
每周NeRF分类
我们每周跟踪并分类NeRF相关论文。所有已发表的NeRF论文均已加入列表。我们提供了英文版和中文版。欢迎通过PR提交贡献和修正。
我们还提供了所有NeRF论文的Excel版元数据,你可以根据这些结构化的元数据添加自己的评论或开发自己的论文分析工具。
贡献者 ✨
感谢以下各位优秀的贡献者(emoji键):
![]() Zelin Zhao 💻 🚧 |
![]() EZ-Yang 💻 |
![]() Alex-Zhang 🐛 |
![]() Fan Lu 🐛 |
![]() MaybeShewill-CV 🐛 |
![]() buer1121 🐛 |
本项目遵循all-contributors规范。欢迎任何形式的贡献!
版本历史
v1.0.12023/02/28v1.0.02023/02/28常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器





