· updated Jan 27, 2025 · 12 min read
笔记:5 秒钟训练 NeRF,NVIDIA Instant NeRF 测试
本文测试了 NVIDIA 提出的 Instant NeRF。
Instant Neural Graphics Primitives with a Multiresolution Hash Encoding Thomas Müller, Alex Evans, Christoph Schied, Alexander Keller ACM Transactions on Graphics (SIGGRAPH), July 2022 Project page / Paper / Code / Video / BibTeX
安装 instant-ngp
完整的文字教程见这个链接 instant-ngp-Windows,视频教程见这个链接。
安装该软件有以下要求:
- NVIDIA GPU
- A C++14 capable compiler.
- Windows: Visual Studio 2019
- Linux: GCC/G++ 7.5 or higher
- CUDA v10.2 or higher
- CMake v3.21 or higher.
- (optional) OptiX 7.3 or higher
- COLMAP
接下来的安装以及操作过程全部是以 Windows 11 为例进行介绍。
1. VS-STUDIO
安装 Visual Studio Community 2019,设置如下图:
2. 安装 CUDA
根据当前系统显卡驱动的版本安装合适的 CUDA,这里收集了所有的 CUDA 版本。例如,我电脑型号 R9000P,显卡型号 NVIDIA RTX 3060 LAPTOP,通过 nvidia-smi,查看 CUDA Version,可看到我的 CUDA 版本是 11.4,于是我选择安装 CUDA 11.4.4 版本,大家可以根据自己的实际情况。
安装好之后在终端输入 nvcc --version 查看 nvcc 版本。
3. 安装 cuDNN (optional)
这一步可选,根据 CUDA 版本,选择合适的 cuDNN 版本安装,如我需要安装 cudnn-11.4。
注意:这一步需要开发者权限,需要输入账号密码等信息。
4. 安装 OptiX (optional)
此外需要安装 OptiX,版本需要在 7.3 或者以上,随后将 OptiX_INSTALL_DIR 加入系统路径。
5. 下载+编译程序
$ git clone --recursive https://github.com/nvlabs/instant-ngp $ cd instant-ngp
由于原项目中有多个依赖项,GitHub 限速严重,我上传了一份完整版到 Google Drive 和百度网盘:链接,提取码:qrdr。
进入 Developer Command Prompt 终端:
从终端进入项目目录,进行编译:
cmake . -B build
cmake --build build --config RelWithDebInfo -j 16
安装 Anaconda3
在这里选择合适的版本进行安装。
更换 pip 源
创建目录 C:\Users\realcat\AppData\Roaming\pip,然后创建一个 pip.ini 文件,填入下面的内容。
[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn
disable-pip-version-check = true
timeout = 6000
配置 conda 环境
conda create -n ngp python=3.9
conda activate ngp
pip install -r requirements.txt
安装过程最后会出现一个关于 openexr 的 ERROR!这个时候不要慌,在这个地址下载 openexr,随后使用 pip 进行安装:
pip install OpenEXR-1.3.2-cp39-cp39-win_amd64.whl
最后一步,安装 COLMAP
这里笔者就不多说了,Release 版本,笔者安装的是 COLMAP-3.7-windows-cuda.zip。
真实世界演示
这里有一些 NeRF 原作者提供的虚拟以及真实数据集,不过我使用手机拍摄了真实世界的场景一段视频,随后将视频转换为图像,这些图像送入 COLMAP 使用 SfM 得到相机位姿(即 posed images)。图像数据以及相机位姿文件要转换成 instant-ngp 输入需要的文件,最后运行 instant-ngp 编译好的可执行文件。这里需要注意的是,由于手机摄像机采集到的视频尺寸为 ,该分辨率在我的笔记本上造成了显存不足的问题,于是笔者对图像进行抽帧并降采样处理。
笔者将数据集放在了 Google Drive: tussock_tiny,备选地址:tussock_tiny,百度网盘:链接,提取码:ibuz。
真实场景原始数据
目录结构:
📂instant-ngp/ # this is root
├── 📂data/
│ ├── 📂toy_truck/
│ │ ├── 📜transforms.json # 这是要生成的文件
│ │ ├── 📂data/
│ │ │ ├── 📜toy_truck_001.jpg
│ │ │ ├── 📜toy_truck_002.jpg
│ │ │ │...
│ │ │...
│ │...
│...
<!-- 或者自采数据集 -->
📂F:/ # disk F or E or others, 任意位置
├── 📂dataset/
│ ├── 📂tussock_tiny/
│ │ ├── 📜transforms.json # 这是要生成的文件
│ │ ├── 📂data/
│ │ │ ├── 📜image_20.png
│ │ │ ├── 📜image_40.png
│ │ │ │...
│ │ │...
│ │...
│...
原始的 instant-ngp 在 Windows 上是不支持上述目录结构的,笔者对处理脚本做了一点小小的改动:DIFF
运行脚本
接下来展示如何使用 instant-ngp 创建模型的关键步骤。
# step1: 视频解码与缩放
# 脚本路径:https://github.com/Vincentqyw/instant-ngp/blob/master/scripts/convert_video.py
python .\scripts\convert_video.py --input E:\NeRF\real_data\data\tussock_tiny\tussock.MOV \
--output E:\NeRF\real_data\data\tussock_tiny\data\ \
--show_image 1 \
--scale 2
# step2:colmap重建,创建项目,选择图像路径以及数据库,
# 分别进行特征提取/匹配/稀疏重建,导出稀疏模型文件
colmap gui
# step3: 生成intant-ngp输入需要的transforms.json文件
# 脚本路径:https://github.com/Vincentqyw/instant-ngp/blob/master/scripts/colmap2nerf.py
# aabb_scale: 模型超参,建议从16开始,分别尝试8,4,2以及1
# images : 数据集路径
# text : 稀疏模型路径
# out : 配置文件输出路径
python scripts/colmap2nerf.py --aabb_scale 16 \
--images E:\NeRF\real_data\data\tussock_tiny\data \
--text E:\NeRF\real_data\data\tussock_tiny\sparse\0 \
--out E:\NeRF\real_data\data\tussock_tiny\transform.json
# step4: 跑起来吧
.\build\testbed.exe --scene E:\NeRF\real_data\data\tussock_tiny
结果
将结果放在了 YouTube,如下:
B 站视频如下:
由于时间有限,笔者没有测试更多场景,感兴趣的同学可以 DIY 一下 :)
Bug Fix
VSCode 缩进问题
Ctrl+Shift+P 选择,转缩进为空格 或者 Convert Indentation to Spaces。
Windows 11 PowerShell 报错
运行 python 显示以下错误:无法加载文件 C:\Users\32973\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本
解决办法:
- 以管理员身份运行 PowerShell
- 输入:get-ExecutionPolicy,显示:Restricted,这表示状态是禁止的
- 这时输入:set-ExecutionPolicy RemoteSigned