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

3D Gaussian Splatting as MCMC 与gsplat中的应用实现

3D高斯泼溅(3D Gaussian splatting)自2023年提出以后,相关研究paper井喷式增长,尽管出现了许多改进版本,但依旧面临着诸多挑战,例如实现照片级真实感、应对高存储需求,而 “悬浮的高斯核” 问题就是其中之一。浮动高斯核通常由输入图像中的曝光或颜色不一致引发,也可能源于运动恢复结构(SfM)过程中产生的离群值。此外,严格意义上的高斯泼溅更偏向于 3D 重建而非新视图合成,它仅能为输入图像序列覆盖良好的场景部分生成新视角。

本文将聚焦于 3D 高斯泼溅的一个实际应用 ——高斯泼溅中的物体插入,并详细解读论文《3D Gaussian Splatting as Monte Carlo Markov Chain》,详见 3dgs-mcmc/,进一步展示MCMC与3dgs结合在gsplat第三方工具中的应用。

0. 3DGS MCMC 简介

3DGS 作为 MCMC 论文的前提如下:

  • ADC 的概率概念:尽管自适应密度控制 (ADC) 是一种有效的致密化和修剪策略,但它缺乏坚实的数学基础。MCMC 引入了一个概率框架来解决这一缺陷。
  • 收敛与探索: MCMC 论文并不单纯依赖基于优化的方法,而是将优化与探索相结合,从而能够找到问题的多个最优解决方案。
  • 将死高斯变为活高斯: ADC 启发式方法被通过重新定位死高斯来实现的状态转换所取代。
  • 引入正则化:论文还向损失函数引入了两种正则化:尺度正则化不透明度正则化

3d 高斯溅射训练 MCMC + 双边网格 3D 高斯溅射作为马尔可夫链蒙特卡洛无浮动高斯溅射

图 1:3DGS 与 3DGS + MCMC 的比较

本文从回顾 MCMC 开始,逐步引入到3DGS中。

1. MCMC概念回顾

MCMC 抽样是一种众所周知的近似算法,在机器学习中,广泛应用于概率建模。MCMC 的全称是蒙特卡洛马尔可夫链。蒙特卡洛和马尔可夫链是两种不同的算法。

有时,由于诸如空间复杂性、高维性等原因,一些积分和很难直接计算。在这些情况下,我们会对其进行近似——要么采用采样方法,比如MCMC,要么使用参数化分布,就像在变分推断中所做的那样。

例如,在贝叶斯统计中,计算后验分布需要对模型参数的所有可能值进行积分,并由先验和观测数据的似然性加权。随着参数数量的增加或似然函数变得复杂,这种积分很快就会变得难以处理。

先验、似然和后验 3DGS MCMC 论文解释

图 2:先验、似然和后验

从上图可以看出,先验、后验和似然在数学上的含义。

2. 3DGS中先验/似然与后验的引入

在3D 高斯泼溅 (3DGS) 的贝叶斯视图中,可以将模型参数(所有高斯泼溅的位置、大小、颜色、不透明度等)解释为随机变量。

3DGS 3d 高斯溅射训练 MCMC + 双边网格中的先验、似然和后验

图 3:3DGS 中的先验、似然和后验

  • 这些参数的先验分布p(θ)编码了在看到实际图像数据之前的任何假设偏好。例如,可能希望高斯函数的大小不受限制,或者它们的颜色位于合理范围内,或者总的 splats 数量不会激增,等等。
  • 可能性p(Data|θ) 衡量了特定的splats 配置参数θ对实际观察到的图像(训练视图)的解释程度。
  • 后验分布为:

                                        p(\theta|Data)=\frac{p(Data|\theta)p(\theta)}{p(Data)}

换句话说,后验分布就是基于数据的初始假设,然后如何通过观察到的图像数据进行更新。

3. 单纯融合 VS 融合+探索

自适应密度控制 (ADC) 是一种解决问题的启发式方法,但并未完全优化,并且缺乏坚实的数学基础。MCMC 通过为致密化和修剪策略提供更强大的数学基础来解决相同的核心问题。

