slam系列4:nerf和3dgs

常用的3维表示法:

NeRF属于是density的模型,模型的参数如下:

传统的 3D 模型表示方法,如 离散的Mesh 和点云,以及连续的 Nerf,通常面临着一个主要问题:随机采样过程中产生的噪声,这直接影响了渲染质量。3DGS 是在离散和连续间的一个平衡:在高斯球内部是连续的、可微的;在整个空间中,每个高斯球又是离散的。

1. NeRF基本概念

1.1 建模方法

训练一个函数,将位置和摄像头参数转化为颜色和体密度

然后使用体渲染技术,生成图片:

神经网络是用了一个9层256通道的全连接MLP,姑且算是神经网络。训练过程如下:

1.2 Instant NGP

Instant NGP相对于NeRF的核心改进在于它采用了"多分辨率哈希编码" (Multi-resolution hash encoding) 的数据结构。

你可以理解为 Instant NGP 把原始 NeRF 中神经网络的大部分参数扔掉,换成一个小得多的神经网络;同时额外训练一组编码参数 (feature vectors),这些编码参数是存储在网格的顶点上的,这样的网格一共有 层,它们按照分辨率从低到高,用于学习场景不同层次的细节。在每次训练时,小神经网络的参数和每层网格上只有点周围的 8 个顶点中的编码参数会被更新。

Instant NGP 的另一个重要的工程优化是将整个网络实现在一个 CUDA kernel 中 (Fully-fused MLP),使得网络的所有计算都在 GPU 的 local cache 中进行。据论文所称这会带来 10x 的效率提升。

2. 3dgs

2.1 建模方法

3D Gaussian Splatting 干了什么:使用3D Gaussian球表示三维模型,并通过 Splatting 技术渲染出来。

在 NeRF 里去表达一个三维场景的信息时,使用的是三维场景的点和它的体密度值σ、颜色C。3DGS内不再用点表达,而是使用 3D 高斯组件替代了点,所以在空间中的表达是一堆堆的3D高斯。这些3D高斯的信息没有保存在神经网络里,而是存在了硬盘上,所以它是一个显式的表达场景。

3D高斯体参数包括:

2.1.1 谐波函数

球面谐波是一种类似高斯展开的在极坐标系上的函数,用来拟合空间体

作为对比,我们来看另一种球面高斯函数:

和SH定死的基函数相比,SG的特点就是自由度极高:基函数用几个、怎么分布、胖瘦如何,都随意。然而SH也有很多长处是SG没有的,比如SH除了正交性还有旋转不变性。

反馈到实际高光计算上,就会发现SG不能很好地保持高光形状。基函数定义方向上的高光形状能保持的比较好,但如果位置在几个基函数的角度之间,高光形状就会比较散了。

2.1.2 协方差

协方差用于控制高斯体各方向的尺寸。

2.1.3 splating

Splatting是一种传统的3D->2D的光栅化渲染方式。

3DGS首先将这些3D高斯投影到基于像素的图像平面上,这一过程被称为"splatting"。然后,3DGS对这些高斯进行排序,并计算每个像素的值。

给定像素位置 x x x,通过视图变换 W W W,可以计算与所有重叠高斯体的距离,即这些高斯体的深度,形成高斯体的排序列表 N N N。然后,进行Alpha Blending,也就是混合 alpha 合成来计算整体图像的最终颜色:

2.1.4 α blending

多个高斯体splat到平面上,最终形成的图形需要使用α blending进行叠加。

2.1.5 光栅渲染

2.2 初始化点云

初始化时的输入量使用的是 COLMAP 等 SFM 方式输出的点云,这里与 NeRF 就完全不同了,NeRF 使用的 仅是 COLMAP 等输出的相机位姿,而 3DGS 中,这些点云是有用的。3DGS 将根据这些点云进行初始化:基于这些点云的位置,会在每一个位置上放置一个高斯球,系数随机。

2.3 训练过程


3DGS 从近到远每个球投下来以后都形成了一个图像区,那么在重叠区域就可以进行光栅化的融合了。每个点都进行融合以后就可以得到图像。为了避免为每个像素推导高斯系数的成本计算,3D GS将精度从像素级转移到patch级细节。每个瓦片包括16×16个像素。3D GS进一步确定哪些tiles与这些投影的高斯图相交,然后按照tile进行排序,最后并行地对tile进行计算:

NeRF 内逐像素进行计算,即采集一个 batch 的像素,送进去训练,然后输出损失;而在 3DGS 内,每次采集一小批图,以图像为单位进行损失计算。

训练图中,上面的分支更新 3D 高斯椭球体的属性,下支实现 3D 高斯椭球体的克隆和分裂等:


3. 软件

通用软件splatviz,见https://github.com/Florian-Barthel/splatviz。支持实时编辑和分析。通过利用Python GUI库pyimgui,splatviz能够在渲染前直接操作高斯对象,从而实现无限的编辑和可视化可能性。

存储为ply文件,压缩文件为yml文件。

相关推荐
烧技湾5 小时前
RTMW:实时多人2D和3D 全人体姿态估计
3d·全人体关键点检测
十年一梦实验室1 天前
【C++】sophus : rxso3.hpp 实现了 3D 空间中的旋转和缩放操作的 RxSO3 类 (二十一)
开发语言·c++·人工智能·算法·3d
逆旅行天涯1 天前
【Threejs】从零开始(六)--GUI调试开发3D效果
前端·javascript·3d
mirrornan2 天前
3D和AR技术在电商行业的应用有哪些?
3d·ar·3d建模·3d模型·三维建模
工业3D_大熊2 天前
3D开发工具HOOPS助力造船业加速设计与数字化转型
3d
zaf赵2 天前
3D 高斯溅射 (Gaussian Splatting)技术,一种实现超写实、高效渲染的突破性技术
3d
前端Hardy2 天前
HTML&CSS:酷炫的3D开关控件
前端·javascript·css·3d·html
Debroon3 天前
M3D: 基于多模态大模型的新型3D医学影像分析框架,将3D医学图像分析从“看图片“提升到“理解空间“的层次,支持检索、报告生成、问答、定位和分割等8类任务
3d
广东数字化转型3 天前
Three.js相机Camera控件知识梳理
3d·three.js