跳转至

DS-SLAM

2274 个字 预计阅读时间 8 分钟

Introduction

使用语义分割网络和光流相结合的方法减少视觉 SLAM 中动态物体造成的影响。

  1. 基于 ORB-SLAM2 提出了动态环境中的完整语义 SLAM 系统(DS-SLAM,可以减少动态对象对姿态估计的影响。 该系统的有效性在 TUM RGB-D 数据集 上进行评估。 结果表明,DS-SLAM 在动态环境中的准确性和鲁棒性方面明显优于 ORB-SLAM2。 该系统还与机器人操作系统(ROS)集成,并通过在真实环境中对机器人进行 DS-SLAM 测试来验证其性能。

2. 将语义分割网络单独的放在一个线程当中,将语义分割和运动一致性检查的方法(光流法(通过计算光流的不一致性来区分静态背景和运动目标)相结合,过滤掉场景中的动态物体。从而提高了定位模块和建图模块在动态场景下的鲁棒性和准确性。

  1. DS-SLAM 创建一个单独的线程来构建一个密集的语义 3D 八叉树图 。密集语义 3D 八叉树图采用 log-odds score(对数优势记分法) 方法过滤掉不稳定的体素并更新这些体素的语义。

在以前的工作中,语义图通常由两部分组成:几何部分和语义部分。语义方法预先训练了对象识别子系统,并将语义信息附加到识别的对象模型上。他们的工作仅集中在语义映射和对象识别上,而语义信息在其他部分的信息却没有很好地使用。近期工作利用场景中的几何属性和语义属性共同估计相机的姿势,点和对象,从而显著提高了对象识别的准确性。

在本文中,语义信息不仅用于生成基于八叉树的环境表示,而且还用于在动态环境中跟踪过程中过滤异常值。

SYSTEM INTRUDUCTION

Framework of DS-SLAM

Kinect2 捕获的原始 RGB 图像在跟踪线程和语义分割线程中同时进行处理。跟踪线程首先提取 ORB 特征点,然后粗略检查特征点的移动一致性并保存潜在的异常值。然后跟踪线程等待具有由语义分割线程预测的像素级语义标签的图像。分割结果到达后,将根据分割结果和之前检测到的潜在异常值,丢弃位于运动物体中的 ORB 特征点异常值。然后,通过匹配其余的稳定特征点来计算变换矩阵。

Semantic Segmentation

DS-SLAM 采用 SegNet 提供基于 caffe 的像素级实时语义分割。在 PASCAL VOC 数据集上训练的 SegNet 总共可以分割 20 个类。在实际应用中,人最有可能是动态对象,因此我们假设位于人身上的特征点最有可能是异常值。

Moving Consistency Check

经过语义分割的模块后,可以得到一个分割的 Mask 的,所以现在的任务就是去确定,某个关键点是否是移动的,如果有一定数量的移动点落在了某一个分割出来的物体轮廓内部,那这个物体就被视为动态,上面所有的特征点都会被剔除。

判断动态点步骤:

  1. 计算光流金字塔得到当前帧中已经匹配的特征点
  2. 如果匹配点对离图像的边缘太近,或者各自以两个相匹配的点为中心,其 3x3 区域范围内像素值差异太大,这个匹配点就会被丢弃
  3. 使用 RANSAC 的方法(使用最多内点)找到基础矩阵 F
  4. 使用基础矩阵计算当前帧的极线,已知上一帧中的特征点像素位置为 \(p_1=[u_1, v_1, 1]\),这个点在当前帧中对应的位置为 \(p_2=[u_2, v_2, 1]\),然后就可以求出点 \(p_1\) 投影到当前帧中的极线 \(I_1\)
\[I_1 = \begin{pmatrix} X \\ Y \\ Z \end{pmatrix} Fp_1 = F \begin{pmatrix} u_1 \\ v_1 \\ 1 \end{pmatrix} \]
  1. 计算匹配的特征点到它对应极线的距离,如果这个距离超过阈值则被视为移动点,反之为静态点。距离的计算方法为:
\[ D = \frac{|P_2^\top F P_1|}{\sqrt{\parallel X \parallel^2 + \parallel Y \parallel^2}} \]

Outlier Rejection

由于人体等运动物体的柔性变形和复杂运动,移动一致性检查方法很难提取完整动态区域的轮廓,更何况提取整个轮廓的时间开销非常大。在 DS-SLAM 中,由于采用了语义分割网络,可以很容易地获得物体的完整轮廓。我们的想法是将语义信息和移动一致性检查结果结合起来,完成两级语义知识库的建立:

  1. 对象是否移动。如果在分割对象的轮廓中存在通过移动一致性检查而产生的一定数量的动态点,则确定该对象正在移动。
  2. 如果确定分割对象正在移动,则删除位于对象轮廓中的所有特征点。通过这种方式,可以精确地消除异常值。此外,错误分割的影响也可以在一定程度上降低。

此外,可以充分利用跟踪线程等待另一个线程的语义分割结果的时间。在等待期间,可以进行移动一致性检查。在接下来的实验结果部分,表 IV 给出了 DS-SLAM 中的消耗时间。可以看出,在跟踪线程中使用的时间大约等于语义分割线程。

在本文的其余部分中,我们将人类作为动态对象的典型代表。从理论上讲,DS-SLAM 适用于任何多个已识别和分段的动态对象。

语义分割结果出来后,如果没有人被检测到,那么所有的 ORB 特征将直接与最后一帧匹配以预测姿势。否则,请使用移动一致性检查结果来确定人员是否在移动。如果确定人是静态的,则直接预测姿势,否则在匹配之前删除所有属于人的轮廓内的 ORB 特征点。这样,可以显着降低动态对象的影响。

Dense semantic 3D octo-tree map building

语义八叉树映射线程从跟踪线程获取新的关键帧,从语义分割线程获取分割结果。关键帧的变换矩阵和深度图像用于生成局部点云。然后,本地点云将被转换并维护在全局八点树地图中。我们采用八叉树表示,是因为它灵活,紧凑且可更新。八元树地图被高效存储,并且易于用于导航。

语义信息被合并到八叉树地图中。八叉树地图中的每个体素都与特定的颜色相关联,并且每种颜色都代表一个语义标签。例如,红色的体素代表它属于沙发,而粉红色的体素代表它属于一个人。建模和语义融合的所有过程均以概率方式完成,因此可以方便地更新体素的属性。这样,密集的语义 3D 八叉树地图可以为移动机器人完成高级任务提供基础。

DS-SLAM 面向处理动态环境,因此动态对象不应该存在于地图中。语义分割结果可以帮助我们有效地过滤掉动态对象。然而,语义分割的准确性是有限的。在复杂情况下,例如对象相互重叠,语义分割结果可能不完整甚至错误。为了解决这个问题,DS-SLAM 中使用了 log-odds score(对数优势记分法)来最小化动态对象的影响。 log-odds score 用于表示单个体素被定量占用的可能性。令 p 表示一个体素被占用的概率,l 表示该概率的 log-odds score。 可以通过 logit 变换计算:

\[ l = logit(p) = \log (\frac{p}{1-p}) \\ p = logit^{-1}(l) = \frac{\exp(l)}{\exp(l) + 1} \\ L(n | z_{1:t+1}) = L(n | z_{1:t-1}) + L(n | z_t) \]

如果体素 n 被观察到被占用那么 \(L=\tau\),否则为 0。增量 \(\tau\) 是一个预定义的值。当重复观察到该体素被占用时,该体素的 log-odds score 会增加,否则会减少。一个体素的占据概率 p 可以通过逆 logit 变换来计算。只有当占用概率 p 大于预先定义的阈值时,才认为体素被占用,并将在八叉树图中可视化。换言之,被观察到被多次占据的体素被认为是稳定占据体素。使用这种方法,我们可以很好地处理动态环境中的地图构建问题。

EXPERIMENTAL RESULTS

略。


最后更新: 2024年3月20日 21:20:49
创建日期: 2024年3月20日 21:20:49
回到页面顶部