3D高斯泼溅(Splatting)简明教程

在这里插入图片描述

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D场景编辑器

3D 高斯泼溅(Splatting)是用于实时辐射场渲染的 3D 高斯分布描述的一种光栅化技术,它允许实时渲染从小图像样本中学习到的逼真场景。 本文将详细介绍它的工作原理以及它对图形学的未来意味着什么。

1、什么是 3D 高斯泼溅?

3D 高斯泼溅的核心是一种光栅化技术。 这意味着:

  • 有描述场景的数据。
  • 在屏幕上绘制数据。
  • 类似于计算机图形学中的三角形光栅化,用于在屏幕上绘制许多三角形:
    在这里插入图片描述

然而,它不是三角形,而是高斯分布。 这是一个栅格化的高斯函数,为了清晰起见,绘制了边框:

在这里插入图片描述

高斯泼溅由以下参数描述:

  • 位置:它所在的位置 (XYZ)
  • 协方差:如何拉伸/缩放(3x3 矩阵)
  • 颜色:它是什么颜色(RGB)
  • Alpha:透明度如何 (α)

在实践中,会同时绘制多个高斯曲线:
在这里插入图片描述

这是三个高斯。 那么 700 万高斯呢?
在这里插入图片描述

这是每个高斯光栅化完全不透明的样子:

在这里插入图片描述

这是对 3D 高斯分布的非常简短的概述。 接下来,让我们逐步完成本文中描述的完整过程。

1、3D高斯泼溅原理

3D高斯泼溅的实现原理分为一下几个部分:

  • 运动结构恢复:利用SfM得到点云
  • 点云转高斯分布
  • 模型训练
  • 光栅化

1.1 运动结构恢复

第一步是使用运动结构恢复 (SfM: Structure from Motion) 方法从一组图像中估计点云。 这是一种从一组 2D 图像估计 3D 点云的方法。 这可以通过 COLMAP 库来完成。
在这里插入图片描述

1.2 转换为高斯分布

接下来,每个点都转换为高斯分布。 这对于光栅化来说已经足够了。 然而,只能从 SfM 数据推断位置和颜色。 为了学习产生高质量结果的表示,我们需要对其进行训练。

1.3 模型训练

训练过程使用随机梯度下降,类似于神经网络,但没有层。 训练步骤为:

  • 使用可微分高斯光栅化将高斯光栅化为图像(稍后详细介绍)
  • 根据光栅化图像和地面真实图像之间的差异计算损失
  • 根据损失调整高斯参数
  • 应用自动致密化和修剪

步骤 1-3 从概念上讲非常简单。 第 4 步涉及以下内容:

  • 如果对于给定的高斯梯度很大(即它太错误),则分割/克隆它
  • 如果高斯很小,则克隆它
  • 如果高斯很大,则将其分割
  • 如果高斯的 alpha 太低,请将其删除

此过程有助于高斯更好地拟合细粒度细节,同时修剪不必要的高斯。

1.4 可微分高斯光栅化

如前所述,3D 高斯分布是一种光栅化方法,它将数据绘制到屏幕上。 然而,一些重要的元素还包括:

  • 快速
  • 可微分

光栅化器的原始实现可以在这里找到。 光栅化涉及:

  • 从相机角度将每个高斯投影为 2D。
  • 按深度对高斯进行排序。
  • 对于每个像素,从前到后迭代每个高斯,将它们混合在一起。

这篇论文中描述了其他优化。

光栅化器是可微分的也很重要,这样就可以用随机梯度下降来训练它。 然而,这仅与训练相关 - 训练有素的高斯也可以用不可微的方法呈现。

2、谁关注3D高斯泼溅?

为什么 3D 高斯溅射受到如此多的关注? 显而易见的答案是结果不言自明 - 这是高质量的实时场景。 然而,故事可能还有更多。

关于高斯泼溅还能做什么还有很多未知数。 它们可以动画化吗? 即将发表的论文《动态 3D 高斯:通过持久动态视图合成进行跟踪》表明他们可以。 还有许多其他未知数。 他们能做反思吗? 可以在没有参考图像训练的情况下对它们进行建模吗?

最后,人们对嵌入式人工智能的研究兴趣日益浓厚。 这是人工智能研究的一个领域,最先进的性能仍然低于人类性能几个数量级,其中大部分挑战在于表示 3D 空间。 鉴于 3D 高斯分布可以产生非常密集的 3D 空间表示,这对具身AI 研究有何影响?

这些问题需要注意方法。 实际影响如何还有待观察。

3、图形学的未来

那么这对图形学的未来意味着什么呢? 好吧,让我们将其分为优点/缺点:

