3d_gaussian
Overview
https://zhuanlan.zhihu.com/p/655325345

训练的时间短,并且如果训练上51min,可以达到比Mip-NeRF360还好一点的结果。
PSNR越高越好
目标:

实现结果:

前置知识
SFM VS MVS:
缺点:对缺少信息的地方会未重建、对某些地方又会过度重建
MVS 几何信息的使用是主要的缺点:大多数这些方法的一个主要缺点是它们使用基于多视图立体视觉 (MVS) 的几何信息。MVS 是一种通过多个视角图像重建三维几何的方法。然而,MVS 算法可能会受到图像匹配错误、视角不足或遮挡等问题的影响,导致生成的几何信息存在缺陷和不准确性。
使用 CNN 进行最终渲染经常导致时间上的闪烁:另一个问题是使用 CNN 进行最终渲染时经常出现时间上的闪烁。这是由于 CNN 模型的输入和网络结构导致的,在连续帧之间可能存在细微的变化和不一致性,从而导致渲染结果的可见闪烁。
NERF:
Volumetric representations 是体积化表达方法
NerF用了一个大型的MLP,但是速度太慢了。现在对NerF进行改进的最好的方法是:Mip-NERF360
https://www.youtube.com/watch?v=CRlN-cYFxTk
这个视频讲nerf的,讲得太好了。
但是我对于这个RGB和density的值,是如何通过images得到的啊?
训练的是个网络
得到的ray中,一个波动,意思就是碰到了一个颜色,往下就是说明已经穿过物体了。
什么是Camera Caliberation?
相机标定
目的:
确定空间物体表面的三维 和2D之间的对应关系
- 世界坐标系:world coordinate 其实就是直角坐标系
- 相机坐标系:camera coordinate 也是直角坐标系,只不过原点位于镜头光心处,

要将世界的转换为相机的

相机通过针孔成像原理转化为图像的

还要将图像(3D)的转换为像素(2D)的:

最后 就得到了 世界的 → 2D像素的 转换矩阵
同时,还包括一些畸变模型
Alpha-blending
https://youtube.com/watch?v=wVkLeaWQOlQ

Rasterization
https://www.youtube.com/watch?v=t7Ztio8cwqM
太优雅了。
总结一下
- 画轮廓线
- 插值获得color
- 填充
什么是SH(Spherical Harmonics)?
什么是Covariance Matrix?
协方差矩阵和高斯函数的关系?
https://blog.csdn.net/xfijun/article/details/53822490
结论:协方差函数 决定 高斯函数的形状~
为什么协方差矩阵可以通过scale 和 rotation矩阵得到?

