NeRF笔记
NeRF目标:从任意角度渲染出清晰的场景图片<br>优化隐式的连续场景,利用稀疏的视角作为全连接神经网络的输入输入:两个向量:1. 空间坐标x(x, y, z三个维度)2. 视角方向d(θ, φ两个角度,初步怀疑是直角坐标转化为球坐标时用到的两个角度)由于体素渲染的天然可区分性,用于优化视图的输入只有一系列已知相机视角的图片输出:两个1. 体素密度σ2. 发散颜色 c = (r, g,
NeRF
目标:从任意角度渲染出清晰的场景图片
优化隐式的连续场景,利用稀疏的视角作为全连接神经网络的输入
输入:
两个向量:
1. 空间坐标x(x, y, z三个维度)
2. 视角方向d(θ, φ两个角度,初步怀疑是直角坐标转化为球坐标时用到的两个角度)
由于体素渲染的天然可区分性,用于优化视图的输入只有一系列已知相机视角的图片
输出:两个
1. 体素密度σ
2. 发散颜色 c = (r, g, b)
映射
FΘ : (x, d) → (c, σ)
σ是单纯由x,通过多视图一致限制神经网络进行预测的
c是由x 和 d一起,通过某个函数预测的
映射过程
如何渲染图片?
基于辐射场的体素渲染法
经典的体素渲染法
从虚拟的相机射线上从远端到近端(近端指遇到粒子阻隔处)对每一个点的透明度进行求和,在连续射线上近似为积分过程
基于分段随机采样的离散近似volume rendering方式
实际应用场景中,采取数值近似的方法。
将相机射线上需要积分的部分进行均匀划分,在划分出的每一个小块上进行随机采样,借此简化积分表达式。
优化过程
位置编码
为什么要有?
文章中指出,尽管神经网络可以普适地拟合函数,但是在实际过程中,仅依赖五维输入,最终的结果在高频变动的颜色和几何上不尽如人意(perform poorly)
为什么会有上述的缺点?
On the spectral bias of neural networks中指出,神经网络偏向学习低频函数
怎么做?
在把数据丢给网络之前,将其映射到高维空间
具体:
(1)先将x, d在[-1,1]范围内进行标准化
(2)通过γ(p)对分量分别进行映射
多层级体素采样
为什么要有?
原本的渲染策略效率不高,对于一些空的和被遮挡的部分,对渲染图片没有贡献,但是却被重复采样
为什么多层级采样会表现连续的场景?
多层感知机在连续场景下的估计值比优化要好(it results in the MLP being evaluated at continuous positions over the course of optimization)
怎么做?
(1)采取不一致的离散化。
(2)同时优化两个网络,一个“coarse”,一个“fine”。
(3)对于“coarse”网络的采样时偏向信息多、联系多的点。重写积分函数,构造相机射线上的分段连续。
(4)对于"fine"网络,采用的是上一步采样的交集。
代码运行
代码链接:https://github.com/yenchenlin/nerf-pytorch
一共运行了两个数据集,lego和fern(需在运行前对数据集进行下载,具体步骤在代码文件的readme中)
运行时间超过十个小时
运行结果:最终生成视频,连续地展示不同视角下的场景
代码结构
(映射过程的图)
- 生成相机虚拟射线
- 用生成的虚拟射线rays,生成体素密度和特征向量
- 沿光线积分,得到颜色
更多推荐
所有评论(0)