优点

  • 高品质、逼真的场景
  • 快速、实时光栅化
  • 训练速度相对较快

缺点

  • 高 VRAM 使用率(4GB 用于查看,12GB 用于训练)
  • 大量磁盘占用(一个场景 1GB+)
  • 与现有渲染管道不兼容
  • 静态(暂时)

到目前为止,原始的 CUDA 实现尚未适应生产渲染管道,如 Vulkan、DirectX、WebGPU 等,因此还有待观察会产生什么影响。

目前已经进行了以下适应性工作:

  • 远程查看器
  • WebGPU查看器
  • WebGL 查看器
  • Unity查看器
  • 优化的 WebGL 查看器

这些依赖于远程流传输 (1) 或传统的基于四元组的光栅化方法 (2-5)。 虽然基于四元组的方法与数十年的图形技术兼容,但它可能会导致质量/性能降低。 然而,查看器 #5 表明,尽管采用基于四元组的方法,优化技巧仍可以带来高质量/性能。

那么我们会看到 3D 高斯泼溅在生产环境中完全重新实现吗? 答案可能是肯定的。 主要瓶颈是对数百万个高斯进行排序,这在原始实现中使用 CUB 设备基数排序(一种仅在 CUDA 中可用的高度优化的排序)有效完成。 然而,只要付出足够的努力,在其他渲染管道中当然可以达到这种性能水平。


原文链接:3D高斯泼溅 — BimAnt

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

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

相关文章

wandb 安装本地部署使用教程

1、官网注册 wandb.ai是一个为机器学习开发者提供的开发工具平台,可以帮助用户跟踪实验,管理和版本数据,以及与团队协作,从而更专注于构建最佳模型。 wandb官网: https://wandb.ai 首先我们打开官网注册号自己的账号并…

[自动化运维工具] Ansible的简单介绍与常用模块详解

文章目录 1. Ansible概述1.1 简介1.2 Ansible的特性1.3 Ansible的组件构成1.4 Ansible的工作原理 2. Ansible环境部署2.1 前置准备2.2 安装ansible2.3 查看基本信息2.4 配置远程主机清单 3. Ansible的常用模块3.1 ansible的基础命令格式3.2 Command模块3.2.1 基本格式和常用参数…

通过51单片机控制28byj48步进电机按角度正反转旋转

一、前言 本项目基于STC89C52单片机,通过控制28BYJ-48步进电机实现按角度正反转旋转的功能。28BYJ-48步进电机是一种常用的电机,精准定位和高扭矩输出,适用于许多小型的自动化系统和机械装置。 在这个项目中,使用STC89C52单片机…

跟着Nature Communications学作图:纹理柱状图+添加显著性标签!

📋文章目录 复现图片设置工作路径和加载相关R包读取数据集数据可视化计算均值和标准差方差分析组间t-test 图a可视化过程图b可视化过程合并图ab 跟着「Nature Communications」学作图,今天主要通过复刻NC文章中的一张主图来巩固先前分享过的知识点&#…

Git同时配置Gitee和GitHub

Git同时配置Gitee和GitHub 一、删除原先ssh密钥二、生成密钥 这里的同时配置是针对于之前配置过单个gitee或者github而言的,如果需要看git从安装开始的配置,则可以看这一篇文章 git安装配置教程 一、删除原先ssh密钥 在C盘下用户/用户名/.ssh文件下找到…

ESP32S3入手体验测试

ESP32S3入手体验测试 🔖所入手的型号是YD-ESP32-S3 N16R8,该款和乐鑫官方推出的ESP32-S3-DevKitC-1配置差不多。 🎈乐鑫官方介绍:ESP32-S3-DevKitC-1 v1.1 🔰两者采用的模组:ESP32-S3-WROOM-1 和ESP32-S3-WROOM-1U模组…

“Java与Redis的默契舞曲:优雅地连接与存储数据“

文章目录 引言1. Java连接上Redis2. Java对Redis进行存储数据2.1 存储set类型数据2.2 存储hash类型数据2.3 存储list类型数据 总结 引言 在现代软件开发中,数据存储和处理是至关重要的一环。Java作为一门强大的编程语言,与Redis这个高性能的内存数据库相…

2023-11 | 短视频批量下载/爬取某个用户的所有视频 | Python

这里以鞠婧祎的个人主页为demo https://www.douyin.com/user/MS4wLjABAAAACV5Em110SiusElwKlIpUd-MRSi8rBYyg0NfpPrqZmykHY8wLPQ8O4pv3wPL6A-oz 【2023-11-4 23:02:52 星期六】可能后面随着XX的调整, 方法不再适用, 请注意 找到接口 找到https://www.douyin.com/aweme/v1/web/…