具体来说,它通过将这些策略概念化为采样过程,为这些策略引入了一个概率框架。

“采样是一种通过研究大群体的一小部分来估计其整体特征的方法。”
例如,假设需要找到一条曲线下的面积(如下图所示)。通过积分计算它可能需要处理一个复杂的公式。相反,使用蒙特卡罗方法,则可以在曲线边界的矩形内随机散布红点。那么使用的点越多,估计就越准确。通过计算曲线下的点与矩形中总点数的比例,就可以确定曲线下的面积,因为这个比例对应于矩形面积的比例。”

                         高斯分布中的对象插入

图 4:蒙特卡洛估计曲线下面积

3DGS 的一般方法是:

  • 寻找单一最佳解决方案: 3DGS 遵循一种简单的优化方法。它初始化高斯函数,然后通过计算渲染图像和真实图像之间的 L1 损失来优化其配置。此损失用于更新高斯函数。然而,这种方法往往会产生单一最佳解决方案,并且可能会陷入局部最小值的问题。

MCMC 提出了一种不同的视角,它不是专注于寻找单一的最佳解决方案,而是旨在通过从后验分​​布中抽样来确定一系列能够同样好地解释数据的配置。

4. 用于概率 3DGS 建模的 MCMC

MCMC 引入了一个后验分布 G(θ),它表示在给定训练数据的情况下,高斯参数配置 g (位置、颜色、形状等)正确的概率。换句话说:

                        G(\theta)=P(\theta|Data)

这里,克\θ对应相同的配置。

这种分布G(θ) 的设计使得\θ能够很好表示场景的配置将具有较高的值 G(θ),而不能很好表示场景的配置将具有较低的G(θ)值。

通过将问题转化为从分布中进行抽样,可以使用马尔可夫链蒙特卡罗 (MCMC) 方法(如随机梯度朗之万动力学 (SGLD))来生成一系列参数状态\theta^{(1)}, \theta^{(2)},...。在满足条件的情况下,该马尔可夫链将产生反映各θ在G分布下的概率样本。

作者使用随机梯度朗之万动力学 (SGLD)作为 MCMC 框架。顾名思义,它结合了两个组件:随机梯度和朗之万动力学。随机梯度朗之万动力学 (SGLD) 的运行方式与常规梯度下降类似,但增加了随机噪声成分。

4.1 随机梯度下降更新

这里使用的梯度下降略有不同;它不是计算一批图像的损失,而是计算单幅图像的损失。例如,当以学习率为 更新 3DGS 中的单个高斯 g 时\lambda_{\text{lr}},该过程反映了这种独特的方法。

3d 高斯溅射训练 MCMC + 双边网格

更简单的形式

相关文章:

3D Gaussian Splatting as MCMC 与gsplat中的应用实现

3D高斯泼溅(3D Gaussian splatting)自2023年提出以后,相关研究paper井喷式增长,尽管出现了许多改进版本,但依旧面临着诸多挑战,例如实现照片级真实感、应对高存储需求,而 “悬浮的高斯核” 问题就是其中之一。浮动高斯核通常由输入图像中的曝光或颜色不一致引发,也可能…...

车载ECU底软测试:方法与技术的深度解析

