GS-SLAM论文阅读笔记--GSFusion

2024-09-05 06:04

本文主要是介绍GS-SLAM论文阅读笔记--GSFusion,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

GS-SLAM是最近比较新的方向,由于传统SLAM的研究变得很少,拥抱与新的技术结合的方法也许是个好主意。之前总结了大部分GS-SLAM的文章。但是这个方向在不断发展,而发展初期的很多论文值得参考。所以用博客记录一下比较新的论文阅读笔记。GSFusion 这篇文章是TUM发表的,TUM在SLAM领域是非常牛的,所以需要仔细阅读一下这篇文章,肯定会有所收获!
在这里插入图片描述


文章目录

  • 介绍
  • 1.背景介绍
  • 2.关键内容
    • 2.1混合场景表达
      • (1)基于八叉树的TSDF网格
      • (2)3D Gaussian表达
    • 2.2增量地图
      • (1)TSDF融合
      • (2)新高斯的初始化策略
      • (3)关键帧维护策略
    • 2.3整体流程
  • 3.文章贡献
  • 4.个人思考


1.背景介绍

  1. 传统的体积融合算法保留了三维场景的空间结构,这对计算机视觉和机器人技术中的许多任务都是有益的。然而,它们在可视化方面往往缺乏真实感单纯的颜色融合通常会导致低照片真实感和不完整的地图,因为遮挡,深度图中的洞,以及忽视材料属性,如反射和透明度。

  2. 新兴的三维高斯飞溅弥补了这一差距,但现有的基于高斯的重建方法经常受到伪影和与底层3D结构不一致的影响,并且难以实时优化,无法为用户提供高质量的即时反馈高斯虽然优于Nerf,但原始范式是为离线操作而设计的,这仍然需要大约10-30分钟来批量优化小规模数据集(300张图像)。

  3. 其中一个瓶颈来自于在优化过程中需要更新的大量高斯参数。 不通过使用3D高斯作为一个独立的地图表示,作者将其合并到一个体映射系统中,以利用几何信息,并建议在图像上使用四叉树数据结构,以大大减少初始化的splats数量。通过这种方式,可以同时生成一个紧凑的三维高斯地图,具有更少的伪影和一个动态的体积地图。

  4. 作者认为问题的关键在于 限制添加到场景中的3D高斯的数量对于在扫描过程中保持视觉质量和效率之间的平衡 。并且解释了原因:
    1.可以充分利用体网格的空间结构来避免在邻域中重复三维高斯分布。
    2.其次,与3DGS相比,体积地图更加成熟,使其适用于更广泛的下游机器人任务。

2.关键内容

2.1混合场景表达

(1)基于八叉树的TSDF网格

八叉树是一种空间数据结构,通常用于将三维空间划分为八个八叉,以提高计算效率。在supereight( 作者主要参考这篇文章的方法)中,每个叶子节点包含一个连续的8的三次方个体素块。这将体积图转换为无序的稀疏分布体素块的集合,八叉树作为基于整数坐标检索数据的空间索引。

这里使用Morton编码实现了高效的树遍历,其中来自3D坐标的交错位形成了每个节点的唯一标识符。这个编码方案隐式地定义了树结构,因为它递归地指示了父节点在较粗层次上的位置。注意,这个建图系统支持灵活的数据类型,比如TSDF和occupancy。为了简化实现,作者选择单分辨率TSDF。因此,每个体素存储到最近表面的截断带符号距离,负值表示表面里面的体素。

(2)3D Gaussian表达

选择了3D高斯作为场景原语的原因不仅在于高质量的渲染,还因为它们是可微的,可以很容易地投影到2D空间中,从而实现快速α-blending。 三维高斯函数可以看作一个椭球,其中3 × 3协方差矩阵Σ定义了椭球在三维空间中的形状和方向。

假设三维高斯函数以pg为中心,则其定义如下:
在这里插入图片描述
其中R∈R 3×3, S∈R 3×3分别表示三维高斯函数的旋转和缩放。给定时间步长k从摄像机坐标帧到世界坐标帧的刚变换TW Ck∈SE(3),则二维投影定义为:

在这里插入图片描述
其中π(·)依次进行去均质化和透视投影。W表示T−1 W Ck的旋转部分,J是将相机坐标转换为射线坐标的射影变换的仿射近似的雅可比矩阵。除了3D位置pg,旋转R和缩放S,每个3D高斯还包含一个不透明度值α∈[0,1],用于混合和球面谐波(SH)系数,以捕获与视图相关的颜色c。

2.2增量地图

本文的实时增量建图过程包括三个主要阶段。

(1)首先,它使用输入深度帧进行TSDF融合以更新必要的体素。
(2)然后,利用视觉和几何信息在三维空间中分配新的高斯分布,以避免高斯原语的爆炸。
(3)最后,设计了一个有效的关键帧维护策略进行高斯参数的优化,实现渲染质量和计算效率之间的平衡

接下来具体介绍这三个步骤。

(1)TSDF融合

TSDF融合过程包括将新的传感器数据集成到体素图中。因此,在给定当前深度帧的情况下,确定哪些体素块应该更新是很重要的。 由于TSDF场只编码截断带宽 ±ϵ 内的表面信息,射线沿着每个像素的视线行进,体素块只有在在深度测量周围指定的 ϵ 带时才会被分配。supereight 采用从上到下的宽度优先分配,利用Morton编码以最小的开销进行快速体素块分配。

