3DGS原理解析 | 我的知识理解分享

作者 | ZEEKANG  编辑 | 自动驾驶之心

原文链接:https://zhuanlan.zhihu.com/p/885004028

点击下方卡片,关注“自动驾驶之心”公众号

戳我-> 领取自动驾驶近15个方向学习路线

>>点击进入→自动驾驶之心3DGS技术交流群

本文只做学术分享,如有侵权,联系删文

前言:作为一个连传统计算机图形学都没有完全学透的学生,NeRF论文的阅读难度对我而言还是较为简单;但3DGS的论文难度要高得多(难怪相比于NeRF,3DGS的速度与质量都要高很多),为了高效地完成对3DGS的学习,我在网上找了多篇博客帮助我理解3DGS,再回过头看论文了解更细节的内容,这种方法十分奏效。反过头来,我也应该将总结的知识点分享出来(同时让大家帮忙纠错啦,这才是主要目的(大嘘

Neural Radiance Fields也就是NeRF,是一种新颖的view synthesis方法,通过优化一个MLP,并使用volumetric ray-marching方法实现了3D场景的隐式表示,但该方法要求costly训练和渲染才能得到较高质量的结果。

3D Gaussian Splatting的出现解决了NeRF的问题,并且同为Radiance Field,3D Gaussian实现了更快的训练和渲染并且能够保证渲染图象的质量(equal or better quality than the previous implicit radiance field approaches)。这个方法在某些数据集上实现了state-of-art质量的结果以及real-time rendering

3D Gaussian

首先需要着重理解3D Gaussian是什么

在光栅化方法中,我们会将点组装为一个个基本图元,其中最常用的图元就是三角形,也就是场景都是由多个三角形面片组成,我们通过光栅化方法将多个三角形画到屏幕上。

但在3DGS算法中,渲染的基本图元变为了3D Gaussian(想象成一个三维空间的椭球体)

35db8a680c884bd18d1e4ab5e07442c7.png

多个3D Gaussian会组合重叠

314246ac55bf2275b3833783262159f9.png

物体表面法线对于场景渲染十分关键,传统的3D重建方法在使用稀疏数据估计物体表面法线上面临挑战,而使用3D Gaussian来表示场景时,可以不需要法线就可以捕获场景的结构。

3D Gaussian的简单公式表示是:

76ef3c3c101795e67f0fa56dcb3f5637.png

3D高斯函数的形式就是一个椭球体:

3c8de556f2594695158149b79b676e06.png

3D 高斯函数的中心点由 均值向量(mean vector)决定(上面的公式中默认均值是0,所以没有显示),椭球体的三个主轴对应着高斯分布的协方差矩阵的特征向量,而主轴的长度则对应着特征值的平方根。这也就是说,协方差矩阵决定了高斯分布在 3D 空间中的形状、大小以及方向。我们再给这个椭球颜色与透明度,来让多个3D Gaussian的组合能够形成高质量图像。然后我们就得到了3DGS算法中定义一个3D Gaussian的参数:

  • Position (Mean μ): location (XYZ)

  • Covariance Matrix (Σ): rotation and scaling

  • Opacity ( ): Transparency,这个参数会在alpha blending阶段时与相乘

  • Color (RGB) or Spherical Harmonics (SH) coefficients

3D Gaussian中,协方差矩阵只有在正半定时才有物理意义(或者说协方差矩阵必须是正半定的才行),但传统梯度下降方法很难去对矩阵施加此类约束,可能优化过程中打破了协方差矩阵的正半定性,所以不能用传统梯度下降法。或者说不能将协方差矩阵作为一个优化参数直接优化。

还有一点是,我们能够通过三维空间中的三个点定义任意的三角形一样,我们想要通过某种方式获取任意的椭球形状。

协方差矩阵的几何意义是,表示这个椭圆球在空间中的形状(缩放)和方向(旋转)。协方差矩阵是一个正定矩阵,可以通过某种方式进行矩阵分解。而3D Gaussian中有一种特征值分解,具体形式为:

7c257923cd90fb886fc7a6b5bbca0326.png
  • 协方差矩阵是一个3 X 3 矩阵

  • Q是由特征向量组成的正交矩阵(旋转矩阵)。

5e0dfb288a02e5c35b6dc0fb773f42ed.png

上面提到过,主轴的长度则对应着特征值的平方根,也就是说可以进一步分解,那么就得到了3DGS原论文中的形式:

0153b08895e27dd06be5e1ab0a050f76.png f54e3b681f857f571f6fade1f3b8a474.png
  • R是四元数表示的旋转矩阵(此矩阵要保持normalization)

那么不直接对协方差矩阵优化,而是将R,S作为优化参数优化,就可以保持协方差矩阵的正半定。

通过定义R,S以及location(也就是均值),我们可以得到三维空间中所有形式的3D Gaussian。

NeRF的特点就是,它是一个隐式表达的连续的空间,可以使用神经网络进行优化,但无法完全利用GPU进行rendering的加速;传统的使用三角形等Mesh进行的渲染,是显式的离散的空间,可以利用GPU的并行计算来加速渲染,但无法使用神经网络进行优化。而对于3DGS来说,单个3D Gaussian是连续的,可以使用神经网络优化,多个3D Gaussian可以利用GPU进行并行渲染,在两者之间有一个平衡。

Splatting

3D Gaussian是3D物体,要生成图像(就像常规光栅化渲染一样)就需要将其投影到2D平面上。

我们需要实现某种方式,能够将多个3D Gaussian投影到2D image上来渲染结果。

39a9b66267b0a669b81ff62239a66ac1.png

而论文中给出的方式是,替换协方差矩阵为:

9c3213065546ffcc542b7a22a3b164ba.png 790d174e61794ab17779391d1d2dacad.png

具体来说,仿照渲染管线的流程,假如一个初始的3D Gaussian是在模型空间的话,协方差矩阵就相当于模型变换,将3D Gaussian转换到了世界空间。然后W是View Transform Matrix,将3D Gaussian转换到了相机空间。J是Jocobian Matrix,是用来近似Project Transfor Matrix实现Project Transform。

FAST DIFFERENTIABLE RASTERIZER

假设现在我们已经得到了用于表示整个场景的大量3D Gaussian,现在我们要将其渲染到image上。

为了加速渲染,3DGS选择使用Tile-based rasterization,将Image切为一个个16 * 16的tile,每个tile像一个小image一样独立计算颜色值,最后多个Tile拼成image的颜色。

考虑到每个3D Gaussian投影到2D image时可能会投影到多个tile,处理方法是如果一个Gaussian投影与多个tile相交,就实例化多次Gaussian,每个Gaussian instance都会得到一个结合view space depth和tile ID得到的key。然后基于这些key,使用single fast GPU Radix sort进行排序。

如下图中,黄色Gaussian投影影响了Tile1和2,其他Guassian投影同理;在另一张图中,我们给出了一个Gaussian投影到多个Tile后,多次实例化以及排序的操作。

cf3ac387f5ee9853d02b47e8c20ae572.png 01fb66608e329894ea15ba91e18c445c.png

之后,每个Tile分别进行Alpha Blending,计算像素颜色值得到图像。

INITIALIZATION

假如我们已经有方法对3DGS模型进行一步步的优化,那我们要如何开始呢?

在3DGS中,使用的是一种cv算法,Structure from Motion SfM算法来从输入图像中得到一组点云。SfM的基本思路是利用多张包含相同场景不同部分的图像,通过追踪图像中的共同特征,估算出相机的运动路径(即相机的外参,包括位置和平移)以及场景的三维点云结构。而3DGS算法就要利用从SfM算法中得到的初始点云进行初始化。

得到三维点云结构后,算法会将每个点云转换为3D Gaussian,以此为基础训练模型优化。

OPTIMIZATION

Gradient Descent for Parameter OptimizationDesLoss的计算方法很容易想到,就是用同一个视角下,模型生成的图片与实际的训练集图片的对比。

使用随机梯度下降SGD,对Mean、Covariance Matrix、α、Color进行参数优化。

Loss结合了L1和D-SSIM(Structural Dissimilarity Index)。

0e0c65514d16f51ba061c827e950d1d9.png

原论文中,=0.2

Adaptive Densification

使用SfM算法初始化了一系列稀疏点之后,adaptive densification方法会动态调整3D Gaussians的数量和密度。

b4a02b4530cfeb984d312bbe15c78fcd.png

densify简单来说就是,under-reconstructed区域克隆small Gaussians以及在high-variance(我觉得就是Over-reconstructed)区域分离large Gaussian。

ad66c87a2a2176b81b2166171c69d522.png

The Process behind 3D Gaussian Splatting

e9e90c86da9210a79f7e355292d2fb81.png
  • 使用SfM(Structure from Motion)初步创建一组point cloud

  • 将步骤1创建的point cloud转换为3D Gaussian

  • 使用SGD训练。训练过程是将3D Gaussian使用differentiable Gaussian rasterization方法rasterize到图像上,通过生成图像与真实图像来计算loss值,调整参数,实现自动densification调整

  • Differentiable Gaussian Rasterization

Conclusion

这篇文章对3DGS算法进行了简单的介绍,作为基础简单了解。

下篇文章会深入论文,介绍更多的实现细节。

重要资源

https://github.com/MrNeRF/awesome-3D-gaussian-splatting

References

  1. Kerbl, B., Kopanas, G., Leimkühler, T., & Drettakis, G. 3D Gaussian Splatting for Real-Time Radiance Field Rendering. ACM Trans. Graph. (SIGGRAPH) 2023.

  2. Understanding and Exploring 3D Gaussian Splatting: A Comprehensive Overview

  3. Introduction to 3D Gaussian Splatting

  4. A Guide to 3D Gaussian Splatting & How to Create One

  5. 3D生成: 3D Gaussian Splatting(3DGS)

  6. Introduction to 3D Gaussian Splatting(与Ref2不一样)

  7. [NeRF坑浮沉记]3D Gaussian Splatting入门:如何表达几何

  8. 一文带你入门 3D Gaussian Splatting

  9. 3D Gaussian Splatting中的数学推导

自动驾驶之心知识星球』欢迎加入交流!重磅,自动驾驶之心科研论文辅导来啦,申博、CCF系列、SCI、EI、毕业论文、比赛辅导等多个方向,欢迎联系我们!

b140e1566171c1031423e60737efd63a.jpeg

① 全网独家视频课程

端到端自动驾驶、仿真测试、自动驾驶C++、BEV感知、BEV模型部署、BEV目标跟踪、毫米波雷达视觉融合多传感器标定多传感器融合多模态3D目标检测车道线检测轨迹预测在线高精地图世界模型点云3D目标检测目标跟踪Occupancy、CUDA与TensorRT模型部署大模型与自动驾驶NeRF语义分割自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习

04e094961914a7ece8f511c21a01a484.png

网页端官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

国内外最大最专业,近4000人的交流社区,已得到大多数自动驾驶公司的认可!涉及30+自动驾驶技术栈学习路线,从0到一带你入门自动驾驶感知端到端自动驾驶世界模型仿真闭环2D/3D检测、语义分割、车道线、BEV感知、Occupancy、多传感器融合、多传感器标定、目标跟踪)、自动驾驶定位建图SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案大模型,更有行业动态和岗位发布!欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频

c9363f1f2aadfeab678a8830a69eaca6.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦感知、定位、融合、规控、标定、端到端、仿真、产品经理、自动驾驶开发、自动标注与数据闭环多个方向,目前近60+技术交流群,欢迎加入!扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

815925747568bda464b0fb976b9623ef.jpeg

④【自动驾驶之心】全平台矩阵

45d2034a8f6d5ee171e77e611c2f59ff.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值