【Gaussian splatting系列学习】(一)

2024-08-23 16:36

本文主要是介绍【Gaussian splatting系列学习】(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

3DGS系列(一)

Splatting 基本理解

定义:

  • 一种体渲染的方法:从3D物体渲染到2D平面
  • Ray-casting 是被动的(NeRF):计算出每个像素点受到发光粒子的影响来生成图像
  • Splatting是主动的:计算出每个发光粒子如何影响像素点

3dgs 基于2001年的 EWA Volume Splatting

splatting的核心

  1. 选择雪球(捏雪球)
  2. 抛掷雪球:从3D投影到2D,得到足迹(footprint)
  3. 加以合成,形成最后的图像

STEP 1: 捏雪球

为什么使用核(雪球)?

  • 点是没有体积的
  • 需要给点一个核
  • 高斯、圆、正方形……

为什么选择3D高斯椭球?

很好的数学性质:

  • 仿射变换后高斯核仍然闭合
  • 3D降维到2D后(沿着某个轴积分)仍然为高斯

定义:

  • 椭球高斯 G ( x ) = 1 ( 2 π ) k ∣ Σ ∣ e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) G(x)=\frac{1}{\sqrt{(2\pi)^k|\Sigma|}}e^{-\frac{1}{2}(x-\mu)^ T\Sigma^{-1}(x-\mu)} G(x)=(2π)k∣Σ∣ 1e21(xμ)TΣ1(xμ)
  • Σ \Sigma Σ 表示协方差矩阵,半正定, ∣ Σ ∣ |\Sigma| ∣Σ∣是其行列式

3D gaussian 为什么是椭球?明明是一个分布啊!

椭球的定义:

x 2 a 2 + y 2 b 2 + z 2 c 2 = 1 \frac{x^2}{a^2}+\frac{y^2}{b^2}+\frac{z^2}{c^2}=1 a2x2+b2y2+c2z2=1

  • A x 2 + B y 2 + C z 2 + 2 D x y + 2 E x z + 2 F y z = 1 Ax^2+By^2+Cz^2+2Dxy+2Exz+2Fyz=1 Ax2+By2+Cz2+2Dxy+2Exz+2Fyz=1

高斯分布:

  • 一维:均值&方差
  • 高维:均值&协方差矩阵

协方差矩阵:

  • 是一个对称矩阵,决定了高斯分布形状
  • 对角线上元素为x轴、y轴、z轴的方差
  • 反斜对角线上的值为协方差:表示x和y,x和z,y和z之间的线性相关程度

− 1 2 ( x − μ ) T Σ − 1 ( x − μ ) {-\frac{1}{2}(x-\mu)^ T\Sigma^{-1}(x-\mu)} 21(xμ)TΣ1(xμ)是一个常数的时候, G ( x ; μ , Σ ) G(x;\mu,\Sigma) G(x;μ,Σ) 是一个常数。

一维: ( x − μ ) 2 σ 2 \frac{(x-\mu)^2}{\sigma^2} σ2(xμ)2 = constant
二维: ( x − μ 1 ) 2 σ 1 2 + ( x − μ 2 ) 2 σ 2 2 − 2 σ x y ( x − μ 1 ) ( y − μ 2 ) σ 1 σ 2 \frac{(x-\mu_1)^2}{\sigma_1^2}+\frac{(x-\mu_2)^2}{\sigma_2^2}-\frac{2\sigma_{xy}(x-\mu_1)(y-\mu_2)}{\sigma_1\sigma_2} σ12(xμ1)2+σ22(xμ2)2σ1σ22σxy(xμ1)(yμ2) = constant (椭圆)
三维: ( x − μ 1 ) 2 σ 1 2 + ( x − μ 2 ) 2 σ 2 2 + ( x − μ 3 ) 2 σ 3 2 − 2 σ x y ( x − μ 1 ) ( y − μ 2 ) σ 1 σ 2 − 2 σ x z ( x − μ 1 ) ( z − μ 3 ) σ 1 σ 3 − 2 σ y z ( x − μ 2 ) ( y − μ 3 ) σ 2 σ 3 \frac{(x-\mu_1)^2}{\sigma_1^2}+\frac{(x-\mu_2)^2}{\sigma_2^2}+\frac{(x-\mu_3)^2}{\sigma_3^2}-\frac{2\sigma_{xy}(x-\mu_1)(y-\mu_2)}{\sigma_1\sigma_2}-\frac{2\sigma_{xz}(x-\mu_1)(z-\mu_3)}{\sigma_1\sigma_3}-\frac{2\sigma_{yz}(x-\mu_2)(y-\mu_3)}{\sigma_2\sigma_3} σ12(xμ1)2+σ22(xμ2)2+σ32(xμ3)2σ1σ22σxy(xμ1)(yμ2)σ1σ32σxz(xμ1)(zμ3)σ2σ32σyz(xμ2)(yμ3) = constant

