"); //-->
GOSMatch: Graph-of-Semantics Matching for Detecting Loop Closures in 3D LiDAR data
摘要
利用激光雷达的点云信息检测闭环是一件很不容易的事情,因为激光雷达的数据是不稳定的。本文提出了一种叫做GOSMatch的方法依靠语义级别的信息做场景重识别,本文的方法利用语义物体之间的空间关系产生新颖的描述符。本文还设计了一种由粗到细的测量来有效的找到闭环。此外, 一旦确定找到了闭环帧,系统就会给出准确的六自由度的位姿估计结果,本文在kitti做了测试取得了不错的效果。
介绍
当前传统的激光闭环检测方法是利用局部的特征点或者其他全局的特征,这种方法太注意局部的细节而忽略了更高层的特征约束。本文提出了一种利用语义信息来检测闭环的方法。本文利用语义信息构建了局部和全局的描述子。全局的描述子来高效的查找最相似的前K个闭环候选帧,局部的描述子用来计算当前帧和闭环候选帧之间的距离。本文的主要贡献如下:
提出了GOSMatch,一个在城市道路场景下仅利用雷达观测的基于物体级语义信息来可靠场景识别的方法。
通过编码语义物体之间的空间关系来构建全局和局部描述符以高效的进行两步闭环搜索。
开源了GOSMatch到https://github.com/zhuyachen/GOSMatch,但是代码是m文件
相关工作
A.传统的基于雷达的场景识别
从点云中随机选择特征点提取区域形状描述符。随后,使用投****策略在特征点中找到最近邻。
在range image中检测每个特征点的描述向量,利用kdtree来管理高维向量。为了达到更好的效果,可以利用Normal Aligned RadialFeature (NARF)描述符和词袋匹配的方法。
其他的方法关注点云的表示,如直方图;基于外观的方法如NDT;还有很有名的Scan Context,把点云分成2D的小方块并编码为点云高度的最大值。由于匹配这种矩阵类型的描述子需要很大的计算量,Kim改进Scan Context,利用ring key来构建kd tree来加速搜索。
B. 基于high-level描述子的场景重识别
提取点云中的线面特征,然后基于ICP去找闭环
可以利用聚类的方法得到更鲁棒的描述子
C. 利用图表示的数据关联
图匹配对于成对的数据关联问题很重要。图表示是描述对象及其拓扑的常用方法。在这种情况下,找到两个场景之间的对象的关联转换为计算图之间的顶点和边的对应关系。但是,找到解决此问题的精确方法始终是NP-hard。有工作生成一个对应图,然后搜索图中最大的clique来得到两个图中顶尖和边的对应关系。但是这种方法只适合图中顶点少的情况。
为了减少计算的复杂度,一种有效的方法是找到问题可以容忍的近似解。其中一个工作X-view: Graph-based semantic multi-view localization是基于随机游走技术的图像核。图中的每个节点,产生一定数量的游走序列作为节点的描述子,然后执行匹配的过程来得到节点和节点之间的对应关系。还有Characterizing structural relationships in scenes using graph kernels和Image classification with segmentation graph kernels也是相似的工作。
本文的方法
本文的方法如下图所示,主要包含四个主要的模块:语义信息获取,图描述子生成,节点匹配和几何校验。
A. 语义检测
有用的语义特征应该是稳定的,容易区分的,可重复的。本文专注于检测停着的车辆,卡车,杆以及在城市道路场景中常见的特征。尽管停着的车辆是潜在运动的物体,这意味着旧的车可能会开走,新的车停在那,实际中的闭环经常时间间隔是很短的。因此在本文的试验中作者认为停放的车辆与任何其他语义特征一样重要,并且假设在两次观测期间,停放的车辆在同一位置的位置变化不大。(这里如果是基于稳定图层的闭环策略,这个假设应该就不成立了,但是可以利用潜在运动的物体去匹配,只不过需要给他一个比较小的权重)
本文采用RangNet++来检测3D激光数据的语义信息。这个端到端的神经网络检测原始点云中每个点的语义信息。需要注意的是,我们不能通过一个点云的语义信息知道这个卡车是在运动还是在停着,所以利用前端的里程计来估计车辆的速度来辨别是停着的还是移动的。
(最近查阅资料的时候大概了解到,基于激光点云的语义分割方法很难达到实时,而且目前类别的标签只有六类左右,但是基于视觉的语义分割方法很成熟,所以我们完全可以基于视觉得到标签,投影到点云上得到每个点云的标签,这样不仅可以保证速度,而且可以保证类别的多样性。)
获得了点云的语义标签后,利用欧式聚类来检索对象。对于所有的对象,通过计算他们的质心来表示他们在点云中的位置。
B. 图描述子的生成
单次激光雷达的扫描可以由无向图G=<V, E>表示,其中V和E分别代表顶点和边的集合。把利用语义分割网络得到的物体的位置作为顶点G,图中的每个边表示两个顶点之间的欧氏距离。根据语义分割的结果,图中有三种顶点(vehicle, trunk and pole),六种边(vehicle-vehicle, trunk-trunk, pole-pole,vehicle-trunk, trunk-pole and pole-vehicle)。(这里如果类别比较多,计算量应该就会很大,所以我们应该选择比较好的特征作为顶点和边)。
基于直方图的图描述子由六部分组成,代表着上边提到的六种边。这里以pole-trunk边为例介绍一下边的计算流程。我们假设一个连续的bin标号为b,这个顶点最短的边为l_min,最长的边为l_max
每次扫描得到的图描述符都存储在数据库中,当需要查询点云的时候,利用构建kd树来执行k近邻算法来快速得到最相似的N个候选闭环帧。
C. 顶点匹配
在本节,我们介绍顶点描述符来描述图中的顶点。和图描述符相似,顶点描述符也是基于直方图的。和边的描述符不同的是,顶点描述符中考虑的边不再是整个图中全部的边,而是连接到所描述顶点v的边。为了给顶点v(pole)构建一个描述符,只有三种边需要考虑,因为构成边的两个端点之一已经被确定为pole。和图描述子相似,一种边可以形成顶点描述符的三个部分之一,可以描述为:
然后我们利用欧式距离找到当前点云中顶点的描述符和候选帧中顶点描述符的匹配关系。
D. 几何验证
该步骤为每个闭环候选帧选择一组几何一致的对应点。利用RANSAC来优化选取选取的对应点。在每次RANSAC迭代的时候,利用SVD方法为绝对旋转问题找到最近的六自由度的变换矩阵。如果在这个矩阵下可以得到更多的内点,我们就更新变换矩阵。对于每个候选帧,我们用下边这个公式来评估闭环的loss:
C代表当前扫描和闭环候选帧优化后的对应点的集合,T表示变换矩阵,c_iq和c_ic代表第i个C中的属于当前扫描和闭环候选帧的3D点。候选帧中loss最小的会利用阈值判断是不是真正的存在一个闭环。只有在loss小于b的时候采认为存在一个闭环。一旦闭环被确定,我们把这个变换矩阵作为6自由度的初始位姿。
实验设备:
Intel Core i7-6820HQ with 16 GB RAM,Nvidia TitanX with 12 GB RAM。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。