3d gaussian splatting笔记(paper部分翻译)

本文为3DGS paper的部分翻译。

基于点的𝛼混合和 NeRF 风格的体积渲染本质上共享相同的图像形成模型。 具体来说,颜色 𝐶 由沿射线的体积渲染给出:
在这里插入图片描述

其中密度 𝜎、透射率 𝑇 和颜色 c 的样本是沿着射线以间隔 𝛿 𝑖 采集的。 这可以重写为

在这里插入图片描述

典型的基于神经点的方法通过混合与像素重叠的 N 个有序点来计算像素的颜色 𝐶:
在这里插入图片描述

其中 c 𝑖 是每个点的颜色,𝛼 𝑖 是通过评估一个2D 高斯,用协方差 Σ 乘以学习的每点不透明度。

从等式2,3 可以清楚地看到成像模型是相同的。 然而,渲染算法却有很大不同。 NeRF 是隐式表示空/占用空间的连续表示; 需要昂贵的随机抽样才能找到等式2中的样本。 随之而来的噪声和计算开销。 相比之下,点是一种非结构化、离散的表示形式,它足够灵活,可以像 NeRF 一样创建、破坏和位移几何图形。 这是通过优化不透明度和位置来实现的,同时避免了完整体积表示的缺点。

最近的一种方法使用点通过径向基函数方法来表示辐射场。 他们在优化过程中采用点修剪和致密化技术,但使用体积光线行进并且无法实现实时显示速率。
在人体表演捕捉领域,3D 高斯已被用来表示捕捉到的人体。最近,它们已与体积光线行进一起用于视觉任务。 神经体积基元已在类似的背景下被提出。 虽然这些方法启发了我们选择 3D 高斯作为我们的场景表示,但它们专注于重建和渲染单个孤立对象(人体或面部)的特定情况,从而产生深度复杂度较小的场景。 相比之下,我们对各向异性协方差的优化、交错优化/密度控制以及用于渲染的高效深度排序使我们能够处理完整、复杂的场景,包括室内和室外的背景,并且具有较大的深度复杂性。

输入是一组静态场景的图像,以及由 SfM校准的相应摄像机,这会产生稀疏点云作为副作用。 从这些点出发,我们创建了一组 3D 高斯(第 4 节),由位置(均值)、协方差矩阵和不透明度 𝛼 定义,这允许非常灵活的优化机制。 这会产生 3D 场景的相当紧凑的表示,部分原因是高度各向异性的体积片可用于紧凑地表示精细结构。 辐射场的方向外观分量(颜色)通过球谐函数 (SH) 表示。 我们的算法继续通过 3D 高斯参数的一系列优化步骤来创建辐射场表示(第 5 节),即位置、协方差、𝛼 和 SH 系数与高斯密度自适应控制的操作交织在一起。 我们方法效率的关键是我们基于图块的光栅化器(第 6 节),它允许各向异性图块的𝛼混合,通过快速排序尊重可见性顺序。 快速光栅化器还包括通过跟踪累积的 𝛼 值进行快速向后传递,并且对可以接收梯度的高斯数量没有限制。 我们的方法的概述如图 2 所示。

流程如图:
在这里插入图片描述
可微3d gaussian splatting

我们的目标是优化场景表示,从一组没有法线的稀疏 (SfM) 点开始,实现高质量的新颖视图合成。 为此,我们需要一个基元,它继承可微分体积表示的属性,同时是非结构化和显式的,以允许非常快速的渲染。 我们选择 3D 高斯,它是可微分的,可以轻松投影到 2D splats,从而允许快速𝛼混合进行渲染。
我们的表示与以前使用 2D 点的方法有相似之处 [Kopanas 等人。 2021 年; 一帆等人。 2019]并假设每个点都是一个具有法线的小平面圆。 鉴于 SfM 点极其稀疏,很难估计法线。 同样,从这样的估计中优化非常嘈杂的法线将非常具有挑战性。 相反,我们将几何体建模为一组不需要法线的 3D 高斯函数。 我们的高斯函数由世界空间中定义的完整 3D 协方差矩阵 Σ 定义 [Zwicker 等人,2017]。 2001a] 以点(平均值)𝜇 为中心:

