纯大二小白,记录一下自己首次接触高斯喷溅技术的收获。【本博客脉络不是很清晰,因为是在学习中所做的笔记,想到什么了就写什么】
我先看了该工作相关的结果呈现视频,然后开始看论文。看到原论文的计算部分实在觉得有些高深,所以就去B站大学听了几个老师的课。
(1)这位博主对3DGS的一些重要的公式进行了推导并进行了代码复现,一共四讲,每讲二十多分钟。个人觉得值得多看几遍。
【【较真系列】讲人话-3d gaussian splatting全解(原理+代码+公式)【4】 高性能渲染与机器学习】 https://www.bilibili.com/video/BV1rJ4m1g7Un/?share_source=copy_web&vd_source=1c40518818373e585c08ba3456deee48
(2)这位博主分模块讲了3DGS的主要原理,浅显易懂,一共四讲,每讲不超过十分钟,深入程度不如(1)。
【3D Gaussian Splatting原理速通(一)--三维高斯概念】 https://www.bilibili.com/video/BV11e411n79b/?
share_source=copy_web&vd_source=1c40518818373e585c08ba3456deee48
(3)这个主要讲解论文中的要点和创新点,比较有意思。其中对比了NERF和3DGS。
【哈工大博士分享:基于Gaussian Splatting的SLAM新发展与新论文(上)】 https://www.bilibili.com/video/BV1ew411g718/?share_source=copy_web&vd_source=1c40518818373e585c08ba3456deee48
(4)这位博主讲雅可比矩阵讲得很好。(是搬运的3Blue1Brown的视频)
【(干货)《雅可比矩阵是什么东西》3Blue1Brown,搬自可汗学院。 【自制中文字幕】】 https://www.bilibili.com/video/BV1NJ411r7ja/?share_source=copy_web&vd_source=1c40518818373e585c08ba3456deee48
一、什么是3DGS?
3D Gaussian Splatting作为一种栅格化技术,可用于实时且逼真地渲采从一组图像中学到的场景,其引入了三个关键元素用以改善NeRF神经辐射场方法训练速度和渲染质量的瓶颈问题,在保持有竞争力的训练时间的同时实现最先进的视觉质量,允许在1080p分辨率下实现高质量的实时(≥30fps)的新视图合成。
1. 三个关键技术
(1)3D高斯场景表达:多个高斯模型共同构成了整个场景的连续体积表示,这些3D高斯从最初产生的稀疏点(由SFM得到)开始初始化。
因为3D高斯这种基元,它继承可微分体积表示的属性,同时是非结构化和显式的,可以轻松投影到 2D,允许非常快速的渲染,实现快速a混合渲染(图形学里的概念)。
(2)自适应密度控制优化:
(3)快速光栅化:使用高速GPU,支持各向异性抛雪球,保证高质量实时渲染。
2. SLAM和3DGS结合的优点
NeRF-based SLAM方法区别于之前的方法单点替代方法,端到端的替代传统SLAM,没有特征提取,直接操作原始像素值,无论是隐式还是显式的环境表达都可以进行微分,但存在渲染速度慢、图像质量不高、定位精度欠佳等问题。基于3D Gaussian Splatting的SLAM方法全面继承了NeRF-based SLAM方法的上述优点(无手工特征提取、可微分),在实时性和定位精度上表现优秀,在染速度和渲染质量上更是一骑绝尘。
3. 一组各向异性高斯函数
(1)什么叫各向异性:
在所有方向都具有相同扩散程度称为各向同性,其形状为椭球,那么具有各项异性的一组高斯函数的形状就是椭球,这也是该论文的核心。
(2)为什么3D高斯是一个椭球:
(3)协方差矩阵怎么控制椭球形状:
即:任意高斯可以通过标准高斯经由仿射变换得到。
4. 代表视相关辐射的球面谐波(SHs):一组基函数,可以理解为傅里叶分解的一种特殊形式。下面这张图就很好地展现了其基本性质。该论文中运用的是n=4的情况,共有16个参数(本质上是1+3+5+7)。任何一个球面坐标的函数都可以用多个球谐函数来近似。
我参考了这篇博客:http://t.csdnimg.cn/AKJY1
球谐函数分析:
二、3DGS代码review
这位博主写得巨巨巨详细,本人基本看懂了但还没进行实操部分:http://t.csdnimg.cn/mM1Oz
http://t.csdnimg.cn/mM1Oz 其中部分代码是用cuda写的,在此之前我并未接触过,但视频(1)将其中的部分cuda代码用python重写了一遍,可以参考。
下面这篇博客也可作参考。
学习笔记之——3D Gaussian Splatting源码解读_学习_gwpscut-GitCode 开源社区 (csdn.net)
阅读过程中的一些疑问 (有些可能与算法本身关系不大):
1.随机种子是什么?
随机种子(Random Seed)是计算机专业术语,一种以随机数作为对象的以真随机数(种子)为初始条件的随机数。一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。
这篇博客解释得不错:http://t.csdnimg.cn/cYAYF
http://t.csdnimg.cn/cYAYF
2.tqdm进度条是什么?
3.点云密度操作是什么?
即“一”中提到的自适应控制优化。
4.前向渲染是什么?
5.高斯光栅化器是什么?
6.点剪枝是什么?
将不透明度小于一定阈值的点减去,将过大的也减去,类似于正则化过程。并且在迭代一定次数后,高斯会被设置为几乎透明。这样就能有控制地增加必要的高斯密度,同时剔除多余的高斯。
7.此处的关键帧是什么?
简而言之:关键帧是几帧普通帧中较具有代表性的一帧。
http://t.csdnimg.cn/PN1vd
http://t.csdnimg.cn/PN1vd 这篇博客介绍了一些SLAM中的术语,其中包括“关键帧”。
个人觉得即使看了一遍别人的代码review也很难学会操作,毕竟“绝知此事要躬行”,之后必须自己实操,估计是个漫长的过程。
三、论文阅读
又在网上零零碎碎地收集了一些资料后,我再次将目光转向论文。
论文原文在此——https://arxiv.org/pdf/2312.06741
论文实验结果和图片展示的中文版在这里——帝国理工戴森机器人实验室开源!Gaussian Splatting SLAM_高斯_相机_场景
该论文所做成果不仅支持RGBD的输入,还支持单目相机的输入(很难)。
在开头,论文呈现了构建结果——对于每个传入的 RGB 帧,3D 高斯都会与相机Pose一起增量式形成和优化。我们显示了棚格化高斯图像(左)和阴影高斯以突出显示几何图形(右)。注意捕获的细节和复杂的材料属性(例如透明度),细结构由许多细小的、细长的高斯函数精确地表示,而透明物体则通过沿着边缘放置高斯函数来有效地表示。
之后,作者在“介绍”和“相关工作”中提到了大量相关的文章和方法成果,想了解清楚并不是一件易事,看完之后有一种文字进入了脑子又偷偷溜走的感觉,后续再深入了解。
关于论文具体分析,我参看了这篇博客:http://t.csdnimg.cn/y5Tyo
http://t.csdnimg.cn/y5Tyo
最近看了不少资料,对该论文有了一定的了解,但后续需要进行更多深入工作,深刻理解其中内涵。