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

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

三个关键要素

  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.

相关文章:

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

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

二叉树<II>:二叉树的四种遍历方式代码实现Python3

今天我们来介绍的是二叉树的「前序」、「中序」、「后序」、「层序」四种遍历方式如何用代码实现。 还不知道这四种遍历方式原理的可以看另一篇文章:二叉树<I>:概念及二叉树的前序遍历、中序遍历、后序遍历原理 1. 相关题目 这…...

vite ts vue 项目提示 . Projects must list all files or use an include pattern.

vite ts vue 项目提示 . Projects must list all files or use an include pattern. 在引用一个 ts 的时候,提示如下: 需要在 tsconfig.node.json 文件中添加: {"compilerOptions": {"composite": true,"skipLibC…...

鲸鱼优化算法改进风储机组一次调频出力分配系数,以频率偏差最小为目标优化函数,结合鲸鱼算法WOA捕食过程,改进风储出力分配系数simulink与matlab联合

simulink与matlab联合 风机模糊控制 改善后的系统频率 simulink.采用风储联合数学模型...

C语言经典面试题目(七)

1、C语言中如何进行内存对齐和字节对齐? 在C语言中,内存对齐和字节对齐是为了优化内存访问速度和提高系统性能而进行的一种策略。内存对齐是指数据在内存中的存放位置必须是某个值的倍数,通常是数据类型的大小。字节对齐是指数据在内存中的存…...

2024华为春招Django面试题大全,最全知识点揭秘,面试必备!

为了帮助广大求职者更好地准备即将到来的面试,本文精心编撰了一系列涵盖InnoDB存储引擎关键知识点的面试题。这些问题不仅覆盖了InnoDB的基础知识,如其ACID特性、索引设计、锁机制等,还涵盖了性能优化、备份恢复策略等高级话题,旨…...

搜维尔科技:使用SenseGlove Nova手套操纵其“CAVE”投影室中的虚拟对象

创造了一种基于 PC 的创新型多边沉浸式环境,让参与者完全被虚拟图像和声音包围。 需要解决的挑战: 传统的 VR 系统往往缺乏真实的触摸反馈,限制了用户的沉浸感。AVR Japan 旨在通过将触觉技术融入到他们的 CAVE 系统中来应对这一挑战&#x…...

独立服务器的优势

独立服务器的优势 高性能 独立服务器提供了卓越的性能,因为它们不与其他用户共享资源。这使得您的网站或应用程序能够快速响应访问请求,并处理大量数据。 安全性 由于没有其他租户在同一服务器上,独立服务器的安全性更高。您可以更好地控制…...

前端框架vue的样式操作,以及vue提供的属性功能应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

【自动化测试】如何在jenkins中搭建allure

相信大家在做自动化测试过程中,都会用到自动化测试环境,目前最常见的就是通过容器化方式部署自动化测试环境,但对于一些测试小白,不是很会搭建持续集成环境,特别是从0-1的过程,需要自行搭建很多依赖环境&am…...

2.域控如何强制转移操作主机角色?使用命令如何强制转移域控的操作角色?

1.实验环境介绍 实验1:模拟5种操作主机都在DC01上的域控宕机了 (1)实验先决条件 (2)测试的方向 实验2:域控夺权实验操作 方式1:AD用户和计算机工具转移操作主机角色 (1)RID角色转移: (2)PDC角色转移 (3)基础结构操作主机角色转移 方式2:powshell命令强制…...

C# event的使用

在C#中,事件(Event)是一种特殊的成员,它允许类或对象以类型安全的方式向外界发出通知,表明某个特定的行为或状态变化已经发生。 订阅该事件的其他类可以定义处理方法来响应这些通知。 事件主要基于委托机制实现&…...

外包干了9天,技术退步明显。。。。。

先说一下自己的情况,本科生,2018年我通过校招踏入了南京一家软件公司,开始了我的职业生涯。那时的我,满怀热血和憧憬,期待着在这个行业中闯出一片天地。然而,随着时间的推移,我发现自己逐渐陷入…...

Android Framework 之 Python

当然可以,我会尽量提供更详细的内容,并增加更多的例子和解释。以下是更详细的Python语言教程: Python语言教程 一、Python简介 Python是一种高级编程语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于…...

【Fitten Code】“吊打“Github Copilot的国内免费代码辅助插件

🌻个人主页:相洋同学 🥇学习在于行动、总结和坚持,共勉! 目录 1.Github Copilot 2.Fitten Code 2.1 对话体验: 2.2 代码补全体验: 2.3 Pycharm安装方法: 2.4 Vscode安装方法…...

Git中的换行符CRLF和LF问题

目录 第一章、问题分析1.1)Git报错提示1.2)报错分析 第二章、解决方式2.1)在Windows上开发并需要与Unix或macOS上的开发人员协作2.1)在Unix或macOS开发并需要与Windows上的开发人员协作2.3)不需要与其他操作系统的开发…...

go语言文件操作

标准流的操作 从标准输入中查找重复的行 // 从标准输入中查找重复的行 func main() {counts : make(map[string]int, 0)scanner : bufio.NewScanner(os.Stdin) for scanner.Scan() {counts[scanner.Text()]}for key, value : range counts {if value > 1 {fmt.Println(&quo…...

七月论文审稿GPT第3.2版和第3.5版:通过paper-review数据集分别微调Mistral、gemma

前言 我司第二项目组一直在迭代论文审稿GPT(对应的第二项目组成员除我之外,包括:阿荀、阿李、鸿飞、文弱等人),比如 七月论文审稿GPT第1版:通过3万多篇paper和10多万的review数据微调RWKV七月论文审稿GPT第2版:用一万…...

QML 自定义时间编辑控件

一.展示效果 qml自定义时间编辑控件 二.主界面调用 //main.qml import QtQuick 2.12 import QtQuick.Controls 2.5 import QtQuick.Window 2.12 import "./qml"Window {visible: truewidth: 400height: 300title: qsTr("Hello World")property date origi…...

后端程序员入门react笔记(八)-redux的使用和项目搭建

一个更好用的文档 添加链接描述 箭头函数的简化 //简化前 function countIncreAction(data) {return {type:"INCREMENT",data} } //简化后 const countIncreAction data>({type:"INCREMENT",data })react UI组件库相关资料 组件库连接和推荐 antd组…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...

倒装芯片凸点成型工艺

UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域&#xff…...

aardio 自动识别验证码输入

技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...

DAY 45 超大力王爱学Python

来自超大力王的友情提示:在用tensordoard的时候一定一定要用绝对位置,例如:tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾: tensorboard的发展历史和原理tens…...