文章目录 引言车载 ECU 底软概述测试目标测试范围功能验证性能与实时性安全性与可靠性兼容性测试测试工具与技术方案分层测试方法与技术实现1. 单元测试(Unit Testing)2. 集成测试(Integration Testing)3. 系统测试(System Testing)4. 安全认证测试(Certification Testi…...

机器视觉3D中激光偏镜的优点

机器视觉的3D应用中,激光偏镜(如偏振片、波片、偏振分束器等)通过其独特的偏振控制能力,显著提升了系统的测量精度、抗干扰能力和适应性。以下是其核心优点: 1. 提升3D成像精度 抑制环境光干扰:偏振片可滤除非偏振的环境杂光(如日光、室内照明),仅保留激光偏振信号,大…...

25.6 多模态AI类型系统实战:日均10万请求下的99.99%可靠性保障与10倍性能提升

多模态AI类型系统实战:日均10万请求下的99.99%可靠性保障与10倍性能提升 关键词:类型标注实践, Pydantic 数据建模, 多模态数据处理, CogView 集成, CharGLM 对话引擎 1. 类型系统在 AI 应用中的核心价值 在复杂 Agent 系统中,类型标注是保障代码健壮性的第一道防线。当我…...

单链表的实现 | 附学生信息管理系统的实现

目录 1.前言: 2.单链表的相关概念: 2.1定义: 2.2形式: 2.3特点: 3.常见功能及代码 : 3.1创建节点: 3.2头插: 3.3尾插: 3.4头删: 3.5尾删: 3.6插入…...

【CMake】《CMake构建实战:项目开发卷》笔记-Chapter11-实践:基于onnxruntime的手写数字识别库

第11章 实践:基于onnxruntime的手写数字识别库 读者已经跟着本书实践了很多零零散散的实例,应该能够熟练使用CMake来构建C和C程序了吧!不过,前面的实例往往都是针对某个特定功能编写的,我们可能很难将它们综合起来实…...

微软主要收入云计算,OFFICE,操作系统和游戏10大分类

微软2024年主要收入10大分类是哪些,再加一列赚钱比例 微软 2024 财年的财务数据可能尚未完全统计完成,且官方可能没有正好按 10 大分类公布主要收入情况。不过,依据微软过往的业务板块和常见的收入来源,下面是模拟的表格,赚钱比例…...

PDF预览-搜索并高亮文本

在PDF.js中实现搜索高亮功能可以通过自定义一些代码来实现。PDF.js 是一个通用的、基于Web的PDF阅读器,它允许你在网页上嵌入PDF文件,并提供基本的阅读功能。要实现搜索并高亮显示文本,你可以通过以下几个步骤来完成: 1. 引入PDF…...

随笔1 认识编译命令

1.认识编译命令 1.1 解释gcc编译命令: gcc test1.cpp -o test1 pkg-config --cflags --libs opencv 命令解析: gcc:GNU C/C 编译器,用于编译C/C代码。 test1.cpp:源代码文件。 -o test1:指定输出的可执行文件名为t…...

【谷歌设置】chrome打开页面在新tab设置(新版)

这里一定要在搜索之后点击账户,然后选择更过设置 选择在新窗口打开搜索结果...

9.翻页器组件设计开发与应用(Vue父子组件通信)

翻页器组件设计开发与使用 写在前面el-pagination分页器的用法用法介绍实战案例实现代码 Vue中的父子组件用法与通信何谓父子组件搭建Paginator.vue子组件组件初步搭建父组件向子组件传参通信子组件向父组件通信 最终代码Index.vuePaginator.vue 总结 欢迎加入Gerapy二次开发教…...

MyBatis-Flex关联查询

MyBatis-Flex关联查询 在 MyBatis-Flex 中,我们内置了 3 种方案,帮助用户进行关联查询,比如 一对多、一对一、多对一、多对多等场景,他们分别是: 方案1:Relations 注解方案2:Field Query方案3…...

Lucene.Net 分词器选择指南:盘古分词 vs 结巴分词

文章目录 前言一、核心特性对比二、典型场景推荐1. 选择盘古分词的场景2. 选择结巴分词的场景 三、关键指标实测对比1. 分词质量测试(F1值)2. 性能测试(单线程) 四、如何选择?决策树五、进阶优化建议1. 盘古分词优化方…...

YOLOv11实战电力设备缺陷检测

本文采用YOLOv11作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv11以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对电力设备缺陷数据集进行训练和优化,该数据集包含丰富的电力设备缺…...

LINUX 5 vim cat zip unzip

dd u撤销 ctrlr取消撤销 q!刚才的操作不做保存 刚才是编辑模式 现在是可视化模式 多行注释...

Redis的常见命令

Redis的常见命令 官方命令文档:https://redis.io/docs/latest/commands/ 文章目录 Redis的常见命令Redis数据结构介绍Redis通用命令1.String类型2.Hash类型3.List类型List类型的常见命令:利用List结构实现:栈、队列、阻塞队列: 4.…...

LeetCode第131题_分割回文串

LeetCode 第131题:分割回文串 题目描述 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 难度 中等 题目链接 点击在LeetCode中查看题目 示…...

网络钓鱼攻击的威胁和执法部门的作用(第一部分)

在当今的数字世界中,网络犯罪分子不断开发新技术来利用个人、企业和政府机构。 最普遍和最具破坏性的网络犯罪形式之一是网络钓鱼——一种社会工程手段,用于欺骗人们提供敏感信息,例如登录凭据、财务数据和个人详细信息。 随着网络钓鱼攻击…...

用Scala玩转Flink:从零构建实时处理系统

大家好!欢迎来到 Flink 的奇妙世界!如果你正对实时数据处理充满好奇,或者已经厌倦了传统批处理的漫长等待,那么你找对地方了。本系列文章将带你使用优雅的 Scala 语言,一步步掌握强大的流处理引擎——Apache Flink。 今…...

【LeetCode】算法详解#3 ---最大子数组和

1.题目介绍 给定一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组是数组中的一个连续部分。 1 < nums.length < 105-104 < nums[i] < 104 2.解决思路 要求出…...

基于Python的心衰疾病数据可视化分析系统

【Python】基于Python的心衰疾病数据可视化分析系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 本项目基于Python开发&#xff0c;重点针对5000条心衰疾病患者的数据进行可视化分析&#…...

oracle批量删除分区

为了清理数据&#xff0c;往往需要删除一些分区 简单查看当前分区 附件 --创建测试表 -- drop table test_part purge;CREATE TABLE test_part (sales_id NUMBER,sale_date DATE,amount NUMBER ) PARTITION BY RANGE (sale_date) INTERVAL (INTERVAL 1 MONTH) -- 每个月创建…...

Android Compose入门和基本使用

文章目录 一、Jetpack Compose 介绍Jetpack Compose是什么Composable 函数命令式和声明式UI组合和继承 二、状态管理什么是状态Stateremember状态提升 三、自定义布局Layout ModifierLayout Composable固有特性测量使用内置组件固有特性测量自定义固有特性测量 四、项目中使用J…...

xLua的Lua调用C#的2,3,4

使用Lua在Unity中创建游戏对象&#xff0c;组件&#xff1a; 相关代码如下&#xff1a; Lua --Lua实例化类 --C# Npc objnew Npc() --通过调用构造函数创建对象 local objCS.Npc() obj.HP100 print(obj.HP) local obj1CS.Npc("admin") print(obj1.Name)--表方法希…...

使用 Python 连接 PostgreSQL 数据库,从 `mimic - III` 数据库中筛选数据并导出特定的数据图表

要使用 Python 连接 PostgreSQL 数据库&#xff0c;从 mimic - III 数据库中筛选数据并导出特定的数据图表&#xff0c;你可以按照以下步骤操作&#xff1a; 安装所需的库&#xff1a;psycopg2 用于连接 PostgreSQL 数据库&#xff0c;pandas 用于数据处理&#xff0c;matplot…...

算法刷题记录——LeetCode篇(2.6) [第151~160题](持续更新)

更新时间&#xff1a;2025-04-06 算法题解目录汇总&#xff1a;算法刷题记录——题解目录汇总技术博客总目录&#xff1a;计算机技术系列博客——目录页 优先整理热门100及面试150&#xff0c;不定期持续更新&#xff0c;欢迎关注&#xff01; 152. 乘积最大子数组 给你一个…...

Dijkstra求最短路径问题(优先队列优化模板java)

首先 1. 主类定义与全局变量 public class Main {static int N 100010; // 最大节点数static int INF Integer.MAX_VALUE; // 无穷大static ArrayList<Pair>[] G new ArrayList[N]; // 邻接表存储图static int[] dis new int[N]; // 存储每个节点的最短…...

【软件测试】性能测试 —— 基础概念篇

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 本期内容主要介绍性能测试相关知识&#xff0c;首先我们需要了解性能测试是什么&#xff0c;本期内容主要介绍性能测试…...

Jmeter脚本使用要点记录

一&#xff0c;使用Bean shell获取请求响应的数据 byte[] result prev.getResponseData(); String str new String(result); System.out.println(str);其中&#xff0c;prev是jmeter的内置变量&#xff0c;直接使用即可。 二&#xff0c;不同的流程中传参数 vars.put(&quo…...

HTML5

HTML5是对HTML标准的第5次修订 HTML是超文本标记语言的简称&#xff0c;是为【网页创建和其它可在网页浏览器中所看到信息】而设计的一种标记性语言。 H5优点&#xff1a;跨平台使用将互联网语义化&#xff0c;更好地被人类与机器所理解降低了对浏览器的依赖&#xff0c;更好地…...

算法—博弈问题

1.博弈问题 1.前提:每一步都是最优解的情况下&#xff0c;先手的那个人已经确定了胜负 用dp数组记录每一步操作后的结果&#xff0c;如果下一步会出现必输结果&#xff0c;那么说明执行这步操作的人必胜&#xff0c;因为必输结果的下一步操作后都是必胜的结果&#xff0c;所以在…...

vector模拟实现(2)

1.构造函数 2.拷贝构造 我们利用push_back和reserve来实现拷贝构造。 3.迭代器的实现 由于底层是一段连续的空间&#xff0c;所以我们选择用指针来实现迭代器。 4.swap 这里的swap函数是有两种方法&#xff0c;一种是开辟一段新的空间&#xff0c;然后memcpy来把原来的数据拷…...

【嵌入式系统设计师】知识点:第3章 嵌入式硬件设计

提示:“软考通关秘籍” 专栏围绕软考展开,全面涵盖了如嵌入式系统设计师、数据库系统工程师、信息系统管理工程师等多个软考方向的知识点。从计算机体系结构、存储系统等基础知识,到程序语言概述、算法、数据库技术(包括关系数据库、非关系型数据库、SQL 语言、数据仓库等)…...

输入框输入数字且保持精度

在项目中如果涉及到金额等需要数字输入且保持精度的情况下&#xff0c;由于输入框是可以随意输入文本的&#xff0c;所以一般情况下可能需要监听输入框的change事件&#xff0c;然后通过正则表达式去替换掉不匹配的文本部分。 由于每次文本改变都会被监听&#xff0c;包括替换…...

Vue3中的Inject用法全解析

大家好呀&#xff5e;今天给大家带来一个超级实用的Vue3技巧&#xff1a;如何使用inject进行组件间的通信&#xff01;如果你对组件间的数据传递、事件触发感兴趣&#xff0c;那一定不要错过这篇文章哦&#xff01;话不多说&#xff0c;直接开整&#xff5e; &#x1f31f; 什么…...

FPGA同步复位、异步复位、异步复位同步释放仿真

FPGA同步复位、异步复位、异步复位同步释放仿真 xilinx VIVADO仿真 行为仿真 综合后功能仿真&#xff0c;综合后时序仿真 实现后功能仿真&#xff0c;实现后时序仿真 目录 前言 一、同步复位 二、异步复位 三、异步复位同步释放 总结 前言 本文将详细介绍FPGA同步复位、异…...

深度解析需求分析:理论、流程与实践

深度解析需求分析&#xff1a;理论、流程与实践 一、需求分析的目标&#xff08;一&#xff09;准确捕捉用户诉求&#xff08;二&#xff09;为开发提供清晰指引 二、需求分析流程&#xff08;一&#xff09;需求获取&#xff08;二&#xff09;需求整理&#xff08;三&#xf…...

QT学习笔记4--事件

1. 鼠标事件 1.1 鼠标按下 QObject中的mousePressEvent()方法 在子类中重写该方法&#xff0c;就可以处理鼠标按下 void myLabel::mousePressEvent(QMouseEvent *ev) {if (ev->button() Qt::LeftButton) {QString str QString("mouse press x %1, y %2").…...

AnimateCC基础教学:json数据结构的测试

一.核心代码: const user1String {"name": "张三", "age": 30, "gender": "男"}; const user1Obj JSON.parse(user1String); console.log("测试1:", user1Obj.name, user1Obj.age, user1Obj.gender);/*const u…...

针对Qwen-Agent框架的源码阅读与解析:FnCallAgent与ReActChat篇

在《针对Qwen-Agent框架的Function Call及ReAct的源码阅读与解析&#xff1a;Agent基类篇》中&#xff0c;我们已经了解了Agent基类的大体实现。这里我们就再详细学习一下FnCallAgent类和ReActChat的实现思路&#xff0c;从而对Agent的两条主流技术路径有更深刻的了解。同时&am…...

在docker中安装RocketMQ

第一步你需要有镜像包&#xff0c;这个2023年的时候docker就不能用pull拉取镜像了&#xff0c;需要你自己找 第二步我用的是FinalShell,用别的可视化界面也用&#xff0c; 在你自己平时放镜像包的地方创建一个叫rocketmq的文件夹&#xff0c;放入镜像包后&#xff0c;创建一个…...

Spring Boot + Kafka 消息队列从零到落地

背景 依赖 <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.8.1</version> </dependency> 发送消息 //示例&#xff1a; private final KafkaTemplate<St…...

《打破语言壁垒:bilingual_book_maker 让外文阅读更轻松》

在寻找心仪的外文电子书时&#xff0c;常常会因语言障碍而感到困扰。虽然可以将文本逐段复制到在线翻译工具中&#xff0c;但这一过程不仅繁琐&#xff0c;还会打断阅读的连贯性&#xff0c;让人难以沉浸其中。为了克服这一难题&#xff0c;我一直在寻找一种既能保留原文&#…...

JCR一区文章,壮丽细尾鹩莺算法Superb Fairy-wren Optimization-附Matlab免费代码

本文提出了一种新颖的基于群体智能的元启发式优化算法——壮丽细尾鹩优化算法&#xff08;SFOA&#xff09;,SFOA从精湛的神仙莺的生活习性中汲取灵感。融合了精湛的神仙莺群体中幼鸟的发育、繁殖后鸟类喂养幼鸟的行为以及它们躲避捕食者的策略。通过模拟幼鸟生长、繁殖和摄食阶…...

Kafka 如何实现 Exactly Once

Kafka 中实现 Exactly Once Semantics&#xff08;EOS&#xff0c;精确一次语义&#xff09;&#xff0c;是为了确保&#xff1a; 每条消息被处理一次且仅一次&#xff0c;既不会丢失&#xff0c;也不会重复消费。 这是一种在分布式消息系统中非常难实现的语义。Kafka 从 0.11 …...

在K8S中,内置的污点主要有哪些?

在Kubernetes (K8S)中&#xff0c;内置的污点&#xff08;Taints&#xff09;主要用于自动化的节点亲和性和反亲和性管理。当集群中的节点出现某种问题或满足特定条件时&#xff0c;kubelet会自动给这些节点添加内置污点。以下是一些常见的内置污点&#xff1a; node.kubernete…...

AI大模型:(二)2.1 从零训练自己的大模型概述

目录 1. 分词器训练 1.1 分词器概述 1.2 训练简述 2.预训练 2.1 预训练概述 2.2 预训练过程简介 3.微调训练 3.1 微调训练概述 3.2 微调过程简介 4.人类对齐 4.1 人类对齐概述 4.2 人类对齐训练过程简介 近年来,大语言模型(LLM)如GPT-4、Claude、LLaMA等…...

电动垂直起降飞行器(eVTOL)

电动垂直起降飞行器&#xff08;eVTOL&#xff09;的详细介绍&#xff0c;涵盖定义、技术路径、应用场景、市场前景及政策支持等核心内容&#xff1a; 一、定义与核心特性 eVTOL&#xff08;Electric Vertical Take-off and Landing&#xff09;即电动垂直起降飞行器&#xf…...

LM Studio本地部署大模型

现在的AI可谓是火的一塌糊涂, 看到使用LM Studio部署本地模型非常的方便, 于是我也想在自己的本地试试 LM Studio 简介 LM Studio 是一款专为本地运行大型语言模型&#xff08;LLMs&#xff09;设计的桌面应用程序&#xff0c;支持 Windows 和 macOS 系统。它允许用户在个人电…...

PyTorch 深度学习 || 6. Transformer | Ch6.1 Transformer 框架

1. Transformer 框架...