高斯泼溅的全面概述

news2025/4/23 3:41:19

一、说明

        高斯泼溅是一种用于表示 3D 场景和渲染新颖视图的方法,在“实时辐射场渲染的 3D 高斯泼溅”中引入。它可以被认为是 NeRF² 类模型的替代品,就像当年的 NeRF 一样,高斯分布导致了许多新的研究工作,这些工作选择将其用作各种用例的 3D 世界的底层表示。那么它有什么特别之处以及为什么它比 NeRF 更好呢?或者甚至是这样?让我们来看看吧!

二、概说

        首先也是最重要的,这项工作的主要特点是渲染速度快,这一点从标题中就可以理解。这是由于下面将介绍的表示本身,以及使用自定义 CUDA 内核定制的渲染算法的实现。

图 1:之前的高质量表示和高斯泼溅(标记为“我们的”)在渲染速度 (fps)、训练时间(分钟)和视觉质量(峰值信号到噪声比,越高越好)[来源:摘自[1]]

        此外,高斯泼溅根本不涉及任何中性网络。甚至没有一个小的 MLP,没有任何“神经”,场景本质上只是空间中的一组点。这本身就已经很引人注目了。看到这种方法在我们痴迷于人工智能的世界中越来越受欢迎,研究公司追逐由越来越多的数十亿个参数组成的模型,真是令人耳目一新。它的想法源于“Surface splatting”(2001),因此它树立了一个很酷的例子,经典的计算机视觉方法仍然可以激发相关的解决方案。其简单而明确的表示使得高斯泼溅特别易于解释,这是在某些应用中选择它而不是 NeRF 的一个很好的理由。

三、代表 3D 世界

        如前所述,在高斯喷射中,3D 世界由一组 3D 点表示,实际上有数百万个,大约为 0.5-50 万个。每个点都是一个 3D 高斯分布,具有自己独特的参数,这些参数适合每个场景,以便该场景的渲染与已知的数据集图像紧密匹配。优化和渲染过程将在稍后讨论,因此让我们暂时关注必要的参数。

图 2:高斯中心(平均值)[来源:取自 Dynamic 3D Gaussians⁴]

每个 3D 高斯均通过以下参数化:

  • 平均μ可解释为位置 x、y、z;
  • 协方差Σ
  • 不透明度σ(𝛼),应用 sigmoid 函数将参数映射到 [0, 1] 区间;
  • 颜色参数,(R、G、B)的 3 个值或球谐函数 (SH) 系数。

        这里有两组参数需要进一步讨论,协方差矩阵和 SH。有一个单独的部分专门讨论后者。至于协方差,设计上选择各向异性,即不是各向同性。实际上,这意味着3D 点可以是沿空间中任意方向旋转和拉伸的椭球体。它可能需要 9 个参数,但是,它们不能直接优化,因为协方差矩阵只有当它是正半定矩阵时才具有物理意义。使用梯度下降进行优化使得很难直接对矩阵施加这样的约束,这就是为什么它被分解如下:

        这种因式分解称为协方差矩阵的特征分解,可以理解为椭球体的配置,其中:

  • S是一个对角缩放矩阵,有3个参数用于缩放;
  • R 是用 4 个四元数解析表达的 3x3 旋转矩阵。

        使用高斯函数的美妙之处在于每个点的双重影响。一方面,根据其协方差,每个点有效地代表空间中接近其均值的有限区域。另一方面,它在理论上具有无限的范围,这意味着每个高斯都是在整个 3D 空间上定义的,并且可以对任何点进行评估。这很棒,因为在优化过程中它允许梯度从长距离流动。⁴

        3D 高斯i对 3D 中任意 3D 点p的影响定义如下:

图 3: 3D 高斯 i 对 3D 中点 p 的影响 [来源:作者提供的图片]

该方程看起来几乎像多元正态分布的概率密度函数,只是忽略了具有协方差行列式的归一化项,而是通过不透明度进行加权。

四、图像形成模型和渲染

