原文链接:https://arxiv.org/abs/2401.03890
NeRF在计算效率和可控性上具有局限性,这导致了3D高斯溅射(3D GS)的出现,重新定义了场景表达和渲染。
3D GS通过引入新的场景表达技术,用大量的3D高斯表达场景。3D GS使用显式的表达和高度并行化的工作流程,促进高效计算和渲染;其创新在于混合了可微渲染与基于点的渲染技术的优势。3D GS保留了连续体积辐射场的理想特性(有利于高质量图像渲染),同时避免了渲染空空间带来的计算开销。此外,3D GS的显式表达提供了对场景的动态控制能力。
辐射场是3D空间中光分布的表达,捕捉了环境中光与表面和材料的交互。神经场可表达为函数 L : R 5 → R + L:\mathbb{R}^5\rightarrow\mathbb{R}^+ L:R5→R+,其中 L ( x , y , z , θ , ? ) L(x,y,z,\theta,\phi) L(x,y,z,θ,?)将点 ( x , y , z ) (x,y,z) (x,y,z)和球坐标下的方向 ( θ , ? ) (\theta,\phi) (θ,?)映射为非负辐射值。辐射场有显示表达和隐式表达。
隐式辐射场不显式地定义场景几何,通常使用神经网络学习连续体积场景表达。其代表NeRF使用MLP将坐标与视线方向映射为密度和颜色,不会显式存储,而是通过查询神经网络在线计算:
L
implicit
(
x
,
y
,
z
,
θ
,
?
)
=
NeuralNetwork
(
x
,
y
,
z
,
θ
,
?
)
L_\text{implicit}(x,y,z,\theta,\phi)=\text{NeuralNetwork}(x,y,z,\theta,\phi)
Limplicit?(x,y,z,θ,?)=NeuralNetwork(x,y,z,θ,?)
这一形式允许复制场景可微且紧凑的表达,但渲染时的射线行进有较高的计算复杂度。
显式辐射场直接在离散空间结构中表达光的分布,如体素或点集。结构中的每个元素存储了相应位置的辐射信息。这一方法通常能更直接、更快地获取辐射数据,但需要大量存储空间,且分辨率可能受限。通常形式为:
L
explicit
(
x
,
y
,
z
,
θ
,
?
)
=
DataStructure
[
(
x
,
y
,
z
)
]
?
f
(
θ
,
?
)
L_\text{explicit}(x,y,z,\theta,\phi)=\text{DataStructure}[(x,y,z)]\cdot f(\theta,\phi)
Lexplicit?(x,y,z,θ,?)=DataStructure[(x,y,z)]?f(θ,?)
其中 DataStructure \text{DataStructure} DataStructure为网格或点云, f f f为基于视线方向修改辐射的函数。
3D GS使用3D高斯作为灵活且高效的表达,从而利用了隐式和显式辐射场的优势。高斯可通过基于神经网络的优化来精确表达场景,但进行的是显式、结构化的数据存储。这种混合方法能进行高质量渲染,且训练更快、有实时性。3D高斯表达可表示为:
L
3DGS
(
x
,
y
,
z
,
θ
,
?
)
=
∑
i
G
(
x
,
y
,
z
,
μ
i
,
Σ
i
)
?
c
i
(
θ
,
?
)
L_\text{3DGS}(x,y,z,\theta,\phi)=\sum_iG(x,y,z,\mu_i,\Sigma_i)\cdot c_i(\theta,\phi)
L3DGS?(x,y,z,θ,?)=i∑?G(x,y,z,μi?,Σi?)?ci?(θ,?)
其中 G G G为高斯函数,均值为 μ i \mu_i μi?,方差为 Σ i \Sigma_i Σi?; c i c_i ci?表示视线相关的颜色。
场景重建:从一组图像或其它数据建立场景的3D模型。
渲染:将计算机可读取的信息(如场景中的3D物体)转化为图像。
早期技术基于光场生成逼真的图像,运动恢复结构(SfM)与多视图立体(MVS)算法通过从图像序列估计3D结构来增强光场。
神经渲染:通过将深度学习与传统图形技术结合生成图像。早期方法使用CNN估计混合权重或纹理空间解。
辐射场:函数表达,描述从各方向穿过空间各点的光的量。NeRF使用神经网络建模辐射场。
体积表达:不仅将物体和场景表达为表面,还表达为填充了材料或空空间的“体”。这样可以对如雾、烟或半透明材料进行更精确的渲染。
射线行进:是体积表达渲染图像的技术,通过增量跟踪穿过“体”的光线来渲染图像。NeRF引入重要性采样和位置编码增强合成图像的质量。但这一方法计算量大。
基于点的渲染使用点而非传统的多边形可视化3D场景,对复杂、无结构或稀疏几何数据的渲染非常高效。点可以使用可学习神经描述符增强特征。但这一方法会导致渲染中出现孔或混叠现象。3D GS通过使用各向异性高斯进行更连贯的场景表达。
3D高斯可以进行实时、高分辨率的图像渲染,而无需依赖神经成分。
现有由大量3D高斯表达的场景,目的是生成特定视角下的相机图像。NeRF使用射线行进采样点,影响其实时性;而3D GS将3D高斯投影到图像平面,称为“溅射”,如下图所示。然后对高斯进行排序,并计算各像素的值。NeRF和3D GS的渲染可视为互逆关系。
3D高斯的属性:一个3D高斯的属性包括,中心(位置) μ \mu μ,不透明度 α \alpha α,3D协方差矩阵 Σ \Sigma Σ,颜色 c c c。其中 c c c与视角相关,由球面谐波表达。所有属性均可学习,并通过反向传播优化。
视域剔除:给定特定的相机姿态,该步骤会判断哪些高斯位于相机的视锥外,并在后续步骤中剔除之,以节省计算。
溅射:3D高斯(椭球)被投影到2D图像平面(椭圆)进行渲染。给定视图变换
W
W
W和3D协方差矩阵
Σ
\Sigma
Σ,投影的2D协方差矩阵
Σ
′
\Sigma'
Σ′按下式计算:
Σ
′
=
J
W
Σ
W
T
J
T
\Sigma'=JW\Sigma W^TJ^T
Σ′=JWΣWTJT
其中 J J J为投影变换仿射近似的雅可比矩阵。
像素渲染:给定像素的位置
x
x
x,其与所有重叠高斯的距离,即高斯的深度可以通过视图变换
W
W
W计算,得到排序后的高斯列表
N
\mathcal{N}
N。然后进行alpha混合,计算该像素的最终颜色:
C
=
∑
i
∈
N
c
i
α
i
′
∏
j
=
1
i
?
1
(
1
?
α
j
′
)
C=\sum_{i\in\mathcal{N}}c_i\alpha'_i\prod_{j=1}^{i-1}(1-\alpha'_j)
C=i∈N∑?ci?αi′?j=1∏i?1?(1?αj′?)
其中
c
i
c_i
ci?为学习的颜色,最终不透明度
α
i
′
\alpha'_i
αi′?为学习不透明度
α
i
\alpha_i
αi?与高斯的乘积:
α
i
′
=
α
i
×
exp
?
(
?
1
2
(
x
′
?
μ
i
′
)
T
Σ
i
′
?
1
(
x
′
?
μ
i
′
)
)
\alpha'_i=\alpha_i\times\exp(-\frac{1}{2}(x'-\mu'_i)^T\Sigma^{'-1}_i(x'-\mu'_i))
αi′?=αi?×exp(?21?(x′?μi′?)TΣi′?1?(x′?μi′?))
其中
x
′
x'
x′与
μ
i
′
\mu'_i
μi′?为投影空间内的坐标。考虑到排序的并行化较为困难,这种逐像素的方法可能会影响渲染速度。为实现实时渲染,3D GS做出了一些让步,以进行并行计算。
Tile(Patch):为避免逐像素计算,3D GS改为patch级别的渲染。首先将图像分割为多个不重叠的patch,称为tile,如上图所示。然后确定tile与投影高斯的相交情况。由于投影高斯可能会与多个tile相交,需要进行复制,并为每个复制体分配相关tile的标识符(如tile的ID)。
并行渲染:复制后,3D GS(对应字节的无序列表)包含了相关的tile ID(对应字节的高位)和深度信息(对应字节的低位),如上图所示。排序后的列表可直接用于渲染(alpha混合),如下图所示。由于渲染每个tile和像素是独立的,这使得该过程适合并行计算。此外,每个tile的像素可访问共享空间,保留统一的读取序列,可以进一步提高效率。可以将tile与像素的处理类比于CUDA程序结构中的块与线程。
总的来说,3D GS在前向过程中做出了一些近似,以提高计算效率并保留图像合成的高质量。
3D GS的核心是3D高斯集合的优化过程。一方面需要通过可微渲染来使高斯符合场景纹理,另一方面表达场景需要的高斯数量是未知的。这分别对应参数优化与密度控制两步,这两步在优化过程中交替进行。优化过程中,需要手动设置很多超参数。
损失函数:图像合成完成后,计算渲染图像与真实图像的差异作为损失:
L
=
(
1
?
λ
)
L
1
+
λ
L
D
?
S
S
I
M
\mathcal{L}=(1-\lambda)\mathcal{L}_1+\lambda\mathcal{L}_{D-SSIM}
L=(1?λ)L1?+λLD?SSIM?
这与NeRF的损失略有不同。NeRF的损失是在像素层面计算的,而非图像层面。
参数更新:3D高斯的多数参数可通过反向传播直接更新,但对于协方差矩阵
Σ
\Sigma
Σ来说,需要半正定矩阵。因此,改为优化四元数
q
q
q和3D向量
s
s
s。将协方差矩阵分解:
Σ
=
R
S
S
T
R
T
\Sigma=RSS^TR^T
Σ=RSSTRT
其中 R R R与 S S S分别由 q q q和 s s s推导得到的旋转和缩放矩阵。对于不透明度 α \alpha α,其计算图较为复杂: ( q , s ) → Σ → Σ ′ → α (q,s)\rightarrow\Sigma\rightarrow\Sigma'\rightarrow\alpha (q,s)→Σ→Σ′→α。为避免自动微分的计算消耗,3D GS还推导了 q q q与 s s s的梯度,在优化过程中直接计算之。
SLAM需要让设备实时理解自身位置并同时为环境建图,因此计算量大的表达技术难以应用。
传统SLAM使用点/surfel云或体素网格表达环境。3D GS的优势在于高效性(自适应控制高斯密度)、精确性(各向异性高斯能建模环境细节)、适应性(能用于各种尺度和复杂度的环境)。
动态场景建模需要捕捉和表达场景随时间变化的的3D结构和外表。需要建立 能精确反映场景中物体几何、运动和视觉方面的数字模型。4D高斯溅射通过扩展3D高斯溅射的概念,引入时间维度,使得可以表达和渲染动态场景。
AIGC是人工智能自动创建或极大修改的数字内容,可以模仿、扩展或增强人类生成的内容。
3D GS的显式特性、实时渲染能力和可编辑水平使其与AIGC高度相关。例如,有方法使用3D GS与生成模型、化身或场景编辑结合。
自动驾驶的目标是在无人干涉的情况下导航并操作车辆,其主要目标是安全而高效地感知环境、做出决策和操作执行器。
其中,感知和理解环境需要实时重建驾驶场景,精确识别静态和动态物体,并理解其相互关系和运动。动态驾驶场景中,场景还会随时间连续变化。3D GS可以通过混合数据点(如激光雷达点)将场景重建为连贯表达,有利于处理数据点变化的密度,以及静态背景和动态物体的精确重建。
该任务的目标是从给定的多视角视频渲染人体化身模型。