本文试图概括Semantic SLAM的主要思路和近年工作,⻓期更新。但因水平有限,若有错漏,感谢指正。
(更好的公式显示效果,可关注文章底部的公众号)
Semantic SLAM
简介
至今为止,主流的 SLAM 方案 [1] 基于处于像素层级的特征点,更具体地,它们往往只能用角点或边缘来提取路标。人类是通过物体在图像中的运动来推测相机的运动,而非特定像素点。
Semantic SLAM 是研究者试图利用物体信息的方案,其在Deep Learning的推动下有了较大的发展,成为了相对独立的分支,就方法(非设备)而言,其在整个SLAM领域所处位置如下图:
目前而言,所谓 Semantic 是将基于神经网络的语义分割、目标检测、实例分割等技术用于 SLAM 中,多用于特征点选取、相机位姿估计,更广泛地说,端到端的图像到位姿、从分割结果建标记点云、场景识别、提特征、做回环检测等使用了神经网络的方法都可称为 Semantic SLAM [2]。
语义和 SLAM 的结合的体现有以下两点 [3]:
SLAM 帮助语义。
检测和分割任务都需要大量的训练数据,在 SLAM 中,由于我们可以估计相机的运动,那么各个物体在图像中位置的变化也可以被预测出来,产生大量的新数据为语义任务提供更多优化条件,且节省人工标定的成本。
语义帮助 SLAM。
一方面,语义分割把运动过程中的每一张图片都带上语义标签,随后传统 SLAM 将带标签的像素映射到3D空间中,就能得到一个带有标签的地图。这提供了高层次的地图,有利于机器人自主理解和人机交互。
另一方面,语义信息亦可为回环检测、Bundle Adjustment 带来更多的优化条件,提高定位精度。
仅实现前者的工作往往称为 Semantic Mapping,后者才认为是真正的 Semantic SLAM。
发展方向
分别从 Semantic Mapping 和 Real Semantic SLAM 两方面,介绍一些主要思路。
Semantic Mapping
这类工作要求特征点是 dense 或 semi-dense 的(否则 Mapping 无意义),因此往往用 RGB-D 的 SLAM 方案,亦或是单目相机的 semi-dense LSD-SLAM 方案 [4]。
有两种 Mapping 方式:
将2D图像的语义分割结果,即带标签的像素,映射到3D点云中。
研究人员尝试让 SLAM 所得的信息(特别是相机位姿),能够提高语义分割的性能。其中一种是使用 SemanticFusion [5] 的 Recursive Bayes 方法:根据 SLAM 对像素点运动的估计,当前帧的像素的语义分类概率 与 前一帧旧位置上的分类概率相乘作为最终概率,即像素的概率会沿着各帧累乘,因而增强语义分割的结果。
这一方法被基于单目相机的工作 [6] 沿用,整体框架描述如下。
第二种 Mapping 方式则以 Object 为单位构建地图 [8][9]。相比于一堆标记了类别的 voxel,包含一个个物体的语义地图,将更有价值。
此部分的重点在于如何做数据关联(Data Association),即跟踪已识别 Object 和发现新 Object,以 [8] 为例描述如下。
Real Semantic SLAM
此部分为本文的重点。相对来说,真正的 Semantic SLAM (即语义建图和 SLAM 定位相互促进)发展较晚(基本是2017年后)。
在 Bundle Adjustment (BA) 方法中,我们同时优化相机位姿和 3D 坐标位置,使得重投影到 2D 图像的像素点与实际观测(多个相机,多个特征点)的总误差最小。
那么如何将语义信息融合进来呢?
思路一:同个 3D 点重投影之后,应保持语义一致。
这又是重投影优化问题,可以加入到 BA 公式中加强优化目标,关键是如何量化重投影误差,就好像传统 BA 的重投影误差通过与实际观测的像素距离来量化。
ICRA 2017 的著名工作 Probabilistic Data Association for Semantic SLAM [11] 使用了此思路,其量化重投影误差的方法在于:使用概率模型计算出来的物体中心,重投影到图像上,应该接近检测框的中心。而数据关联(到底要接近哪个检测框中心),由一组权重决定,最后 “BA” 和 “权重更新” 通过 EM 算法交替优化。
ECCV 2018 上的工作 VSO [12] 与之类似,重投影误差通过与目标类别的语义区域的远近来量化。有几个细节比较巧妙,下面展开说明。
思路二:从语义信息可以推断出动态区域。
传统 SLAM 方法几乎都是假设当前场景是静态的,当面对含有运动物体的场景时,运动物体上的特征点将对相机位姿估计产生巨大的偏差。面对这一困难的主要解决方式是去掉这些动态的特征点,而语义分割十分适合找出这些动态区域。
语义分割有两个特点,一是把平面区域的许多像素点联系起来,二是给区域带上了分类标签。
前者有利于确定物体是否真的在运动,因为单个特征点的偏移并不能确定运动的发生(可能是 SLAM 系统一直存在的观测噪声),若是一群有关联的特征点普遍发生了较大的偏移,就可以断定为是动态的。
后者有利于预判物体是否会运动,比如标签是人的区域几乎是动态的,而墙壁则可断定是静态的(甚至不用去计算偏移)。
IROS 2018 的 DS-SLAM [13] 基于第一个特点,以区域为单位判断是否动态,而一些工作如 [14] 仅利用了第二个特点,较为暴力地直接排除某些区域(天空,车)的特征点。
把这两个特点都用上的是 ICRA 2019 的工作 [15], 简述如下。
思路三:语义信息提供的物体级别的描述,拥有季节(光线)不变性。
这一思路可以用在如何用已有的 3D 地图定位。
传统的特征点(拥有描述子),在多变的环境下十分不鲁棒,容易跟丢。而语义分割的结果,相对而言是稳定的,此外,若以物体级别来做定位(拿语义标签来匹配地图),更符合人类直觉。
思路四:待总结
更好的阅读效果、更多相关内容可关注公众号 【小林同学的脑回路】↓ ↓ ↓