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 次迭代将 𝛼 值设置为接近于零。 然后,优化会在需要时增加高斯的 𝛼,同时允许我们的剔除方法删除 𝛼 小于 𝜖 𝛼 的高斯,如上所述。 高斯可能会缩小或增长,并且与其他高斯有相当大的重叠,但我们会定期删除在世界空间中非常大的高斯以及在视空间中具有较大足迹的高斯。 该策略可以总体上很好地控制高斯总数。 我们模型中的高斯始终在欧几里得空间中保持原语; 与其他方法不同,我们不需要针对远距离或大高斯的空间压缩、扭曲或投影策略。

高斯快速可微光栅化器

我们的目标是实现快速整体渲染和快速排序,以允许近似 𝛼 混合(包括各向异性图片),并避免对先前工作中存在的可以接收梯度的图片数量进行硬性限制 [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.rhkb.cn/news/243993.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】二叉树算法讲解(定义+算法原理+源码)

博主介绍:✌全网粉丝喜爱、前后端领域优质创作者、本质互联网精神、坚持优质作品共享、掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战✌有需要可以联系作者我哦! 🍅附上相关C语言版源码讲解🍅 &#x1f44…

暴力破解常见的服务器

目录 使用 pydictor 生成自己的字典工具liunx下载使用常用的参数说明插件型字典 (可自己根据 API 文档开发) 使用 hydra 工具在线破解系统用户密码使用 hydra 破解 windows 7 远程桌面密码使用 hydra 工具破解 ssh 服务 root 用户密码 使用 Medusa 工具在线破解medusa参数说明M…

NetSuite 文心一言(Ernie)的AI应用

有个故事,松下幸之助小时候所处的年代是明治维新之后,大量引用西洋技术的时期。当时大家对“电”能干什么事,充满好奇。“电能干什么?它能帮我们开门么?” 松下幸之助的爷爷对电不屑,于是就问他。松下幸之助…

设计模式—行为型模式之观察者模式

设计模式—行为型模式之观察者模式 观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅(Publish/Subscribe&#…

Vue-33、Vue中为什么使用render函数

1、main.js //该文件是整个项目的入口文件 //引入Vue import Vue from vue //引入APP组件,他是所有组件的父组件 import App from ./App.vue //关闭Vue是生产提示 Vue.config.productionTip false; //创建Vue实例对象---vm new Vue({render: h > h(App), }).$m…

C#winform上位机开发学习笔记7-串口助手的波特率参数设置功能添加

1.功能描述 上位机与下位机进行通讯时需要用到波特率设置功能,以及尝试与下位机实体进行通讯。 2.代码部分 步骤1:串口开启按钮事件中添加代码 serialPort1.BaudRate Convert.ToInt32(comboBox14.Text, 10);//将十进制的文本转换为32位整型赋值给串…

RK3568 android11 移植 v4l2loopback 虚拟摄像头

一,v4l2loopback 简介 v4l2loopback是一个Linux内核模块,它允许用户创建虚拟视频设备。这种虚拟视频设备可以用于各种用途,例如将实际摄像头的视频流复制到虚拟设备上,或者用于视频流的处理和分析等。v4l2loopback的主要作用是创…

WordPress后台底部版权信息“感谢使用 WordPress 进行创作”和版本号怎么修改或删除?

不知道各位WordPress站长在后台操作时,是否有注意到每一个页面底部左侧都有一个“感谢使用 WordPress 进行创作。”,其中WordPress还是带有nofollow标签的链接;而页面底部右侧都有一个WordPress版本号,如下图中的“6.4.2 版本”。…

[设计模式Java实现附plantuml源码~创建型] 对象的克隆~原型模式

前言: 为什么之前写过Golang 版的设计模式,还在重新写Java 版? 答:因为对于我而言,当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言,更适合用于学习设计模式。 为什么类图要附上uml 因为很…

【GitHub项目推荐--Git 教程】【转载】

本开源项目是 Will 保哥在 2013 第 6 界 IT 邦帮忙铁人赛年度大奖的得奖著作。这是一个 Git 教程,这个开源教程用 30 天的时间,带领大家详细了解使用 Git 。 重点介绍了 Git 的一些常用操作,以及日常工作中实际应用场景讲解,下图…

docker里Java服务执行ping命令模拟流式输出

文章目录 业务场景处理解决实现ping功能并实时返回输出实现长ping和中断请求docker容器找不到ping命令处理 业务场景 我们某市的客户,一直使用CS版本的信控平台,直接安装客户Windows server服务器上,主要对信号机设备进行在线管理、方案配时…

5118优惠码vip、svip、专业版和旗舰版使用yhm666

5118大数据平台会员优惠码【yhm666】,结算时勾选“使用优惠码”,然后在优惠码窗口中输入yhm666,然后点确定即可享受特价会员价格。阿腾云atengyun.com分享如下图: 5118会员优惠码【yhm666】 5118会员价格和使用优惠码之后的价格对…

【UE5】第一次尝试项目转插件(Plugin)的时候,无法编译

VS显示100条左右的错误,UE热编译也不能通过。原因可能是[名字.Build.cs]文件的错误,缺少一些内容,比如说如果要写UserWidget类,那么就要在 ]名字.Build.cs] 中加入如下内容: public class beibaoxitong : ModuleRules …

Minio 判断对象是否存在

引 Minio数据模型 中描述了 MinIO 中什么是桶,什么是对象,也给出了操作桶和操作对象的API。 在 MinIO 中, 对象 中间前缀 对象名称 。如何判定对象是否存在呢? 分析 在 MinIO 中并没有提供判断对象是否存在的操作&#xff…

2024年上海高考数学最后四个多月的备考攻略,目标140+

亲爱的同学们,寒假已经来临,春节即将到来,距离2024年上海高考已经余额不足5个月了。作为让许多学子头疼,也是拉分大户的数学科目,你准备好了吗?今天,六分成长为您分享上海高考数学最后四个多月的…

内网安全管理系统(保密管理系统)

在当今信息化的时代,企业的内网已经成为其核心资产的重要组成部分。 随着企业的快速发展和信息化程度的提升,内网安全问题日益凸显,如何保障内网的安全和机密信息的保密性,已经成为企业亟待解决的问题。 内网安全管理系统(保密管…

性能优化(CPU优化技术)-NEON 介绍

「发表于知乎专栏《移动端算法优化》」 本节主要介绍基本 SIMD 及其他的指令流与数据流的处理方式,NEON 的基本原理、指令以及与其他平台及硬件的对比。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:…

Java面试题之基础篇

文章目录 一:谈谈你对面向对象的理解二:JDK、JRE、JVM三者区别和联系三:和equals比较四:hashCode与equals五:final六:String、StringBuffer、StringBuilder七:重载与重写的区别?八&a…

网络安全的概述

网络空间的概念 2003年美国提出网络空间的概念:一个由信息基础设施组成的互相依赖的网络。 我国官方文件定义:网络空间为继海,陆,空,天以外的第五大人类活动领域 网络安全发展历史 通信保密阶段 --- 计算机安全阶段…

MySQL中SELECT字句的顺序以及具体使用

目录 1.SELECT字句及其顺序 2.使用方法举例 3.HAVING和WHERE 1.SELECT字句及其顺序 *下表来自于图灵程序设计丛书,数据库系列——《SQL必知必会》 2.使用方法举例 *题目来源于牛客网 题目描述 现在运营想要查看不同大学的用户平均发帖情况,并期望结…