3D Gaussian Splatting for Real-Time Radiance Field Rendering(慢慢啃,还是挺复杂的)

news2024/11/26 4:51:43

三个关键要素

  1. 从相机配准的过程中得到的稀疏点云开始,使用3D Gaussian表示场景; 3D Gaussian: 是连续体积辐射场能够防止不必要的空空间优化。
  2. 对 3D Gaussion进行交叉优化和密度控制: 优化各向异性血方差对场景精确表示。
  3. 使用快速可视感知渲染算法来进行快速的训练和渲染。

在这里插入图片描述

Differentiable 3D Gaussian Splitting

  • 表示方法和[1][2]有相似性,同时假设每一个点有一个带法线的平面圆。
  • 由于SFM得到的点非常稀疏,很难估计法线,因此,我们建模我们的几何结构为一组不需要法线的3D高斯。定义为一个定义在世界空间的全3D协方差矩阵(3D coveriance matrix) Σ \Sigma Σ,中心在点 μ \mu μ(mean):
    G ( x ) = e − 1 2 ( x ) T Σ − 1 ( x ) G(x) = e^{- \frac{1}{2}(x)^T\Sigma^{-1}(x)} G(x)=e21(x)TΣ1(x)
  • 我们为了渲染需要将3D高斯投影到2D。给一个视角转换W,对应的在相机坐标系下协方差矩阵 Σ ′ \Sigma' Σ为:
    Σ ′ = J W Σ W T J T \Sigma' = JW\Sigma W^TJ^T Σ=JWΣWTJT, J是投影变换的仿射近似雅可比矩阵。
  • 直观的想法是直接优化协方差矩阵 Σ \Sigma Σ获得3D高斯代表辐射场。但是,协方差矩阵只有在半正定时才有物理意义。

    协方差矩阵的物理意义在于它反映了变量之间的关联程度。如果协方差矩阵是半正定的,这意味着其中任何一个向量与自身的内积(即方差)都是非负的。这种情况下,变量之间的关系是一种相对“稳定”的关系,其中一个变量的增加往往会伴随着另一个变量的增加或减少,而且这种关系的变化程度是可控的。

  • 所以我们选择把协方差矩阵等效为一个椭球的构型。给出尺度矩阵S和旋转矩阵R,我们可以找到 Σ = R S S T R T \Sigma = RSS^TR^T Σ=RSSTRT.
  • 为了能够独立优化这些参数,我们将其分开存储:一个3D向量s表示尺度,一个四元数q表示旋转。

Optimization with Adaptive Density Control of 3D Gaussians

  • 除了位置p, α \alpha α和协方差 Σ \Sigma Σ以外,我们还优化每个高斯颜色c的SH系数。

Optimization

  • 该优化是基于连续的渲染迭代,并将生成的图像与捕获的数据集中的训练视图进行比较。
  • 由于几何可能被不正确地从2D到3D预测,所以优化过程需要对几何进行创造或毁灭。
  • 我们将初始协方差矩阵(initial covariance matrix)估计为各向同性(isotropic)高斯矩阵,其轴等于到最近三个点的距离的平均值。

Adaptive Control of Gaussians

  • 我们从SfM的初始化稀疏点开始,应用我们的方法自适应控制单位体积上高斯的数量和密度。优化预热后,每100次迭代进行一次致密化,删除任何本质上透明( α \alpha α小于阈值)的高斯分布。
  • 我们对高斯的自适应控制需要填充空白区域。 它重点关注缺少几何特征的区域(“under-Reconstruction”),但也关注高斯覆盖场景中大面积的区域(“over-reconstruction”)。 我们观察到两者都有很大的视图空间位置梯度( large view-space positional gradients)。 直观上,这可能是因为它们对应于尚未很好重建的区域,并且优化尝试移动高斯来纠正这一点。
  • 两种情况都是致密化的候选。我们用视野空间位置梯度(view-space position
    gradients)的平均幅度超过高斯 τ p o s \tau_{pos} τpos,在我们的测试中将其设置为0.0002。
  • Under Reconstruction: 对于重建区域中的小高斯,我们需要覆盖必须创建的新几何形状。 为此,最好通过简单地创建相同大小的副本并将其沿位置梯度的方向移动来克隆高斯
  • Over Reconstruction 具有高方差的区域中的大高斯需要被分割成更小的高斯。 我们用两个新的高斯函数替换这些高斯函数,并将它们的尺度除以我们通过实验确定的系数 ϕ \phi ϕ = 1.6。 我们还通过使用原始 3D 高斯作为 PDF 进行采样来初始化它们的位置。
    在这里插入图片描述
  • 与其他体积表示类似,我们的优化可能会被靠近输入摄像机的漂浮物卡住;在我们的例子中,这可能会导致高斯密度的不合理的增加
  • 解决这个问题的有效方法是每N = 3000次迭代后将 α \alpha α设为接近0。然后增加 α \alpha α,开始剔除透明的高斯。

