Dynaslam:动态场景下的跟踪、建图和图像修复
摘要-场景刚性假设是SLAM算法的典型特征。这种强假设限制了大多数视觉SLAM系统在人口稠密的现实环境中的使用,而这些环境是服务机器人或自动驾驶汽车等几个相关应用的目标。
在本文中,我们提出了一个基于ORB-SLAM2[1]的视觉SLAM系统DynaSLAM,它增加了动态目标检测和背景绘制的功能。DynaSLAM在单目、立体和RGB-D配置的动态场景中具有鲁棒性。我们能够通过多视图几何、深度学习或两者兼而有之来检测移动物体。拥有一个静态的场景地图,可以在被这些动态对象遮挡的框架背景中进行绘制。
我们在公共单目,立体声和RGB-D数据集中评估我们的系统。我们研究了几种准确性/速度权衡的影响,以评估所提出方法的限制。在高度动态的情况下,DynaSLAM的表现优于标准视觉大满贯基线的准确性。它还可以估计场景静态部分的地图,这对于现实世界环境中的长期应用来说是必须的。
1.引言
同时定位和绘图(SLAM)是许多机器人应用的先决条件,例如无碰撞导航。SLAM技术仅根据机载传感器的数据流,联合估计未知环境的地图和机器人在该地图中的位姿。该地图允许机器人在相同场景中连续定位且没有累积误差。这和里程计方法相反,其整合窗口内的增量运动,并且在重新访问地点时不能修正漂移。
视觉SLAM,其中的主要传感器是一个摄像头,在过去的几年里得到了高度的关注和研究努力。单目相机时代的极简解决方案在尺寸、功率和成本方面具有实际优势,但也存在一些挑战,例如尺度或状态初始化的不可观察性。通过使用更复杂的设置,如立体或RGB-D相机,这些问题得到解决,视觉SLAM系统的鲁棒性可以大大提高。
研究界从许多不同的角度讨论了SLAM。然而,绝大多数方法和数据集都假定是静态环境。结果是它们只能通过将动态内容分类为静态模型的异常值来管理一小部分动态内容。尽管静态假设适用于某些机器人应用,但它限制了视觉SLAM在许多相关情况下的适用性,例如长时间在人口稠密的现实环境中运行的智能自主系统。
视觉SLAM可分为基于特征的方法[2],[3],它们依赖于显著点匹配,只能估计稀疏重建;直接方法[4],[5],[6],通过直接最小化光度误差和TV正则化,原则上可以估计出完全密集的重建。一些直接的方法集中在高梯度区域估计半稠密地图[7],[8]。
考虑到目前的技术水平,上述方法都没有解决场景中动态对象的常见问题,例如行人、自行车或汽车。在可视化SLAM中检测和处理动态对象揭示了建图和跟踪的几个挑战,包括
- 如何在图像中检测到这样的动态物体呢?防止跟踪算法使用属于动态对象的匹配项。防止建图算法将移动对象作为3D地图的一部分。
- 如何完整化3D地图中暂时被运动物体遮挡的部分。
许多应用程序将从这些方面的进展中受益匪浅。其中包括增强现实、自动驾驶汽车和医学成像。所有这些将会从成功复用之前得到的地图。检测和处理动态对象是估计稳定地图的必要条件,对长期应用很有用。如果未检测到动态内容,则它将成为3D地图的一部分,从而使其用于跟踪或重新定位的可用性复杂化。
在这项工作中,我们提出了一种在线算法来处理RGB-D,立体和单目SLAM中的动态目标。这是通过向最先进的ORB-SLAM2系统[1]添加前端阶段来完成的,目的是更准确地跟踪和可重复使用的场景地图。在单目和立体情况下,我们的建议是使用CNN对帧中的先验动态对象(例如人和汽车)进行逐像素分割,这样SLAM算法就不会提取它们的特征。在RGB- D的情况下,我们建议结合多视图几何模型和基于深度学习的算法来检测动态物体,并在将它们从图像中删除后,用正确的场景信息重新绘制被遮挡的背景(图1)。
2.相关工作
在大多数SLAM系统中,动态对象被归类为虚假数据,因此既不包括在地图中,也不用于相机跟踪。最典型的离群值抑制算法是RANSAC(例如在ORB-SLAM[3],[1]中)和鲁棒成本函数(例如在PTAM[2]中)。
有几个SLAM系统可以更具体地处理动态场景内容。在基于特征的SLAM方法中,一些最相关的是:
- Tan等人[9]通过将地图特征投影到当前帧中进行外观和结构验证来检测场景中发生的变化。
- Wangsiripitak和Murray[10]在场景中跟踪已知的三维动态物体。同样,Riazuelo等人[11]通过检测和跟踪人来处理人类活动。
- 最近,Li和Lee[12]的工作使用了深度边缘点,这些点具有关联的权重,表明其属于动态对象的概率。
一般来说,直接方法对场景中的动态对象更敏感。专门为动态场景设计的最相关的作品是:
- Alcantarilla等人[13]通过立体摄像机的场景流表示来检测运动物体。
- Wang和Huang[14]使用RGB光流对场景中的动态物体进行分割。
- Kim等人[15]提出通过计算投影在同一平面上的连续深度图像之间的差值来获取场景的静态部分。
- Sun等[16]计算连续RGB图像之间的强度差。像素分类是通过对量化深度图像的分割来完成的。
所有基于特征的方法和直接的方法,仅从序列[1],[3],[9],[12],[13],[14],[15],[16],[17]中包含的信息映射静态场景部分,都无法估计保持静态时的先验动态对象长期模型,例如停放的汽车或坐着的人。另一方面,Wangsiripitak和Murray[10]以及Riazuelo等人[11]会检测到那些先验的动态物体,但无法检测到静态物体产生的变化,例如,一个人正在推的椅子,或者有人扔的球。即前一种方法可以成功地检测到运动物体,后一种方法可以成功地检测到多个运动物体。我们的提案,DynaSLAM,结合了多视图几何和深度学习来解决这两种情况。类似地,Anrus等人[18]通过结合动态分类器和多视图几何来分割动态对象。
3.系统描述
图2显示了我们系统的概述。首先,RGB通道通过一个CNN,该CNN按像素划分出所有先验的动态内容,例如人或车辆。
在RGB-D的情况下,我们使用多视图几何从两个方面改进了动态内容分割。首先,我们对之前由CNN获得的动态目标进行细化分割。其次,我们将大多数时候静态的对象实例标记为动态新对象实例(即检测在CNN阶段未设置为可移动的移动对象)。
为此,有必要知道相机的姿势,为此已经实现了一个低成本的跟踪模块,以在已经创建的场景地图中定位相机。这些分段的帧是用于获得相机轨迹和场景地图的帧。请注意,如果场景中的移动对象不在CNN类中,则多视图几何阶段仍将检测到动态内容,但准确性可能会降低。一旦完成了相机的完整动态目标检测和定位,我们的目标是用先前视图中的静态信息重建当前帧的遮挡背景。这些合成与增强现实和虚拟现实以及终身地图中的位置识别等应用相关。
在单眼和立体情况下,通过CNN对图像进行分割,使得属于先验动态对象的关键点既不被跟踪也不被建图。在下一个小节(III-A至III-E)中深入描述所有不同阶段。
A. 使用CNN对潜在动态内容进行分割
对于检测动态对象,我们建议使用CNN来获得图像的逐像素语义分割。在我们的实验中,我们使用Mask R-CNN[19],这是对象实例分割的最新技术。Mask R-CNN可以同时获得逐像素语义分割和实例标签。对于这项工作,我们使用逐像素的语义分割信息,但实例标签可能在未来的工作中用于跟踪不同的运动物体。我们使用Matterpor的TensorFlow实现。Mask R-CNN的输入为RGB原始图像。这个想法是将那些可能是动态的或可移动的类(人、自行车、汽车、摩托车、飞机、公共汽车、火车、卡车、船、鸟、猫、狗、马、羊、牛、大象、熊、斑马和长颈鹿)分割开来。我们认为,对于大多数环境,可能出现的动态对象都包含在此列表中。如果需要其他类,在MS COCO[20]上训练的网络可以使用新的训练数据进行微调。
假设输入是大小m×n×3的RGB图像,网络的输出是大小m×n×l的矩阵,其中l是图像中对象的数量。对于每个输出通道i∈L,获得了二进制掩码。通过将所有通道组合到一个通道中,我们可以获得在场景中一个图像中出现的所有动态对象的分割。
B.低成本跟踪
在潜在的动态内容被分割后,使用图像的静态部分跟踪相机的姿势。由于线段轮廓通常成为高梯度区域,因此容易出现突出的点特征。我们不考虑轮廓区域内的特征。
该算法在此阶段实现的跟踪比ORB-SLAM2[1]中的跟踪更简单,因此计算量更轻。它在图像帧中投影地图特征,在图像的静态区域中搜索对应的地图特征,并最小化重投影误差以优化相机姿态。
C.基于Mask R-CNN和多视图几何的动态内容分割
通过使用Mask R-CNN,可以对大多数动态对象进行分割,而不用于跟踪和映射。然而,有些对象无法通过这种方法检测到,因为它们不是先验的动态的,而是可移动的。最新的例子是某人携带的一本书,某人正在移动的一把椅子,甚至是长期绘图中家具的变化。本节将详细介绍用于处理这些情况的方法。
对于每个输入帧,我们选择具有最高重叠的前一个关键帧。这是通过考虑新帧和每个关键帧之间的距离和旋转来完成的,类似于Tan等人[9]。在我们的实验中,重叠关键帧的数量被设置为5,作为动态对象检测的计算成本和准确性之间的折衷。
然后,我们计算每个关键点x从之前的关键帧到当前帧的投影,获得关键点x’,以及它们的投影深度zproj,依据相机运动计算。注意,关键点x来自ORB-SLAM2中使用的特征提取器算法。对于每个关键点,其对应的3D点为X,我们计算x和x’的反向投影之间的夹角,即视差角α。如果这个角度大于30,该点可能被遮挡,从那时起将被忽略。我们观察到,在TUM数据集中,视差大于30的静态对象由于视点差异而被认为是动态的。考虑到重投影误差,我们获得当前帧z中剩余关键点的深度(直接从深度测量中),并将其与zproj进行比较。如果差值z = zproj z超过阈值τz,则关键点x被认为属于动态对象。这个想法如图3所示。为了设置阈值τz,我们在TUM数据集中手动标记了30幅图像的动态对象,并评估了我们的方法在不同阈值τz下的精度和召回率。通过最大化0.7 Precision+0.3 Recall的表达式,我们得出τz= 0.4m是一个合理的选择。
一些标记为动态的关键点位于移动对象的边界上,这可能会导致问题。为了避免这种情况,我们使用深度图像给出的信息。如果一个关键点被设置为动态的,但是深度图中它周围的补丁有很高的方差,我们将标签更改为静态。
到目前为止,我们知道哪些关键点属于动态对象,哪些关键点不属于。为了对所有属于动态对象的像素进行分类,我们在深度图像中围绕动态像素生长区域[21]。RGB帧及其对应的动态蒙版示例如图4a所示。
CNN的结果(图4b)可以与该几何方法的结果相结合,进行全动态目标检测(图4c)。我们可以发现两种方法的优点和局限性,因此有动机将它们结合使用。对于几何方法,主要问题是初始化并不简单,因为它具有多视图的性质。学习方法使用单一视图具有令人印象深刻的性能,不存在这样的初始化问题。但主要的限制是,应该是静态的对象可以移动,而该方法无法识别它们。最后一种情况可以使用多视图一致性测试来解决。
这两种面对运动目标检测问题的方法如图4所示。在图4a中,我们看到后面的人,这是一个潜在的动态对象,没有被检测到。这有两个原因。首先,RGB-D相机在测量远距离物体深度时面临的困难。其次,可靠的特征存在于图像的已定义部分,也就是附近的部分。尽管如此,这个人还是被深度学习方法检测到了(图4b)。除此之外,一方面,我们在图4a中看到,不仅检测到图像前面的人,而且还检测到他拿着的书和他坐的椅子。另一方面,在图4b中,两个人是唯一检测到的动态对象,而且他们的分割也不太准确。如果只使用深度学习方法,就会有一本漂浮的书留在图像中,并错误地成为3D地图的一部分。
由于两种方法的优缺点,我们认为它们是互补的,因此它们的组合使用是实现精确跟踪和映射的有效方法。为了实现这一目标,如果用两种方法都检测到一个对象,则分割掩码应该是几何方法的掩码。如果一个对象只被基于学习的方法检测到,分割掩码也应该包含这个信息。上一段示例的最终分割图像如图4c所示。分割的动态部分从当前框架和地图中移除。
D.跟踪和建图
该阶段系统的输入包含RGB和深度图像,以及它们的分割掩码。我们提取静态图像片段中的ORB特征。由于线段轮廓是高梯度区域,因此必须移除落在该交点上的关键点。
E.背景绘制
对于每一个被移除的动态对象,我们的目标是用之前视图中的静态信息重新绘制被遮挡的背景,这样我们就可以合成一个没有移动内容的逼真图像。我们认为,这种包含环境静态结构的合成帧,对于虚拟现实和增强现实等应用,以及地图创建后的重新定位和相机跟踪都很有用。
因为我们知道之前和当前帧的位置,所以我们将所有之前关键帧(在我们的实验中是最后20帧)的RGB和深度通道投射到当前帧的动态片段中。一些空白没有对应关系,被留白;一些区域不能被绘制,因为它们对应的场景部分到目前为止还没有出现在关键帧中,或者,如果它出现了,它没有有效的深度信息。这些缝隙不能用几何方法重建,需要更精细的绘画技术。图5显示了来自TUM基准测试的不同序列的三个输入帧的合成图像。注意动态内容是如何被成功分割和移除的。此外,大多数分割的部分已经正确地加入了来自静态背景的信息。这些合成帧的另一个应用是:如果将帧的动态区域与静态内容进行绘制,则系统可以使用绘制的图像作为静态假设下的SLAM系统。
5.实验