常规的SLAM算法首先假设环境中所有物体均处于静止的状态。而一些能够在动态环境中运行的SLAM系统,只是将环境中的动态物体视为异常值并将他们从环境中剔除,再使用常规的SLAM算法进行处理。这严重影响SLAM在自动驾驶中的应用。
MonoDOS通过两种方式对常规SLAM进行扩展。其一,具有对象感知功能,不仅可以检测跟踪关键点,还可以检测跟踪具有语义含义的对象。其次,它可以处理带有动态对象的场景并跟踪对象运动。
但小伙伴要注意一点,并非所有OSLAM都是动态的,也不是所有动态SLAM系统都需要对象感知。SLAM ++ (CVPR 2013)完成了OSLAM的开创性工作, 但仍然需要一定的静态场景。一些动态SLAM系统通过假设刚体以及速度恒定,来约束和改善姿态估计结果,但其中并没有明确的对象概念。
动态对象SLAM的元素
DOS系统引入了对象的概念,这个概念具有以下几个内容。首先,需要从单个图像帧中提取对象,就相当于常规SLAM系统中的关键点(例如ORB-SLAM中的ORB特征点)提取阶段。该阶段将给出2D或3D对象检测结果。现阶段单目3D对象检测取得了很大进展。其次,它的数据关联性更加复杂。静态SLAM只关心图像中的关键点,因此静态SLAM的数据关联只是关键帧特征向量的匹配。对于动态SLAM我们必须对帧中的关键点和对象之间执行数据关联。第三,作为传统SLAM中Bundle Adjustment的拓展,我们必须为这个处理过程添加跟踪对象(tracklet)和动态关键点,其次还可以利用运动模型中的速度约束。
我们制作了以下图表来表示DOS的三个过程。绿色方框代表数据关联过程,蓝色方框代表BA过程,红色方块是BA调整的因子图。
典型动态对象SLAM的处理过程
为什么需要对象检测?
考虑到这三个基本过程,我们可以提出一个问题:为什么在SLAM中引入动态对象?首先,假定对象是具有固定形状和大小的刚体。其次假定这些对象在物理上具有简单且符合要求的运动模型,该模型最好可以随时间推移进行一定的调整。因此,可以通过少量参数来描述对象大小和姿态变化。另一方面,对象的引入可以为BA调整阶段提供更多的约束条件。这将提高SLAM系统的鲁棒性。
接下来我们将介绍近些年来较为优秀的论文,我们将介绍篇论文中上述的的三个基本过程。
CubeSLAM:单目3D对象SLAM(TRO 2019)
这篇文章可以说是DOS中最全面的了。cubeSLAM的主要贡献之一就是巧妙地将长方体的大小和位置集成到因子图优化中,并使用运动模型来限制长方体的可能运动,优化了物体的速度。在这种情况下,3D对象检测和SLAM可以相互促进。对象为BA和深度初始化提供了几何约束。除此之外它还增加了泛化功能,使orb slam可以在低纹理环境中工作。mono3D结果通过BA优化,并通过运动模型进行约束。
对象提取
这篇文章将2D对象检测和初级图像特征点用于3D长方体的检测和评分。看似简单的方法对椅子和汽车的检测都具有非常好的效果。但是基于深度学习的方法可以得到更加精确的结果。
长方体对象的生成和评分
数据关联
如概述中所述,这篇文章在多个级别上执行数据关联,包括点-点、点-对象和对象-对象。
点-点匹配:与标准ORB-SLAM方式相同,基于orb进行特征点匹配。对于不满足对极约束的匹配点对,我们将其归类于动态对象。对于动态关键点采用稀疏光流法(KLT光流)直接对它们进行跟踪。完成跟踪之后,使用三角测量确定动态关键点的3D位置。
点-对象匹配:对于静态关键点,如果它们属于同一边界框,则它与该对象相关联。这里会使用多种方法来确保匹配的正确性。例如,该点在连续2帧中必须处于同一个box内,并且距长方体中心小于1米。并且框之间重叠区域中的特征点将被忽略。
对象-对象匹配:对象匹配通过关键点匹配间接完成。如果连续帧中的两个对象共享最多的特征点(且超过10个),则将它们作为同一对象进行跟踪。如果基于特征的匹配或KLT跟踪失败,则使用边界框级别的可视对象跟踪完成动态对象跟踪。
对象感知以及BA
静态关键点与摄像机位姿一起进行优化,与ORB-SLAM一样会存在摄像机点错误或重投影错误等问题。从每个帧中获得对象最佳的3D位姿后,我们可以将其视为9DoF的3D“测量”,并确定BA问题。对于静态对象,会存在以下几种误差。
3D相机对象误差:跟踪的地标对象具有6DoF姿态+ 3DoF长方体尺寸,可以将其与9DoF 3D测量结果进行比较,并形成第一个误差项。
2D相机对象误差:从3D测量中,我们可以将长方体的8个角投影到相机图像中。这8个点的最小边界框应与每帧的2d检测边框一致。
我们要注意到,这种2D-3D一致的假设并不总是正确。但在大多数情况下,对于自动驾驶中车载摄像头的典型情况(水平或略微向下看)来说,这种假设可以成立。
对象点误差:对于与框架中相关的点,它应基于长方体的中心和大小位于长方体内。
对于动态对象,curbSLAM假定动态对象是遵循一定运动模型的刚体。这引入了两个附加的误差。
运动误差:根据运动模型假设一段时间内速度恒定,利用帧计算帧处的状态。然后,与帧处观察结果进行比较。请注意,这涉及为每个动态对象更新速度。
动态点误差:如果点在动态对象上,则动态点与该对象的相对位置不会随着时间发生改变。
cubeSLAM因子图(绿色方块是与动态对象相关的误差)
效果
CubeSLAM有一些效果相当不错的案例,比如对于KITTI动态场景中的某些形状大小不变是3D物体进行检测和跟踪。然而,SLAM的结果可能并不总是最优,因为使采用分段恒定运动假设,也可以在一定范围内估计动态物体的速度曲线。要注意我们在计算里程表(相机姿势)时会考虑对象约束。
通过SLAM进行3D对象检测、轨迹跟踪以及速度估计
S3DOT:用于自动驾驶的基于立体视觉的语义3D对象和自我运动跟踪(ECCV 2018)
这篇文章的研究虽然是基于立体声视频流的,但该框架可以扩展到单目SLAM中。这篇文章的主要贡献是展示了利用视频提取和跟踪3D对象,而这些对象在单个图像上很难检测到。
S3DOT预测极端截断的汽车姿态、预测一致的轨道并估计被跟踪汽车的速度
对象提取
这种对象提取方式的灵感来自Deep3DBox。它利用物体检测得到的2D边界框和8个视点进行分类。它使用边界框形状尺寸来推断物体距离。这种方法非常通用,可以在单目环境中使用。
2D框+视点= 3D边界框
数据关联
对象-对象匹配:跨帧的2D边界框通过相似性评分投票进行匹配。在补偿相机旋转后,相似度评分将会考虑边界框形状相似度以及中心距离。
点-点匹配:关键点与对象轮廓(凸包由2D图像中的8个投影角对接)内的ORB特征点匹配,同时与静态背景匹配。
点-对象匹配:没有明确说明,但是当一个点在该对象的对象轮廓内时,应将其与该对象关联。这是一种简单的关联策略。
对象感知以及BA
对象轮廓之外的关键点被视为静态关键点。静态关键点空间位置和摄像机位姿求解同ORB-SLAM一样,通过优化解决。获得相机位姿(或运动)后,便可以解决了对象位姿问题。动态对象BA具有以下四个误差项。
动态点(稀疏特征)误差:刚性对象上的特征点在对象框架中具有固定坐标。
2D相机对象误差:跟踪对象的投影应满足2D测量结果。
对象尺寸一致性误差:对象形状在框架之间保持一致。这是cubeSLAM中3D 相机对象误差的一部分。
运动误差:预测的位姿应该与图像帧中的3D位置保持一致。通过运动学模型可以进行运动估计。它涉及车辆的3维位置,速度,转向角。
动态点云对准误差:在将上述误差最小化之后,我们基于先验尺寸获得了物体姿态的MPA估计。为了纠正先验中偏差,这里将3D长方体与跟踪的点云对齐。
效果
S3DOT同样也有不错的效果,该结果可以在KITTI的动态场景中检测和跟踪3D对象。但是我们要注意,这里在计算相机姿势时不会考虑对象约束。
ClusterVO:对移动实例进行聚类并估算自身和周围环境的视觉里程计(CVPR 2020)
ClusterVO通过将对象表示为跟踪的关键点(或本文中的地标)的群集,提出了一种更通用的动态SLAM算法。
ClusterVO的总体流程
对象提取
ClusterVO使用YOLOv3作为2D对象检测器,为每个帧中的对象提出语义2D边界框。它不对描述对象进行假定。因此,相较于上述两篇文章没有长方体的产生阶段。
数据关联
ClusterVO数据关联方法相当复杂,由两大步骤组成。其一是多级概率关联,即将观察到的关键点与跟踪的地标相关联,并将边界框与跟踪的聚类相关联。其二是异构CRF,该CRF将跟踪的地标与跟踪的聚类相关联。
点-点匹配:属于多级概率。描述符匹配对于静态关键点可能效果很好,但对于动态关键点的效果则可能很差。因此,首先以其预测每个群集的位置、速度(仅线性,无旋转)。如果观测点在经过运动预测后地标的投影范围内,那么关键点观察值与地标相关的概率与描述符相似度成正比。
对象-对象匹配:同样属于多级概率。如果边界框m包含来自群集的最多投影点,则它将与该群集q(对象)相关联。
点-对象匹配:这是最复杂的部分,并且使用了异构条件随机场(CRF)。它确定界标是否与聚类相关联。它具有多个能量项。一元能量项包括2D能量(如果点在与群集关联的边界框内,则它与该簇关联的可能性很高。如果该点在多个边界框内,则可以分配给多个群集)、3D能量(一个点与簇相关的可能性更高,如果该点靠近簇的中心,则由簇的大小进行调制)和运动能量(地标的投影可以通过群集的运动来解释)。如果成对标签平滑度能量项与附近的地标相关联,则会造成不利影响。
对象感知以及BA
在概率数据关联之后,我们可以为静态场景和动态聚类制定BA。这里使用专门设计的双轨滑动窗口来管理关键帧。
相机点误差:对于静态场景,clusterVO与ORB-SLAM相似,可以同时优化相机位姿和静态关键点的位置。当clusterVO选择滑动窗口状态估计方法时,它还会增加一个附加的边缘化项。此边缘化项捕获了观测结果,由于滑动窗口的宽度有限,这些结果将被删除。
运动误差:运动方程预测得到的位姿应该与从单个帧求解处的3D测量值一致。这里采用的运动模型通过高斯过程采样得到,且这个运动模型具有加速度。
动态点误差:clusterVO也具有动态点错误,类似于cubeSLAM和S3DOT。如果点在动态对象上,则其在动态对象中的相对位置将随时间而固定。
效果
ClusterVO是一种更通用的DOS方法。从KITTI动态场景的结果来看,用长方体近似得到的的结果质量不如ClusterVO。对于自动驾驶,CubeSLAM和S3DOT似乎更实用。我们还要注意,优化里程计(相机位姿)时会考虑对象约束。
MoMoSLAM:用于动态环境的多对象单目SLAM(IV 2020)
“多体单目SLAM”的概念似乎来自“ 多体SfM ”,但其本质上与动态对象SLAM具有相同的含义。
对象提取
MoMoSLAM使用了非常复杂但准确的3D对象提取过程。使用形状先验和关键点将2D检测提升为3D形状。首先检测车辆可区分特征上的36个有序关键点,并检测一系列基本形状的变形系数。然后,通过最小化重投影误差将2D检测提升为3D,以获得6个DoF姿态和形状参数。这种方法与RoI -10D(CVPR 2019)非常相似。
从2D关键点到3D形状
数据关联
点-点匹配:基于描述符特征的关键点匹配,类似于ORB-SLAM。
对象-对象匹配:本文没有明确提及,但对象与对象之间的匹配是必须的,任何2D对象跟踪方法都可以使用。
点-对象匹配:未使用,通过检测每个帧中每个对象的语义关键点来间接完成。
对象感知以及BA
相机-对象姿态图和循环一致性
MoMoSLAM使用了不同的优化公式。如上所述,MoMoSLAM没有指定每个误差项并使它们最小化,而是对位姿图中创建的每个循环强制执行一致性处理。但从本质上讲,这应等效于平方误差的最小化。
相机点误差:与ORB-SLAM相同。由于单眼图像的比例尺模糊,因此里程表按比例缩放。使用反透视映射(IPM)对地面区域进行语义分割并在该区域中进行特征点匹配,以估计3D深度,以此固定比例因子,并用于里程计中。
MoMoSLAM的公制里程估算
多对象姿态图循环一致性误差:姿态图中的节点为估计,姿态图中的边为度量。相机-相机边缘是通过公制标度里程限制的。摄像机车辆的边缘通过2D到3D单帧提升来约束。车辆边缘通过两种不同的3D深度估算方法(IPM与2D到3D提升)进行约束。但这里没有显式运动模型。
我觉得周期一致性存在人为的影响,尤其是车辆边缘。添加一个错误项以优化IPM并提升2D到3D之间的距离估计一致性会更加直接。
效果
MoMoSLAM在固定单目度量标准的情况效果较好。这里在计算测距(相机姿势)时不会考虑对象约束。
总结
DOS将对象检测和跟踪功能添加到3D SLAM中,并将对象的位姿和大小添加到后端优化中。
CubeSLAM和ClusterVO共同优化了相机姿态和物体姿态。恒定的对象大小和刚体运动作为附加约束可用于图优化。这将有助于在特征点较少的环境中计算相机姿态。相比之下,S3DOT和MoMoSLAM将在ORB-SLAM失败的情况下失败,因为它们依赖ORB-SLAM进行相机姿态计算。
CubeSLAM和S3DOT将对象视为长方体,在自动驾驶中更为实用。尽管ClusterVO非常通用,但是它并没有运用先验知识,因此缺乏在3D对象检测中实现SOTA性能的潜力。
当无法获取全球位置信息时,CubeSLAM似乎是在自动驾驶中执行VIO的很好的选择。
编辑:黄飞
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)