使用即时神经图形基元训练 NeRF 模型的提示

您所在的位置:网站首页 原原什么什么aabb 使用即时神经图形基元训练 NeRF 模型的提示

使用即时神经图形基元训练 NeRF 模型的提示

2023-09-23 18:19| 来源: 网络整理| 查看: 265

使用即时神经图形基元训练 NeRF 模型的提示

我们的 NeRF 实现期望以与原始 NeRF 代码库兼容的格式在文件中提供初始相机参数。作为方便,我们提供脚本/colmap2nerf.py,可用于处理视频文件或图像序列,使用运动软件中的开源COLMAP结构提取必要的相机数据。transforms.json

训练过程可能对数据集非常挑剔。例如,数据集必须具有良好的覆盖范围,不包含错误标记的相机数据,并且不包含模糊帧(运动模糊和散焦模糊都是有问题的)。本文档试图提供一些提示。一个好的经验法则是,如果你的NerF模型在20秒左右后似乎没有收敛,那么经过长时间的训练后,它不太可能变得更好。因此,我们建议调整数据,以便在训练的早期阶段获得明确的结果。对于大型现实世界的场景,最多可以通过训练几分钟来获得一点额外的清晰度。几乎所有的收敛都发生在最初的几秒钟内。

数据集最常见的问题是相机位置的比例或偏移不正确。更多详细信息,请参见下文。下一个最常见的问题是图像太少,或者图像的相机参数不准确(例如,如果COLMAP失败)。在这种情况下,您可能需要获取更多图像,或调整相机位置的计算过程。这超出了即时 ngp 实现的范围。

现有数据集

默认情况下,instant-ngp 的 NeRF 实现仅通过从 到 的单位边界框行进光线。默认情况下,数据加载程序在输入 JSON 文件中采用摄像机转换,并缩放位置和偏移,以便将输入数据的来源映射到此多维数据集的中心。选择比例因子是为了适应原始NerF论文中的合成数据集,以及我们的脚本/ colmap2nerf.py脚本的输出。[0, 0, 0][1, 1, 1]0.33[0.5, 0.5, 0.5]

通过在 UI 的"调试可视化"汇总中同时选中"可视化相机"和"可视化单位立方体",检查相机与此边界框的对齐情况是值得的,如下所示:

转存失败重新上传取消

对于在单位立方体外部可见背景的自然场景,有必要在最外层的作用域(与现有参数相同的嵌套)将文件中的参数设置为 2 整数到 16(即 1、2、4、8 或 16)的幂。有关示例,请参阅 data/nerf/fox/transforms.json。aabb_scaletransforms.jsoncamera_angle_x

效果可以在下图中看到:

转存失败重新上传取消

相机仍然在某种程度上集中在单位立方体内的"感兴趣对象"上;但是,aabb_scale参数(此处设置为 16)会导致 NeRF 实现将光线追踪到一个更大的边界框(边长为 16),其中包含以 为中心的背景元素。[0.5, 0.5, 0.5]

缩放现有数据集

如果现有数据集的格式,则应将其居中,并且其比例应与原始 NeRF 综合数据集相似。当您将其加载到NGP中时,如果您发现它没有收敛,首先要检查的是相机相对于单元立方体的位置,使用上述调试功能。如果数据集不主要落在单位立方体中,则值得将其移动到该单位。您可以通过调整转换本身来执行此操作,也可以将全局参数添加到 json 的外部范围。transforms.json

您可以设置以下任何参数,其中列出的值是默认值。

{ "aabb_scale": 16, "scale": 0.33, "offset": [0.5, 0.5, 0.5], ... }

有关实现详细信息和其他选项,请参阅 nerf_loader.cu。

准备新的 NeRF 数据集

请确保您已安装 COLMAP,并且它在 PATH 中可用。如果您使用视频文件作为输入,请确保安装 FFmpeg 并确保它在 PATH 中可用。要检查是否属于这种情况,从终端窗口中,您应该能够运行并查看每个窗口的一些帮助文本。colmapffmpeg -?

如果从视频文件进行训练,请使用以下建议参数从包含视频的文件夹中运行 scripts/colmap2nerf.py 脚本:

data-folder$ python [path-to-instant-ngp]/scripts/colmap2nerf.py --video_in --video_fps 2 --run_colmap --aabb_scale 16

上述假设单个视频文件作为输入,然后以指定的帧速率(2)提取帧。建议选择可生成约 50-150 张图像的帧速率。所以对于一分钟的视频,是理想的。--video_fps 2

对于从图像进行训练,请将它们放在一个调用的子文件夹中,然后使用合适的选项,如下所示:images

data-folder$ python [path-to-instant-ngp]/scripts/colmap2nerf.py --colmap_matcher exhaustive --run_colmap --aabb_scale 16

该脚本将根据需要运行 FFmpeg 和/或 COLMAP,然后执行到所需格式的转换步骤,该步骤将写入当前目录。transforms.json

默认情况下,该脚本使用"顺序匹配器"调用 colmap,该匹配器适用于从平滑变化的相机路径拍摄的图像,如在视频中。如果图像没有特定顺序,则穷举匹配器更合适,如上面的图像示例所示。有关更多选项,可以使用 运行脚本。有关COLMAP的更高级用途或具有挑战性的场景,请参阅COLMAP文档;您可能需要修改脚本/colmap2nerf.py脚本本身。--help

参数是最重要的特定参数。它指定场景的范围,默认为1;也就是说,对场景进行缩放,使摄像机位置与原点的平均距离为 1 个单位。对于小型合成场景(如原始 NeRF 数据集),默认值 1 是理想的,可以实现最快的训练。NeRF 模型假设训练图像完全可以由此边界框中包含的场景来解释。但是,对于背景超出此边界框的自然场景,NeRF模型将挣扎,并可能在框的边界处产生幻觉"漂浮物"。通过设置为更大的 2 次幂(最多 16 次方),NeRF 模型会将光线扩展到更大的边界框。请注意,这可能会略微影响训练速度。如果有疑问,对于自然场景,请从16开始,然后尽可能减少它。该值可以直接在输出文件中编辑,而无需重新运行 scripts/colmap2nerf.py 脚本。aabb_scaleinstant-ngpaabb_scaleaabb_scaleaabb_scaletransforms.json

假设成功,您现在可以按如下方式训练 NeRF 模型,从文件夹开始:instant-ngp

instant-ngp$ ./build/testbed --mode nerf --scene [path to training data folder containing transforms.json] NeRF 训练数据提示

NeRF模型最适合50-150张图像,这些图像表现出最小的场景运动,运动模糊或其他模糊伪影。重建的质量取决于COLMAP能够从图像中提取准确的相机参数。有关如何验证这一点的信息,请查看前面的部分。

该脚本假定训练图像都近似地指向一个共享的兴趣点,该兴趣点位于原点。该点是通过对所有训练图像对的中心像素采取光线之间最接近的接近点的加权平均值来发现的。在实践中,这意味着当训练图像被捕获指向感兴趣对象的训练图像时,脚本效果最佳,尽管它们不需要完成完整的360度视图。如上所述,如果设置为大于 1 的数字,则感兴趣对象后面的任何可见背景仍将被重建。colmap2nerf.pyaabb_scale



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3