NeRF神经网络介绍

NeRF: Neural Radiance Fields简介

优化单个场景的神经表示并渲染新视图的Tensorflow实现。
NeRF:将场景表示为用于视图合成的 Neural Radiance Fields

团队介绍

  • 来自加州大学伯克利分校Ben Mildenhall(本·米尔登霍尔)
  • 来自加州大学伯克利分校Pratul P. Srinivasan(普拉图尔·斯里尼瓦桑)
  • 来自加州大学伯克利分校Matthew Tancik(马修·坦西克)
  • 来自谷歌研究Jonathan T. Barron( 乔纳森·巴伦)
  • 来自加州大学圣地亚哥分校Ravi Ramamoorthi(拉维·拉马穆尔蒂)
  • 来自加州大学伯克利分校Ren Ng( 吴义仁)

黄色底为表示同等贡献
在ECCV 2020年(口头陈述,最佳论文荣誉奖)

在这里插入图片描述

快速入门

要设置conda环境,请下载示例培训数据,开始培训过程,并启动Tensorboard:

conda env create -f environment.yml
conda activate nerf
bash download_example_data.sh
python run_nerf.py --config config_fern.txt
tensorboard --logdir=logs/summaries --port=6006

如果一切正常,您现在可以进入localhost:6006在你的浏览器里观看“Fern”场景训练。

设置

Python 3依赖性:

  • Tensorflow 1.15
  • matplotlib
  • numpy
  • imageio
  • configargparse

LLFF数据加载器需要ImageMagick。

我们提供了一个conda环境设置文件,包括上述所有依赖项。创造conda环境nerf通过运行:

conda env create -f environment.yml

你还需要LLFF code(和COLMAP)建立评估姿态,如果你想在自己的真实数据上运行。

什么是NeRF?

Neural Radiance Fields是一个简单的完全连接的网络(权重约为5MB ),它被训练为使用渲染损失来再现单个场景的输入视图。该网络直接从空间位置和观察方向(5D输入)映射到颜色和不透明度(4D输出),充当“体积”,因此我们可以使用体积渲染来有区别地渲染新视图。
优化一个NeRF需要几个小时到一两天的时间(取决于分辨率),并且只需要一个GPU。从优化的NeRF渲染一幅图像需要不到一秒到30秒的时间,这也取决于分辨率。

运行代码

这里我们展示了如何在两个示例场景中运行我们的代码。您可以下载论文中使用的其他合成和真实数据。

优化NeRF

启动程序

bash download_example_data.sh

来获取我们的合成乐高数据集和LLFF Fern数据集。

若要优化低分辨率Fern NeRF:

python run_nerf.py --config config_fern.txt

经过20万次迭代(大约15个小时),应该可以在logs/fern_test/fern_test_spiral_200000_rgb.mp4
在这里插入图片描述
要优化低分辨率乐高NeRF:

python run_nerf.py --config config_lego.txt

经过20万次迭代后,您应该会看到这样的视频:
在这里插入图片描述

渲染一个NeRF

启动程序

bash download_example_weights.sh

为Fern数据集获得一个预训练的高分辨率NeRF。现在您可以使用render_demo.ipynb来呈现新的视图。

复制纸质结果

示例配置文件的分辨率低于论文和视频中的定量/定性结果。要复制论文中的结果,从中的配置文件开始paper_configs/。我们的合成搅拌机数据和LLFF场景托管深度体素数据由文森特·西兹曼主持。

从NeRF中提取几何体

检验extract_mesh.ipynb例如,运行行进立方体来从训练好的NeRF网络中提取三角形网格。你需要安装皮姆库斯用于行进立方体和的包三角形网线图和pyrender如果要渲染笔记本内部的网格,请执行以下操作:

pip install trimesh pyrender PyMCubes

为自己的场景生成姿势

不摆姿势?

我们建议使用imgs2poses.py脚本来自LLFF电码。然后,您可以使用以下命令将基本场景目录传递到我们的代码中--datadir <myscene>随着-dataset_type llff。你可以看看config_fern.txt前向场景使用的设置示例。对于球形捕捉的360°场景,我们建议添加--no_ndc --spherify --lindisp旗帜。

已经有姿势了!

在…里run_nerf.py和所有其他代码一样,我们使用与OpenGL中相同的姿态坐标系:图像的局部相机坐标系定义为X轴指向右侧,Y轴向上,Z轴从图像中看向后。

姿势存储为3x4 numpy数组,表示摄影机到世界的变换矩阵。您需要的其他数据是简单的针孔摄像机内部函数(hwf = [height, width, focal length])和近/远场景边界。看一看我们的数据加载代码去看更多。

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于nerf神经网络,其对gpu的要求相对较高。该神经网络主要由两部分组成,即网络的前向模型和反向模型。在训练网络的过程中,需要对这两个模型进行反复的计算,以实现不同参数的调整和更新。由于nerf神经网络需要处理大量的复杂数据和矩阵计算,在运行过程中对GPU的计算能力、存储能力和带宽等方面都有一定要求。 首先,GPU的计算能力需要比较强大。nerf神经网络在训练时需要对大规模的图像或视频数据集进行计算,完成非线性的函数映射。这样的计算复杂度是非常高的,需要高效的计算加速。而普通的CPU常在处理这种大规模的、高复杂度的计算时会产生计算瓶颈,因此需要使用高效的GPU加速处理,以提高计算速度和计算效率。 其次,nerf神经网络对GPU的存储能力要求也较高。神经网络需要存储大量的权重、参数和中间结果等,因此需要GPU具有足够的存储空间,以支持这些数据的存储和传输。 最后,nerf神经网络对GPU的带宽要求也比较高。由于神经网络需要反复进行数据的读取和传输,需要高速的数据传输通道,以使得数据的传输速度和传输效率都能够得到保证。 总的来说,对于nerf神经网络而言,GPU的计算能力、存储能力和带宽都是非常关键的因素。只有在这些方面都得到充分满足的情况下,神经网络才能够在训练和实际应用中发挥最优的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北岛末巷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值