C++ map 的使用

下面的是关于 map 的介绍。来自 map - C Reference (cplusplus.com) 的翻译,您可以看也可以不看哈! map 是关联容器,它按照特定的次序(按照 key 来比较)存储由键值 key 和值 value组合而成的元素。在 map 中,键值 key 通常用于排序…

linux 创建git项目并提交到gitee(保姆式教程)

01、git安装与初始化设置 mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ apt install mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ git config --global user.name "用户名" mhzzjmhzzj-virtual-machine:~/work/skynetStudy$ git config --global user.ema…

Python自定义函数练习(持续更新中~)

1.计算矩阵的面积和周长: class Rectangle:def __init__(self, width, height):self.width widthself.height heightdef area(self):return self.width * self.heightdef perimeter(self):return 2 * (self.width self.height)if __name__ "__main__"…

AtCoder Beginner Contest 327 G. Many Good Tuple Problems(带标号二分图计数+有区别小球放入有区别盒子)

题目 一个长为n(n<30)的原始序列x&#xff0c;x[i]可以取值0或1 一个长为m(m<1e9)的点对序列(s,t)&#xff0c; s序列第i项和t的第i项&#xff0c;均可以取值[1,n]&#xff0c; 如果构造好s和t后&#xff0c;对任意都存在01序列x使得&#xff0c; 则称这个序列是合法…

【RabbitMQ】 RabbitMQ 消息的延迟 —— 深入探索 RabbitMQ 的死信交换机,消息的 TTL 以及延迟队列

文章目录 一、死信交换机1.1 什么是死信和死信交换机1.2 死信交换机和死信队列的创建方式 二、消息的 TTL2.1 什么是消息的 TTL2.2 基于死信交换机和 TTL 实现消息的延迟 三、基于 DelayExchang 插件实现延迟队列3.1 安装 DelayExchang 插件3.2 DelayExchang 实现消息延迟的原理…

perl列表创建、追加、删除

简介 perl 列表追加元素 主要是通过push和unshift函数来实现。其中&#xff0c;push是追加到列表尾&#xff0c;unshift是追加到列表头。 perl列表删除元素 主要是通过pop和shift函数来实现。其中&#xff0c;pop是从列表尾删除一个元素&#xff0c; shift是从列表头删除一…

6大场景,玩转ChatGPT!

文章目录 一、故事叙述提问举例 二、产品描述提问举例 三、报告撰写提问举例 四、邮件和信件撰写提问举例 五、新间稿和公告撰写提问举例 六、学术论文和专业文章撰写提问举例 本文是在GPT3.5版本下演示的 我们知道AI技术不仅能够自动生成文章和内容&#xff0c;还可以根据我们…

【大数据】NiFi 中的重要术语

NiFi 中的重要术语 1.Flow Controller2.Processor3.Connection4.Controller Service5.Process Group6.FlowFile 那些一个个黑匣子称为 Processor&#xff0c;它们通过称为 Connection 的队列交换名为 FlowFile 的信息块。最后&#xff0c;FlowFile Controller 负责管理这些组件…

XSAN数据恢复-存储空间架构迁移时误格式化存储系统的XSAN数据恢复案例

XSAN数据恢复环境&#xff1a; 昆腾存储&#xff0c;MAC OS操作系统&#xff0c;存放视频类数据&#xff08;MXF、MOV等格式文件&#xff09;。 XSAN故障&检测&#xff1a; 将存储空间从XSAN架构迁移到STORNEXT架构后&#xff0c;存储空间中数据全部丢失。 故障存储中一共…

蓝桥杯官网填空题(方格计数)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 如下图所示&#xff0c;在二维平面上有无数个 11 的小方格。 我们以某个小方格的一个顶点为圆心画一个半径为 50000 的圆。 你能计算出这个圆里有多少个完整的小方…

Azure 机器学习 - 设置 AutoML 训练时序预测模型

目录 一、环境准备二、训练和验证数据三、配置试验支持的模型配置设置特征化步骤自定义特征化 四、可选配置频率和目标数据聚合启用深度学习目标滚动窗口聚合短时序处理非稳定时序检测和处理 五、运行试验六、用最佳模型进行预测用滚动预测评估模型精度预测未来 七、大规模预测…

Flink源码解析八之任务调度和负载均衡

源码概览 jobmanager scheduler:这部分与 Flink 的任务调度有关。 CoLocationConstraint:这是一个约束类,用于确保某些算子的不同子任务在同一个 TaskManager 上运行。这通常用于状态共享或算子链的情况。CoLocationGroup & CoLocationGroupImpl:这些与 CoLocationCon…