【论文阅读笔记】3D Gaussian Splatting
此份阅读笔记主要用于个人学习用途。具体而言,它是基于点云构建辐射场的过程。首先通过colmap的结构与法线估计方法(SfM)生成初始点云;随后将该点云转换为高斯球体,并运用机器学习技术完成最终的重构工作。

1.Gaussian
G(x)=e−12xTΣ−1xG(x)=e{-\frac{1}{2}xT\Sigma^{-1} x}
高斯椭球:均值 μ\mu 、协方差 Σ\Sigma、不透明度、球谐函数
直接对协方差矩阵进行梯度下降优化可能会破坏半正定性
谱分解法用于将矩阵\Sigma表示为特征向量与对角线元素平方根的乘积形式:\Sigma = Q \Lambda^{1/2} \Lambda^{1/2} Q^{\top}。该分解可视为由旋转矩阵Q和对角线元素平方根组成的缩放因子作用的结果:\Sigma = R S S^{\top} R^{\top}。
SS 是对角阵,使用一个三维向量进行存储即可
RR 通过四元数进行表示,四元数 q=(w,x,y,z)q=(w, x, y,z) 对应的矩阵RqR_q

2.Splatting
2.1 视图变换
经过仿射变换之后高斯椭球的方程怎么变换
世界坐标到相机坐标是一个仿射变换
G(x−p)=12π∣V∣12e−12(x−p)TV−1(x−p)G(x-p)=\frac{1}{2\pi |V|{\frac{1}{2}}}e{-\frac{1}{2}(x-p)TV{-1} (x-p)}
设所做的仿射变换为 u=Φ(x)=Mx+cu=\Phi(x)=Mx+c(线性变换)
对应的逆变换为x=Φ−1(u)=M−1(u−c)x=\Phi{-1}(u)=M{-1}(u-c)
GV(Φ−1(u)−p)=12π∣V∣12e−12(Φ−1(u)−p)TV−1(Φ−1(u)−p)G_V(\Phi^{-1}(u)-p)=\frac{1}{2\pi |V|{\frac{1}{2}}}e{-\frac{1}{2}(\Phi{-1}(u)-p)TV^{-1} (\Phi^{-1}(u)-p)}
=12π∣V∣12e−12(Φ−1(u−Φ(p)))TV−1(Φ−1(u−Φ(p)))=\frac{1}{2\pi |V|{\frac{1}{2}}}e{-\frac{1}{2}(\Phi{-1}(u-\Phi(p)))TV^{-1} (\Phi^{-1}(u-\Phi(p)))}
=12π∣V∣12e−12(u−Φ(p)−c)T(MTVM)−1(u−Φ(p)−c)=\frac{1}{2\pi |V|{\frac{1}{2}}}e{-\frac{1}{2}(u-\Phi(p)-c)T(MTVM)^{-1}(u-\Phi(p)-c)}
所以协方差矩阵变为了 V′=MTVMV'=M^TVM
仿射变换会影响高斯分布的归一化特性
2.2 透视投影变换
在将3D高斯椭球体向2D投影渲染的过程中,在直接执行转换所得的视图变换(透视投影)不具备线性特性时,则会使得生成的二维图形不符合高斯分布
雅可比矩阵 u=u(x),v=v(y)u=u(x),v=v(y)
J=[uxuyvxvy]J=
在执行透视变换的过程中分为两个步骤:首先进行一个非线性变换X′=ϕ(X),将视锥体压缩为一个长方体;随后投影至相机坐标系(采用正交投影WW)。
{x′=nzxy′=nzyz′=(n+f)−nfz
因此对应的雅可比矩阵为
J=[nz0−nxz20nz−nyz200−nfz2]J=
设变换为 U=ϕ(X)U=\phi(X),在均值中心处作泰勒展开可以得到
U=ϕ(μ)+J(X−μ)+o(X−μ)U=\phi(\mu)+J(X-\mu)+o(X-\mu)
忽略高阶无穷小的影响,在局部区域中将非线性变换近似地表现为线性变换,并将其对应的线性近似可以用雅可比矩阵来表示
所以得到的2D高斯椭圆对应的协方差矩阵为 V′′=JWVWTJTV''=JW V W^T J^T
3.球谐函数
如何采用科学的方法对高斯椭球进行着色?同时,在着色完成后,同一个球面上可以呈现出多种不同的颜色,并且细节丰富。而不仅仅局限于单一着色方案。
任何一个球面坐标的函数都可以用多个球谐函数进行近似
f(t)等于对变量l与m从- l到 l进行双重求合运算得到的结果。(其中c{lm}_y是对应的系数项;而Ym_l(θ, ϕ)则代表球谐函数的形式)具体而言,在计算过程中我们采用的是基于勒让德多项式的展开方法。(相关参数设置如下:这里的变量范围均限定在整数值区间[0,3]内)这一推导过程主要参考自处理偏微分方程问题时所采用的标准方法论框架


f(t)应视为一个RGB类型的向量,在该图中y_{lm}被认定为恒定值;由此可得对应的系数组c^{l}_{m}具备三维特征
总共有 3×(1+3+5+7)=483\times(1+3+5+7)=48 个系数
4.渲染训练
渲染效率高:通过显卡级并行处理实现图像显示效果显著提升。该过程实际上是对每个输出 pixels 独立计算覆盖颜色。其核心机制是逐个绘制高斯核至每一块像素区域,并通过 alpha blending 方式完成图像叠加效果。每个线程负责一个特定的输出 pixel 的着色过程。
分区:划分区域。将整张图划分为每个包含16\times 16个像素的区域,并采用高斯滤波器对每个分割区域进行处理。通过内存共享机制优化计算效率。
单个像素渲染具体渲染:
经过上述第2步,3D空间的椭球变成了2D的椭球,按照深度进行排序
协方差矩阵 cov=[σx,σy,σxy]cov=[\sigma_x,\sigma_y,\sigma_{xy}], 不透明度opacity
对于一个像素点,计算相对椭球中心的距离 d=[dx,dy]d=[d_x,d_y]
    for x, y in grid: #遍历像素(实际是cuda线程并行)
    	
    T = 1 #不被遮挡的概率
    	for idx in gaussians:
    	d = [dx, dy]
    	alpha = min(opacity[idx] * pow(e, _pow), 0.99) #控制透明度不太大
        
    	if alpha < 1 / 225: #这个椭球透明度太淡不考虑
        	continue
        if T * (1 - alpha) < 0.001 #前面椭球如果太亮应该直接掩盖掉后面的
        	break
            
        color = features[idx]
        for ch in range(3):
            C[ch] += color[ch] * alpha * T
        T = T * (1 - alpha)
        
    #如果加上了所有的高斯椭球颜色还没有加满可以再加上背景色
    for ch in range(3):     
    	out_color[x, y, ch] = C[ch] + T * bg_color[ch] 
    
    
    AI生成项目python
    
    

        初始形状:是一个球,使用KNN找到3近邻,半径设置为3近邻的距离平均
损失函数:L=(1−λ)L1+λD−SSIM,λ=0.2L=(1-\lambda)L_1+\lambda _{D-SSIM},\lambda = 0.2
自适应控制:
- 在重建过程中(当导致高斯椭圆过大时):被分成两份
 - 在重建过程中出现不足(当导致高斯椭圆过小时):生成两份副本
 - 点剪枝操作:移除那些具有较低透明度的高斯椭圆
 
怎么判断是否重建过度/不足:高斯椭球最大半径的梯度