协方差矩阵可以通过缩放矩阵和旋转矩阵得到的原因涉及到线性代数和矩阵运算的特性。
首先,我们知道协方差矩阵描述了多维随机变量之间的关系,包括各个维度之间的相关性和方差。对于一个n维随机向量X,其协方差矩阵记为Σ。
现在考虑对该随机向量进行线性变换。我们可以用一个缩放矩阵S来缩放向量X,然后再用一个旋转矩阵R来旋转缩放后的向量。这个变换可以表示为Y = RX,其中Y是变换后的向量。
我们希望找到新的随机向量Y的协方差矩阵Σ'。根据线性代数的性质,我们知道变换后的随机向量Y满足以下关系:
Σ' = E[(Y - μ')(Y - μ')^T]
其中μ'是Y的均值,E[•]表示期望运算。
将Y代入上述公式,可以得到:
Σ' = E[(RX - Rμ)(RX - Rμ)^T]
我们知道,对于一个随机向量X,其均值μ和协方差矩阵Σ的关系为:
Σ = E[(X - μ)(X - μ)^T]
将这个关系代入上式,得到:
Σ' = E[(RX - Rμ)(RX - Rμ)^T] = E[(RX - Rμ)(X - μ)^T R^T] = R E[(X - μ)(X - μ)^T] R^T = R Σ R^T
因此,通过对随机向量进行缩放和旋转变换,可以得到新的协方差矩阵Σ',其与原始协方差矩阵Σ之间满足Σ' = RΣR^T的关系。
这说明了协方差矩阵可以通过缩放矩阵和旋转矩阵来得到。
Metrics:PSNR vs SSIM
PSNR
Peak Signal-to-Noise Ratio
PSNR是一种基于峰值信噪比的度量,用于衡量原始图像和压缩或失真后的图像之间的差异。它通过比较原始图像的最大可能信号范围与失真图像的均方误差来计算。PSNR的数值越高,表示失真程度越低,图像质量越好。
SSIM
SSIM是一种结构相似性指数,用于评估原始图像和失真图像之间的结构相似性。它基于人类视觉系统的特性,考虑了亮度、对比度和结构信息。SSIM通过比较亮度、对比度和结构相似性的三个组成部分来计算相似性指数。SSIM的取值范围为0到1,数值越接近1表示图像质量越好,相似性越高。
Comparison
PSNR更加注重像素级的差异和信噪比,适用于对失真程度的精确度进行量化。而SSIM更加注重人眼感知的结构相似性,适用于评估图像的感知质量。因此,在实际应用中,PSNR常用于无损压缩或图像恢复领域,而SSIM常用于有损压缩或图像增强领域。
传统的MSE Loss对于亮度不同的相同图像太过敏感
所以采用了新的Structure Similarity
通过三个维度:
亮度【均值、标量】、对比度【标准差,标量】、结构【向量】
那么什么叫做Mean Structural Similarity?
就是用滑动窗口,每个窗口都计算一个SSIM,最后取均值,就是Mean Structural Similarity.
首先了解一下什么是view transformation:
https://www.cs.helsinki.fi/group/goa/viewing/viewtransf/viewTrans.html
Method

用3D高斯,代替3D点云
为什么?
因为点表示不了连续辐射场,而高斯函数可以表示continuous volumetric radiance fields
好处?
- 连续的 → 方便optimization
- 避免了计算和填补原先稀疏点云以外的empty space → 节省计算资源 如何? 采用Structure-from-motion(SFM) 得到的点初始化3D gaussians,而无需用 multiview stereo(MVS)
we achieve high-quality results with only SfM points as input
比较SFM和MVS?
They use stereo matching and triangulation techniques to estimate the 3D coordinates of points visible in multiple images. While SfM provides only sparse information on the scene, we obtain dense 3D data: depthmaps , pointcloud , signed distance function (SDF), or a mesh.
优化高斯
interleaved opti
anistropic covariance (各向异性协方差矩阵)
各向同性协方差矩阵(Isotropic Covariance Matrix)是指协方差矩阵中的所有非对角线元素都相等,对角线元素表示相应随机变量的方差。
各向异性协方差矩阵(Anisotropic Covariance Matrix)是指协方差矩阵中的非对角线元素不全相等,表示不同随机变量之间的协方差具有差异。
Q.为什么要用各向异性的?
各向异性:
一个物体从各个方向看去,外观表现都是不同的
抛雪球(splatting):
3D点云 → 抛到地面上 → 散开 → 叠加 → 2D图像 优化了哪些3D高斯函数的参数? 对一个高斯:position, 透明度 alpha, 协方差矩阵,SH,add or remove
- 对高斯的操作总共其实分为三种:
- remove : alpha 透明度小于xxx
- clone:under reconstruction 的空白区域 要求 position gradient > 0.0002
- split:over reconstrution 的空白区域 要求position gradient > 0.0002
开发了一款visibility-aware rendering
tile-based renderer
- 【split】划分为16 * 16的小块
- 【cull】只保留与视锥体相交,并具有99%置信区间的高斯,其他全部剔除cull,为了减少计算量
- 【reject】用了guard band在一开始就拒绝处于极端位置(those with means close to the near plane and far outside the view frustum)的高斯函数 → entreme means unstable
- 实例化高斯,并给每个高斯都赋予了一个独一无二的key,基于view depth和 ID tile
- 对这些key进行排序 ? 怎么排序?
- 每个小块tile都对应一个列表,为了确定哪些高斯函数与这个tile相关联
- 接下去进行rasterization,为每个小块启动一个线程块thread,然后对应list中的所有高斯,都将其信息load到thread中的共享区域中
- 然后对于给定的像素pixel,线程块通过从前到后遍历列表的方式来累积颜色和𝛼值
- 当alpha值达到target的时候,终止这个pixel对应的thread,而不是小块tile的,因为一个Tile包含多个pixel
- 当一个tile中的所有pixel都达到target的时候,再终止这个小块的
- 反向传播过程中,对每个小块,从后往前遍历list中的内容
每个像素只有在它们的深度低于或等于前向传播过程中贡献到其颜色的最后一个点的深度时,才会开始进行点的重叠测试和处理。这是为了避免不必要的计算,只有在需要的情况下才会执行昂贵的重叠测试和点的处理。
叫做感知渲染算法
各向异性抛雪球(anisotropic splatting)
加速训练 + 实时渲染
supports anisotropic splatting and both accelerates training and allows real-time rendering
特征
快 且 可微 → 梯度下降