Fast Differentiable Rasterizer(栅格化) for Gaussians

  • 我们的目标是有快速的整体渲染和快速的排序,以允许近似的𝛼混合( α \alpha α-blending)(包括各向异性飞溅),并防止硬限制能收到梯度的飞溅数量。
  • 为了达成目标,我们设计了一个基于图块的高斯溅射光栅器。其灵感来自最近的软件光栅化方法,一次对整个图像进行预排序图元,避免了阻碍以前 α \alpha α-blending解决方案的每个像素排序的花费。
  • 我们的方法首先将幕布溅射成 16 × 16 16\times16 16×16的块,然后继续针对视锥体和每个图块剔除 3D 高。具体来说,我们只保留与视锥体相交的置信区间为 99% 的高斯分布。
  • 此外,我们使用保护带来简单地拒绝极端位置处的高斯分布(即均值接近近平面且远离视锥体的位置),因为计算它们的投影 2D 协方差将不稳定。
  • 然后,我们根据重叠的图块数量实例化每个高斯,并为每个实例分配一个结合视图空间深度和图块 ID 的键。
  • 然后,我们使用单个快速 GPU 基数排序根据这些键对高斯进行排序。
  • 然而,当图块接近单个像素的大小时,这些近似值变得可以忽略不计。 我们发现这种选择极大地增强了训练和渲染性能,而不会在融合场景中产生可见的伪影。
  • 对高斯进行排序后,我们通过识别第一个和最后一个映射到给定图块的深度(depth)排序条目来为每个图块生成一个列表。 对于光栅化,我们为每个图块启动一个线程块。 每个块首先协作地将高斯数据包加载到共享内存中,然后对于给定的像素,通过从前到后遍历列表来累积颜色和𝛼值,从而最大化数据加载/共享和处理的并行性增益。 当我们达到像素中的目标饱和度(saturation) 𝛼 时,相应的线程就会停止。 每隔一段时间,就会查询图块中的线程,并且当所有像素都饱和时(即 𝛼 变为 1),整个图块的处理就会终止。
  • 在光栅化过程中,𝛼的饱和度是唯一的停止标准。 与之前的工作相比,我们不限制接收梯度更新的混合基元的数量。 我们强制执行此属性,以允许我们的方法处理具有任意、不同深度复杂性的场景并准确地学习它们,而不必求助于特定于场景的超参数调整。 因此,在后向传递过程中,我们必须恢复前向传递中每个像素的混合点的完整序列。 一种解决方案是将每个像素的任意长混合点列表存储在全局内存中[Kopanas et al. 2021]。 为了避免隐含的动态内存管理开销,我们选择再次遍历每个图块列表; 我们可以重用前向传递中的高斯排序数组和平铺范围。 为了便于梯度计算,我们现在从后到前遍历它们。
  • 遍历从影响图块中任何像素的最后一个点开始,并且将点加载到共享内存中再次协作发生。 此外,如果每个像素的深度低于或等于前向传递过程中对其颜色有贡献的最后一个点的深度,则每个像素只会开始(昂贵的)点重叠测试和处理。 第 2 节中描述的梯度计算。 4 需要原始混合过程中每个步骤的累积不透明度值。 我们可以通过在前向传递结束时仅存储累积的总不透明度来恢复这些中间不透明度,而不是在后向传递中遍历逐渐缩小的不透明度的显式列表。 具体来说,每个点存储的是前向过程中最终累积的不透明度𝛼; 我们在从后到前的遍历中将其除以每个点的𝛼,以获得梯度计算所需的系数。

Reference

[1] Georgios Kopanas, Julien Philip, Thomas Leimkühler, and George Drettakis. 2021. Point-Based Neural Rendering with Per-View Optimization. Computer Graphics Forum 40, 4 (2021), 29–43. https://doi.org/10.1111/cgf.14339.
[2] Wang Yifan, Felice Serena, Shihao Wu, Cengiz Öztireli, and Olga Sorkine-Hornung.
2019. Differentiable surface splatting for point-based geometry processing. ACM
Transactions on Graphics (TOG) 38, 6 (2019), 1–14.

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

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

相关文章

InnoDB和MyISAM存储引擎

InnoDB mysql默认存储引擎 支持事务,行级锁(并发量大),外键约束,容量大,支持缓存,支撑主键自增, 全文检索,不存储表的总行数,需要sql逐行统计 MyISAM 不…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:RemoteWindow)

远程控制窗口组件,可以通过此组件控制应用窗口,提供启动退出过程中控件动画和应用窗口联动动画的能力。 说明: 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 该组件为系统接口。…

k8s+zabbix

一,环境: 1),k8s部署,master和node节点都部署成功 二,部署: 1),安装python3(资源中有) wget https://www.python.org/ftp/python/3.7.4/Python-…

【Mysql】事务与索引

目录 MySQL事务 事务的特性 并发事务的问题? 事务隔离级别? MySQL索引 数据结构 索引类型 聚簇索引与非聚簇索引 聚集索引的优点 聚集索引的缺点 非聚集索引的优点 非聚集索引的缺点 非聚集索引一定回表查询吗(覆盖索引)? 覆盖索引 联合索…

传输层协议介绍(tcp,udp),可靠性和不可靠性

