0

0

超越ORB-SLAM3!SL-SLAM:低光、严重抖动和弱纹理场景全搞定

PHPz

PHPz

发布时间:2024-05-13 15:49:22

|

657人浏览过

|

来源于51CTO.COM

转载

写在前面

今天我们探讨下深度学习技术如何改善在复杂环境中基于视觉的SLAM(同时定位与地图构建)性能。通过将深度特征提取和深度匹配方法相结合,这里介绍了一种多功能的混合视觉SLAM系统,旨在提高在诸如低光条件、动态光照、弱纹理区域和严重抖动等挑战性场景中的适应性。我们的系统支持多种模式,包括拓展单目、立体、单目-惯性以及立体-惯性配置。除此之外,还分析了如何将视觉SLAM与深度学习方法相结合,以启发其他研究。通过在公共数据集和自采样数据上的广泛实验,展示了SL-SLAM在定位精度和跟踪鲁棒性方面优于最先进的SLAM算法。

工程链接:https://github.com/zzzzxxxx111/SLslam.

(大拇指往上滑,点击最上方的卡片关注我,整个操作只会花你 1.328 秒,然后带走未来、所有、免费的干货,万一有内容对您有帮助呢~)

当前SLAM应用背景介绍

SLAM(同时定位与地图构建)是机器人技术、自动驾驶和3D重建中的关键技术,它同时确定传感器的位置(定位)并构建环境的地图。视觉和惯性传感器是最常用的传感设备,相关的解决方案已经被深入讨论和探索。经过几十年的发展,视觉(惯性)SLAM的处理框架已经形成了一个基本框架,包括跟踪、地图构建和回环检测。 在SLAM算法中,跟踪模块负责估计机器人的运动轨迹,地图构建模块用于生成和更新环境地图,回环检测则用来识别已经访问过的位置。这些模块相互协作以实现对机器人状态和环境的感知。 视觉SLAM中常用的算法包括特征点法、直接法和半直接法。在特征点法中,通过提取和匹配特征点来估计相机位姿和三维点云;直接法则通过最小化图像灰度差异来直接

近年来,相关研究集中在提高极端条件下的鲁棒性和适应性。由于SLAM技术的发展历史悠久,有许多基于传统几何方法的SLAM代表性工作,如ORB-SLAM、VINS-Mono、DVO、MSCKF等。然而,仍然存在一些未解决的问题。在诸如低光或动态光照、严重抖动和弱纹理区域等挑战性环境中,由于传统特征提取算法只考虑图像局部信息,而没有考虑图像的结构和语义信息,当遇到上述情况时,现有的SLAM系统的跟踪可能会变得不稳定和无效。 因此,在这些条件下,SLAM系统的跟踪可能会变得不稳定和无效。

深度学习的快速发展为计算机视觉领域带来了革命性的变革。通过利用大量数据训练,深度学习模型能够模拟复杂的场景结构和语义信息,从而提升SLAM系统对场景的理解和表达能力。这种方法主要分为两种途径。第一种是基于深度学习的端到端算法,如Droid-slam、NICE-SLAM、DVI-SLAM。然而,这些方法需要大量的数据进行训练,同时需要高计算资源和存储空间,难以实现实时跟踪。第二种途径称为混合SLAM,它利用深度学习来增强SLAM中的特定模块。混合SLAM充分利用了传统几何方法和深度学习方法的优势,能够在几乎任何约束和语义理解之间找到平衡。尽管目前该领域已有一些研究,但如何有效地整合深度学习技术仍是一个值得进一步研究的方向。

目前,现有的混合SLAM存在一些局限性。DXNet 只是简单地将ORB特征点替换为深度特征点,但仍继续使用传统方法来跟踪这些特征。因此,这可能导致深度特征信息的不连贯。SP-Loop 仅将深度学习特征点引入闭环模块,而在其他地方保留传统的特征点提取方法。因此,这些混合SLAM方法并没有有效且全面地结合深度学习技术,导致在某些复杂场景下跟踪和建图效果的下降。

为了解决这些问题,这里提出了一个基于深度学习的多功能SLAM系统。将Superpoint特征点提取模块整合到系统中,并将其作为唯一的表现形式贯穿始终。此外,在复杂环境中,传统的特征匹配方法经常表现出不稳定性,导致跟踪和建图质量的下降。然而,最近基于深度学习的特征匹配方法的进步已经显示出在复杂环境中实现改进匹配性能的潜力。这些方法利用场景的先验信息和结构细节来增强匹配的有效性。Lightglue作为最新的SOTA(state-of-the-art)匹配方法,因其高效且轻量级的特性,对于需要高实时性能的SLAM系统具有优势。因此,我们已将整体SLAM系统中的特征匹配方法替换为Lightglue,相较于传统方法,提高了鲁棒性和准确性。

