本文经自动驾驶之心公众号授权转载,转载请联系出处。
写在前面
今天我们探讨下深度学习技术如何改善在复杂环境中基于视觉的SLAM(同时定位与地图构建)性能。通过将深度特征提取和深度匹配方法相结合,这里介绍了一种多功能的混合视觉SLAM系统,旨在提高在诸如低光条件、动态光照、弱纹理区域和严重抖动等挑战性场景中的适应性。我们的系统支持多种模式,包括单目、立体、单目-惯性以及立体-惯性配置。除此之外,还分析了如何将视觉SLAM与深度学习方法相结合,以启发其他研究。通过在公共数据集和自采样数据上的广泛实验,展示了SL-SLAM系统相较于传统方法的优势。实验结果表明,SL-SLAM在定位精度和跟踪鲁棒性方面优于最先进的SLAM算法。
工程链接:https://github.com/zzzzxxxx111/SLslam.
(大拇指往上滑,点击最上方的卡片关注我,整个操作只会花你 1.328 秒,然后带走未来、所有、免费的干货,万一有内容对您有帮助呢~)
当前SLAM应用背景介绍
SLAM(同时定位与地图构建)是机器人技术、自动驾驶和3D重建中的关键技术,它同时确定传感器的位置(定位)并构建环境的地图。视觉和惯性传感器是最常用的传感设备,相关的解决方案已经被深入讨论和探索。经过几十年的发展,视觉(惯性)SLAM的处理架构已经形成了一个基本框架,包括跟踪、地图构建和回环检测。
近年来,相关研究集中在提高极端条件下的鲁棒性和适应性。由于SLAM技术的发展历史悠久,有许多基于传统几何方法的SLAM代表性工作,如ORBSLAM、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所示。
SL-SLAM系统框架
SL-SLAM的系统结构如图2所示,该系统主要有四种传感器配置,即单目、单目惯性、双目和双目惯性。该系统基于ORB-SLAM3作为基线,包含三个主要模块:跟踪、局部建图和回环检测。为了将深度学习模型集成到系统中,使用了ONNX Runtime深度学习部署框架,结合了SuperPoint和LightGlue模型。
对于每个输入图像,系统首先将其输入到SuperPoint网络中,以获取特征点的概率张量和描述符张量。然后,系统使用两帧进行初始化,并对每个后续帧进行粗略跟踪。它进一步通过跟踪局部地图来细化姿态估计。在跟踪失败的情况下,系统要么使用参考帧进行跟踪,要么执行重定位以重新获取姿态。请注意,在粗略跟踪、初始化、参考帧跟踪和重定位中,都使用了LightGlue进行特征匹配。这确保了准确且鲁棒的匹配关系,从而提高了跟踪的有效性。
在基线算法中,局部建图线程的主要作用是在实时动态地构建局部地图,包括地图点和关键帧。它利用局部地图执行捆集调整优化,从而减少跟踪误差并增强一致性。局部建图线程使用跟踪线程输出的关键帧,基于LightGlue的三角测量和自适应局部捆集调整(BA)优化来重建精确的地图点。然后区分并移除冗余的地图点和关键帧。
闭环校正线程利用基于SuperPoint描述符训练的关键帧数据库和词袋模型来检索相似的关键帧。通过对SuperPoint描述符进行二值化来增强检索效率。选定的关键帧使用LightGlue进行特征匹配,以进行共同视图几何验证,减少不匹配的可能性。最后,执行闭环融合和全局BA(Bundle Adjustment)来优化整体姿态。
1)Feature Extraction
SuperPoint 网络结构:SuperPoint网络架构主要由三个部分组成:一个共享编码器、一个特征检测解码器和一个描述符解码器。编码器是一个VGG风格的网络,能够降低图像维度并提取特征。特征检测解码器的任务是计算图像中每个像素的概率,以确定其成为特征点的可能性。描述符解码网络利用子像素卷积来减轻解码过程的计算复杂度。然后,网络输出一个半密集描述符,接着应用双三次插值算法来获取完整的描述符。在获取了网络输出的特征点张量和描述符张量之后,为了提高特征提取的鲁棒性,我们采用了一种自适应阈值选择策略来过滤特征点,并进行后处理操作以获取特征点及其描述符。特征提取模块的具体结构如图3所示。
自适应特征选择:首先,每个图像,标记为I(W × H),在调整大小以匹配SuperPoint网络的输入图像尺寸(W′ × H′)之前,会先转换为灰度图像。图像过小可能会阻碍特征提取,从而降低跟踪性能,而图像过大则可能导致过高的计算需求和内存使用。因此,为了平衡特征提取的准确性和效率,本文选择W′ = 400和H′ = 300。随后,一个大小为W′ × H′的张量被送入网络,产生两个输出张量:得分张量S,以及描述符张量D。一旦获得特征点得分张量和特征描述符,下一步就是设置一个阈值th来过滤特征点。
在具有挑战性的场景中,每个特征点的置信度会降低,如果采用固定的置信度阈值th,则可能导致提取的特征数量减少。为了解决这个问题,我们引入了自适应的SuperPoint阈值设置策略。这种自适应方法根据场景动态调整特征提取的阈值,从而在具有挑战性的场景中实现更鲁棒的特征提取。自适应阈值机制考虑了两个因素:特征内部关系和帧间特征关系。
在具有挑战性的场景中,每个特征点的置信度会降低,如果采用固定的置信度阈值th,则可能导致提取的特征数量减少。为了解决这个问题,引入了自适应的SuperPoint阈值设置策略。这种自适应方法根据场景动态调整特征提取的阈值,从而在具有挑战性的场景中实现更鲁棒的特征提取。自适应阈值机制考虑了两个因素:特征内部关系和帧间特征关系。
2)特征匹配与前端
LightGlue网络结构:LightGlue模型由多个相同的层组成,这些层共同处理两组特征。每一层都包含自注意力和交叉注意力单元,用于更新点的表示。每一层中的分类器决定推断的停止,避免了不必要的计算。最后,一个轻量级的头部计算部分匹配得分。网络的深度会根据输入图像的复杂性动态调整。如果图像对很容易匹配,由于标记的高置信度,可以实现早期终止。因此,LightGlue具有更短的运行时间和更低的内存消耗,使其适合集成到需要实时性能的任务中。
相邻帧之间的时间间隔,通常只有几十毫秒,ORB-SLAM3假设相机在这段短暂的时间内进行匀速运动。它利用前一帧的姿态和速度来估计当前帧的姿态,并使用这个估计的姿态进行投影匹配。然后,它在一定范围内搜索匹配点,并据此细化姿态。然而,在现实中,相机的运动可能并不总是均匀的。突然的加速、减速或旋转都可能对这种方法的有效性产生不利影响。Lightglue可以通过直接在当前帧和前一帧之间匹配特征来有效解决这个问题。然后,它使用这些匹配的特征来细化初始姿态估计,从而减少突然加速或旋转的负面影响。
在先前帧中图像跟踪失败的情况下,无论是由于突然的相机运动还是其他因素,都需要使用参考关键帧进行跟踪或重新定位。基线算法采用词袋(Bag-of-Words, BoW)方法来加速当前帧和参考帧之间的特征匹配。然而,BoW方法将空间信息转换为基于视觉词汇的统计信息,可能会丢失特征点之间的准确空间关系。此外,如果BoW模型中使用的视觉词汇不足或不够代表性,它可能无法捕获场景的丰富特征,导致匹配过程中的不准确。
结合Lightglue的跟踪:由于相邻帧之间的时间间隔很短,通常只有几十毫秒,ORB-SLAM3假设相机在这段时间内进行匀速运动。它使用前一帧的姿态和速度来估计当前帧的姿态,并使用这个估计的姿态进行投影匹配。然后,它在一定范围内搜索匹配点,并据此细化姿态。然而,在现实中,相机的运动可能并不总是均匀的。突然的加速、减速或旋转都可能对这种方法的有效性产生不利影响。Lightglue可以有效地解决这个问题,通过直接在当前帧和前一帧之间匹配特征。然后,它使用这些匹配的特征来细化初始姿态估计,从而减少突然加速或旋转的负面影响。
在先前帧中图像跟踪失败的情况下,无论是由于突然的相机运动还是其他因素,都需要使用参考关键帧进行跟踪或重新定位。基线算法采用词袋(Bag-of-Words, BoW)方法来加速当前帧和参考帧之间的特征匹配。然而,BoW方法将空间信息转换为基于视觉词汇的统计信息,可能会丢失特征点之间的准确空间关系。此外,如果BoW模型中使用的视觉词汇不足或不够代表性,它可能无法捕获场景的丰富特征,导致匹配过程中的不准确。
为了解决这些问题,在整个系统中用Lightglue替换了BoW方法。这一改变显著提高了在大规模变换下成功跟踪和重新定位的概率,从而增强了我们的跟踪过程的准确性和鲁棒性。图4展示了不同匹配方法的有效性。可以观察到,基于Lightglue的匹配方法相比ORB-SLAM3中使用的基于投影或词袋(Bag-of-Words)的匹配方法,表现出了更优的匹配性能。因此,在SLAM操作过程中,它使得地图点的跟踪更加均匀和稳定,如图6所示。
结合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所示。
基本流程:在SLAM中的闭环检测通常涉及三个关键阶段:寻找初始闭环候选关键帧、验证闭环候选关键帧以及执行闭环校正和全局捆绑调整(Bundle Adjustment,BA)。
启动过程的第一步是识别初始闭环候选关键帧。这通过利用之前训练的DBoW3词袋模型来实现。识别出与当前帧Ka具有共同词汇的关键帧,但排除与Ka共同可见的关键帧。计算与这些候选关键帧相关的共同可见关键帧的总分。从闭环候选关键帧中得分最高的前N组中,选择得分最高的关键帧。这个选定的关键帧,表示为Km。
接下来,需要确定从Km到当前关键帧Ka的相对姿态变换Tam。在ORB-SLAM3中,使用基于词袋的特征匹配方法来匹配当前关键帧与候选关键帧Km及其共同可见的关键帧Kco。值得注意的是,由于lightglue算法大大提高了匹配效率,因此将当前帧与候选帧Km进行匹配会产生高质量的地图点对应。然后,应用RANSAC算法消除异常值,并求解Sim(3)变换以确定初始相对姿态Tam。为了避免错误的位置识别,将对候选关键帧进行几何验证,后续步骤与ORB-SLAM3类似。