专栏名称: 点云PCL
公众号将会推送基于PCL库的点云处理,SLAM,三维视觉,高精地图相关的文章。公众号致力于理解三维世界相关内容的干货分享。不仅组织技术交流群,而且组建github组群,有兴趣的小伙伴们可以自由的分享。欢迎关注参与交流或分享。
目录
相关文章推荐
于小戈  ·  去父留子,还能玩上瘾? ·  昨天  
杭州日报  ·  休2上4休1!明天上班别忘了... ·  2 天前  
杭州交通918  ·  刚刚,杭州明确:延长至凌晨1:15! ·  2 天前  
杭州交通918  ·  就在刚刚!杭州正式进入…… ·  3 天前  
51好读  ›  专栏  ›  点云PCL

NGD-SLAM:在没有GPU的动态环境中实现实时SLAM

点云PCL  · 公众号  ·  · 2024-07-10 08:00

正文

文章:NGD-SLAM: Towards Real-Time SLAM for Dynamic Environments without GPU

作者:Yuhao Zhang

编辑:点云PCL


欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。 文章仅做学术分享,如有侵权联系删文。

公众号致力于点云处理,SLAM,三维视觉,高精地图等领域相关内容的干货分享,欢迎各位加入,有兴趣的可联系[email protected] 文章未申请原创 侵权或转载 联系微信cloudpoint9527。

摘要


在动态环境中实现准确且稳健的相机跟踪对视觉SLAM(同时定位与地图构建)来说是一个重大挑战。该领域的最新进展通常涉及使用深度学习技术为动态物体生成掩码,这通常需要GPU才能实时运行(30帧每秒)。因此,本文提出了一种新颖的适用于动态环境的视觉SLAM系统,通过结合掩码预测机制,实现了在CPU上实时运行的性能。这种机制允许深度学习方法和相机跟踪在不同频率下完全并行运行,从而无需相互等待结果。在此基础上本文进一步引入了一种双阶段光流跟踪方法,并采用光流和ORB特征的混合使用,大大提高了系统的效率和稳健性。与最先进的方法相比,该系统在动态环境中保持了高定位精度,同时在没有任何硬件加速的情况下,在单台笔记本CPU上实现了56帧每秒的跟踪帧率,从而证明了即使没有GPU支持,深度学习方法在动态SLAM中依然是可行的。据现有信息,这也是第一个实现这一目标的SLAM系统。

项目主页:https://github.com/yuhaozhang7/NGD-SLAM。

主要贡献


本文提出了NGD-SLAM(No GPU Dynamic SLAM)是一个为动态环境设计的实时SLAM系统,无需GPU支持。该系统基于ORB-SLAM3框架,并额外包含一个使用YOLO进行动态目标检测的语义线程。本文的核心创新之一是图1所示的跟踪流程,与其在跟踪过程中专注于部署更轻量的深度学习模型或减少其使用频率,不如将效率挑战视为利用过去信息快速生成所需当前结果的任务。

具体来说本文引入了一种简单但非常有效且与框架无关的掩码预测机制,该机制利用语义线程的先前分割结果来预测当前帧中动态目标的掩码。此机制可以集成到任何视觉SLAM框架中,以实现相机跟踪和动态目标分割的并行操作,从而无需相互等待结果。为了进一步增强稳健性和效率,系统采用了双阶段跟踪方法,使用光流法持续跟踪图像中的动态和静态特征,并结合光流和ORB特征的优势进行相机跟踪。通过全面的实验,NGD-SLAM展示了与最先进方法相似的定位精度,并成为所有基准测试的实时方法中最准确的一个。值得注意的是,该系统在没有任何硬件加速的情况下,在单台笔记本CPU上实现了56帧每秒的跟踪帧率。

内容概述


跟踪流程

