NeRF 源码解读(一)
前言
NeRF 是三维视觉中新视图合成任务的启示性工作,最近领域内出现了许多基于 NeRF 的变种工作。本文以pytorch 版 NeRF 作为基础对 NeRF 的代码进行分析。
主要从以下方面开展:
- 数据的加载
- 光线的生成
- NeRF 网络架构
- 渲染过程
一、数据的加载
本文以加载合成数据集中 lego 图像为例。
首先我们观察 ./data/nerf_synthetic/lego 文件夹下的树结构:

train、test、val 三个文件夹下包含了训练要用到的 .png 图像,每个文件夹下包含 100 个文件。.json 文件包含了相机的 camera2word 转置矩阵,下图展示了部分文件中的内容。关于此转置矩阵不再展开叙述,具体知识可查看 SLAM 14 讲。了解以上基本信息后解析数据加载的代码。

frame 的值是一个列表,其中列表中的值是字典
def train():
# 设置参数
parser = config_parser()
args = parser.parse_args()
...
elif args.dataset_type == 'blender':
images, poses, render_poses, hwf, i_split = load_blender_data(args.datadir, args.half_res, args.testskip)
print('Loaded blender', images.shape, render_poses.shape, hwf, args.datadir)
i_train, i_val, i_test = i_split
# 设定边界框的远近边界
near = 2.
far = 6.
# 将 RGBA 转换成 RGB 图像
if args.white_bkgd:
# 如果使用白色背景
images = images[...,:3]*images[...,-

本文深入解析了PyTorch版NeRF的代码,从数据加载的lego图像示例入手,讲解了如何获取图像、转置矩阵和生成光线。后续章节将探讨网络架构与渲染过程。
最低0.47元/天 解锁文章
1万+