值得注意的是,在初始阶段之后,随后的帧中需要分配的体素块更少,因为新的块将主要出现在帧边界或以前未见过的区域。当分配完成后,参考与KinectFusion相同的方式进行测量值的整合。

通过将体素位置pv投影到图像坐标中,计算深度图像的测量距离与相机中心到体素的度量距离之差,得到新的SDF值。新值进一步归一化为TSDF,并使用简单的运行加权平均与前一个值融合(假设权重的上限为wmax)。数学上来讲,如下公式:
在这里插入图片描述
上式中Dk为时间步长k处的输入深度图,zcv表示pv在相机帧内的z轴坐标。最后,更新后的wk和tsdfk都存储在相应的体素中。

(2)新高斯的初始化策略

为了显式地控制要添加到建图中的高斯基元的数量,作者建议对每个输入RGB图像使用四叉树方案。四叉树类似于八叉树,但在2D空间中操作,树中的每个节点要么正好有四个子节点,要么根本没有(即叶节点)。作者基于对比度对图像进行划分,以便每个叶节点包含一个特定的子区域,其对比度低于预定义的阈值。
在这里插入图片描述
在上图中,作者演示了不同的四叉树阈值如何影响分区结果。总的来说,使用更严格的四叉树阈值可以帮助捕获更精细的细节,特别是由对比度引起的薄边缘。
假设象限的中心是uq∈r2,我们可以使用深度图将其反向投影到世界坐标系中:
在这里插入图片描述
在pq处放置一个新的三维高斯函数之前,首先需要检查它的周围环境。这是为了防止在一个邻域中复制多个高度相似的原语。否则,即使在扫描过程中没有发现新的区域,地图也会继续扩展。因此,简单地查询离pq最近的体素。具体方法是:
如果体素权重等于1,则表示这是一个新分配的体素,我们可以安全地在pq处初始化一个新的3D高斯函数,如下所示:
在这里插入图片描述
其中Rq是3×3单位矩阵,Sq是3×3对角矩阵,每个元素d等于从象限中心到它的角的反向投影长度。注意,前三个SH系数是使用图像Ik中的像素颜色初始化的。一旦体素权重超过1,我们就知道这个位置之前已经被访问过了,并且不应该在这里分配新的高斯分布。

作者的初始化策略有很多好处。它不仅大大减少了地图大小,从而提高了计算效率,而且最大限度地利用了每个原语,从而减少了场景中的浮动伪影。此外,作者的结果地图的紧凑性消除了原始3DGS方法中需要进一步致密化或修剪过程的需要,这是在线优化的另一个计算瓶颈。

(3)关键帧维护策略

由于可微渲染,我们可以使用梯度下降法直接优化高斯参数。由于gausian splatting采用基于tile的栅格化,将屏幕划分为多个tiles。当前视锥体中的3D高斯分布是基于每个tile的深度进行排序的。因此,可以通过混合N个在像素处重叠的排序和高斯原语来获得渲染的RGB图像 Ik:

在这里插入图片描述
为了尽量减少输入RGB图像和渲染图像之间的光度损失,将优化目标函数定义为:
在这里插入图片描述

在每个时间步骤中,需要多次迭代。运行的迭代次数越多,从当前视点获得的渲染图像质量就越好。然而,在线过程无法承受大量的一阶优化迭代。此外,它还会导致严重的过拟合问题,最终降低3D高斯图的整体质量。为了平衡渲染质量和优化时间,作者采用了一个简单而有效的在线优化策略:利用关键帧列表

在初始化阶段,新的高斯函数只被分配到以前未观察到的区域。因此,每帧初始化的新原语的数量自然可以作为每个输入帧的信息增益的指标。简单地说,我们选择一个关键帧,并在新原语的数量大于某个阈值时将其添加到列表中。关键帧和非关键帧将分别进行m和n次迭代优化。然而,作者在优化非关键帧上花费的时间较少,保留了一些资源给从维护列表中随机选择的关键帧(即洗牌后的第一个(m−n)关键帧)。这种随机关键帧优化有助于减轻遗忘问题,而不会显著增加计算负担。

2.3整体流程

GSFusion整体的pipeline如下图所示。在每个时间步长中,它采用一对RGB-D图像作为输入。深度数据融合到基于八叉树的TSDF网格中捕获几何结构,同时基于对比度使用四叉树对RGB图像进行分割。如果没有相邻的高斯,则通过检查其最近的体素,在一个象限的反投影中心初始化一个新的3D高斯。最后,作者通过最小化渲染图像和输入RGB之间的光度损失来优化高斯参数。并且维护一个关键帧集来处理遗忘问题。扫描后,系统为后续任务提供体素地图和三维高斯地图。
在这里插入图片描述

3.文章贡献

  1. 提出了一种混合映射系统GSFusion,它结合了高斯飞溅和TSDF融合,可以同时实时生成两种类型的地图。
  2. 利用四叉树分割方案以及体积网格结构来明确控制添加到场景中的新高斯,从而优化模型大小和计算效率。

4.个人思考

这篇关于GS-SLAM论文阅读笔记--GSFusion的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138151

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit