基于点云的语义单目SLAM
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
本文转自:计算机视觉life
语义SLAM的最终目的一般有两种:提高定位精度,或提高建图质量。定位精度很好理解,误差低就完事儿了,一般策略有:添加新的误差项/考虑动态环境的影响等。而对于建图质量,每篇文章的侧重点则不完全相同。有的是提高地图的几何准确度(3D坐标,法向量等),有的是提高语义标号的准确度,有的是去除动态物体的影响(残影),有的则是将物体作为地图的基本元素独立出来。
接下来是三篇语义SLAM连载文章,依次为基于点,面元和物体的语义SLAM,根据地图中建图元素的不同进行分类。
注:有的文章可能只涉及语义建图(Semantic Mapping),而没有将语义用于提高定位精度,比如【论文阅读21】Surfel-based Mapping: SemanticFusion。但是这里为了简单,统称为语义SLAM。
在ORB-SLAM中添加直接法。
利用每帧中每个特征点的测量信息:深度测量(三角化结果),语义标号(CNN输出)和特征点匹配精度(公式(13)(14)),维护每个特征在地图中的性质:深度,语义标号,和内点率(属于静态物体的概率)。维护过程以概率方式而非简单的加权平均方式来完成。
N. Brasch, A. Bozic, J. Lallemand, F. Tombari. Semantic Monocular SLAM for Highly Dynamic Environments. IEEE/RSJ International Conference on Intelligent Robots and Systems, 393-400, 2018.
摘要
最近在单目SLAM中的提高已经能够得到在静态环境中运行的实时系统,但是在动态场景变化和运动时会失败,由于它们缺少显式动态外点处理。Brasch等人提出了一种语义 SLAM框架来解决高动态环境,组合基于特征和直接法来达到挑战环境下的鲁棒性。提出的方法利用了场景的语义信息到一个显式的概率模型中,其最大化跟踪和建图的概率来依赖那些与相机没有相对运动的场景部分。与SOTA相比,我们的算法在动态环境中展示出更稳定的可靠位姿估计,在静态序列中达到了相似表现,在Virtual KITTI和Synthia数据集上。
1. 介绍
在过去几年,对于单目SLAM领域的大量研究允许达到了之前未见到的精度,鲁棒性和速度,产生了大量在机器人和增强现实领域的新应用。与基于双目或者RGB-D的技术相比,单目SLAM算法[1]-[4]依赖更廉价的硬件,更容易标定并且在深度范围上没有限制,使得它们对于同时专注室内和室外场景的移动应用中特别地受欢迎。
单目SLAM方法可以被划分为两类。基于描述的方法[5][1]使用显式关键点描述子来寻找不同图片间的特征匹配并最小化它们之间的重投影误差。不同地,直接法[6][2][4][3]最小化光度误差基于从一张图片到另一张图片的像素密度的投影。描述和直接法有它们各自优势和缺陷,如[3]中分析的那样。特别地,描述方法对于几何噪声耕路邦,即像素位置偏移,来源于不准确的相机内参标定或者卷帘门效应,而直接法更适合用于解决光度噪声,来源于运动模糊。
然而,当前单目SLAM算法依赖周围环境是静态的假设,限制了它们在大多数真实世界场景中的应用。为了解决动态物体,它们或者在优化期间利用M-估计器(Tukey[5],Huber[2][1][3]),或者使用基于RANSAC的方法来检测和滤除运动[7]。为了能正常工作,两种方法都需要大多数点都相对相机运动是静态的。相反地,当运动物体占据相机视野的大部分,尤其是当大多数视觉特征位于这些区域内,当前的单目SLAM方法将会失效。这是由其普遍的现象在大多数室外与驾驶相关的情境中:特别是动态物体运动缓慢或者从静止开始运动时(想象一辆车暂时停在交通灯前,如图1所示),外点的检测非常困难。没有进一步关于观测区域的信息,特别是对于单目方法,一般不太可能区分图片中的运动和静止部分。由于最近基于CNNs的场景理解和语义分割方法的进步,高层次推理可以被使用来减少图片中静止和动态部分的歧义。这时非常有趣的考虑到新的卷积结构的发展和能够高效在移动/嵌入式GPUs中运行的模型的发展[8]。
一个来自CitySpaces数据集的例子,其中一辆汽车在一个交通灯前。大多数图片区域属于暂时静止的物体,将会缓慢移动,因此导致基于运动的外点检测方法的失效。在(c)中一个语义掩膜忽略所有在潜在动态区域的关键点,并因此不能使用停下的车辆用于位姿估计。我们的方法(d)使用逐点外点估计使用深度方差并融合(1)的语义信息。红色圆圈可视化估计的外点测量,绿色圆圈是用于位姿估计的内点。
通过依赖场景中的语义信息,可能检测出潜在的动态物体而不需要显式地跟踪它们。能够分割出场景的静态部分例如大楼或者车道线,我们可以指引特征提取并匹配该部分。此外,没有依赖逐帧语义信息,我们提出一种概率模型,考虑所有帧的语义信息来估计地图点的语义。除了语义信息,我们还是用时序运动信息来推理地图点是运动的还是静止的。我们更新地图点的概率参数当有新的观测时。为了得到一个实时SLAM系统,我们设计了一种高效的具有低常数内存消耗的在线概率更新。在我们的评估中,我们展示了更稳定的结果在高动态环境中在仿真和真实数据中,同时展示了类似SOTA的表现在静态场景中。
2. 相关工作
动态物体被大多数SLAM算法看作是外点。我们提出使用语义信息来选择一组位于静态场景部分的积极特征用于更鲁棒的位姿估计,与现存语义SLAM方法专注于稠密3D重建不同。语义先验由RGB图片上训练的深度模型生成。
A. 动态SLAM
在过去,不同的策略已经被提出来解决视觉SLAM中的动态外点。在[4]中,只有深度在一些观测后收敛到具有较小方差的积极特征被用于跟踪。大量[5]的改进已经被提出来显式处理动态物体。在[7]中,一个替代的RANSAC构架被使用,其中采样被调整来分割采样点。[9]使用光流在所有特征点的流朝向中寻找聚类,并使用聚类将动态物体从静态背景中分割出去。RGB-D相机或者双目相机的使用产生了高度可靠和稠密的深度地图,在这些情形中空闲空间推理可以被用于检测动态物体。动态物体被检测如果它们移动到之前空闲的区域,并在位姿估计中被标记为外点[10]。当只有稀疏和具有噪声的深度信息可用时,空闲推理是不可能的。为了处理单目系统构架中的动态场景,最近的工作专注于多身体SfM构架。这里场景被分割为多个运动刚体和静态世界。物体实例被首先通过运动分割检测出来,然后对每个聚类,一个逐帧的变换被计算并且BA被用于有缘最终的轨迹[11]。这里,输出的质量依赖运动分割。如果运动很小,分割很差,缓慢运动的物体不会被检测出来。而且执行时间远非实时。
B. 语义SLAM
大多数现存方法,组合经典的SLAM和场景的语义分割,使用SLAM系统的位姿图来构建一个在图片序列上时序或者空间一致的分割。时序或者空间一致性可以被构建为一个图片上的CRF[12],一个稠密体素栅格[13]或者一个网格[14]。稠密CRFs的使用使得大多数现存方法不适合大规模动态场景的实时应用,由于它们的低帧率[12]。其他方法使用在线更新用于语义融合[15],允许它们实时运行。大多数上述方法不反馈语义信息到位姿估计流程。在[12]中,语义信息被用于在3D模型融合中加权测量。[16]移除了点如果语义类别对于多次观测是不同的。为了获得稠密的3D模型,双目相机也被使用在[12]和[17]中。
3. 概率语义SLAM
提出的SLAM系统建立在ORB-SLAM框架上[1],其由跟踪,建图和回环三个模块组成。图2给出了框架的综述。我们对动态和静态地图点提出了一个显式模型,并只跟踪静态点。
图2. 我们动态SLAM框架综述。ORB-SLAM方法被扩展通过在地图模块中使用直接特征提取和匹配,因此它们可以在跟踪模块中被使用用于位姿估计。我们还整合了一个概率外点模型来更新每个地图点的状态。只有积极地图点被使用在位姿估计中。增加或者更新的模块被显示为红色。
我们从前两帧开始,并使用ORB特征进行基于基本矩阵估计的初始化[1],接着进行全局BA:联合优化相机位姿和地图点。为了补偿位姿估计误差,我们使用Lucas-Kanade光流[8]和极线约束的组合替代极线搜索(和[3]中一样)来估计直接特征的初始深度。
对于每个新帧,ORB特征被提取,并且对应被发现通过描述子匹配。位姿估计被初始化基于常运动速度模型。我们优化新帧的位姿基于描述和直接的方法,通过多分辨率,多步骤非线性优化。依赖每层金字塔中描述和直接特征的数量,我们使用多轮,其中我们增加或移除特征点基于它们的残差。我们只在关键帧中提取新的直接特征。如果在当前帧中没有足够的对应被找到,一个新的关键帧被创建。
有了新帧的估计位姿,我们可以三角化描述和直接特征来得到一个深度估计。地图点和相机位姿被联合精修通过局部BA在一个固定窗口大小的关键帧中。
A. 位姿估计和建图
描述特征类似ORB被用在SfM方法中,提供快速和可靠的匹配,减少了假阳性对应。地图点一般被参数化为3D点并且优化被构建为最小化重投影误差(见等式2)。进一步地,描述的特征可以被用于识别回环并且在一个已知地图上进行重定位,其可以被用于类似自动驾驶中的定位和AR应用中的添加标签。
另一方面,直接特征避免关键点和描述子的昂贵提取代价,但是一个好的初始化位姿是需要的为了使得优化收敛到全局最小值。这导致需要高帧率或者相对缓慢的相机运动。基于图片块的匹配准确率不像描述子比较那样可靠,假阳性或局部最小值可能被检测到。直接特征也对强,突然的或者局部光照变化敏感。估计一个仿射曝光模型[3]可以降低这些影响。然而,直接特征也可以被提取在低纹理或者强运动模糊的情形中。
由于这些互补性质,我们打算可能的话使用描述特征。在没有足够特征被发现时,我们替代地使用直接特征。
不像用于描述特征的3D地图点方法,我们决定使用和直接特征一致的逆深度构架。因此,我们可以使用相同的概率模型对于两种特征,其简化了联合优化的权重。
我们决定使用ORB特征作为描述特征,由于它们的快速提取(FAST-角点+方向)和鲁棒的描述子(BRIEF)。我们跟随[1]的应用使用栅格提取策略来得到整张图片的均匀分布和一个多分辨率金字塔。对于直接特征,我们基于[3]中的工作使用分辨率金字塔和一个基于栅格的特征选择策略。
在位姿估计和局部BA中,重投影误差 和 的加权和被最小化。
(1)
其中 平衡了重投影误差和光度误差。因为我们在逐点级别推理,这两种参数的动态适应是不需要的。
我们定义 为 中的位姿变换,将一个表示在视觉坐标系中的点 变换到第 帧的坐标系统中。同时, 是相机内参矩阵, 表示从归一化坐标到笛卡尔坐标的变换, 是关键点的估计深度。
重投影误差被给出通过观测关键点 和匹配的关键点 从第 帧到第 帧的重投影的像素距离。
(2)
以相同方式,光度误差是图片 中的像素 和它在图片 中重投影之间的像素密度差。
(3)
我们跟随[3]并对光照变化使用仿射变换模型。
(4)
其中 是快门时间, 和 是对于每帧估计的仿射变换参数。
一个具有鲁棒Huber模的加权高斯牛顿方法被应用以解决非线性最小二乘问题。类似[2]我们使用协方差缩放,每一项被加权使用逆协方差来反映每个测量的不确定性。
协方差传播被执行在每个新的测量后通过等式(5)的更新方法。
(5)
B. 概率外点拒绝
SLAM的一个核心想法是精修3D世界的地图,通过更新每个地图点的3D位置当它被再次观测到时。由于一些测量比其他测量更可靠,可能通过依赖一种概率方法将测量的方差作为权重进行平均比简单的平均要更好。
在一个动态环境中,只有地图点的位置是不够的。如果我们执行BA使用场景中的所有点,包括动态点,这将会损害优化估计,因为BA假设点位置的时序一致性。因此,我们也想要知道哪些点是足够可靠的用于BA。
我们对每个地图点估计内点率 ,描述该点的可靠未定的概率。内点率能够以多种方式被建模,例如一些方法保存成功和不成功三角化的次数[1]。在[19],[4]中,一种概率模型被使用来建模深度,并将内点率建模为隐变量。在上述两种情形中,内点率都被更新通过观测地图点随时间的位置,并基于估计的相机位姿决定他们是否为动态点。
确定地图点的内点率的运动估计可能在单目SLAM中是奇异的。对于缓慢运动的物体或者如果一个大动态物体占据了相机的绝大部分视野,并且它本身被看做是静态视觉的一部分。我们将语义信息包含到内点率的估计中来提供另一种独立的信息来源,来推测地图点是动态点的可能性。因此,除了深度 和内点率 ,我们还对每个地图点估计一个语义类别 。
当一个地图点被观测到时,我们使用三角化计算它当前的深度估计 ,和该深度估计的方差 。新测量的方差来自三角化,假设关键点在图片中的位置是已知的,并且具有像素级精度[19]。我们也估计匹配精度 ,后面会详细描述,并对关键点从神经网络中检索语义类别概率 。这里 是神经网络的输出,并且可以被理解为一个关键点属于语义类别 的概率,给定当前图片帧 。
我们定义深度测量似然概率在等式6中。它基于[19],但是我们扩展它通过使用匹配精度。为了简化符号,我们使用 。
(6)
这个定义后的直观如下:如果当前关键点被正确匹配,并且地图点是静止的,那么匹配精度 和内点率 都接近 。因此,深度测量 服从高斯分布 。另一方面,如果当前匹配是错误的,或者点是动态的,那么当前深度测量被认为是均匀分布 ,并且对于平均深度 的估计不提供任何有用信息。
类似深度的情形,我们建模地图点的语义为神经网络输出 和一个错误匹配关键点的均匀分布的混合:
(7)
这允许一个高效的在线更新和地图点的动态与静态状态之间的平滑转变。
最终,我们需要定义语义类别上内点率的独立性。已经被证实如果我们建模独立性为Beta分布,那么可以推出一个高效的在线参数更新,如公式(8)所示。
(8)
这里,参数 是一个热编码的语义类别, 是固定的常数,对每个语义类别进行设置。它们表示了某个类别是静态或者动态的似然(例如:一辆车具有较小的 和较大的 ,因为它更有可能是动态的)。常数 可以被缩放使得与深度测量相比,在语义测量上放置更大或者更小的权重,例如,更大的 可以在内点率的估计中给语义先验相比运动先验更大的权重。
深度,内点率和语义类别的联合模型的独立性图如图3所示。测量的深度 依赖真实深度 ,匹配准确率 和内点率 ,其依赖语义 。
图3. 联合概率模型的图。展示了深度测量d_i,测量精度\alpha_i和内点率\phi的关系。后者依赖当前帧CNN预测的语义类别c。
近似推理导致组合三项的后验概率。第一项包括高斯分布的深度概率,第二项是基于深度测量的Beta分布形式的内点率,第三项是在语义类别上建模内点率的独立性的Beta分布,
(9)
这里 是所有深度测量, 是所有语义信息观测, 是CNN的 类概率密度输出。
可以看出所有深度测量都被总结为均值深度 和深度方差 。类似地,内点率遵循参数为 和 的beta分布。进行代数变换后,一个高效的在线参数更新可以被推导,其对于地图点进行概率模型的快速更新。
对于没有语义信息的帧,上一项没有被使用。语义beta分布的参数 和 被表示通过如下关系:
(10)
(11)
类别后验概率 是所有语义测量的融合,见等式(12)。与现有融合方法相比[13],等式(7)导致一个加权的语义融合,依赖每个测量的匹配精度 。
(12)
为了估计描述特征的匹配精度,Hamming距离被用来比较二值描述子。
(13)
对于直接法,我们使用两个归一化图片块的光度差。
(14)
在我们的应用中,我们使用逆深度[4][20],为了建模无穷远点。[20]也展示了逆深度更有可能服从高斯分布。根据内点率,我们决定是否使用(积极点)或者不使用(消极点)地图点用于位姿估计。当前内点率可以被计算使用(
(15)
从0到1学习SLAM,戳↓
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
从0到1学习SLAM,戳↓
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~