在进行Superpoint特征点描述符处理时,我们对其进行了预处理,以与相应的视觉词袋的训练保持一致。当Lightglue结合时,这种方法实现了精确的场景识别效果。同时,为了保持准确性与效率之间的平衡,设计了一种特征点选择策略。考虑到可扩展性、可移植性和实时性能,我们利用ONNX+Runtime库来部署这些深度学习模型。最后,设计了一系列实验来证明方法在多种具有挑战性的场景中提高了SLAM算法的轨迹预测精度和跟踪鲁棒性,如图8所示。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

超越ORB-SLAM3!SL-SLAM:低光、严重抖动和弱纹理场景全搞定

SL-SLAM系统框架

SL-SLAM的系统结构如图2所示,该系统主要有四种传感器配置,即单目、单目惯性、双目和双目惯性。该系统基于ORB-SLAM3作为基线,包含三个主要模块:跟踪、局部建图和回环检测。为了将深度学习模型集成到系统中,使用了ONNX Runtime深度学习部署框架,结合了SuperPoint和LightGlue模型。

对于每个输入图像,系统首先将其输入到SuperPoint网络中,以获取特征点的概率张量和描述符张量。然后,系统使用两帧进行初始化,并对每个后续帧进行粗略跟踪。它进一步通过跟踪局部地图来细化姿态估计。在跟踪失败的情况下,系统要么使用参考帧进行跟踪,要么执行重定位以重新获取姿态。请注意,在粗略跟踪、初始化、参考帧跟踪和重定位中,都使用了LightGlue进行特征匹配。这确保了准确且鲁棒的匹配关系,从而提高了跟踪的有效性。

超越ORB-SLAM3!SL-SLAM:低光、严重抖动和弱纹理场景全搞定

在基线算法中,局部建图线程的主要作用是在实时动态地构建局部地图,包括地图点和关键帧。它利用局部地图执行捆集调整优化,从而减少跟踪误差并增强一致性。局部建图线程使用跟踪线程输出的关键帧,基于LightGlue的三角测量和自适应局部捆集调整(BA)优化来重建精确的地图点。然后区分并移除冗余的地图点和关键帧。

闭环校正线程利用基于SuperPoint描述符训练的关键帧数据库和词袋模型来检索相似的关键帧。通过对SuperPoint描述符进行二值化来增强检索效率。选定的关键帧使用LightGlue进行特征匹配,以进行共同视图几何验证,减少不匹配的可能性。最后,执行闭环融合和全局BA(Bundle Adjustment)来优化整体姿态。

1)Feature Extraction

SuperPoint 网络结构:SuperPoint网络架构主要由三个部分组成:一个共享编码器、一个特征检测解码器和一个描述符解码器。编码器是一个VGG风格的网络,能够降低图像维度并提取特征。特征检测解码器的任务是计算图像中每个像素的概率,以确定其成为特征点的可能性。描述符解码网络利用子像素卷积来减轻解码过程的计算复杂度。然后,网络输出一个半密集描述符,接着应用双三次插值算法来获取完整的描述符。在获取了网络输出的特征点张量和描述符张量之后,为了提高特征提取的鲁棒性,我们采用了一种自适应阈值选择策略来过滤特征点,并进行后处理操作以获取特征点及其描述符。特征提取模块的具体结构如图3所示。

超越ORB-SLAM3!SL-SLAM:低光、严重抖动和弱纹理场景全搞定

自适应特征选择:首先,每个图像,标记为I(W × H),在调整大小以匹配SuperPoint网络的输入图像尺寸(W′ × H′)之前,会先转换为灰度图像。图像过小可能会阻碍特征提取,从而降低跟踪性能,而图像过大则可能导致过高的计算需求和内存使用。因此,为了平衡特征提取的准确性和效率,本文选择W′ = 400和H′ = 300。随后,一个大小为W′ × H′的张量被送入网络,产生两个输出张量:得分张量S,以及描述符张量D。一旦获得特征点得分张量和特征描述符,下一步就是设置一个阈值th来过滤特征点。