4.1 图像形成模型

        给定一组 3D 点,最有趣的部分可能是了解如何将其用于渲染。您之前可能熟悉 NeRF 中使用的逐点𝛼混合。事实证明,NeRF 和高斯喷射共享相同的图像形成模型。为了了解这一点,让我们绕一点弯路,重新审视 NeRF² 及其许多后续作品 (1) 中给出的体积渲染公式。我们还将使用简单的转换(2)重写它:

        您可以参考 NeRF 论文了解 σ 和 δ 的定义,但从概念上讲,这可以理解如下:图像像素p中的颜色是通过沿穿过该像素的光线对样本进行积分来近似的。最终颜色是沿该光线采样的 3D 点颜色的加权和,并按透射率进行加权。考虑到这一点,我们最后看一下高斯泼溅的成像模型:

        事实上,公式(2)和(3)几乎是相同的。唯一的区别是两者之间𝛼 的计算方式不同。然而,这种微小的差异在实践中却非常重要,并导致渲染速度截然不同。事实上,它是高斯泼溅实时性能的基础

        为了理解为什么会出现这种情况,我们需要理解f^{2D} 的含义以及它提出的计算要求。这个函数只是我们在上一节中看到的f(p)到 2D 的投影,即到正在渲染的相机的图像平面上。3D 点及其投影都是多元高斯分布,因此可以使用与 3D 高斯分布对 3D 中其他点的影响相同的公式来计算投影 2D 高斯分布对像素的影响(参见图 3)。唯一的区别是平均值 μ 和协方差 Σ 必须投影到二维,这是使用 EWA splatting⁵ 的推导完成的。

        通过使用内部相机矩阵K和外部相机矩阵W= [ R | ] 将齐次坐标(带有额外 1 坐标)中的向量μ投影到图像平面中,可以轻松获得 2D 中的平均值 ]

也可以写成一行,如下所示:

这里“z”下标代表 z 归一化。二维协方差使用 (4), J 的雅可比行列式定义:

整个过程仍然是可微分的,这对于优化当然至关重要。

4.2 渲染

公式(3)告诉我们如何获得单个像素的颜色。要渲染整个图像,仍然需要遍历所有 HxW 光线,就像 NeRF 中一样,但是,该过程要轻量得多,因为:

  • 对于给定的相机,每个 3D 点的f(p)可以在迭代像素之前提前投影到 2D 中。这样,当高斯混合几个附近的像素时,我们不需要一遍又一遍地重新投影它。
  • 没有MLP 可以对单个图像进行 H·W·P 次推断,2D 高斯直接混合到图像上。
  • 沿着射线评估哪个 3D 点没有歧义,无需选择射线采样策略。与每个像素的光线重叠的一组 3D 点(参见(3)中的N)是离散的,并且在优化后是固定的。
  • 使用可微 CUDA 内核的自定义实现,在 GPU 上每帧完成一次预处理排序阶段。

概念上的差异如图 4所示:

图 4: NeRF 和 GS 之间的概念差异,左:沿射线查询连续MLP,右:混合与给定射线相关的一组离散高斯函数 [来源:作者提供的图片]

上面提到的排序算法就是论文的贡献之一。其目的是为使用公式 (3) 进行色彩渲染做准备:按深度(与图像平面的接近程度)对 3D 点进行排序,并按图块对它们进行分组。第一个需要计算透射率,而后者允许将每个像素的加权和限制为仅相关 3D 点(或更具体地说,是它们的 2D 投影)的 α 混合。分组是使用简单的 16x16 像素图块来实现的,并且这样实现,如果高斯函数重叠多个单一视锥体,则它可以落在几个图块中。通过排序,每个像素的渲染可以简化为来自像素所属图块的预排序点的 α 混合。

图 5:视锥体,每个视锥体对应一个 16x16 图像图块。颜色没有特殊含义。排序算法的结果是每个图块内按深度排序的 3D 点的子集。[来源:基于此处的图]

五、优化

        我可能会想到一个天真的问题:如何从太空中的一堆斑点中获得看起来像样的图像?好吧,确实,如果高斯没有正确优化,您将在渲染中得到各种尖锐的伪影。在图 6 中,您可以观察到此类伪影的示例,它们看起来非常像椭球体。获得良好渲染的关键是三个组成部分:良好的初始化、可微优化和自适应致密化