在这里插入图片描述
在我们的混合过程中,该高斯乘以 𝛼。
然而,我们需要将 3D 高斯投影到 2D 进行渲染。 茨威克等人。 [2001a] 演示如何对图像空间进行投影。 给定观察变换 𝑊,相机坐标中的协方差矩阵 Σ ′ 如下:

在这里插入图片描述

其中 𝐽 是射影变换的仿射近似的雅可比行列式。 茨威克等人。 [2001a] 还表明,如果我们跳过 Σ ′ 的第三行和第三列,我们将获得一个具有相同结构和属性的 2×2 方差矩阵,就好像我们从具有法线的平面点开始一样,如之前的工作 [Kopanas et 等人。 2021]。

一种明显的方法是直接优化协方差矩阵 Σ 以获得表示辐射场的 3D 高斯分布。 然而,协方差矩阵仅在半正定时才具有物理意义。 为了优化所有参数,我们使用梯度下降,它不能轻易地被约束来产生这样的有效矩阵,并且更新步骤和梯度可以很容易地创建无效的协方差矩阵。
因此,我们选择了一种更直观、但同样具有表达能力的表示方式来进行优化。 3D 高斯的协方差矩阵 Σ 类似于描述椭球体的配置。 给定缩放矩阵𝑆和旋转矩阵𝑅,我们可以找到相应的Σ:

在这里插入图片描述
为了允许对这两个因素进行独立优化,我们将它们分开存储:用于缩放的 3D 向量 𝑠 和表示旋转的四元数 𝑞。 这些可以简单地转换为各自的矩阵并组合,确保标准化 𝑞 以获得有效的单位四元数。
为了避免训练过程中自动微分带来的巨大开销,我们显式地导出所有参数的梯度。 精确导数计算的详细信息在附录 A 中。各向异性协方差的这种表示(适合优化)允许我们优化 3D 高斯以适应捕获场景中不同形状的几何形状,从而产生相当紧凑的表示。 图 3 说明了这种情况。

在这里插入图片描述

通过 3D 高斯自适应密度控制进行优化

我们方法的核心是优化步骤,它创建一组密集的 3D 高斯函数,准确地表示自由视图合成的场景。 除了位置 𝑝、𝛼 和协方差 Σ 之外,我们还优化表示每个高斯颜色 𝑐 的 SH 系数,以正确捕获场景的依赖于视图的外观。 这些参数的优化与控制高斯密度的步骤交织在一起,以更好地表示场景。

优化

优化基于渲染的连续迭代并将生成的图像与数据集中的训练视图进行比较。 由于 3D 到 2D 投影的模糊性,几何图形不可避免地可能会被错误放置。 因此,我们的优化需要能够创建几何体,并且如果几何体定位不正确,还需要破坏或移动几何体。 3D 高斯协方差参数的质量对于表示的紧凑性至关重要,因为可以用少量大的各向异性高斯函数捕获大的均匀区域。

我们使用随机梯度下降技术进行优化,充分利用标准 GPU 加速框架,以及为某些操作添加自定义 CUDA 内核的能力。 特别是,我们的快速光栅化(参见第 6 节)对于优化的效率至关重要,因为它是优化的主要计算瓶颈。
我们对 𝛼 使用 sigmoid 激活函数将其限制在 [0 − 1) 范围内并获得平滑梯度,出于类似的原因,我们对协方差尺度使用指数激活函数。
我们将初始协方差矩阵估计为各向同性高斯矩阵,其轴等于到最近三个点的距离的平均值。 我们使用类似于 Plenoxels 的标准指数衰减调度技术,但仅适用于位置。 损失函数是 L 1 与 D-SSIM 项的结合:

在这里插入图片描述
高斯自适应控制

