当前位置: 首页 > news >正文

3D Gaussian Splatting 论文学习

概述

目前比较常见的渲染方法大致可以分为2种:

  1. 将场景中的物体投影到渲染平面:传统的渲染管线就是这种方式,主要针对Mesh数据,可以将顶点直接投影成2D的形式,配合光栅化、深度测试、Alpha混合等就可以得到渲染的图像。
  2. 从相机到像素发出一条射线与场景物体交互去计算沿着射线的颜色积分:例如光线追踪,去计算光线和Mesh的光学行为(反射等)来得到像素的颜色值;或是体渲染,对于体数据或是隐式的场景表达(NeRF)通过采样的方式来计算一个光线上的离散的积分,得到最终的颜色。

隐式的场景表达因为其连续性天然具有可微性,比较适合放在优化框架中去使用,但是在渲染时由于需要随机采样,会浪费大量时间在无效的采样点上。3D高斯这个方法则结合了连续可微和投影后光栅化渲染的优势,实现了高质量的实时渲染效果。

接下来我以一些关键知识点为章节来进行总结:

3D高斯表示

3D高斯实际上就是点云+概率密度,使得场景离散化表示的同时对不存在顶点的空间有了连续的颜色变化。一个高斯球的数学形式可以表示为
G ( x ) = exp ⁡ ( − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ) G(x)=\exp{(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))} G(x)=exp(21(xμ)TΣ1(xμ))
其中 Σ \Sigma Σ是协方差矩阵, μ \mu μ是高斯球的重心坐标(均值)。论文中省略了高斯分布的归一化系数,这是因为我们并不需要得到严格的概率分布,只需要表达对空间的相对影响就行了。协方差矩阵 Σ \Sigma Σ是一个正定对称矩阵,是场景学习时的优化参数,如果直接优化一个3x3的矩阵很难满足高斯分布的性质,因此往往将其分解为旋转矩阵 R R R和缩放矩阵 S S S,即
Σ = R S S T R T \Sigma=RSS^TR^T Σ=RSSTRT
然后缩放用一个三维的向量表示,旋转用一个四元数表示。

以上的概率分布实际上定义了一个类似“椭球”的形状,用来表示某个高斯球对空间的影响程度,除此之外对每个高斯球还需要不透明度 α \alpha α和颜色信息。不透明度好理解,一个[0,1]的浮点数,深度排序后用来影响颜色的混合。而颜色信息,论文中用了四阶球谐函数(0, 1, 2, 3,每个颜色分量对应16个参数)来表示。因为我之前对球谐函数不太了解,所以这里简要总结一下球谐函数:

球谐函数(Spherical Harmonics),可以用来拟合球面函数 ρ = f ( θ , ϕ ) \rho=f(\theta,\phi) ρ=f(θ,ϕ)。实际上球谐函数就是一组基函数,怎么理解基函数呢?类似傅里叶展开的基函数为 { s i n ( p θ ) , c o s ( q θ ) } \{sin(p\theta),cos(q\theta)\} {sin(),cos()},用他们的线性组合可以拟合任意一个周期函数;也类似我们刚接触机器学习的欠拟合和过拟合时都会遇到的例子,用多项式去拟合数据点,也可以把 { 1 , x , x 2 , … , x k } \{1,x,x^2,\dots,x^k\} {1,x,x2,,xk}作为基函数,每个基函数前面乘的参数作为可学习的参数。

而用于拟合球面函数常用的基函数就是球谐函数
S m l ( θ , ϕ ) , − m ≤ l ≤ m S_m^l(\theta,\phi), \ -m\le l\le m Sml(θ,ϕ), mlm
它的具体形式就不展开了,需要再查吧,总之对于一个 m m m阶( m ≥ 0 m\ge0 m0)的球谐函数,它有 2 m + 1 2m+1 2m+1种变化。而对于一个任意的球面函数 f ( θ , ϕ ) f(\theta,\phi) f(θ,ϕ),我们用 k k k阶球谐函数去拟合的方式为
f ( θ , ϕ ) = ∑ m = 0 k ∑ l = − m m C m l S m l ( θ , ϕ ) f(\theta,\phi)=\sum_{m=0}^k \sum_{l=-m}^m C_m^l S_m^l(\theta,\phi) f(θ,ϕ)=m=0kl=mmCmlSml(θ,ϕ)
注意我这里的阶数是从0开始的。需要学习的参数是 C m l C_m^l Cml,总共有 ( k + 1 ) 2 (k+1)^2 (k+1)2个。

对于某个高斯球的颜色RGB,论文中每个分量用一个3阶(或者说是4阶,看从0还是1开始)球谐函数表示,总共48个参数,这样就可以根据任意视角 ( θ , ϕ ) (\theta,\phi) (θ,ϕ),查询这个高斯球的颜色了。

综上所述,每个3D高斯球有以下几个属性:

  • 位置: ( x , y , z ) (x,y,z) (x,y,z)
  • 缩放向量,四元数:表示高斯分布的协方差矩阵
  • 不透明度:opacity α \alpha α
  • 颜色:球谐函数拟合 C ( θ , ϕ ) C(\theta,\phi) C(θ,ϕ)