图1展示了NGD-SLAM的跟踪流程,首先将第一帧的图像数据传送到语义线程,并将该帧设置为关键帧。其ORB特征通过语义线程的掩码进行提取,以过滤掉动态特征;只有第一帧会等待语义线程提供的掩码。然后系统初始化地图,作为关键帧跟踪的一部分。对于后续帧,系统采用双阶段跟踪,包括跟踪潜在的动态目标,根据掩码预测机制为其生成掩码,并跟踪上一帧中的剩余静态点以估计相机的姿态。接着决定是否设置新的关键帧。如果需要新的关键帧,系统会通过过滤掉动态跟踪过程中生成的掩码内的特征,从当前帧中提取静态ORB特征,并使用ORB特征继续关键帧跟踪过程。

图1:NGD-SLAM的跟踪流程,基于掩码预测机制,动态跟踪过程侧重于使用光流快速跟踪在语义线程中识别出的动态目标,并生成逐像素的掩码以排除动态特征。在静态跟踪过程中,光流法也被用来高效地跟踪非关键帧中的剩余静态特征,同时保持ORB特征匹配,以在关键帧之间建立强数据关联。

语义线程

NGD-SLAM通过添加一个使用YOLO-fastest模型检测动态目标的语义线程来增强实时性能。该线程使用一个输入和输出缓冲区,每个缓冲区各存储一帧新帧或输出帧会替换缓冲区中现有的帧。从跟踪线程传递到输入缓冲区的帧由网络处理,然后移动到输出缓冲区供跟踪线程访问。这个设置确保了语义线程处理最新的输入帧,跟踪线程无需等待语义线程的结果,而是直接从缓冲区获取最新的输出。尽管由于两个线程以不同频率运行存在时间错配,这意味着从输出缓冲区获取的结果对应于之前的某一帧,NGD-SLAM通过使用这一过去的结果来预测当前帧中的动态目标掩码,弥补了这一点。

掩码预测

NGD-SLAM的重要模块之一是与框架无关的掩码预测机制,这也是动态跟踪的基础组件,与深度神经网络的前向过程相比,这种预测速度要快得多,在CPU上处理一次仅需几毫秒。它可以直接适用于任何视觉SLAM框架,并保持其实时性能。图2展示了掩码预测的流程,包括六个组件。

检测: 在语义线程中使用YOLO-fastest模型检测帧中的多个目标,并基于语义信息识别潜在的动态目标。该模型通过OpenCV DNN集成以兼容C++,NGD-SLAM采用该模型是因为其效率高,同时也允许根据需要轻松替换其他目标检测或分割模型。

分割: 使用目标检测模型比使用分割网络更高效,但它仅提供检测目标的边界框。为改善这一点,NGD-SLAM使用深度信息分割这些边界框内的目标。在识别出动态目标(如人)后,它对每个边界框内的像素深度进行排序,并使用中值作为该检测目标的估计深度。边界框会被扩展,所有接近该深度值的像素都会被掩码化。该方法比聚类方法计算效率更高。随后,使用连通组件标记算法排除深度相似但不属于主要目标的对象掩码,并在传递到输出缓冲区之前进行膨胀处理进一步优化掩码。

采样: 在获得识别出的动态目标掩码后,从掩码内提取动态点。图像被划分为15×15的单元格。在每个单元格内,识别出满足FAST关键点标准并被掩码化的像素,选择阈值最高的像素。如果没有合适的FAST关键点,则在该单元格内随机选择一个像素。这个网格结构允许均匀提取动态关键点,由于关键点的独特性及其与高梯度区域的关联性,确保了跟踪的稳定性。

跟踪: 系统利用Lucas-Kanade光流法跟踪采样的动态点,假设关键点的灰度值在不同帧之间保持不变。假设像素在小窗口内均匀移动,可以建立一个优化问题,利用窗口内的像素梯度通过最小化匹配像素的总灰度误差来估计像素运动(dx, dy)。