图 6:未优化场景的渲染示例 [来源:作者提供的图片]

        初始化是指训练开始时设置的3D点的参数。对于点位置(均值),作者建议使用 SfM(Structure from Motion)生成的点云,请参见图 7。逻辑是,对于任何 3D 重建,无论是 GS、NeRF 还是更经典的东西,您必须知道相机矩阵,因此您可能无论如何都会运行 SfM 来​​获取这些矩阵。既然 SfM 会产生稀疏点云作为副产品,为什么不使用它进行初始化呢?这就是本文的建议。当由于某种原因点云不可用时,可以使用随机初始化来代替,但存在最终重建质量潜在损失的风险。

图 7: SfM 生成的稀疏 3D 点云,意味着初始化 [来源:取自此处]

        协方差被初始化为各向同性,换句话说,3D 点以 spheres 开始。半径是根据到相邻点的平均距离设置的,这样 3D 世界就可以很好地覆盖并且没有“洞”。

        初始化后,使用简单的随机梯度下降来正确拟合所有内容。该场景针对损失函数进行了优化,该损失函数是地面实况视图和当前渲染之间的L1 和 D-SSIM(结构相异指数测量)的组合。

        然而,事实并非如此,另一个关键部分仍然存在,那就是自适应致密化。它在训练期间每隔一段时间启动一次,例如每 100 SGD 步启动一次,其目的是解决重建不足和过度重建问题。需要强调的是,SGD 本身只能调整现有的点。但在完全缺乏点或点太多的区域中,很难找到好的参数。这就是自适应致密化的用武之地,它会分割具有大梯度的(图 8)并删除收敛到非常低的 α 值的点(如果一个点如此透明,为什么要保留它?)。

图 8:自适应致密化。一个拟合豆子形状的玩具示例,我们想用几个点来渲染它。[来源:摘自[1]]

六、SH 与视图相关的颜色

        球谐函数(简称 SH)在计算机图形学中发挥着重要作用,最初被提出作为学习 Plenoxels 中离散 3D 体素的视图相关颜色的方法⁶。视图依赖性是一个很好的属性,可以提高渲染质量,因为它允许模型表示非朗伯效应,例如金属表面的镜面反射。然而,这当然不是必须的,因为可以进行简化,选择用 3 个 RGB 值来表示颜色,并且仍然使用高斯泼溅,就像[4]中所做的那样。这就是为什么我们在布置整个方法之后单独审查这个表示细节。

        SH 是在球体表面定义的特殊函数。换句话说,您可以对球体上的任何点计算这样的函数并获得一个值。所有这些函数都是通过为和 −  ≤ m ≤ 选择正整数从这个单一公式导出的,每个SH 一对(ℓ, m) :

        虽然一开始有点吓人,但对于较小的l值,这个公式可以显着简化。事实上,对于ℓ = 1,Y = ~0.282,只是整个球体上的常数。相反,较高的值会产生更复杂的表面。该理论告诉我们,球谐函数形成了正交基,因此球面上定义的每个函数都可以通过 SH 表示

        这就是为什么表达与视图相关的颜色的想法是这样的:让我们将自己限制在一定的自由度ℓ_max范围内,并说每种颜色(红色、绿色和蓝色)是第一个ℓ_max SH 函数的线性组合。对于每个 3D 高斯,我们希望学习正确的系数,以便当我们从某个方向查看这个 3D 点时,它会传达一种最接近地面真实颜色的颜色。获取与视图相关的颜色的整个过程如图 9 所示。

图 9:获取具有ℓ_max = 2 和 9 个学习系数的点的与视图相关的颜色(红色分量)的过程。sigmoid 函数将值映射到 [0, 1] 区间。通常,会使用剪裁来代替[来源:作者提供的图片]

七、局限性

        尽管整体效果出色且渲染速度令人印象深刻,但表示的简单性是有代价的。最重要的考虑因素是在优化过程中引入的各种正则化启发法,以防止模型出现“损坏”高斯分布:太大、太长、冗余等点。这部分至关重要,提到的问题可以在任务中进一步放大超越新颖的视图渲染。

        选择放弃连续表示而选择离散表示意味着MLP 的归纳偏差消失了。在 NeRF 中,MLP 执行隐式插值并消除给定视图之间可能存在的不一致,而 3D 高斯更为敏感,从而导致了上述问题。

        此外,高斯泼溅也存在 NeRF 中存在的一些众所周知的伪影,它们都继承自共享图像形成模型:较少看到或不可见的区域质量较低,靠近图像平面的漂浮物等。

        检查点的文件大小是另一个需要考虑的属性,尽管新颖的视图渲染还远未部署到边缘设备。考虑到 3D 点的大致数量和流行 NeRF 的 MLP 架构,两者都占用相同数量级的磁盘空间,而 GS 平均只重几倍。