图片渲染

假设所有的高斯球已经训练好,要怎么渲染成2D的图像呢?前面也讲到过,像NeRF是发射光线,然后沿着光线进行采样对颜色做离散积分,如果套用到3D高斯的话,就要在光线路径上采样,然后计算所有(或者附近)的高斯球在该采样点的颜色。然而论文方法名称里叫“Splatting”,顾名思义就是“溅射”,或者说是“抛雪球”,比较形象的解释了高斯球的渲染方式:直接投影到2D。

给定一个视图变换(世界坐标到相机坐标)矩阵 W W W,相机坐标下某个高斯球的协方差矩阵为
Σ ′ = J W Σ W T J T \Sigma'=JW\Sigma W^TJ^T Σ=JWΣWTJT
其中 J J J为投影变换的仿射近似的雅各比矩阵,假设投影变换 x ′ = p ( x ) x'=p(x) x=p(x),那么 J = ∂ p ∂ μ J=\frac{\partial p}{\partial\mu} J=μp ,投影变换就可以近似为 x ′ = p ( μ ) + J ( x − μ ) x'=p(\mu)+J(x-\mu) x=p(μ)+J(xμ) 。其实就是把一个非线性的投影变换近似成一个线性变换,使得3D高斯投影后还是一个2D高斯。

至此,图片的渲染就可以对每个像素点,按照距离(深度)对所有高斯球排序,然后根据深度和不透明度以及二维高斯分布计算累加的颜色。论文还提出了一种加速方式,就是将图片分为16x16的小块,每一块按照一定置信度找到受影响的所有高斯球进行排序,后续就不再对每个像素单独排序了,并且每个小块只计算被影响的高斯球的颜色叠加。这样GPU上的每个Block处理一个小块,共享内存,每个Thread再处理一个像素点,光栅化过程就会非常非常快。

训练策略

训练流程如下图所示

image-20240910144820202

先用SFM(Structure From Motion,例如Colmap)将多视角图片转为点云,然后进行高斯球的初始化,然后再进行迭代训练以及进行高斯球密度的调整。

高斯球密度调整策略一般每过一定迭代次数调整一次,大致类型如下:

  1. 对于不透明度低于一定阈值的高斯球,直接删除(说明是空的,对应区域没有物体);
  2. 对于位置梯度(也就是对高斯球中心坐标那三个参数求导)过大的区域,可能有两种情况:
    1. 欠拟合:说明高斯球无法很好的填充周围的空白区域,于是克隆一个新的相同的高斯球;
    2. 过拟合,高斯球填满了周围的区域,还溢出了很多,于是分割成两个更小的高斯球

总结

相较于NeRF,3D高斯确实在保证质量的情况下,速度快很多,基本能够达到实时的渲染,并且训练时间也不长(半小时左右)。不过3D高斯是显式的表示,占用的内存和显存更高,保存场景时占用的空间比NeRF高了2个数量级。

相关文章:

3D Gaussian Splatting 论文学习

概述 目前比较常见的渲染方法大致可以分为2种: 将场景中的物体投影到渲染平面:传统的渲染管线就是这种方式,主要针对Mesh数据,可以将顶点直接投影成2D的形式,配合光栅化、深度测试、Alpha混合等就可以得到渲染的图像…...

MySQL 安全机制全面解析

‍ 在如今的数字化时代,数据库安全 变得越来越重要。为了防止对数据库进行非法操作,MySQL 定义了一套完整的安全机制,包括用户管理、权限管理 和 角色管理。本文将为你深入浅出地介绍这三大安全机制,帮助你轻松掌握MySQL的安全管…...

vue原理分析(十四)研究new Vue()中的 initProvide