目录 传输层协议 介绍 tcp协议 介绍 面向连接 可靠性 面向字节流 udp协议 介绍 无连接 不可靠 面向数据报 可靠和不可靠 可靠 不可靠 传输层协议 介绍 传输层是计算机网络体系结构中的第四层,它负责在网络中的不同主机之间提供端到端的数据传输 传输…

Web 常用的 扩展开发框架

当谈到提升浏览器功能和用户体验时,浏览器扩展成了一股强大的力量,备受用户青睐。在众多的Web扩展开发框架中,WXT和Plasmo凭借其丰富的工具和特性,以及简化的开发流程,成为开发者们的首选。在本文中,我们将…

基于 Jenkins 搭建一套 CI/CD 系统

一、CI/CD环境介绍 本次要实现如下效果,开发人员完成功能开发并提交代码到gitlab仓库,jenkins自动完成拉取代码、编译构建、代码扫描(sonarqube)、打包,再自动化完成部署到Tomcat服务器提供访问。 环境准备三台Centos…

jupyter 修改文件保存位置 步骤

一、找到配置文件位置 打开Anaconda Prompt,输入: jupyter notebook --generate-config 根据得到的路径,以记事本方式打开配置文件 二、修改路径 在文件中输入: c.NotebookApp.notebook_dir E:\\deepLearning\\Jupyter_files…

离线下载的pytorch/torchvision/torchaudio

链接:https://download.pytorch.org/whl/torch_stable.html 下载pytorch-torchvision-torchaudio等一系列一定要版本匹配,并且如果是在gpu上跑的话,一定要都是cu版本 参考链接:https://blog.csdn.net/AiTanXiing/article/detail…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的输电线路设备检测系统(深度学习+UI界面+Python代码+训练数据集)

摘要:本篇博客详细介绍了如何运用深度学习构建一个先进的输电线路设备检测系统,并附上了完整的实现代码。该系统利用了最新的YOLOv8算法作为其核心,同时也对之前版本的YOLOv7、YOLOv6、YOLOv5进行了性能比较,包括但不限于mAP&…

如何解决由触发器导致 MySQL 内存溢出?

由触发器导致得 OOM 案例分析过程和解决方式。 作者:龚唐杰,爱可生 DBA 团队成员,主要负责 MySQL 技术支持,擅长 MySQL、PG、国产数据库。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编…

为什么要有包装类?

1、典型回答 在 Java 中,所有的基本类型都会对应一个包装类,如下所示: 之所以要有包装类型的主要原因有以下几个: 面向对象要求:Java 是一门面向对象的编程语言,要求所有的数据都应该是对象。但是&#x…

【递归搜索回溯专栏】专题二:二叉树中的深搜----二叉搜索树中第K小的元素

本专栏内容为:递归,搜索与回溯算法专栏。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:递归搜索回溯专栏 🚚代码仓库:小小unicorn的代…

数据库三大范式设计原则

数据库三大范式 第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。 第二范式(确保表中的每列都和主键相关) 第二范式在第一范式的基础之上更进一层。第二范式需要确保数据…

基于ARMA-GARCH模型探究股价的日历效应和节假日效应【思路+代码】

目录 1. 模型定义1.1 ARMA-GARCH模型1.2 引入节假日效应的虚拟变量的新模型1.3 引入日历效应的虚拟变量的新模型 2. 实证部分2.1 准备工作2.2 引入节假日效应虚拟变量的模型建立和结果分析2.3 引入节假日效应和日历效应的虚拟变量的模型建立和结果分析 3. 结语 本文介绍了ARMA-…

Ubuntu18.04 安装搜狗输入法

一. 概述 自己的Ubuntu 18.04系统配置中文搜狗输入法,安装步骤,亲测可用 二. 安装步骤 2.1 确认系统版本和CPU架构 查看Ubuntu系统版本号,通过命令 lsb_release -a wuubuntume:~$ lsb_release -a No LSB modules are available. Distr…

【全志H616】-2 写一个自己的串口

【全志H616】-2 写一个自己的串口 1、基本命令 重启 sudo rebootLinux系统下一个文件夹的文件复制到另一个文件夹下 cp flags.c /home/user05/lab09/flags_revised.c //复制当前文件夹下的 flags.c 文件到 lab09 文件夹下flags_recised.c 文件cp oled_demo.c /home/orangep…

【网络安全】专栏文章索引

为了方便 快速定位 和 便于文章间的相互引用等 作为一个快速准确的导航工具 网络安全 目录: (一) (二) (三) (四)

苍穹外卖中新增员工的功能是如何实现的?再复习下项目结构

一、Common、Pojo、Server分别都是干啥的? 在一个典型的Java应用程序中,通常会使用模块化的方式来组织代码,以提高代码的可维护性和可扩展性。常见的模块包括Common模块、POJO模块和Server模块,它们通常各自负责不同的功能。 Com…

Java项目源码基于springboot的家政服务平台的设计与实现

大家好我是程序员阿存,在java圈的辛苦码农。辛辛苦苦板砖,今天要和大家聊的是一款Java项目源码基于springboot的家政服务平台的设计与实现,项目源码以及部署相关请联系存哥,文末附上联系信息 。 项目源码:Java基于spr…