在具有挑战性的场景中,每个特征点的置信度会降低,如果采用固定的置信度阈值th,则可能导致提取的特征数量减少。为了解决这个问题,我们引入了自适应的SuperPoint阈值设置策略。这种自适应方法根据场景动态调整特征提取的阈值,从而在具有挑战性的场景中实现更鲁棒的特征提取。自适应阈值机制考虑了两个因素:特征内部关系和帧间特征关系。

在具有挑战性的场景中,每个特征点的置信度会降低,如果采用固定的置信度阈值th,则可能导致提取的特征数量减少。为了解决这个问题,引入了自适应的SuperPoint阈值设置策略。这种自适应方法根据场景动态调整特征提取的阈值,从而在具有挑战性的场景中实现更鲁棒的特征提取。自适应阈值机制考虑了两个因素:特征内部关系和帧间特征关系。

2)特征匹配与前端

LightGlue网络结构:LightGlue模型由多个相同的层组成,这些层共同处理两组特征。每一层都包含自注意力和交叉注意力单元,用于更新点的表示。每一层中的分类器决定推断的停止,避免了不必要的计算。最后,一个轻量级的头部计算部分匹配得分。网络的深度会根据输入图像的复杂性动态调整。如果图像对很容易匹配,由于标记的高置信度,可以实现早期终止。因此,LightGlue具有更短的运行时间和更低的内存消耗,使其适合集成到需要实时性能的任务中。

Mureka
Mureka

Mureka是昆仑万维最新推出的一款AI音乐创作工具,输入歌词即可生成完整专属歌曲。

下载

相邻帧之间的时间间隔,通常只有几十毫秒,ORB-SLAM3假设相机在这段短暂的时间内进行匀速运动。它利用前一帧的姿态和速度来估计当前帧的姿态,并使用这个估计的姿态进行投影匹配。然后,它在一定范围内搜索匹配点,并据此细化姿态。然而,在现实中,相机的运动可能并不总是均匀的。突然的加速、减速或旋转都可能对这种方法的有效性产生不利影响。Lightglue可以通过直接在当前帧和前一帧之间匹配特征来有效解决这个问题。然后,它使用这些匹配的特征来细化初始姿态估计,从而减少突然加速或旋转的负面影响。

在先前帧中图像跟踪失败的情况下,无论是由于突然的相机运动还是其他因素,都需要使用参考关键帧进行跟踪或重新定位。基线算法采用词袋(Bag-of-Words, BoW)方法来加速当前帧和参考帧之间的特征匹配。然而,BoW方法将空间信息转换为基于视觉词汇的统计信息,可能会丢失特征点之间的准确空间关系。此外,如果BoW模型中使用的视觉词汇不足或不够代表性,它可能无法捕获场景的丰富特征,导致匹配过程中的不准确。

结合Lightglue的跟踪:由于相邻帧之间的时间间隔很短,通常只有几十毫秒,ORB-SLAM3假设相机在这段时间内进行匀速运动。它使用前一帧的姿态和速度来估计当前帧的姿态,并使用这个估计的姿态进行投影匹配。然后,它在一定范围内搜索匹配点,并据此细化姿态。然而,在现实中,相机的运动可能并不总是均匀的。突然的加速、减速或旋转都可能对这种方法的有效性产生不利影响。Lightglue可以有效地解决这个问题,通过直接在当前帧和前一帧之间匹配特征。然后,它使用这些匹配的特征来细化初始姿态估计,从而减少突然加速或旋转的负面影响。

在先前帧中图像跟踪失败的情况下,无论是由于突然的相机运动还是其他因素,都需要使用参考关键帧进行跟踪或重新定位。基线算法采用词袋(Bag-of-Words, BoW)方法来加速当前帧和参考帧之间的特征匹配。然而,BoW方法将空间信息转换为基于视觉词汇的统计信息,可能会丢失特征点之间的准确空间关系。此外,如果BoW模型中使用的视觉词汇不足或不够代表性,它可能无法捕获场景的丰富特征,导致匹配过程中的不准确。

超越ORB-SLAM3!SL-SLAM:低光、严重抖动和弱纹理场景全搞定

为了解决这些问题,在整个系统中用Lightglue替换了BoW方法。这一改变显著提高了在大规模变换下成功跟踪和重新定位的概率,从而增强了我们的跟踪过程的准确性和鲁棒性。图4展示了不同匹配方法的有效性。可以观察到,基于Lightglue的匹配方法相比ORB-SLAM3中使用的基于投影或词袋(Bag-of-Words)的匹配方法,表现出了更优的匹配性能。因此,在SLAM操作过程中,它使得地图点的跟踪更加均匀和稳定,如图6所示。

