本周三维重建前沿:3D Gaussian Splatting算法解读

文章标题:

本周三维重建前沿:3D高斯溅射算法解析

文章内容:

大家好,欢迎来到《本周所学分享》的第十二期。我是一名刚读完大二的人工智能爱好者,前不久自学了3D Gaussian Splatting(3DGS),觉得颇为新奇。撰写此文的缘由是网上多数关于3DGS的文章较为晦涩,我自己学习时也查阅了大量论文、博客与视频,所以想结合自身学习过程,写一篇让所有人都能理解的文章。我不会预设你具备任何机器学习或数学基础,即便你是刚涉足人工智能领域的新手,也能看懂此文。若你觉得文中有任何不对、欠佳或不清楚之处,欢迎在评论区指出,这对我帮助极大。

此处先放上原论文:

https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gaussian_splatting_low.pdficon-default.png?t=N7T8本周三维重建前沿:3D Gaussian Splatting算法解读

" />https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gaussian_splatting_low.pdf

并且本文内容参考了一个B站视频,文中诸多内容借鉴该视频,感谢这位大佬。

https://www.bilibili.com/video/BV1cz421872F/icon-default.png?t=N7T8本周三维重建前沿:3D Gaussian Splatting算法解读

" />https://www.bilibili.com/video/BV1cz421872F/

目录

一、何为三维重建啊

  1. 三维重建的定义

  2. 三维模型的表示方式

1.1 点云

1.2 体素

1.3 神经网络

1.4 3D高斯

二、何为3D高斯啊

  1. 位置

  2. 协方差矩阵

  3. 透明度与球谐系数

三、如何获取3D高斯的信息啊

四、何为Splatting啊

  1. 2D高斯的位置

  2. 2D高斯的协方差矩阵

  3. 2D高斯的颜色

五、自适应密度调控

六、下期预告


上期文章链接:

https://blog.csdn.net/weixin_48978134/article/details/132740002icon-default.png?t=N7T8本周三维重建前沿:3D Gaussian Splatting算法解读

" />https://blog.csdn.net/weixin_48978134/article/details/132740002本期封面:

26793f97fe704eaea3fcbd26807a8363.png本周三维重建前沿:3D Gaussian Splatting算法解读

" />

一、何为三维重建啊

本章将介绍三维重建的基础知识,若你已对三维重建有一定了解,可直接跳转至下一章。

1. 三维重建的定义

三维重建通常指借助一些二维数据(像照片、视频等)来还原三维场景。具体而言,可类比人眼来看。人眼能看见东西,是因为外部光线投射到视网膜上,视杆和视锥细胞将光线强度、颜色等信息传递给大脑,可眼睛只能获取二维画面,无法感知物体的三维结构。那为何我们看东西会有立体感觉呢?主要有两点原因。

其一,人有两只眼睛,看场景时,两只眼睛看到的画面存在细微差异,此差异称为“视差”。这两幅画面经大脑处理后会合成一幅,让人感觉画面是立体的。对于计算机来说,要合成物体的3D模型,需从至少两个不同角度拍摄物体照片来模拟视差。通常,为获良好重建效果,仅用两张照片远远不够,常需几十张甚至几百张不同角度的照片来还原场景。

其二,远处物体看起来较小,近处物体看起来较大。同一物体,离我们远的一端看起来较小,近的一端看起来较大,此现象叫“透视”。我们能依据透视关系判断物体与我们的距离,这种距离感会让画面显得立体。三维重建时也有专门算法处理透视,后文会提及。

综上,三维重建主要有两个关键:一是多张不同角度的照片,二是对图片中透视关系的处理。但三维重建涉及的不止这些,还有三维模型的表示方式等……

2. 三维模型的表示方式

三维重建中表示三维模型的方式与三维建模软件(如3ds Max、Maya、AutoCAD等)有很大不同。做过建模、动画或设计的朋友应知晓,三维建模软件里的模型由大量顶点、边和面构成。比如Maya官网宣传片中展示的《霍格沃茨之遗》里某角色的模型:

2b369a76d19a441b9d126a9c5d8eb6ba.png本周三维重建前沿:3D Gaussian Splatting算法解读

" />

