【论文笔记】3D Gaussian Splatting for Real-Time Radiance Field Rendering
原文链接:https://arxiv.org/abs/2308.04079
1. 引言
网孔和点是最常见的3D场景表达,因其是显式的且适合基于GPU/CUDA的快速栅格化。神经辐射场(NeRF)则建立连续的场景表达便于优化,但渲染时的随机采样耗时且引入噪声。本文的方法结合了上述两种方法的优点:使用3D高斯表达和基于tile的溅射,能实时地渲染高质量高分辨率图像。
首先建立3D高斯表达场景。从使用运动恢复结构(SfM)方法校准的相机出发,使用SfM过程中产生的稀疏点云初始化3D高斯集合。即使使用随机初始化,本文的方法也能达到高质量图像合成。3D高斯是可微体积表达,且可以通过投影到2D、并使用标准的 α \alpha α混合,使用NeRF一样的图像形成模型来实现高效栅格化。然后,优化的对象是3D高斯的属性:3D位置、不透明度 α \alpha α、各向异性协方差和球面谐波(SH)系数。该优化与自适应密度控制步骤(添加并偶尔移除3D高斯)交错进行。最后,使用快速GPU排序算法和基于tile的栅格化进行实时渲染。归因于排序和 α \alpha α混合,使用3D高斯表达能进行保留可见性顺序的各向异性溅射,且可通过跟踪尽可能多的排序后的溅射轨迹来实现快速而精确的反向传播。
2. 相关工作
基于点的 α \alpha α混合和NeRF体积渲染有相同的图像形成模型。NeRF的色彩 C C C由沿射线的体积渲染得到:
C = ∑ i = 1 N T i α i c i , α i = 1 − exp ( − σ i δ i ) , , T i = exp ( − ∑ j = 1 i − 1 σ j δ j ) = ∏ j = 1 j − 1 ( 1 − α j ) C=\sum_{i=1}^NT_i\alpha_ic_i,\alpha_i=1-\exp(-\sigma_i\delta_i),,T_i=\exp(-\sum_{j=1}^{i-1}\sigma_j\delta_j)=\prod_{j=1}^{j-1}(1-\alpha_j) C=i=1∑NTiαici,αi=1−exp(−σiδi),,Ti=exp(−j=1∑i−1σjδj)=j=1∏j−1(1−αj)
而典型的基于点的方法通过混合与像素重叠的 N N N个有序点来计算 C C C:
C = ∑ i = 1 N c i α i ∏ j = 1 j − 1 ( 1 − α j ) C=\sum_{i=1}^Nc_i\alpha_i\prod_{j=1}^{j-1}(1-\alpha_j) C=i=1∑Nciαij=1∏j−1(1−αj)其中 α i \alpha_i αi为协方差为 Σ \Sigma Σ的2D高斯与学习到的各点不透明度之积。
3. 总览
本文方法如下图所示。本文方法的输入为静态场景的图像,和通过SfM校准的相机(校准同时产生稀疏点云)。从这些点生成3D高斯集合,每个高斯由位置(均值)、协方差矩阵和不透明度 α \alpha α定义,以实现3D场景的紧凑表达。辐射场的方向性外观分量(色彩)通过球面谐波表达。通过交替进行3D高斯参数优化和自适应高斯密度控制,建立神经场表达。本文方法高效的关键是基于tile的栅格化,允许各向异性溅射的 α \alpha α混合,并通过快速排序保留可视顺序。通过跟踪积累的 α \alpha α值,可以在不限制接收梯度的高斯数量的情况下快速反向传播。
4. 可微3D高斯溅射
需要继承可微体积表达的优势,且同时满足非结构化和显式表达的条件以进行快速渲染。本文选择3D高斯,其可微且易于投影为2D溅射,从而进行快速的 α \alpha α混合。
设世界坐标系下的3D高斯中心点(均值)为 μ \mu μ,完全3D协方差矩阵为 Σ \Sigma Σ:
G ( x ) = e − 1 2 x T Σ − 1 x G(x)=e^{-\frac{1}{2}x^T\Sigma^{-1}x} G(x)=e−21xTΣ−1x在混合时该高斯会乘以 α \alpha α。
渲染时,需要将3D高斯投影到2D。给定视角变换 W W W,相机坐标系下的协方差矩阵 Σ ′ \Sigma' Σ′为
Σ ′ = J W Σ W T J T \Sigma'=JW\Sigma W^TJ^T Σ′=JWΣWTJT其中 J J J为投影变换仿射近似的雅可比矩阵。
直接优化3D高斯协方差不可行,因为协方差矩阵仅当在半正定情况下有意义,而对所有元素进行梯度下降的优化不能保证这个条件。因此,本文使用另一方法,将协方差矩阵分解为缩放矩阵 S S S和旋转矩阵 R R R:
Σ = R S S T R T \Sigma=RSS^TR^T Σ=RSSTRT将 S S S表达为3D向量 s s s, R R R表达为四元数 q q q,这样只需通过归一化保证 q q q满足单位四元数的条件。
此外,为避免自动计算梯度带来额外开销,本文还推导了所有参数显式的梯度(见附录A)。
5. 3D高斯的优化和自适应密度控制
除了位置 p , α p,\alpha p,α和协方差 Σ \Sigma Σ,本文还优化表达高斯色彩 c c c的球面谐波(SH)系数,以捕捉场景视角相关的外观。参数优化和高斯的密度控制交替进行,以更好地表达场景。
5.1 优化
本文使用随机梯度下降,利用标准GPU加速框架,并为某些操作添加自定义CUDA核。对 α \alpha α使用sigmoid函数使其限制在 [ 0 , 1 ) [0,1) [0,1)内,对协方差的缩放因数使用指数激活函数以保证光滑梯度。
将协方差初始化为各向同性高斯,其轴线长度与最近3点的距离均值相同。对高斯的位置使用标准的指数衰减调度技术。损失函数为 L 1 L_1 L1损失和D-SSIM项:
L = ( 1 − λ ) L 1 + λ L D-SSIM \mathcal{L}=(1-\lambda)\mathcal{L}_1+\lambda\mathcal{L}_\text{D-SSIM} L=(1−λ)L1+λLD-SSIM
5.2 高斯的自适应控制
从初始SfM点集开始,逐渐密集化高斯以更好地表达场景。本文在优化热启动后,每隔一定迭代次数就密集化高斯,同时移除 α \alpha α值小于阈值 ϵ α \epsilon_\alpha ϵα的透明高斯。
高斯的自适应控制需要填充空白区域。该操作关注缺失几何特征的区域(欠重建)和高斯覆盖较大的区域(过重建),因为二者有较大的位置梯度。本文使用(大于阈值 τ pos \tau_\text{pos} τpos的)梯度的平均值来密集化高斯。
如下图所示,对于欠重建区域的小高斯,需要创建新几何。本文通过复制已有高斯并沿位置梯度方向移动实现。对于大高斯,本文将其分裂为两个更小的高斯,缩放因数变为原来的 1 / ϕ 1/\phi 1/ϕ。通过使用原始3D高斯PDF进行采样,得到新高斯的位置。
与其余体积表达类似,本文方法的优化会受到相机附近漂浮物的影响而卡住。本文每隔 N N N次迭代就将 α \alpha α设置为接近0的数,需要的高斯 α \alpha α会通过优化增大,不需要的高斯则会因为 α < ϵ α \alpha<\epsilon_\alpha α<ϵα而移除。此外,还会定期去除很大的高斯。
6. 高斯的快速可微栅格化
本文设计了基于tile的高斯溅射栅格化方法,预先排序高斯,且可以对任意数量的混合高斯反向传播,其每个像素的计算开销为常数。该栅格化方法完全可微且可栅格化各向异性溅射。
首先将区域划分为若干tile,然后挑选出视锥内在各tile内的3D高斯(与视锥相交的置信区间为99%以上)。然后拒绝极端位置(如靠近近平面)的高斯,因其2D的投影协方差不稳定。根据相交的tile数量,为每个高斯分配深度与tile ID组合的键。然后使用快速GPU Radix排序,基于上述键对高斯进行排序,随后基于此顺序进行混合。
为每个tile分配一个线程块,各线程块共同将高斯读取到共享内存中,然后从前往后遍历高斯,得到像素的颜色和 α \alpha α值。当像素的 α \alpha α值饱和,相应线程停止。tile中的线程会定期被查询,直到所有像素的 α \alpha α饱和(达到1)。
为了实现反向传播,本文重新利用各tile排序的高斯列表,从后往前遍历。遍历从影响像素的最后一个点开始,将前向传播中积累的不透明度值除以 α \alpha α以得到梯度计算的系数。
7. 实施、结果与评估
7.1 实施
实施细节:首先在低分辨率下预热优化,然后逐步上采样到原始分辨率下。球面谐波系数的优化从零阶分量开始(因为该值的预测最为困难),然后逐步增加波段。
7.2 结果与评估
真实世界场景:本文的方法能达到甚至超过SotA的性能,且所需要的训练时间大大减少。此外,可视化表明,本文的方法能保留远处清晰的细节。
合成的有界场景:在精确的相机参数下,本文可以通过随机初始化覆盖整个空间的高斯达到SotA性能(训练过程中,模型会快速通过剪枝保留少量的有用高斯)。
7.3 消融
从SfM初始化:与从随机点云初始化相比,从SfM初始化能保留背景细节。
密集化:实验表明,分割大高斯对背景重建有帮助,复制小高斯能使模型更快更好地收敛(特别是当薄结构存在时)。
不限制深度复杂度的带梯度溅射:若限制接收梯度的点数,会导致不稳定优化,因为梯度计算有严重的近似。
各向异性协方差:若改为优化单一的高斯半径值(此时为各向同性高斯),会严重降低图像质量。因为各向异性高斯能更好地对齐表面。
球面谐波:使用球面谐波能提高性能,因为其补充了视图依赖效果。
7.4 局限性
本文的方法有时候仍然会产生伪影。
虽然与基于点的方法相比,本文的方法较为紧凑,但与基于NeRF的方法相比,存储占用仍然有很大的差距。
8. 讨论与结论
本文的工作表明,场景的连续表达对高质量而快速的神经场训练来说不是严格必要的。
附录
B. 优化与密集化算法
C. 栅格化细节
数值稳定性:由于积累不透明度除以 α \alpha α容易因为除以0造成数值不稳定,本文在前向和反向传播时跳过 α < ϵ \alpha<\epsilon α<ϵ的混合更新,并在前向传播混合前计算高斯的累积不透明度,该值达到接近1时停止混合。
相关文章:
【论文笔记】3D Gaussian Splatting for Real-Time Radiance Field Rendering
原文链接:https://arxiv.org/abs/2308.04079 1. 引言 网孔和点是最常见的3D场景表达,因其是显式的且适合基于GPU/CUDA的快速栅格化。神经辐射场(NeRF)则建立连续的场景表达便于优化,但渲染时的随机采样耗时且引入噪声…...
【生物信息学】层次聚类过程
文章目录 一、理论二、实践过程1过程2 一、理论 层次聚类是一种基于树状结构的聚类方法,它试图通过在不同层次上逐步合并或分裂数据集来构建聚类结构。这个树状结构通常被称为“树状图”(dendrogram),其中每个节点代表一个数据点或…...
变分自动编码器【03/3】:使用 Docker 和 Bash 脚本进行超参数调整
一、说明 在深入研究第 1 部分中的介绍和实现,并在第 2 部分中探索训练过程之后,我们现在将重点转向在第 3 部分中通过超参数调整来优化模型的性能。要访问本系列的完整代码,请访问我们的 GitHub 存储库在GitHub - asokraju/ImageAutoEncoder…...
KnowLM知识抽取大模型
文章目录 KnowLM项目介绍KnowLM项目的动机ChatGPT存在的问题 基于LLama的知识抽取的智析大模型数据集构建及训练过程预训练数据集构建预训练训练过程指令微调数据集构建 指令微调训练过程开源的数据集及模型局限性信息抽取Prompt 部署环境配置模型下载预训练模型使用LoRA模型使…...
MySQL数据库 索引
目录 索引概述 索引结构 二叉树 B-Tree BTree Hash 索引分类 索引语法 慢查询日志 索引概述 索引 (index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种…...
ES 错误码
2xx状态码(如200)表示请求成功处理,并且不需要重试。 400状态码表示客户端发送了无效的请求,例如请求的语法有误或缺少必需的参数。在这种情况下,重试相同的请求很可能会导致相同的错误。因此,应该先检查并…...
听GPT 讲Rust源代码--src/tools(18)
File: rust/src/tools/rust-analyzer/crates/ide-ssr/src/from_comment.rs 在Rust源代码中的from_comment.rs文件位于Rust分析器(rust-analyzer)工具的ide-ssr库中,它的作用是将注释转换为Rust代码。 具体来说,该文件实现了从注…...
如何实现设备远程控制?
在工业自动化领域,设备远程控制是一项非常重要的技术。它使得设备可以在远离现场的情况下进行远程操作和维护,大大提高了设备的可用性和效率。 设备远程控制的应用场景有哪些? 远程故障排除:当设备出现故障时,工程师…...
百度侯震宇详解:大模型将如何重构云计算?
12月20日,在2023百度云智大会智算大会上,百度集团副总裁侯震宇以“大模型重构云计算”为主题发表演讲。他强调,AI原生时代,面向大模型的基础设施体系需要全面重构,为构建繁荣的AI原生生态筑牢底座。 侯震宇表示&…...
[Java]FileOutputStream的换行/续写/一次性写出一个字符串的方法
1.续写:FileOutputStream这个io流中的write方法默认情况下是覆盖写入的,如果需要追加写入,需要添加一个参数true 2.虽然write只能一个字符一个字符写入 但是我们可以把想输入的字符串放在str 再将str转化成byte数组 import java.io.FileOutp…...
VM进行TCP/IP通信
OK就变成这样 vm充当服务端的话也是差不多的操作 点击连接 这里我把端口号换掉了因为可能被占用报错了,如果有报错可以尝试尝试换个端口号 注: 还有一个点在工作中要是充当服务器,要去网络这边看下他的ip地址 拉到最后面...
剑指Offer 队列栈题目集合
目录 用两个栈实现队列 用两个栈实现队列 刷题链接: https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6 题目描述 思路一: 使用两个栈来实现队列的功能。栈 1 用于存储入队的元素,而栈 2 用于存储出队的元素。 1.push…...
grafana基本使用
一、安装grafana 1.下载 官网下载地址: https://grafana.com/grafana/download官网包的下载地址: yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-10.2.2-1.x86_64.rpm官网下载速度非常慢,这里选择清华大…...
备份至关重要!如何解决iCloud的上次备份无法完成的问题
将iPhone和iPad备份到iCloud对于在设备发生故障或丢失时确保数据安全至关重要。但iOS用户有时会收到一条令人不安的消息,“上次备份无法完成。”下面我们来看看可能导致此问题的原因,如何解决此问题,并使你的iCloud备份再次顺利运行。 这些故…...
【项目问题解决】% sql注入问题
目录 【项目问题解决】% sql注入问题 1.问题描述2.问题原因3.解决思路4.解决方案1.前端限制传入特殊字符2.后端拦截特殊字符-正则表达式3.后端拦截特殊字符-拦截器 5.总结6.参考 文章所属专区 项目问题解决 1.问题描述 在处理接口入参的一些sql注入问题,虽然通过M…...
B/S医院手术麻醉临床管理系统源码 手术申请、手术安排
手术麻醉系统概述 手术室是医院各个科室工作交叉汇集的一个重要中心,在时间、空间、设备、药物、材料、人员调配的科学管理、高效运作、安全质控、绩效考核,都十分重要。手术麻醉管理系统(Operation Anesthesia Management System࿰…...
解锁高效工作!5款优秀工时管理软件推荐
工时管理,一直是让许多企业和团队头疼的问题。传统的纸质工时表、复杂的电子表格,不仅操作繁琐,还容易出错。幸好,随着科技的进步,我们迎来了工时管理软件的春天。今天,就让我们一起走进这个新时代…...
ICLR 2024 高分论文 | Step-Back Prompting 使大语言模型通过抽象进行推理
文章目录 一、前言二、主要内容三、总结🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 ICLR 2024 高分论文:《Step-Back Prompting Enables Reasoning Via Abstraction in Large Language Models》 论文地址:https://openreview.net/forum?id=3bq3jsvcQ1 …...
边缘计算有哪些常用场景?TSINGSEE边缘AI视频分析技术行业解决方案
随着ChatGPT生成式人工智能的爆发,AI技术在业界又掀起一波新浪潮。值得关注的是,边缘AI智能也在AI人工智能技术进步的基础上得到了快速发展。IDC跟踪报告数据显示,2021年我国的边缘计算服务器整体市场规模达到33.1亿美元,预计2020…...
配置BGP的基本示例
目录 BGP简介 BGP定义 配置BGP目的 受益 实验 实验拓扑 编辑 组网需求 配置思路 配置步骤 配置各接口所属的VLAN 配置各Vlanif的ip地址 配置IBGP连接 配置EBGP 查看BGP对等体的连接状态 配置SwitchA发布路由10.1.0.0/16 配置BGP引入直连路由 BGP简介 BGP定义 …...
Flask解决接口跨域问题
1、什么是跨域CROS CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种浏览器安全策略,用于控制在一个网页应用中如何让一个域的Web页面能够请求另一个域的资源。在Web开发中,由于同源策略(Same-Ori…...
数据恢复工具推荐!这3款堪称删除文件恢复大师!
“快看看我!经常都会莫名奇妙丢失各种电脑文件,但是又无法通过简单的方法找回重要的数据,有没有什么简单的操作可以帮助我快速恢复数据的呀?非常感谢!” 在我们的日常生活中,无论是工作还是学习,…...
论文笔记 | ICLR 2023 ReAct:通过整合推理和行动来增强语言模型
文章目录 一、前言二、主要内容三、总结🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 ICLR 2023 | Accept: notable-top-5%:《ReAct: Synergizing Reasoning and Acting in Language Models》 一句话总结:ReAct 方法在问答任务中通过提示大语言模型生成与任…...
CSS:元素显示模式与背景
CSS:元素显示模式与背景 元素显示模式什么是元素显示模式块级元素 block行内元素 inline行内块元素 inline-block元素显示模式对比元素显示模式转换 display 背景背景颜色 background-color背景图片 background-image背景平铺 background-repeat背景图片位置 backgr…...
K8S 为什么关闭 SELinux 和交换内存
在学习搭建 K8S 环境和使用 K8S 时,所有教程必然会提到的事情就是关闭节点的 SELinux 和交换内存,如同自然规律一样。 那么为什么会有这样的要求呢? 交换内存 计算机的物理内存是有限的,而进程对内存的使用是不确定的ÿ…...
7. ASP.NET Core Blazor 官网文档
官方文档地址:https://learn.microsoft.com/zh-cn/aspnet/core/blazor/?viewaspnetcore-8.0 Blazor 是一种 .NET 前端 Web 框架,在单个编程模型中同时支持服务器端呈现和客户端交互性: 使用 C# 创建丰富的交互式 UI。共享使用 .NET 编写的…...
xrandr
xrandr xrandr 是用于与 X RandR 扩展进行交互的命令行工具。它允许对 X server 进行实时配置(即无需重新启动即可使配置生效),xrandr 提供了显示模式(如分辨率、刷新率等)的自动检测,以及动态配置输出&am…...
【高效开发工具系列】eclipse部署web项目
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
实在智能成功完成近2亿元C轮融资,全面迎接2024年Agent智能体应用元年
在这个最冷的季节,杭州实在智能科技有限公司(以下简称“实在智能”)依然表现火爆,近日,实在智能成功完成C轮融资近2亿元人民币,由金泰富资本和安吉智慧谷共同领投、安吉两山国创跟投。 在此轮融资以前&…...
vue创建项目
1、配置node环境 Node.js 安装配置-----菜鸟教程 npm 使用介绍-----菜鸟教程 淘宝镜像 淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。 可以使用淘宝定制的 cnpm (gzip …...
有网站源码去哪里做/360推广登录入口
为什么80%的码农都做不了架构师?>>> xgcalendar 谷歌日历风格的日历控件 一个基于jQury的日历插件,可以帮助用户快速的创建日程(活动),类似谷歌日历 为啥叫xgcalendar? Xxuanye GGoogle Calendar Like 功…...
问答类网站怎么做/大连企业黄页电话
如何创建socket一般来说,当你点击该页面的链接时,你的浏览器做了一些和下面代码类似的事情:#create an INET, STREAMing sockets socket.socket(socket.AF_INET, socket.SOCK_STREAM)#now connect to the web server on port 80# - the normal http por…...
什么网站做国外批发/360站长平台
转载自 IntegerCache的妙用和陷阱 考虑下面的小程序,你认为会输出为什么结果? public class Test {public static void main(String[] args) {Integer n1 123;Integer n2 123;Integer n3 128;Integer n4 128;System.out.println(n1 n2);System.out.…...
有什么做网站的公司/全国免费发布信息平台
闭包是什么,作用? 函数可以访问其外部定义的变量,但是函数内部对该变量进行的修改,在函数外是不可见的,即对函数作用域外变量不会产生影响。 比如一个人在美国,办了美国国籍,然后回到中国&…...
复制别人网站做第一站/游戏代理是怎么赚钱的如何代理游戏
题目链接 虽然是看的别的人思路,但是做出来还是挺高兴的。 首先求环上最大字段和,而且不能是含有全部元素。本来我的想法是n个元素变为2*n个元素那样做的,这样并不好弄。实际可以求出最小值,总和-最小,就可以求出&…...
网站页面布局的目的/优化大师电脑版官方免费下载
原文地址:http://www.cnblogs.com/alexis/archive/2012/03/03/2378059.html一直使用Google Reader订阅博客园的新闻,但是苦于抽不出太多时间去Google Reader上看这些最新IT资讯,导致我一次又一次的把它标注为已读,所以就花了点时间…...