英伟达实验室开源的instant-ngp全称为Instant Neural Graphics Primitives,源码地址为https://github.com/NVlabs/instant-ngp,可用于快速的训练NeRF模型,论文名为:Instant Neural Graphics Primitives with a Multiresolution Hash Encoding, 项目主页为: https://nvlabs.github.io/instant-ngp/ .支持在windows和linux上进行编译运行. 
      instant-ngp有4个neural graphics primitives的实现,即neural radiance fields(NeRF), signed distance functions (SDFs), neural images, and neural volumes.在每种情况下,都使用tiny-cuda-nn框架(https://github.com/NVlabs/tiny-cuda-nn)训练和渲染具有多分辨率hash输入编码的MLP(Multilayer Perceptron, 多层感知机).
      在windows上可直接从github上下载与显卡对应的版本,解压缩后,直接启动instant-ngp.exe,如下图所示:instant-ngp带有一个交互式GUI

      instant-npg中NeRF的使用,如fox,两种方式:执行结果如下图所示

      1.双击instant-ngp.exe,然后将data/nerf/fox文件夹拖到窗口中;
      2.使用命令行cmd: instant-ngp.exe data/nerf/fox

      instant-npg中推荐的用户控件:
      1.Snapshot: 使用"Save"保存训练好的NeRF,名字可修改,使用"Load"重新加载.
      2.Rendering:
      (1).DLSS: 勾选,并将值设置为1.0,通常可以提高渲染质量;
      (2).Crop size: 修剪周围环境以专注于model 

      gui是可关闭的:Use ./instant-ngp --no-gui or python scripts/run.py. You can also compile without GUI via cmake -DNGP_BUILD_WITH_GUI=off ...

      创建自己的NeRF数据集操作流程:

      1.clone instant-ngp:

git clone --recursive https://github.com/NVlabs/instant-ngp.git

      2.通过conda创建虚拟环境instant-ngp用来执行脚本scripts/colmap2nerf.py,将终端定位到instant-ngp目录下,依次执行如下命令:

conda create -n instant-ngp python=3.8
pip install -r requirements.txt
conda install -c conda-forge colmap
conda install -c conda-forge ffmpeg
conda install -c conda-forge mpir

      3.通过COLMAP软件获取相机参数,其存放在名为transforms.json文件中,与图像序列目录名在同一目录中,可通过脚本scripts/colmap2nerf.py实现,如lego图像序列集:将lego图像序列集存放到instant-ngp中的data/nerf目录下: data/nerf/lego/train,将终端定位到data/nerf/lego目录下,执行以下命令:需要几分钟时间,执行结果如下图所示

python ../../../scripts/colmap2nerf.py --colmap_matcher exhaustive --colmap_camera_model PINHOLE --run_colmap --images train --aabb_scale 4

      4.生成transforms.json后,双击打开instant-ngp.exe,将lego目录直接拖到窗口中,执行结果如下图所示: 

      输入参数--colmap_matcher :

      (1).sequential:适用于从平滑变化的相机路径拍摄的图像,如视频中
      (2).exhaustive:适用于图像没有特定的顺序

      对采集图像序列集要求:具有良好的覆盖范围;不包含错误标记的相机数据;不包含模糊帧(运动模糊和散焦模糊都是有问题的);图像不能太少.
      经验法则:如果你的NeRF模型在20秒左右后似乎没有收敛,那么经过长时间的训练后,它不太可能变得更好。建议调整数据,以便在训练的早期阶段获得明确的结果。对于大型真实场景,最多训练几分钟就可以获得一点额外的清晰度。几乎所有的收敛都发生在最初的几秒钟内。
      默认情况下,instant-ngp的NeRF实现仅将光线(rays)穿过从[0,0,0]到[1,1,1]的单位边界框(unit bounding box).默认情况下,数据加载器在输入JSON文件中采样相机转换,并将位置缩放为0.33,偏移量缩放为[0.5,0.5,0.5],以便将输入数据的原点映射到此立方体的中心: 在transforms.json中为"scale": 0.33, "offset": [0.5, 0.5, 0.5]
      transforms.json中aabb_scale参数值设置:对于在单元立方体(unit cube)外部有可见背景的自然场景,有必要将参数aabb_scale设置为2的幂,最大为128(即1, 2, 4, 8, ..., 128).默认为1,适合于小型场景.
      许多数据集在图像中的曝光、白平衡或照明(exposure, white-balance, or lighting)不一致.这可能导致重建中的问题,通常是"飞蛾症(floaters)".虽然避免此问题的最佳方法是重新记录(re-record)数据集,但这并不总是一个选择.在这种情况下,instant-ngp支持通过向transforms.json添加以下行来学习每个图像的"潜在"外观代码("latent" appearance code): {"n_extra_learnable_dims": 16,} ,其中16是性能良好的默认数字,但也可以尝试其它数字。
      为了训练自我捕获的数据,必须将数据处理成instant-ngp支持的现有格式,提供脚本来支持3种方法: COLMAP、Record3D、NeRFCapture.
      NeRF模型最佳使用50到150张图像训练,这些图像表现出最小的场景移动、运动模糊或其它模糊伪影(blurring artifacts).重建的质量取决于colmap2nerf.py能够从图像中提取准确的相机参数

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