超越ORB-SLAM3!SL-SLAM:低光、严重抖动和弱纹理场景全搞定

结合Lightglue的局部建图:在局部建图线程中,新地图点的三角化是通过当前关键帧及其邻近关键帧来完成的。为了获得更精确的地图点,需要与具有更大基线的关键帧进行匹配。然而,ORB-SLAM3使用词袋(Bag-of-Words, BoW)匹配来实现这一点,但当基线较大时,BoW特征匹配的性能会降低。相比之下,Lightglue算法非常适合与大基线进行匹配,并能无缝地集成到系统中。通过使用Lightglue进行特征匹配并对匹配点进行三角化,可以恢复更全面、更高质量的地图点。

这通过在关键帧之间建立更多连接,以及通过共同优化共同可见的关键帧和地图点的姿态来稳定跟踪,从而增强了局部建图能力。地图点的三角化效果如图6所示。可以观察到,与ORB-SLAM3相比,我们的方法构建的地图点能更好地反映场景的结构信息。此外,它们在空间上的分布更加均匀和广泛。

3)Loop closure

词袋深度描述符:在闭环检测中使用的词袋方法是基于视觉词汇的方法,借鉴了自然语言处理中词袋的概念。它首先进行字典的离线训练。最初,使用K-means算法将训练图像集中检测到的特征描述符聚类成k个集合,形成字典树的第一级。随后,在每个集合内进行递归操作,最终得到深度为L、分支数为k的最终字典树,建立视觉词汇表。每个叶节点都被视为一个词汇。

一旦字典训练完成,在算法执行期间,会从当前图像的所有特征点中在线生成词袋向量和特征向量。主流SLAM框架倾向于使用手动设置的二进制描述符,因为它们具有较小的内存占用和简单的比较方法。为了进一步提高方法效率,SP-Loop 使用期望值为0、标准差为0.07的高斯分布来表示超点描述符的值。因此,可以将超点的256维浮点描述符进行二进制编码,以提高视觉位置识别的查询速度。二进制编码如等式4所示。

超越ORB-SLAM3!SL-SLAM:低光、严重抖动和弱纹理场景全搞定

基本流程:在SLAM中的闭环检测通常涉及三个关键阶段:寻找初始闭环候选关键帧、验证闭环候选关键帧以及执行闭环校正和全局捆绑调整(Bundle Adjustment,BA)。

启动过程的第一步是识别初始闭环候选关键帧。这通过利用之前训练的DBoW3词袋模型来实现。识别出与当前帧Ka具有共同词汇的关键帧,但排除与Ka共同可见的关键帧。计算与这些候选关键帧相关的共同可见关键帧的总分。从闭环候选关键帧中得分最高的前N组中,选择得分最高的关键帧。这个选定的关键帧,表示为Km。

接下来,需要确定从Km到当前关键帧Ka的相对姿态变换Tam。在ORB-SLAM3中,使用基于词袋的特征匹配方法来匹配当前关键帧与候选关键帧Km及其共同可见的关键帧Kco。值得注意的是,由于lightglue算法大大提高了匹配效率,因此将当前帧与候选帧Km进行匹配会产生高质量的地图点对应。然后,应用RANSAC算法消除异常值,并求解Sim(3)变换以确定初始相对姿态Tam。为了避免错误的位置识别,将对候选关键帧进行几何验证,后续步骤与ORB-SLAM3类似。

实验对比分析

超越ORB-SLAM3!SL-SLAM:低光、严重抖动和弱纹理场景全搞定超越ORB-SLAM3!SL-SLAM:低光、严重抖动和弱纹理场景全搞定超越ORB-SLAM3!SL-SLAM:低光、严重抖动和弱纹理场景全搞定超越ORB-SLAM3!SL-SLAM:低光、严重抖动和弱纹理场景全搞定超越ORB-SLAM3!SL-SLAM:低光、严重抖动和弱纹理场景全搞定

超越ORB-SLAM3!SL-SLAM:低光、严重抖动和弱纹理场景全搞定

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

480

2023.08.10

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

402

2023.08.14

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

345

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2074

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

347

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

255

2023.09.05

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

322

2023.10.09

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

410

2023.10.16

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 8.6万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.6万人学习

Rust 教程
Rust 教程

共28课时 | 4.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号