八、哪里可以玩它

没有任何博客文章能够公正地描述一种方法以及仅运行它并亲自查看结果。这里是你可以玩的地方:

  • gaussian-splatting — 使用自定义 CUDA 内核的官方实现;
  • nerfstudio —是的, nerf studio中的高斯泼溅。这是一个最初专用于类似 NeRF 模型的框架,但自 23 年 12 月以来,它也支持 GS;
  • Threestudio-3dgs — Threestudio 的扩展,另一个跨模型框架。如果您有兴趣根据提示生成 3D 模型而不是学习一组现有图像,则应该使用此模型;
  • UnityGaussianSplatting — 如果您喜欢 Unity,您可以将经过训练的模型移植到此插件中以进行可视化;
  • gsplat — 一个从 nerfstudio 分支出来的 CUDA 加速高斯光栅化库。它可作为独立的基于火炬的项目用作泼溅的可微分模块。

米哈尔·盖耶

参考

  1. Kerbl, B.、Kopanas, G.、Leimkühler, T. 和 Drettakis, G. (2023)。用于实时辐射场渲染的 3D 高斯喷射。SIGGRAPH 2023。
  2. Mildenhall, B.、Srinivasan, PP、Tancik, M.、Barron, JT、Ramamoorthi, R. 和 Ng, R. (2020)。NeRF:将场景表示为神经辐射场以进行视图合成。欧洲CV 2020。
  3. Zwicker, M.、Pfister, H.、van Baar, J. 和 Gross, M. (2001)。表面喷溅。2001年SIGGRAPH
  4. Luiten, J.、Kopanas, G.、Leibe, B. 和 Ramanan, D. (2023)。动态 3D 高斯:通过持久动态视图合成进行跟踪。3D 视觉国际会议。
  5. Zwicker, M.、Pfister, H.、van Baar, J. 和 Gross, M. (2001)。EWA 体积溅射。IEEE 可视化 2001。
  6. Yu, A.、Fridovich-Keil, S.、Tancik, M.、Chen, Q.、Recht, B. 和 Kanazawa, A. (2023)。Plenoxels:没有神经网络的辐射场。CVPR 2022。
  7.  凯特·尤尔科娃

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1345941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙 Window 环境的搭建

鸿蒙操作系统是国内自研的新一代的智能终端操作系统,支持多种终端设备部署,能够适配不同类别的硬件资源和功能需求。是一款面向万物互联的全场景分布式操作系统。 下载、安装与配置 DevEco Studio支持Windows系统和macOS系统 Windows系统配置华为官方推…