在Vue.prototype._init 中有一些init函数,今天我们来研究这些init函数 Vue.prototype._init function (options) {......{initProxy(vm);}......initLifecycle(vm);initEvents(vm);initRender(vm);callHook$1(vm, beforeCreate, undefined, false /* setContext *…...

Qt控制开发板的LED

Qt控制开发板的LED 使用开发板的IO接口进行控制是嵌入式中非常重要的一点,就像冯诺依曼原理说的一样,一个计算机最起码要有输入输出吧,我们有了信息的接收和处理,那我们就要有输出。 我们在开发板上一般都是使用开发板的GPIO接口…...

S3C2440开发板点亮LED灯+PWM定时器

目录 GPIO引脚和寄存器概述 点亮LED灯步骤 1.配置GPIO 2.点亮LED 设置引脚为输出 控制引脚电平 完整代码 PWM GPIO引脚和寄存器概述 GPIO端口: S3C2440的GPIO引脚可被配置为输入或输出(控制LED的引脚通常配置为输出模式)。寄存器&#…...

S-Procedure的基本形式及使用

理论 Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- \textbf{Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- } Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- tions w.r.t. x ∈ C M 1 \mathbf{x}\in\mathbb{C}^M\times1 x…...

free -h 查看内存free空间不足

free空间不足 大部分被buff/cache占用 解决办法一: 手动释放缓存 释放页缓存 sudo sync; sudo sysctl -w vm.drop_caches1 释放目录项和inode缓存 sudo sync; sudo sysctl -w vm.drop_caches2 释放所有缓存(页缓存、目录项和inode缓存) sudo sync…...

rust学习笔记

参考资料:https://doc.rust-lang.org/book/ch01-02-hello-world.html 一、 编译与运行 在 Rust 中,编译和运行代码的常用命令是使用 cargo,这是 Rust 的包管理和构建工具。以下是使用 cargo 和 rustc(Rust 编译器)的具…...

【有啥问啥】复习变分下界即证据下界(Evidence Lower Bound, ELBO):原理与应用

复习变分下界即证据下界(Evidence Lower Bound, ELBO):原理与应用 变分下界(Variational Lower Bound),也称为“证据下界”(Evidence Lower Bound, ELBO),是概率模型中的…...

Linux shell编程学习笔记78:cpio命令——文件和目录归档工具(上)

0 前言 在Linux系统中,除了tar命令,我们还可以使用cpio命令来进行文件和目录的归档。 1 cpio命令的功能,帮助信息,格式,选项和参数说明 1.1 cpio命令的功能 cpio 名字来自 "copy in, copy out"&#xf…...

为什么在 JSON 序列化中不使用 transient

有些小伙伴发现了,明明在返回的实体类中指定了属性为transient。为什么前端得到的返回json中还是有这个属性的值? 类: private String name; private transient String password;返回结果: { name:"刘大大", password:…...

K8S - Volume - NFS 卷的简介和使用

在之前的文章里已经介绍了 K8S 中两个简单卷类型 hostpath 和 emptydir k8s - Volume 简介和HostPath的使用 K8S - Emptydir - 取代ELK 使用fluentd 构建logging saidcar 但是这两种卷都有同1个限制, 就是依赖于 k8s nodes的空间 如果某个service pod中需要的vol…...

IO模型---BIO、NIO、IO多路复用、AIO详解

本篇将想给详细解释一下什么是BIO、NIO、IO多路复用以及AIO~ 同步的阻塞(BIO)和非阻塞(NIO)的区别 BIO:线程发来IO请求后,一直阻塞着IO线程,需要缓冲区这边数据准备好之后,才会进行下一步的操作。 举个🌰&#xff1…...

蓝桥杯真题——约翰的牛奶

输入样例&#xff1a; 8 9 10 输出样例&#xff1a; 1 2 8 9 10 本题是宽搜的模版题&#xff0c;不论怎么倒牛奶&#xff0c;A,B,C 桶里的牛奶可以看做一个三元点集 我们只要找到A桶是空的&#xff0c;B,C桶中的状态即可 #include <iostream> #include <cstring…...

单机docker-compose部署minio

单机多副本docker-compose部署minio 简单介绍 如果服务器有限可以单机挂载多硬盘实现多副本容错&#xff08;生产不推荐&#xff09; 部署好的文件状态 有两个重要文件 docker-compose.yaml和nginx.conf docker-compose.yaml是docker部署容器的配置信息包括4个minio和1个ng…...

Winform实现弹出定时框功能

1、程序 private void TimeDialogInitialize(){for(int i1; i<30;i){cbbTimeDialog.Items.Add(i);}}private void cbbTimeDialog_SelectedIndexChanged(object sender, EventArgs e){foreach(int i in cbbTimeDialog.Items){if(cbbTimeDialog.SelectedItem!null &&…...

【机器学习(四)】分类和回归任务-梯度提升决策树(GBDT)-Sentosa_DSML社区版

文章目录 一、算法概念一、算法原理&#xff08;一&#xff09; GBDT 及负梯度拟合原理&#xff08;二&#xff09; GBDT 回归和分类1、GBDT回归1、GBDT分类二元分类多元分类 &#xff08;三&#xff09;损失函数1、回归问题的损失函数2. 分类问题的损失函数&#xff1a; 三、G…...

Mini-Omni 语言模型在流式传输中边思考边听说应用

引入简介 Mini-Omni 是一个开源的多模态大语言模型,能够在思考的同时进行听觉和语言交流。它具有实时端到端语音输入和流媒体音频输出的对话能力。 语言模型的最新进展取得了显著突破。GPT-4o 作为一个新的里程碑,实现了与人类的实时对话,展示了接近人类的自然流畅度。为了…...

vue devtools的使用

vue devtools的使用 Vue Devtools 是一个强大的浏览器扩展,旨在帮助你调试和开发 Vue.js 应用。它支持 Chrome 和 Firefox 浏览器,并提供了一些工具和功能,可以让你更轻松地查看和调试 Vue 应用的状态和行为。以下是如何安装和使用 Vue Devtools 的详细指南。 安装 Vue De…...

无人机培训:无人机维护保养技术详解

随着无人机技术的飞速发展&#xff0c;其在航拍、农业、救援、环境监测等领域的应用日益广泛。然而&#xff0c;要确保无人机安全、高效地执行任务&#xff0c;定期的维护保养至关重要。本文将深入解析无人机维护保养的核心技术&#xff0c;涵盖基础构造理解、清洁与防尘、电机…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...