TUM博士最新开源!很适合SLAM消融实验的结构化数据集!
作者:泡椒味的口香糖 | 来源:3D视觉工坊
在公众号「3D视觉工坊」后台,回复「原论文」可获取论文pdf和代码链接。
添加微信:dddvisiona,备注:3D点云,拉你入群。文末附行业细分群。
最近SLAM的很多文章也开始搞深度学习那一套的消融实验,用来验证新设计的某个模块是否有效。但很多文章的消融实验其实是不太fair的,整个实验的数据处理说的云里雾里,对比实验也不在同等环境下进行,因此也很难证明所提出的模块就是有效的。
最近,TUM的李博士,也是3D视觉工坊知识星球的特邀嘉宾,就提出了Open-Structure数据集,用于SLAM的消融实验,还提供了一个SLAM baseline用来生成仿真数据和评估数据集。跟其他数据集只提供原始图像不一样,Open-Structure数据集提供了很多中间的特征和匹配关系,比如2D/3D点线观测、匹配关系、结构化地图等等,这样就可以直接对某个模块进行评估。严格来说Open-Structure的数据并不很新,很多数据都是从现有数据集(TUM et al.)二次开发的,但是对SLAM消融实验和验证模块有效性来说非常有帮助!这里也推荐「3D视觉工坊」新课程《彻底剖析激光-视觉-IMU-GPS融合SLAM算法:理论推导、代码讲解和实战》。
Open-Structure数据集包含16个真实场景序列(来源于TUM、ICL-NUIM、TartanAir数据集)和6个仿真序列(由论文开源的baseline生成),两部分的格式都是一致的。
每条轨迹都包含轨迹真值和深度值(原始数据集提供)、3D点(ORB提取)、3D线(FLD提取)。
由于提供了3D的点线,因此2D的结构关系也很容易获得。给定2帧之间的特征匹配关系,那么2个图像帧之间的位姿也就可以计算。而借助位姿和特征观测,就可以使用baseline来维护一个局部地图。借助这个局部地图,就可以利用map-to-frame的匹配来以另一种方式计算位姿。
在获得观测关系和初始估计后,可以使用baseline构建共视因子图,基于因子图对点线结构和位姿进行优化。
最终,可以直接获得所有提到的数据类型,包括点和线测量值(带噪声)、3D点线路标、匹配关系、结构化3D线以及共视因子图。其中2D点(特征点+线端点)包括像素坐标和深度值。
李博士还定量分析了每帧的特征数量,还有基于占用网格的特征分布。基于特征点线的数量,可以分析测量次数和姿态估计结果之间的关系。至于特征分布,是将每幅图像分成若干个网格(10×10)。如果一个以上的像素位于一个单元上,则该单元将被视为被占用。
本文介绍了一种新的基准数据集Open-Structure,用于评估视觉里程计和SLAM方法,它直接配备点和线测量、匹配、结构关联和共视因子图,而不是提供原始图像。基于所提出的基准数据集,这些2D或3D数据可以直接输入到SLAM管道的不同阶段,以避免消融实验中数据预处理模块的影响。首先,我们提出了一个用于真实世界和模拟场景的数据集生成器。在真实世界场景中,它保持与实际特征提取结果相同的观察和遮挡。这些生成的模拟序列通过引入各种精心设计的轨迹和观测,增强了数据集的多样性。第二,使用我们的数据集提出了SLAM基线,以评估相机姿态跟踪、参数化和优化模块中广泛使用的模块。通过在不同场景中评估这些最先进的算法,我们可以辨别每个模块在摄像机跟踪和优化过程中的优势和劣势。
首先来看一下测量信息的生成过程。
对于真实世界序列,场景是直接从ICL-NUIM、TUM和Tartanair这三个数据集中的RGB-D序列生成。具体的特征提取过程是,首先计算使用ORB和FLD计算点、线特征。由于深度值已知,因此可以直接获得相机坐标系下点特征的3D坐标,之后再投影到世界坐标系下。借助KD-Tree剔除冗余点,就可以直接构建3D点云地图。最后,将3D地图投影回图像帧视为点特征的真值。线特征的投影过程和点特征很相似,也是借助深度值和位姿真值,将线特征上的离散像素投影到世界坐标系。然后使用RANSAC获得两个线端点的3D表征。线地图的融合方法是,比较现有地图线和新建地图线之间的方向量度和线距离,以此来来建立不同帧之间的共视线关系。最后,不断更新像素值和深度值。
对于6个模拟序列来说,由于没有深度图像,所以要先设计3D场景和轨迹,然后在物体表面随机分布稀疏地标。3D场景由几个立方体盒子构成,波浪形轨迹中的每个视图都聚焦在场景上。通过将这些路标重新投影到每一帧,如果重投影的点和线位于这些视图的图像平面上,则可以获得观测结果。注意,观测真值最后还引入了高斯噪声才转换为测量值。
之后,再来看一看用来初始化的baseline架构。这个pipeline直接读取点和线的测量值,通过3D-2D配准和地标融合模块同时估计初始相机姿态和稀疏地图。之后,共视关系、初始姿态和路标被馈送到共视图优化模块,其中优化的、初始的和真值路标分别以深绿色、浅绿色和红色显示。
实验这一块,主要是使用Open-Structure数据集来评估Frame-to-Frame和Map-to-Frame的位姿估计精度和基于点、基于点线的优化策略。其中,两个优化策略分别来源于ORB-SLAM2和PL-SLAM,计算的也就是重投影误差。实验设备是i7-8700 CPU、评估指标是ATE和RPE。
对于仿真场景来说,很多序列很有挑战性。比如sphere1的帧间重叠很小,corridor2序列包含走廊的纯平移和拐角处的急剧旋转变化,box1有波浪形轨迹来平衡平移和旋转运动。
先看位姿估计结果,显然MtF的精度要比FtF高,这个也很正常,毕竟很多SLAM算法都还需要依靠局部地图对位姿进行优化。当把初始位姿加到共视图里优化以后,精度提升很明显。对比两个优化,如果点特征不足,那么精度提升很明显,比如livingroom2里精度从0.014提升到了0.007。但如果点特征足够的话,那么精度提升就不是很明显,比如office2和stru_texture_near序列。当然本身这个实验也不是验证BA和点线对精度提升多少的,而是验证数据集的有效性。这里也推荐「3D视觉工坊」新课程《彻底剖析激光-视觉-IMU-GPS融合SLAM算法:理论推导、代码讲解和实战》。
需要注意的是,corridor2中增量重建的初始稀疏图的质量很差,尤其是拐角区域。因此,MtF方法在轨迹末端显示出大的斜度。
最后是一个测量和姿态计算鲁棒性的实验。如果在帧中检测到足够的匹配关系(b),那么EPnP方法效果不错。当匹配关系较少时(c),基于因子图的优化方法可以更好得优化初始位姿。同时,越长了2D线越有助于提供轨迹优化的精度(d中第803帧到第813帧)。
李博士最近开源了Open-Structure,很适合评估SLAM系统中某个模块的消融实验。Open-Structure数据集可以直接获得2D点线测量值,3D点线坐标,初始相机姿态,结构匹配关系和共视图。Open-Structure的真实场景序列保留了真实世界序列中的遮挡关系,模拟序列还引入了挑战性的运动和环境(急剧纯旋转)。李博士也提出,未来将探索新的参数化和优化策略,特别是基于提出的结构规则实现更准确和鲁棒的姿态估计和重建性能。感兴趣的小伙伴快去试试这个数据集吧!