聚类 :对于当前帧中跟踪的动态点,使用DBSCAN(基于密度的空间聚类算法)对彼此接近的点进行聚类,并将那些显著远离任何聚类的点区分为噪声。使用该方法可以有效区分来自不同动态目标的跟踪点。此外,通过考虑每个跟踪点的2D位置和深度,算法可以有效排除异常值,如显著偏离聚类的点或在2D图像中看似接近但深度差异显著的点。

预测 :在得到聚类后,系统能够确定当前帧中动态实体的位置。因此,首先为每个聚类生成一个粗略的掩码,通常是一个矩形,以覆盖聚类内的所有点。随后,使用每个聚类中点的深度信息将相应的掩码细化为动态目标的精确形状。如图2所示,为当前帧预测的掩码非常精确。

图2:掩码预测流程,检测和分割在语义线程中处理,而跟踪线程使用该结果来预测当前帧中的掩码。

双级跟踪

动态跟踪 :尽管掩码预测机制本身已经算是一种动态跟踪,但其依赖YOLO进行目标检测,有时会导致动态目标跟踪失败。例如,当相机旋转时,YOLO可能难以检测到目标。因此,当语义线程未能提供用于跟踪的掩码时,NGD-SLAM实施了一种简单的解决方案:使用上一帧的预测掩码来预测当前帧的掩码。这种方法允许持续跟踪动态点,直到动态目标不再出现在相机视野中,即使深度神经网络出现问题也不受影响。通过不断从前一帧的掩码中采样新的点进行跟踪,而不是跨多个帧跟踪相同的点,确保了关键点的更新,并增强了跟踪的稳健性(图3)。虽然替代方法涉及从相机姿态旋转部分的四元数表达式(w, x, y, z)中导出滚动值,并使用该值旋转图像进行检测(图4),但动态跟踪的目的是在一般情况下提供稳健的跟踪,因为相机旋转并不是导致检测失败的唯一因素。

图 3:动态物体跟踪。即使深度学习模型完全失败,系统也会在 30 帧内持续跟踪动态物体。

静态跟踪 :与原始的ORB-SLAM3依赖于每个输入帧的ORB特征匹配不同,NGD-SLAM使用光流法来跟踪上一帧的静态关键点。通过将上一帧的3D地图点链接到当前帧中的2D关键点,形成几何约束,并基于运动模型计算当前帧的初始姿态。基于此信息,应用RANSAC(随机样本一致性)算法迭代估计实际姿态并滤除异常值。

这基于两个考虑。首先当前帧中出现动态目标但预测帧中没有出现时,掩码预测机制通常会失败。因此,基于每帧描述符值差异提取新的ORB特征并进行匹配,可能会导致动态点之间的错配或匹配(图5)。相比之下,静态跟踪过程基于图像梯度跨多个帧跟踪相同的静态点,并滤除异常值以进行未来的跟踪,通常更为稳健。尽管关键帧跟踪时会提取新的ORB特征,但这发生在没有足够的静态点跟踪时,表明动态目标在多个帧中已经出现了一段时间。其次,静态跟踪过程跳过了非关键帧的计算量大的ORB特征提取,使跟踪过程更高效。

图5: 静态点跟踪。这些是掩码预测失败的帧,因为动态对象新出现。(顶部)对每帧提取和匹配ORB特征导致与动态点的匹配。(底部)使用光流法跟踪跨多帧的相同静态点。

关键帧跟踪

为了在关键帧之间建立连接,保留了ORB特征以及维护关键ORB-SLAM3组件如共视图和局部地图,这对于稳健的跟踪和高效的数据检索至关重要。当静态跟踪效果不佳时,关键帧跟踪也作为一种备用跟踪方法,因其对光照变化和运动模糊更为稳健。关键帧跟踪通过使用静态跟踪阶段估计的姿态将上一个关键帧的地图点投影到当前帧中,进行匹配和优化。类似于原始的ORB-SLAM3,新的地图点被添加,并将帧传递给局部建图线程进行进一步优化。

实验与结果



