当前位置:   article > 正文

Gaussian Splatting SLAM 学习笔记——初识3DGS和代码review

Gaussian Splatting SLAM 学习笔记——初识3DGS和代码review

纯大二小白,记录一下自己首次接触高斯喷溅技术的收获。【本博客脉络不是很清晰,因为是在学习中所做的笔记,想到什么了就写什么】

我先看了该工作相关的结果呈现视频,然后开始看论文。看到原论文的计算部分实在觉得有些高深,所以就去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/mM1Ozicon-default.png?t=N7T8http://t.csdnimg.cn/mM1Oz       其中部分代码是用cuda写的,在此之前我并未接触过,但视频(1)将其中的部分cuda代码用python重写了一遍,可以参考。

 阅读过程中的一些疑问 (有些可能与算法本身关系不大):

1.随机种子是什么?

       随机种子(Random Seed)是计算机专业术语,一种以随机数作为对象的以真随机数(种子)为初始条件的随机数。一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。

这篇博客解释得不错:http://t.csdnimg.cn/cYAYFicon-default.png?t=N7T8http://t.csdnimg.cn/cYAYF

2.tqdm进度条是什么?

详情可见:http://t.csdnimg.cn/MXVcJicon-default.png?t=N7T8http://t.csdnimg.cn/MXVcJ

 3.点云密度操作是什么?

        即“一”中提到的自适应控制优化。

4.前向渲染是什么?

http://t.csdnimg.cn/urrIuicon-default.png?t=N7T8http://t.csdnimg.cn/urrIu值得参考。

5.高斯光栅化器是什么?

http://t.csdnimg.cn/1PU8vicon-default.png?t=N7T8http://t.csdnimg.cn/1PU8v

6.点剪枝是什么?

        将不透明度小于一定阈值的点减去,将过大的也减去,类似于正则化过程。并且在迭代一定次数后,高斯会被设置为几乎透明。这样就能有控制地增加必要的高斯密度,同时剔除多余的高斯。

        我参考的这篇博客:http://t.csdnimg.cn/cNE6picon-default.png?t=N7T8http://t.csdnimg.cn/cNE6p

7.此处的关键帧是什么?

       简而言之:关键帧是几帧普通帧中较具有代表性的一帧。

http://t.csdnimg.cn/PN1vdicon-default.png?t=N7T8http://t.csdnimg.cn/PN1vd      这篇博客介绍了一些SLAM中的术语,其中包括“关键帧”。

        个人觉得即使看了一遍别人的代码review也很难学会操作,毕竟“绝知此事要躬行”,之后必须自己实操,估计是个漫长的过程。

三、论文阅读

      又在网上零零碎碎地收集了一些资料后,我再次将目光转向论文。

论文原文在此——https://arxiv.org/pdf/2312.06741

论文实验结果和图片展示的中文版在这里——帝国理工戴森机器人实验室开源!Gaussian Splatting SLAM_高斯_相机_场景

      该论文所做成果不仅支持RGBD的输入,还支持单目相机的输入(很难)。

       在开头,论文呈现了构建结果——对于每个传入的 RGB 帧,3D 高斯都会与相机Pose一起增量式形成和优化。我们显示了棚格化高斯图像(左)和阴影高斯以突出显示几何图形(右)。注意捕获的细节和复杂的材料属性(例如透明度),细结构由许多细小的、细长的高斯函数精确地表示,而透明物体则通过沿着边缘放置高斯函数来有效地表示。

       之后,作者在“介绍”和“相关工作”中提到了大量相关的文章和方法成果,想了解清楚并不是一件易事,看完之后有一种文字进入了脑子又偷偷溜走的感觉,后续再深入了解。
 

关于论文具体分析,我参看了这篇博客:http://t.csdnimg.cn/y5Tyoicon-default.png?t=N7T8http://t.csdnimg.cn/y5Tyo

       最近看了不少资料,对该论文有了一定的了解,但后续需要进行更多深入工作,深刻理解其中内涵。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/823712
推荐阅读
  

闽ICP备14008679号