仔细看绿色物体,会发现布满的绿色线是构成物体的边。三维建模软件将物体表示为面数极多的多面体,面数越多,物体表示越精细。

在三维重建中,用顶点、边和面表示三维模型是可行的,此表示方式称为“多边形网格”。其优点是能让重建的三维模型与诸多建模软件无缝衔接,便于后续编辑应用。但它也有很大缺陷。多面体的一个面由多条边组成,每条边依赖两个顶点,面数多的场景中,点、边、面间的依赖关系极为庞大复杂。为更好还原场景并降低计算量,我们期望用简洁方式表示三维模型,让每个元素相互独立。所以,这种多边形网格表示方式如今极少用于三维重建,取而代之的是以下几种更常见的表示方式……

1.1 点云

点云说白了就是一大堆点。把三维场景表示为一大堆点,并记录每个点的位置、颜色和透明度等信息。

527e2542621549d88292802fad7ae9bf.webp本周三维重建前沿:3D Gaussian Splatting算法解读

" />

上图是百度百科中用点云重建建筑的图片,因点数量密集,难看出单个点。

点云相较多边形网格的优势在于每个点独立,不依赖其他东西,无庞杂依赖关系。但缺点是数据量大。要表达精细模型,常需大量点,且相邻点间差别不大。比如用点云表示一面墙,墙上很多点的颜色、透明度等信息几乎相同,造成大量冗余。

1.2 体素

大家知图片由像素构成,将图片划分为许多小格子,每个格子有颜色值,有些图片格式还为格子设透明度值。体素与像素类似,把三维场景划分为大量小正方体,每个正方体有颜色和透明度等信息。体素存在的问题是,场景中大部分空间可能无任何物体,会产生大量完全透明、无信息含量的冗余体素。也有解决办法,如用稀疏体素,只记录场景中非空体素信息,忽略完全透明体素。

1.3 神经网络

神经网络是较先进现代的表示方式。大家可能听说过NeRF,即神经辐射场。NeRF用八层全连接神经网络(MLP)表示三维模型,输入是三维空间中某点坐标及观察角度,输出是该点颜色和透明度。NeRF发明者考虑到光照、材质等影响,不同角度观察物体颜色可能不同,故将观察角度作为输入一部分传递给神经网络。

神经网络一大优势是占用空间小,八层MLP占用空间比点云中几十万个点小得多。此外,重建效果也不错。

1.4 3D高斯

这是本文主角。3D高斯与点云类似,都记录位置、颜色和透明度信息,只是把点换成3D高斯。将三维场景表示为一系列3D高斯,记录其位置、协方差矩阵、透明度和球谐系数。这些具体是什么,看下一章……

二、何为3D高斯啊

想必大家听说过高斯分布。高斯分布也叫正态分布,是很常见的概率分布。若熟悉一维高斯分布,可直接跳至本章第1节。若不了解,看下图(图片来自搜狗百科):

693a376528e64a32bd119a936fcdb0c6.jpeg本周三维重建前沿:3D Gaussian Splatting算法解读

" />

这是高斯分布的图。图中,\mu本周三维重建前沿:3D Gaussian Splatting算法解读

" />表示均值,\sigma本周三维重建前沿:3D Gaussian Splatting算法解读

" />表示标准差。简单说,设变量x本周三维重建前沿:3D Gaussian Splatting算法解读

" />为实数,假设其遵循此高斯分布,图中函数值越高处,x本周三维重建前沿:3D Gaussian Splatting算法解读

" />越可能取该值。函数值最高处是\mu本周三维重建前沿:3D Gaussian Splatting算法解读

" />,即x本周三维重建前沿:3D Gaussian Splatting算法解读

" />最可能是\mu本周三维重建前沿:3D Gaussian Splatting算法解读

" />。离\mu本周三维重建前沿:3D Gaussian Splatting算法解读

" />越远,x本周三维重建前沿:3D Gaussian Splatting算法解读

" />取该值可能性越低。多低由\sigma本周三维重建前沿:3D Gaussian Splatting算法解读

" />决定。从图中可知,x本周三维重建前沿:3D Gaussian Splatting算法解读

" />有68.27%概率在\mu - \sigma本周三维重建前沿:3D Gaussian Splatting算法解读

