前情提要
NeRF在我之前的文章中已经介绍过其牛X之处,不过它也存在如训练、推理慢等问题。近期,Nvidia提出的instant-ngp算法实现了快速的NeRF训练和推理。本文主要介绍了在Windows10系统下运行instant-ngp的方法和我在复现过程中出现的一些小问题。
instant-ngp代码链接:https://github.com/NVlabs/instant-ngp
准备工作
在运行instant-ngp之前,需要在电脑内安装以下几样工具:
Windows: Visual Studio 2019(测试了一下2022版本,可能是和CUDA不匹配,运行失败)
CUDA v10.2 or higher
CMake v3.21 or higher
- OptiX 7.3 or higher(非必要,可以不装)
- COLMAP
注意!!!!安装好之后一定要检查路径是否添加到系统的环境变量中!!!!
**代码下载:**本人在复现的时候出现的第一个问题竟然在这。。。。无论是直接git还是直接下载,都出现了代码缺失的问题,找了好久才发现这个问题。我在这里给大家提供一个完整版的代码,大家用的时候改下路径就可以了:
链接:https://pan.baidu.com/s/1YlC89Qnk9-_TZkgZ8E0wvw?pwd=g3pg
提取码:g3pg
开始编译
官网给出了两种编译的方法,我在这里介绍的是cmake编译的方法。
首先打开cmake gui,选择根目录地址并在根目录下创建build文件夹作为输出目录。(路径中不要出现中文!!!)
点击Configure,选择 Visual Studio 16 2019,然后点击Finish。
然后就在下方框内得到Configuring done的结果。(无须在意出现的红色提示)
最后点击Generate就得到了Generating done,到这一步已经完成了编译的前期工作了!
点击Open project打开工程。
在VS2019界面选择Release&x64,然后右键选择ALL_BUILD,点击生成,等待一段时间没报错就是成功了!
上一步会在build文件夹中生成一个名为testbed.exe文件。
测试
现有数据集
首先对原作者使用的fox图片进行测试,fox的图像文件在data/nerf/fox下,其中images是图片数据,transforms.json是图片对应的位置信息。
打开Developer Command Prompt for VS 2019。(这里只能用这个终端,其他的像cmd和anaconda都不可用)在终端内切换到instan-ngp文件夹的路径。
然后按照以下格式输入命令:
【PATH:testbed.exe】 --mode nerf --scene 【PATH:transforms.json】
最终就成功调出了instant-ngp的GUI界面了!
自创数据集
在这个部分我将演示一下如何用手机拍摄视频创建自己的数据集并且进行NeRF训练。
第一步,我们需要拍摄一段视频存入电脑,对视频进行一个解码与缩放的操作,将视频转化为多个角度的图片。
在这个页面下载脚本,将脚本放在instant-ngp文件夹下的scripts中,打开anaconda创建一个虚拟环境,cd进入instant-ngp文件夹,输入以下指令进行解码与压缩。
conda create -n ngp python=3.9
conda activate ngp
cd {Your PATH}
python .\scripts\convert_video.py --input {Video PATH} --output {data\nerf\YOUR_file\images} --show_image 1 --scale 2
其中input是视频的路径,output需要你在data\nerf下创建自己的数据集文件夹,并在该文件夹内创建images文件夹来存放图片。
第二步,进行Colmap重建,分别进行特征提取、匹配、稀疏重建,导出稀疏模型文件。
打开Colmap,点击file--->new project,在自定义数据文件夹下创建database文件,图片来源选择images文件夹,点击Save。
随后点击Processing---Feature extraction,不需要更改任何数据,直接点Extract即可。
然后选择Processing---Feature matching,同样不需要更改任何数据,点击Run。
点击Reconstruction---Start reconstruction进行重建。
在自定义数据集文件夹下新建sparse\0文件夹(注意!一定要按照这个命名,否则后边会出错),点击File---export model as text,将重建数据放到sparse\0文件夹中。
第三步,生成instant-ngp需要的transforms.json文件。
在第一步创建的虚拟环境下,运行如下代码:
python colmap2nerf.py --aabb_scale 16 --images {YOUR_IMAGES} --text {SPARSE\0} --out {YOUR_DATA_PATH\transforms.json}
其中输入为图像路径,文本为上一步导出的TXT文件,输出为tranforms.json。
第四步,开始运行!!!!!
这里的方法和测试部分的方法一致,只需更改transforms的路径即可。
【PATH:testbed.exe】 --mode nerf --scene 【PATH:transforms.json】
看一下运行的结果:
大功告成!!!!