对各项进行提取,其实就是: A x 2 + B y 2 + C z 2 + 2 D x y + 2 E x z + 2 F y z = 1 Ax^2+By^2+Cz^2+2Dxy+2Exz+2Fyz=1 Ax2+By2+Cz2+2Dxy+2Exz+2Fyz=1,是一个椭球面。
说明:G的范围是[0,1],G是常数的时候是一个面,而高斯的G是从0-1的连续值,实际上是大椭球壳 套 小椭球壳。实心的椭球。

各向同性&各向异性

各项同性(Isotropic):

  • 在所有方向具有相同的扩散程度(梯度)
  • 3D高斯分布:协方差矩阵是对角矩阵, σ x = σ y = σ z , σ x y = σ x z = σ y z = 0 \sigma_x=\sigma_y=\sigma_z, \sigma_{xy}=\sigma_{xz}=\sigma_{yz}=0 σx=σy=σz,σxy=σxz=σyz=0

各向异性(Anisotropic):

  • 在不同方向具有不同的扩散程度(梯度)
  • 椭球
  • 3D高斯分布:协方差矩阵是对角矩阵

协方差矩阵是如何控制椭球形状的?

高斯分布:

  • x ∼ N ( μ , Σ ) \mathbf{x}\sim N(\mu, \Sigma) xN(μ,Σ)
  • 均值 [ μ 1 , μ 2 , μ 3 ] [ \mu_1,\mu_2,\mu_3] [μ1,μ2,μ3]
  • 协方差矩阵

高斯分布的仿射变换:

  • w = A x + b \mathbf{w}=A\mathbf{x}+b w=Ax+b
  • w ∼ N ( A μ + b , A Σ A T ) \mathbf{w}\sim N(A\mu+b,A\Sigma A^T) wN(Aμ+b,AΣAT)

标准的高斯分布:

  • x ∼ N ( 0 , I ) \mathbf{x}\sim N(\mathbf{0},I) xN(0,I)
  • 均值 [0, 0, 0]
  • 协方差矩阵对角线为1,其余为0

任意高斯可以看做是标准高斯通过仿射变换得到。

协方差矩阵为什么能用旋转和缩放矩阵表达?

高斯分布的仿射变换:

  • w = A x + b \mathbf{w}=A\mathbf{x}+b w=Ax+b

  • w ∼ N ( A μ + b , A Σ A T ) \mathbf{w}\sim N(A\mu+b,A\Sigma A^T) wN(Aμ+b,AΣAT)

  • A = R S A=RS A=RS(仿射变换就是由旋转、缩放、平移来完成的)

因为任意高斯的协方差矩阵可以看做是标准高斯的协方差矩阵的仿射变换,所以可以写成:
Σ = A ⋅ I ⋅ A T = R ⋅ S ⋅ I ⋅ ( R ⋅ S ) T = R ⋅ S ⋅ S T ⋅ R T \Sigma=A\cdot I\cdot A^T=R\cdot S\cdot I \cdot(R\cdot S)^T=R\cdot S\cdot S^T \cdot R^T Σ=AIAT=RSI(RS)T=RSSTRT
所以协方差矩阵可以用旋转和缩放矩阵来表示。

如果已经知道协方差矩阵,如何得到R和S:可以通过特征值分解求解。


Reference:B站UP主 SY_007 视频讲解内容