" />到\mu + \sigma本周三维重建前沿:3D Gaussian Splatting算法解读

" />之间,95.45%概率在\mu - 2\sigma本周三维重建前沿:3D Gaussian Splatting算法解读

" />到\mu + 2\sigma本周三维重建前沿:3D Gaussian Splatting算法解读

" />之间,99.73%概率在\mu - 3\sigma本周三维重建前沿:3D Gaussian Splatting算法解读

" />到\mu + 3\sigma本周三维重建前沿:3D Gaussian Splatting算法解读

" />之间。可见,\sigma本周三维重建前沿:3D Gaussian Splatting算法解读

" />越大,x本周三维重建前沿:3D Gaussian Splatting算法解读

" />越可能取离\mu本周三维重建前沿:3D Gaussian Splatting算法解读

" />远的值。\mu本周三维重建前沿:3D Gaussian Splatting算法解读

" />和\sigma本周三维重建前沿:3D Gaussian Splatting算法解读

" />是高斯分布的两个参数,决定其形状。

若感兴趣,可看高斯分布公式,但无需记住或看懂

f(x)= \frac{1}{\sigma \sqrt{2 \pi}} e^{- \frac{​{(x- \mu)}^2}{2 {\sigma}^2}}本周三维重建前沿:3D Gaussian Splatting算法解读

" />

了解一维高斯分布后,看3D Gaussian即3D高斯。描述3D高斯需四个属性:位置、协方差矩阵、透明度和球谐系数。讲解中着重分析三维与一维高斯分布的区别。

1. 位置

这是3D高斯在三维空间中的位置,对应1D高斯的均值eq?\mu本周三维重建前沿:3D Gaussian Splatting算法解读

" />。显然,需三个数值表示三维空间位置,故用含三个元素的向量\mu = \left< x,y,z \right>本周三维重建前沿:3D Gaussian Splatting算法解读

" />表示3D高斯位置,其中x本周三维重建前沿:3D Gaussian Splatting算法解读

" />、y本周三维重建前沿:3D Gaussian Splatting算法解读

" />、z本周三维重建前沿:3D Gaussian Splatting算法解读

" />分别是x、y、z轴坐标。

2. 协方差矩阵

3D高斯的协方差矩阵对应1D高斯的标准差\sigma本周三维重建前沿:3D Gaussian Splatting算法解读

" />。3D高斯的协方差矩阵是3×3矩阵:

\Sigma = \begin{bmatrix} \sigma^2_x & \sigma_{xy} & \sigma_{xz} \\ \sigma_{yx} & \sigma^2_y & \sigma_{yz} \\ \sigma_{zx} & \sigma_{zy} & \sigma^2_z \end{bmatrix}本周三维重建前沿:3D Gaussian Splatting算法解读

" />

有朋友会问,1D高斯用一个数\sigma本周三维重建前沿:3D Gaussian Splatting算法解读

" />表示分散程度,3D高斯为何用九个数?因3D高斯在x、y、z轴可能有不同分散程度。看下图:

d015054493f643cf845d9d5075720368.png本周三维重建前沿:3D Gaussian Splatting算法解读

" />

图中越黄越亮处概率越高,越紫越暗处概率越低。两张图均值都在原点,左图x、y、z轴方差均为1,右图x、z轴方差为1,y轴方差为2。明显右图3D高斯在垂直方向更分散,呈椭圆状。可见,单独一个数值无法表达3D高斯分散程度,需至少三个数表示三个方向不同分散程度,这三个数构成协方差矩阵对角线上的数。

此时又有朋友问,若x、y、z轴有不同方差,仅用三个数能否表达3D高斯分散程度?遗憾不能。看两张图,3D高斯关于x、y轴对称。若要创建不关于x、y轴对称的3D高斯,仅三个变量不够,需引入协方差。

协方差可看作表示两个变量相关性的数值。两变量协方差为正则正相关,一变量增加另一也增加;为负则负相关,一变量增加另一减少。上述两张图中3D高斯各方向协方差均为0。为看出协方差作用,看下图:

![9c5d893ca8344b629c2fd904593fdc75.png](https://i-blog.csdnimg.cn/direct/9c5d89

相关文章

暂无评论

暂无评论...