我们从 SfM 的初始稀疏点集开始,然后应用我们的方法自适应地控制单位体积 1 上高斯的数量及其密度,从而使我们能够从初始的稀疏高斯集变为更好地表示 场景,并具有正确的参数。 优化预热后(参见第 7.1 节),我们每 100 次迭代进行一次致密化,并删除任何本质上透明的高斯分布,即 𝛼 小于阈值 𝜖 𝛼 。 我们对高斯的自适应控制需要填充空白区域。 它专注于缺少几何特征的区域(“重建不足”),但也关注高斯覆盖场景中大面积的区域(通常对应于“过度重建”)。 我们观察到两者都有很大的视图空间位置梯度。 直观上,这可能是因为它们对应于尚未很好重建的区域,并且优化尝试移动高斯来纠正这一点。

由于这两种情况都是致密化的良好候选者,因此我们用高于阈值 𝜏 的视空间位置梯度的平均幅度来致密高斯,我们在测试中将其设置为 0.0002。

接下来我们将详细介绍该过程,如图 4 所示。

图 4.我们的自适应高斯致密化方案。 顶行(重建中):当小规模几何体(黑色轮廓)未被充分覆盖时,我们克隆相应的高斯。 底行(过度重建):如果小规模几何体由一个大的板表示,我们将其分成两部分。

在这里插入图片描述
对于重建区域中的小高斯,我们需要覆盖必须创建的新几何形状。 为此,最好通过简单地创建相同大小的副本并将其沿位置梯度的方向移动来克隆高斯。

另一方面,具有高方差的区域中的大高斯需要被分割成更小的高斯。 我们用两个新的高斯函数替换这些高斯函数,并将它们的尺度除以我们通过实验确定的系数 𝜙 = 1.6。 我们还通过使用原始 3D 高斯作为 PDF 进行采样来初始化它们的位置。

在第一种情况下,我们检测并处理增加系统总体积和高斯数量的需要,而在第二种情况下,我们保留总体积但增加高斯数量。 与其他体积表示类似,我们的优化可能会因靠近输入摄像机的浮动体而陷入困境; 在我们的例子中,这可能会导致高斯密度的不合理增加。 调节高斯数量增加的有效方法是每 𝑁 = 3000 次迭代将 𝛼 值设置为接近于零。 然后,优化会在需要时增加高斯的 𝛼,同时允许我们的剔除方法删除 𝛼 小于 𝜖 𝛼 的高斯,如上所述。 高斯可能会缩小或增长,并且与其他高斯有相当大的重叠,但我们会定期删除在世界空间中非常大的高斯以及在视空间中具有较大足迹的高斯。 该策略可以总体上很好地控制高斯总数。 我们模型中的高斯始终在欧几里得空间中保持原语; 与其他方法不同,我们不需要针对远距离或大高斯的空间压缩、扭曲或投影策略。

优化和致密化算法如下:

以colmap(sfm) 的稀疏点为起始, 调节高斯数量增加的有效方法是每 𝑁 = 3000 次迭代将 𝛼 值设置为接近于零。
然后,优化会在需要时增加高斯的 𝛼,同时允许我们的剔除方法删除 𝛼 小于 𝜖 𝛼 的高斯,如上所述。
高斯可能会缩小或增长,并且与其他高斯有相当大的重叠,但我们会定期删除在世界空间中非常大的高斯以及在视空间中具有较大足迹的高斯。
该策略可以总体上很好地控制高斯总数。 当小规模几何体未被充分覆盖时,我们克隆相应的高斯。
如果小规模几何体由一个大的板表示,我们将其分成两部分。

在这里插入图片描述

高斯快速可微光栅化器

我们的目标是实现快速整体渲染和快速排序,以允许近似 𝛼 混合(包括各向异性图片),并避免对先前工作中存在的可以接收梯度的图片数量进行硬性限制 [Lassner 和 Zollhofer 2021]。

