NeRF:从二维图像到三维重建
反渲染(Inverse Rendering)可以理解为成像渲染的反过程,是指从一组二维图像重建三维场景的过程,这在计算机视觉和图形学中具有重要意义。NeRF(Neural Radiance Fields)是一种先进的三维重建神经网络方法,能够从一组二维图像生成高质量的三维场景。本文将详细介绍NeRF的各个方面,包括输入前处理、模型结构、体渲染、反渲染的概念及其应用。
输入的前处理
为了从二维图像生成用于NeRF模型的粒子,需要进行一系列的前处理步骤:
-
光线投射(Ray Casting):将每个像素的光线从相机的视点投射到三维空间中。这些光线通过相机的内参和外参计算得到。
-
采样点生成:沿着每条光线均匀地生成采样点。例如,从近平面到远平面之间生成64个均匀分布的采样点。
-
输入预处理:每个采样点的三维坐标和视角方向作为NeRF模型的输入。
(如图a所示,黑色的点就是粗均匀采样的点)
模型结构
NeRF模型由两个类似的全连接神经网络组成:粗模型(Coarse Model)和细模型(Fine Model)。
粗模型(Coarse Model):
- 输入:位置编码后的三维点坐标 γ ( x ) \gamma(\mathbf{x}) γ(x)和视角方向 γ ( d ) \gamma(\mathbf{d}) γ(d)。
- 网络结构:包含8层,每层256个单元,激活函数为ReLU。在第4层之后,将中间特征与原始输入拼接(skip connection)。
- 输出:体积密度(不透明度) σ \sigma σ 和颜色 c ∈ ( R G B ) \mathbf{c} \in (RGB) c∈(RGB)。
细模型(Fine Model):
- 输入:来自粗模型的重要性采样点,位置编码后的三维点坐标 γ ( x ) \gamma(\mathbf{x}) γ(x) 和视角方向 γ ( d ) \gamma(\mathbf{d}) γ(d)。
- 网络结构:与粗模型相似的多层感知机结构,但处理的是更加细化的采样点。
(粗细模型的结构是一样的,只是尺寸不太一样,粗模型处理的是64个采样点的输入,而细模型处理的是64+128=192个采样点的输入。其中,128是在粗模型中输出为高密度的地方进行二次采样的,也就是说这个地方有东西,多采样,重建效果更好)
粒子的前期均匀采样与细模型的二次采样
-
前期均匀采样:
- 在粗模型中,将光线在场景中的每个视点均匀采样,得到一组样本点。
-
细模型的二次采样:
- 根据粗模型的输出,通过重要性采样在光线上进行二次采样,得到更多高密度区域的样本点,然后输入细模型进行更精细的重建。
位置编码(Positional Encoding)
为了捕捉高频信息,NeRF对输入的三维位置和视角方向进行位置编码。位置编码的公式如下:
γ
(
p
)
=
(
sin
(
2
0
π
p
)
,
cos
(
2
0
π
p
)
,
…
,
sin
(
2
L
−
1
π
p
)
,
cos
(
2
L
−
1
π
p
)
)
\gamma(p) = (\sin(2^0 \pi p), \cos(2^0 \pi p), \ldots, \sin(2^{L-1} \pi p), \cos(2^{L-1} \pi p))
γ(p)=(sin(20πp),cos(20πp),…,sin(2L−1πp),cos(2L−1πp))
其中,
p
p
p是位置或方向,
L
L
L 是编码的频率数量。
体渲染(Volume Rendering)
NeRF采用体渲染技术来合成最终图像。对于一条光线,计算其在场景中的颜色和透明度,并对其进行积分:
C
(
r
)
=
∫
t
n
t
f
T
(
t
)
σ
(
r
(
t
)
)
c
(
r
(
t
)
,
d
)
d
t
C(\mathbf{r}) = \int_{t_n}^{t_f} T(t) \sigma(\mathbf{r}(t)) \mathbf{c}(\mathbf{r}(t), \mathbf{d}) \, dt
C(r)=∫tntfT(t)σ(r(t))c(r(t),d)dt
其中,透过率 ( T(t) ) 表示光线从眼睛到深度 ( t ) 位置的光线强度衰减。
损失函数(Loss)
NeRF的训练目标是最小化合成图像与真实图像之间的差异,使用的损失函数是均方误差(MSE):
L
=
1
N
∑
i
=
1
N
∥
C
^
(
r
i
)
−
C
(
r
i
)
∥
2
\mathcal{L} = \frac{1}{N} \sum_{i=1}^{N} \| \hat{C}(\mathbf{r}_i) - C(\mathbf{r}_i) \|^2
L=N1∑i=1N∥C^(ri)−C(ri)∥2
其中,( \hat{C}(\mathbf{r}_i) ) 是合成图像,( C(\mathbf{r}_i) ) 是真实图像。
训练与推理
NeRF通过优化神经网络的参数来训练模型,使用随机梯度下降(SGD)或其变种,如Adam优化器。训练过程中,NeRF逐步调整网络参数,使其能够准确拟合输入图像的数据分布。
在推理阶段,NeRF使用训练好的网络参数,对新的视角进行渲染。输入新的三维点和视角方向,通过神经网络计算输出的颜色和密度,经过体渲染技术合成新的视图。
总结
简单介绍了NeRF这个三维重建模型的输入前处理、模型结构、位置编码、体渲染及反渲染技术,NeRF实现了从二维图像到三维重建的过程。其在高质量三维重建和细节捕捉方面的出色表现,使其在学术研究和实际应用中都展示了广阔的前景。
版权声明
本博客内容仅供学习交流,转载请注明出处。