📝笔记: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

接下来的安装以及操作过程全部是以 WINDOW 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. 下载+编译程序

1
2
$ git clone --recursive https://github.com/nvlabs/instant-ngp
$ cd instant-ngp

由于原项目中有多个依赖项,GitHub限速严重,我上传了一份完整版到Google drive和百度网盘: 链接,提取码: qrdr 。

进入Developer Command Prompt终端:

从终端进入项目目录,进行编译:

1
2
cmake . -B build
cmake --build build --config RelWithDebInfo -j 16

安装Anaconda3

这里选择合适的版本进行安装。

更换pip源

创建目录C:\Users\realcat\AppData\Roaming\pip,然后创建一个pip.ini文件,填入下面的内容。

1
2
3
4
5
6
[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环境

1
2
3
conda create -n ngp python=3.9
conda activate ngp
pip install -r requirements.txt

安装过程最后会出现一个关于openexr的ERROR!这个时候不要慌,在这个地址下载openexr,随后使用pip进行安装:

1
pip install OpenEXR-1.3.2-cp39-cp39-win_amd64.whl

最后一步,安装COLMAP

这里笔者就不多说了,Release版本,笔者安装的是COLMAP-3.7-windows-cuda.zip

真实世界演示

这里有一些NeRF原作者提供的虚拟以及真实数据集,不过我使用手机拍摄了真实世界的场景一段视频,随后将视频转换为图像,这些图像送入COLMAP使用SFM得到相机位姿(即posed images)。图像数据以及相机位姿文件要转换成intant-ngp输入需要的文件,最后运行intant-ngp编译好的可执行文件。这里需要注意的是,由于手机摄像机采集到的视频尺寸为\(1920 \times 1080\),该分辨率在我的笔记本上造成了显存不足的问题,于是笔者对图像进行抽帧并降采样处理。

笔者将数据集放在了 Google Drive: tussock_tiny备选地址: tussock_tiny,百度网盘:链接,提取码: ibuz。

真实场景原始数据

目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
📂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创建模型的关键步骤。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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 POWER SHELL报错

运行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