为了实现这些目标,我们受最新软件光栅化方法 [Lassner 和 Zollhofer 2021] 的启发,为高斯图设计了一个基于图块的光栅化器,一次对整个图像的图元进行预排序,避免了对每个像素进行排序的开销,而这会阻碍之前的 𝛼-混合解决方案。 我们的快速光栅化器允许在任意数量的混合高斯上进行有效的反向传播,并且附加内存消耗低,每个像素只需要恒定的开销。 我们的光栅化管道是完全可微分的,并且考虑到 2D 投影(第 4 节)可以对各向异性 splats 进行光栅化,类似于以前的 2D splatting 方法。

我们的方法首先将屏幕分割成 16×16 块,然后根据视锥体和每个块剔除 3D 高斯。 具体来说,我们只保留与视锥体相交的置信区间为 99% 的高斯分布。 此外,我们使用保护带来简单地拒绝极端位置处的高斯分布(即那些均值接近近平面且远离视锥体的位置),因为计算它们的投影 2D 协方差将不稳定。 然后,我们根据每个高斯重叠的图块数量来实例化它们,并为每个实例分配一个结合了视图空间深度和图块 ID 的键。 然后,我们使用单个快速 GPU 基数排序根据这些键对高斯进行排序 [Merrill 和 Grimshaw 2010]。 请注意,没有额外的每像素点排序,并且混合是基于此初始排序执行的。 因此,我们的 𝛼 混合在某些配置中可以是近似的。 然而,当图块接近单个像素的大小时,这些近似值变得可以忽略不计。 我们发现这种选择极大地增强了训练和渲染性能,而不会在融合场景中产生可见的伪影。

对高斯进行排序后,我们通过识别第一个和最后一个映射到给定图块的深度排序条目来为每个图块生成一个列表。 对于光栅化,我们为每个图块启动一个线程块。 每个块首先协作地将高斯数据包加载到共享内存中,然后对于给定的像素,通过从前到后遍历列表来累积颜色和𝛼值,从而最大化数据加载/共享和处理的并行性增益。 当我们达到像素中的目标饱和度 𝛼 时,相应的线程就会停止。 每隔一段时间,就会查询图块中的线程,并且当所有像素都饱和时(即 𝛼 变为 1),整个图块的处理就会终止。 附录 C 中给出了排序的详细信息和总体光栅化方法的高级概述。

在光栅化过程中,𝛼的饱和度是唯一的停止标准。 与之前的工作相比,我们不限制接收梯度更新的混合基元的数量。 我们强制执行此属性,以允许我们的方法处理具有任意、不同深度复杂性的场景并准确地学习它们,而不必求助于特定于场景的超参数调整。 因此,在后向传递过程中,我们必须恢复前向传递中每个像素的混合点的完整序列。 一种解决方案是将每个像素的任意长混合点列表存储在全局内存中[Kopanas et al. 2021]。 为了避免隐含的动态内存管理开销,我们选择再次遍历 Pertile 列表; 我们可以重用前向传递中的高斯排序数组和平铺范围。 为了便于梯度计算,我们现在从后到前遍历它们。

遍历从影响图块中任何像素的最后一个点开始,并且将点加载到共享内存中再次协作发生。 此外,如果每个像素的深度低于或等于前向传递过程中对其颜色有贡献的最后一个点的深度,则每个像素只会开始(昂贵的)点重叠测试和处理。 第 4 节中描述的梯度计算需要原始混合过程中每个步骤的累积不透明度值。 我们可以通过在前向传递结束时仅存储累积的总不透明度来恢复这些中间不透明度,而不是在后向传递中遍历逐渐缩小的不透明度的显式列表。 具体来说,每个点存储的是前向过程中最终累积的不透明度𝛼; 我们在从后到前的遍历中将其除以每个点的𝛼,以获得梯度计算所需的系数。

优化细节。 为了稳定性,我们以较低的分辨率“预热”计算。 具体来说,我们使用 4 倍小的图像分辨率开始优化,并在 250 次和 500 次迭代后上采样两次。
SH 系数优化对角度信息的缺乏很敏感。 对于典型的“类似 NeRF”的捕捉,通过在其周围的整个半球拍摄的照片来观察中心物体,优化效果很好。 然而,如果捕获丢失了角度区域(例如,当捕获场景的角落或执行“由内而外”[Hedman et al. 2016]捕获时)SH 的零阶分量可以通过优化产生完全不正确的值( 即,基础颜色或漫反射颜色)。 为了克服这个问题,我们首先仅优化零阶分量,然后每 1000 次迭代后引入一个 SH 频带,直到表示所有 4 个 SH 频带。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

