RealCat

· 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,因为在此系统上禁止运行脚本

解决办法:

  1. 以管理员身份运行 PowerShell
  2. 输入:get-ExecutionPolicy,显示:Restricted,这表示状态是禁止的
  3. 这时输入:set-ExecutionPolicy RemoteSigned

参考

  1. instant-ngp-Windows
  2. 如何评价 NVIDIA 最新技术 5 秒训练 NERF?
  3. 论文解读 | Instant Neural Graphics Primitives with a Multiresolution Hash Encoding
  4. WINDOW 环境下修改 CUDA 版本
  5. NeRF 原作者提供的虚拟以及真实数据集
  6. R9000P 安装 CUDA

Comments