📝笔记: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. 下载+编译程序
$ 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)。图像数据以及相机位姿文件要转换成intant-ngp输入需要的文件,最后运行intant-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 POWER SHELL报错
运行python显示以下错误: 无法加载文件 C:\Users\32973\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本
解决办法: 1. 以管理员身份运行PowerShell 2. 输入:get-ExecutionPolicy,显示:Restricted,这表示状态是禁止的 3. 这时输入:set-ExecutionPolicy RemoteSigned