简介
BungeeNeRF是采用一种渐进的神经辐射场(a progressive NeRF),能够在不同尺度上实现细节层次的渲染——从a shallow base block开始拟合远距离视图,随着训练的进行,新的blocks被加入到模型中用来适应逐渐靠近的视图细节;该策略逐渐激活NeRF位置编码中的高频通道,并随着训练的进行陆续展开更复杂的细节。
准备工作
首先从BungeeNeRF官网下载BungeeNeRF代码
git clone https://github.com/city-super/BungeeNeRF.git
cd BungeeNeRF
创建data文件夹并下载数据集:
mkdir data
可以采用两种方式从中获取数据集:
1.将 multiscale_google_56Leonard.zip 和 multiscale_google_Transamerica.zip 解压缩到数据data目录。 这两个文件夹包含渲染图像images和处理后的相机位姿poses_enu.json;
2.官网还提供了两个可以加载到Google Earth Studio中的.eps文件,可以调整相机轨迹并渲染最新的视图,城市的外观总是在GES中更新; 官网建议阅读相关操作指南来了解相机配置和允许的用途。
配置目录
运行
代码默认尺度cur_stage从0开始,EXP_CONFIG_FILE是对应数据集的实验配置文件(56Leonard.txt或Transamerica.txt),以下的例子为训练56Leonard.txt:
python run_bungee.py --config configs/EXP_CONFIG_FILE
用来渲染测试的命令为:
python run_bungee.py --config configs/EXP_CONFIG_FILE --render_test
渲染图:
由于cur_stage=0,只提取了尺度为0的训练数据进行渲染,在精度以及数量上都无法达到最佳,,渲染视频:
经过上一个尺度的训练后,可以通过指定cur_stage=1~3切换到下一个训练阶段,这将在训练集中包含一个更精细的尺度;并使用–ft_path指定的前一个阶段检查点开始训练,PREV_CKPT_PATH即为上一阶段保存的模型权重路径,例如./logs/56leonard_test_st0/200000.tar:
python run_bungee.py --config configs/EXP_CONFIG_FILE --cur_stage 1 --ft_path PREV_CKPT_PATH
cur_stage=1的渲染结果为:
达到更高的渲染效果,需要继续下一个尺度的训练
改进点
多级监督的渐进式模型
多尺度还原3D场景,会导致大规模的数据发生变化,这也意味会增大学习难度和改变图像的焦点。
BungeeNeRF以渐进的方式建立和训练模型,用一个渐进的神经辐射场来表示多种尺度之下的场景,用于生成3D场景的照片包括各种视角和距离。
这种渐进的方式划分了各个网络层的工作,并且使位置编码在不同尺度下可以激活不同频带通道,释放每个尺度下相应的细节。
它不仅可以很好地渲染大规模场景的细节,而且能够保持小尺度下场景的细节。
具体来说,这个模型能很好地还原各种尺度之下的3D场景主要归功于以下两个部分:
首先是它具有残差块结构的渐进生长模型,这可以解决以往模型大尺度之下会出现伪影的问题。
BungeeNeRF模型先预设训练阶段的总数(Lmax),而这个训练的次数就是将摄像机与场景之间连续距离离散之后的段数。
换句话说,模型各个阶段的训练就是指在不同尺度之下的训练。
然后从远程视图(L=1)开始,随着训练的进行,BungeeNeRF在每个训练阶段都会纳入一个更近的尺度(L+1)。
通过允许模型在早期训练阶段对外围区域投入更多的成本来弥补样本分布的偏差。
在训练阶段,训练集的增长伴随着残差块的增加。
每个残差块都有自己的输出头,可以用来预测连续阶段之间的颜色和密度残差,在近距离观察时,捕获场景中新出现的复杂细节。
其次是BungeeNeRF具有包容的多层监督结构。
因为要保持所有尺度下图像渲染质量保持一致,所以在训练阶段,输出头是之前更大尺度的图像联合监督的,这个阶段损失会汇总在之前所有尺度的输出头上。
多层次监督的设计在更深层次的输出头上考虑到了细节的复杂性,因此渲染的视图也会更加清晰真实。
相较于其他模型在各种尺度上的细节渲染效果,BungeeNeRF的效果更加明显。
全尺度细节渲染
研究团队在论文中给出了BungeeNeRF生成的3D场景与其他模型的比较,BungeeNeRF明显优于其他模型,并且很接近真实场景。
此外,BungeeNeRF允许从不同的残差块灵活退出来控制LOD(细节水平)。
在放大图像时,后一种输出头逐渐向前一阶段的粗输出添加更复杂的几何和纹理细节,同时保持在较浅层学习的特征对早期的输出头有意义。