为了比较在动态环境下的SLAM算法,选择了包括DynaSLAM、DS-SLAM、CFP-SLAM、RDS-SLAM和TeteSLAM在内的几种最先进的算法以及其他基准方法,此外还评估了去除双阶段跟踪(仅保留掩码预测)的NGD-SLAM,以进行消融研究。选择了来自TUM数据集的四个序列进行实验,这些序列捕捉了两个人围绕桌子移动的场景,其中一个人穿着质地丰富的格子衬衫。这些序列展示了多样的相机运动,包括沿xyz轴的平移、旋转运动(显著的滚转、俯仰和偏航变化)、类似半球体的轨迹以及几乎静止的情况。为了评估准确性,选择了ATE(绝对轨迹误差)和RPE(相对轨迹误差)作为评估指标,RPE的测量间隔设置为1秒(30帧)。对于效率,测量了处理给定功能所需的毫秒数。所有实验均在配备AMD Ryzen 7 4800H CPU和NVIDIA GeForce RTX 2060 GPU的笔记本电脑上进行。

准确性 :表1对比了NGD-SLAM与各种基线方法在ATE的RMSE方面的表现。突出显示了最小误差值,并标出了相应的排名(NGD-SLAM without DST除外,其指示了与基本实现相比误差增加或减少的情况)。显然,DynaSLAM、CFP-SLAM和NGD-SLAM在所有序列中都展示了高精度。然而,DynaSLAM的误差通常略高,而CFP-SLAM在f3/w_rpy序列中表现不佳,因为它们使用的对极约束在旋转场景中效果不佳。

表2和表3展示了RPE的RMSE比较,NGD-SLAM继续保持着最先进的结果。值得注意的是,双阶段跟踪在这里起着关键作用,因为当禁用双阶段跟踪时,系统的ATE和RPE通常会增加。

效率 :表4对比了在这些动态序列中每帧平均处理时间。

实时分析 :系统每帧的平均处理时间为17.88毫秒(56帧/秒),这归功于非关键帧中光流跟踪的高效性。由于只有关键帧跟踪涉及NGD-SLAM的所有组件,进一步将实验分段以评估跟踪关键帧所需的平均时间,使用静态、动态和关键帧跟踪方法,如表5所示。

总结


本文介绍了一种针对动态环境设计的实时视觉SLAM系统,其在CPU上运行,该系统采用了一个独立于框架的掩码预测机制,以减少使用深度学习模型时可能带来的低效率,并同时保持其在动态物体识别中的高准确性。此外还开发了双阶段跟踪方法,以补充掩码预测机制的局限,并进一步提升系统的效率。通过在动态环境数据集上进行实验评估,并与基准方法进行比较,研究表明NGD-SLAM在保持与顶尖算法相当的准确性的同时,能够在单台笔记本电脑CPU上实现实时跟踪,而无需任何硬件加速。这一进展突显了深度学习方法在提升动态环境下SLAM系统效能方面的潜力,即使在没有GPU支持的情况下也能实现。

资源

自动驾驶及定位相关分享

【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法

自动驾驶中基于光流的运动物体检测

基于语义分割的相机外参标定

综述:用于自动驾驶的全景鱼眼相机的理论模型和感知介绍

高速场景下自动驾驶车辆定位方法综述

Patchwork++:基于点云的快速、稳健的地面分割方法

PaGO-LOAM:基于地面优化的激光雷达里程计

多模态路沿检测与滤波方法

多个激光雷达同时校准、定位和建图的框架

动态的城市环境中杆状物的提取建图与长期定位

非重复型扫描激光雷达的运动畸变矫正

快速紧耦合的稀疏直接雷达-惯性-视觉里程计

基于相机和低分辨率激光雷达的三维车辆检测

用于三维点云语义分割的标注工具和城市数据集

ROS2入门之基本介绍

固态激光雷达和相机系统的自动标定

激光雷达+GPS+IMU+轮速计的传感器融合定位方案







请到「今天看啥」查看全文