Markdown之YAML效果图语法介绍(二十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

C#进阶-IIS应用程序池崩溃的解决方案

IIS是微软开发的Web服务器软件,被广泛用于Windows平台上的网站托管。在使用IIS过程中,可能会遇到应用程序池崩溃的问题,原因可能有很多,包括代码错误、资源不足、进程冲突等。本文将为大家介绍IIS应用程序池崩溃的问题分析和解决方…

缓存cache和缓冲buffer的区别

近期被这两个词汇困扰了,感觉有本质的区别,搜了一些资料,整理如下 计算机内部的几个部分图如下 缓存(cache) https://baike.baidu.com/item/%E7%BC%93%E5%AD%98 提到缓存(cache),就…

【web安全】验证码识别-burp的captcha-killer-modified插件教程(基于百度接口)(总结一些坑)

前言 菜某分享 captcha-killer-modified插件的安装教程 整体安装教程可以看他的 安装captcha-killer-modified插件(windospython环境)_aptcha-killer-modified的安装-CSDN博客 但是有一点补充。 这个里面的codereg.py文件有个问题 可能是版本的问…

千里马2023年终总结-android framework实战

背景: hi粉丝朋友们: 2023年马上就过去了,很多学员朋友也都希望马哥这边写个年终总结,因为这几个月时间都忙于新课程halsystracesurfaceflinger专题的开发,差点都忘记了这个事情了,今天特别花时间来写个bl…

推荐系统中的 业务指标 覆盖率

覆盖率(Coverage)是推荐系统评估指标之一,用于衡量推荐系统是否能够覆盖物品空间中的多样性,即是否能够推荐系统中的每个物品都能够被推荐给用户。覆盖率通常是一个百分比,表示被推荐的物品占总物品集合的比例。 覆盖…

系统稳定性建设浅谈

系统稳定性是指系统在受到外部环境变化或内部参数变化时,能够保持其功能和性能的稳定性。它是一种系统的性能指标,可以用来衡量系统的可靠性和可控性。系统稳定性的高低可以反映出系统的可靠性和可控性,从而为系统的设计和运行提供参考。 202…

代码随想录刷题笔记(DAY4)

今日总结:今天把中心放在前端学习上,最后一个题没有完全理解,明天早起补上吧。勉强算完成任务。(已补上) Day 4 01. 两两交换链表中的节点(No. 24) 题目链接 代码随想录题解 1.1 题目 给你…

jmeter安装、下载

JDK安装 因为Jmeter是java开发的,有一个特点就是得装一个java环境才能运行 需要安装一个JDK(建议安装版本为 8,因为企业用得最多的都是在用这个版本) 网址:Java Downloads | Oracle 解压下载下来的安装包,到自己的目…

虚拟化分类和实现原理

6、虚拟化分类 (1)完全虚拟化 直接将Hypervisor跑在0环内核态,客户机os跑在1环,一旦触发敏感指令,由0环的VMM进行捕获翻译,从而模 拟这些指令。而运行在1环的GuestOS永远都不知道自己是个虚拟机。是完全…

Stable Diffusion 系列教程 - 5 ControlNet

ControlNet和LORA的定位都是对大模型做微调的额外网络。作为入门SD的最后一块拼图是必须要去了解和开发的。为什么ControlNet的影响力如此的大?在它之前,基于扩散模型的AIGC是非常难以控制的,扩散整张图像的过程充满了随机性。这种随机性并不…

MySQL多表查询的方法(含例子)

我们查两张及以上表的时候,普通的查询语法(select * from 表名)不能发挥作用。下面我演示两张表和三张表的查询方法。 前提: 如图存在三张表a,b,c:a表是学生基础信息,b表是教师学科信息&#…

想要学会JVM调优,先掌握JVM内存模型和JVM运行原理

1、前言 今天将和你一起探讨Java虚拟机(JVM)的性能调优。 JVM算是面试中的高频问题了,通常情况下总会有人问到:请你讲解下 JVM 的内存模型,JVM 的 性能调优做过? 2、为什么 JVM 在 Java 中如此重要 首…

近 300 个假冒应用程序泛滥成灾,淹没伊朗银行业

内容概述: 近期,针对伊朗银行业的大规模活动规模不断扩大,近 300 个恶意 Android 应用程序针对用户的账户凭据、信用卡和加密钱包发起攻击。四个月前,Sophos 的研究人员详细介绍了一场漫长的活动,涉及 40 个恶意银行应…

【docker】—— Docker 简介

目录 (一)容器技术发展史 1、Jail 时代 2、云时代 3、云原生时代 (二)编排与容器的技术演进之路 1、DockerClient 2、RUNC&Shim 3、CRI-Containerd 4、CRI-O 5、Containerd (三)Docker 简介…

【开源】基于Vue+SpringBoot的二手车交易系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…

苹果紧急修复两大零日漏洞,影响iPhone、iPad 和 Mac 设备

内容概述: 近日,苹果公司发布紧急安全更新,此次更新修复了两个在攻击中被利用并影响 iPhone、iPad 和 Mac 设备的零日漏洞。据统计,自今年年初以来已修复的零日漏洞数量已达到 20 个。其中提到此次发现的零日漏洞很可能已被iOS 1…

ERD Online更换Licence为最友好的MIT协议

ERD Online一直秉承着开放、灵活、用户友好的理念,为用户提供高品质的服务。我们非常激动地宣布,ERD Online的许可证已经进行了重大更新,将采用MIT(麻省理工学院)协议,这一变更旨在进一步提升用户体验&…

大模型LLM的微调技术:LoRA

0 引言 LoRA(Low-Rank Adaptation)出自2021年的论文“LoRA: Low-Rank Adaptation of Large Language Models” LoRA技术冻结预训练模型的权重,并在每个Transformer块中注入可训练层(称为秩分解矩阵),即在模型的Linear层的旁边增…