仅使用 Python 创建的 Web 应用程序(前端版本)第09章_购物车

在本章中,我们将实现购物车页面。 完成后的图像如下。 创建过程与之前相同,如下。 No分类内容1Model创建继承BaseDataModel的数据类Cart、CartItem2Service创建一个 CartAPIClient3Page定义PageId并创建继承自BasePage的页面类4Application将页面 ID 和页面类对添加到 Multi…

el-upload上传文件,如何使用action、auto-upload

1点击打开自动上传 没有 :auto-upload"false"就是自动上传 2点击上传按钮上传 不自动上传:auto-upload"false" <el-dialogstyle"background: rgb(18, 67, 112); border: 1px solid #409eff":title"上传文件":model-value"…

DS:单链表的实现(超详细!!)

创作不易&#xff0c;友友们点个三连吧&#xff01; 在博主的上一篇文章中&#xff0c;很详细地介绍了顺序表实现的过程以及如何去书写代码&#xff0c;如果没看过的友友们建议先去看看哦&#xff01; DS&#xff1a;顺序表的实现&#xff08;超详细&#xff01;&#xff01;&…

把批量M3U8网络视频地址转为MP4视频

在数字媒体时代&#xff0c;视频格式的转换已成为一项常见的需求。尤其对于那些经常处理网络视频的用户来说&#xff0c;将M3U8格式的视频转换为更常见的MP4格式是一项必备技能。幸运的是&#xff0c;现在有了固乔剪辑助手这款强大的工具&#xff0c;这一过程变得异常简单。下面…

linux 查看zookeeper server运行版本号

zookeeper版本查看运行命令&#xff1a;echo stat|nc localhost 2181 显示如下图所示&#xff1a; Zookeeper version: 3.4.5-cdh6.3.2--1, built on 11/08/2019 13:15 GMT Clients: /127.0.0.1:44814[0](queued0,recved1,sent0) Latency min/avg/max: 0/0/0 Received: 9 Se…

Linux——搭建FTP服务器

1、FTP简介 FTP(File Transfer Protocol) &#xff1a;是一种处于应用层的用于文件传输的协议。FTP客户端和FTP服务器之间的通信使用TCP/IP协议族。它规定了客户端和服务器之间的通信格式和命令集&#xff0c;包括用户认证、文件传输、文件名和目录信息等&#xff0c;允许用户…

专业133总分400+上海交通大学819考研经验分享上交819电子信息与通信工程

今年专业819信号系统与信号处理133&#xff0c;总分400&#xff0c;如愿考上梦中上海交通大学&#xff0c;通过自己将近一年的复习&#xff0c;实现了人生中目前为止最大的逆袭&#xff08;自己本科学校很普通&#xff09;&#xff0c;总结自己的复习经历&#xff0c;希望可以给…

时序预测 | MATLAB实现ICEEMDAN-SSA-GRU、ICEEMDAN-GRU、SSA-GRU、GRU时间序列预测对比

时序预测 | MATLAB实现ICEEMDAN-SSA-GRU、ICEEMDAN-GRU、SSA-GRU、GRU时间序列预测对比 目录 时序预测 | MATLAB实现ICEEMDAN-SSA-GRU、ICEEMDAN-GRU、SSA-GRU、GRU时间序列预测对比预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 时序预测 | MATLAB实现ICEEMDAN…

第七篇【传奇开心果】beeware的toga开发移动应用示例:gui工具包介绍和常用组件使用方法示例

传奇开心果博文系列 系列博文目录beeware的toga开发移动应用示例系列博文目录一、beeware和toga介绍二、Toga常用组件使用方法示例三、归纳总结系列博文目录 beeware的toga开发移动应用示例系列 博文目录 一、beeware和toga介绍 1.BeeWare介绍 BeeWare是一个可以让Python开…