这篇关于【Gaussian splatting系列学习】(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099913

相关文章

C++11/14系列学习

十一假期一直在看C++11新特性,比较出名的书《C++ Primer Plus》专门有一个章节来讲解,《C++ Primer》则将C++11的新特性融入到各个章节来学习。在假期的最后一天无意中发现实验楼有一个专门的教程来讲解,算是念念不忘,必有回响吧,特此整理出来,和大家一起学习。 作者网址:https://www.shiyanlou.com/courses/605,非常感谢! 注:本文并没有智

【HDU】4975 A simple Gaussian elimination problem. 网络流——行列建边

传送门:【HDU】4975 A simple Gaussian elimination problem. 题目分析:这题和某一场的多校的题目出奇的像啊!重要的是我一开始还以为不可能会出一样的题。。结果迟迟没写啊。。。后来觉得实在想不出什么对策了,虽然觉得给的是0~9很特殊,但是利用不起来,果断还是敲了网络流了。。首先建图很简单,源点向行建边,容量为行和,列向汇点建边,容量为列和,然后所有的

三维重建实战:3D Gaussian Splatting

简介: 3D Gaussian Splatting是一种用一组2d图像创建3d场景的方法,你只需要一个场景的视频或者一组照片就可以获得这个场景的高质量3d表示,使你可以从任何角度渲染它。它们是一类辐射场方法(如NeRF),但同时训练速度更快(同等质量)、渲染速度更快,并达到更好或相似的质量。3D Gaussian Splatting可以实现无界且完整的场景1080p分辨率下进行高质量实时(≥ 1

gaussian grouping训练自定义数据集

gaussian grouping是一个语义分割3DGS的方法。 它在每个3DGS点云中加入一个叫Identity Encoding的特征向量, 在渲染时把特征向量渲染到2D图像,每个像素位置为一个特征向量,使用额外的线性分类层对每个2D位置的特征向量分类。得到mask。 这个mask和gt mask计算2D损失,同时3D正则化损失利用3D空间一致性,强制执行Identity Encoding在特

【扩散模型系列学习】Diffusion Model

Denoising Diffusion Probabilistic Models 生成模型简介 生成式模型: 生成是“言出法随”生成是“涌现” or “幻觉” 定义: 一个能随机生成与训练数据一致的模型 问题: 如何对训练数据建模?如何采样? 思路: 从一个简单分布采样是容易的从简单分布到观测数据分布是可以拟合的 生成模型的解题思路: 将观测数据分布映射到简单分布【encod

【Gaussian splatting系列学习】(三)

3DGS系列(一) 3DGS系列(二) 3DGS系列(三) 3D高斯球的颜色 基函数: 任何一个周期性函数可以分解为正弦和余弦的线性组合 球谐函数: 任何一个球面坐标的函数可以用多个球谐函数来近似 极坐标, ( θ , ϕ ) (\theta, \phi) (θ,ϕ) f ( t ) ≈ ∑ l ∑ m = − l l c l m y l m ( θ , ϕ ) f(t)\app

【三维重建】2D Gaussian Splatting:几何准确的2D辐射场(更新中)

标题:2D Gaussian Splatting for Geometrically Accurate Radiance Fields 项目地址:https://github.com/hbb1/2d-gaussian-splatting 文章目录 功能输入输出 一、摘要二、引言深入分析解读 三、相关工作3.1新视角合成3.2 3D重建3.3 可微分基于点的图形3.4 同期工作 四、3D

Gaussian Splatting 在 Ubuntu22.04 下部署

代码:graphdeco-inria/gaussian-splatting (github) 论文:[2308.04079] 3D Gaussian Splatting for Real-Time Radiance Field Rendering (arxiv.org) 1. 禁用自带驱动 Nouveau Ubuntu 自带的显卡驱动,是非 Nvida 官方版。在后面装 CUDA 的时候

【文献】3D Gaussian Splatting for Real-Time Radiance Field Rendering

论文地址:https://arxiv.org/abs/2308.04079 项目: https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/ 代码: git clone  https://github.com/graphdeco-inria/gaussian-splatting —recursive 一、文章概述 1.问题

3D gaussian-splatting项目环境配置记录

1.前景 项目论文:https://arxiv.org/abs/2308.04079 GitHub项目下载地址:https://github.com/graphdeco-inria/gaussian-splatting git clone时里面的子模块小项目会git不到,需要单独github下来,放入相应文件夹。 sibr_viewersSIBR / SIBR Core · GitLab,