C语言入门(二)、每日Linux(三)——gcc命令,通过gcc命令熟悉C语言程序实现的过程

使用gcc编译C语言程序 C语言程序实现的过程gcc命令基础用法常用选项编译和汇编选项&#xff1a;优化选项&#xff1a;调试选项&#xff1a;链接选项&#xff1a;警告选项&#xff1a; 实验对于-o选项 通过gcc命令熟悉C语言程序的执行过程1.预处理2.编译阶段3.汇编阶段4.链接阶段…

【Rose】用例图活动图绘制

绘制【Rose】用例图、活动图 文章目录 安装Rose后、画图前的准备工作绘制用例图为用例创建活动图描述用况 安装Rose后、画图前的准备工作 打开Rose&#xff0c;选择第一个J2EE就好。 渲染完的样子&#xff1a; 下面就可以开始画图了。✌✌ 绘制用例图 1、点击【Use Case V…

<蓝桥杯软件赛>零基础备赛20周--第18周--动态规划初步

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周。 在QQ群上交流答疑&am…

2024年【浙江省安全员-C证】考试题库及浙江省安全员-C证模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【浙江省安全员-C证】考试题库及浙江省安全员-C证模拟考试&#xff0c;包含浙江省安全员-C证考试题库答案和解析及浙江省安全员-C证模拟考试练习。安全生产模拟考试一点通结合国家浙江省安全员-C证考试最新大纲…

Vite+Electron快速构建一个VUE3桌面应用(一)

一. 简介 首先&#xff0c;介绍下vite和Electron。 Vite是一种新型前端构建工具&#xff0c;能够显著提升前端开发体验。Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入Chromium和Node.js到二进制的 Electron 允许您保持一个 JavaScript 代码代码…

Java 魔法类 Unsafe 详解

&#x1f345;文末获取联系&#x1f345; &#x1f447;&#x1f3fb; 精彩项目推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更…

短视频矩阵系统软件/电脑pc企业版/手机端双开发~~源头

短视频矩阵系统软件开发的属性主要包含以下几个方面&#xff1a; 开发属性&#xff1a; 1. 功能属性&#xff1a;功能是短视频矩阵系统的核心属性&#xff0c;包括短视频的采集、编辑、发布、推广、互动等功能。此外&#xff0c;系统的个性化定制也是考虑的重要因素&#xff0…

商品库存管理系统(C语言)

1 设计目的 让商家能够更方便地管理商品库存。 2 需求分析 用户能够实现对商品的入库、出库、删除、修改和查询等功能。 3 总体设计 商品库存管理系统存在以下模块&#xff0c;商品入库模块、商品出库模块、删除商品模块、修改商品模块、查询商品模块、显示商品模块。 4 详细…

linux中安装tomcat并启动运行web项目

在 Linux 中安装 Tomcat 并启动运行 Web 项目,您可以按照以下步骤进行操作: 1.下载和解压 Tomcat: 打开终端(Terminal)。 使用 wget 命令下载 Tomcat 压缩包。例如: wget https://downloads.apache.org/tomcat/tomcat-<version>/bin/apache-tomcat-<version&g…

ZK鉴权设计以及相关探讨

文章目录 1. zk的鉴权设计2. zk鉴权应用范围3. zk鉴权的常用方法4. 推荐配置5. 参考文档 鉴权&#xff0c;分别由鉴和权组成 鉴&#xff1a; 表示身份认证&#xff0c;认证相关用户是否存在以及相关的用户名和密码是否一致权&#xff1a; 完成身份的鉴后&#xff0c;还需要判断…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第六天-Linux文件系统(物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1VUc8cGI7bTtXuGepZZY3Ng?pwd1688 提取码&#xff1a;1688 上午&#xff1a;文件系统介绍 下午&#xff1a;文件系统的制作 教学内容&#xff1a; 在linux中文件分为二种&#xff1a; 根文件和普通文件&#xff1b; Linux以树状…