语义信息的挖掘和应用,是目前SLAM问题中的研究热点,本文从特征选择、动态SLAM、单目SLAM的尺度恢复、long-term的定位、提高定位精度等方面介绍了当前最新的一些论文中的研究工作。
一:语义信息于特征选择
二:语义信息用于动态slam
三:语义信息用于单目SLAM的尺度恢复
四:语义信息用于long-term定位
五:语义信息用于提高定位精度
一
语义信息用于特征选择
1.1 选择感兴趣区域的点
SalientDSO:Bringing Attention to Direct Sparse Odometry(直接法)
本文是在DSO的基础上,改变了跟踪点的选取策略。DSO是在图像上均匀选取点,如图a所示,本文是在图像上的感兴趣区域上选取点,下面具体介绍:
a. 显著性图获取
分为两步:首先使用SalGAN网络提取图像中的显著性图,如图 e 所示,显著性定义为人类对图像中每个像素的关注量,颜色越接近红色表示显著性越高。接着使用PSPNet进行获取语义分割的结果,如图 f 所示。
利用语义分割的结果对显著性图进行filter,即重新调整每个像素点的显著性得分,目的是降低无信息区域的显著性得分,例如墙,天花板和地板等。论文中为每种语义类别设置一个经验权重 Wc,根据得到的语义分割图 Cj,对显著性图 Sj 的每个像素点乘以该像素点对应类别的经验权重,得到 Sj [weighted] :
这还不是最终的显著性图,论文中提到为了平滑和为每种类别维持一个一致的显著性图,每个像素的显著性得分被图中所有该类像素的显著性得分的中值代替,得到最终的显著性图Sj [final] :
b. 点的选择策略
首先,将图像分割为K×K的patch, 对于每个patch,计算显著性中值,显著性中值作为该patch的被选择的权重,如果该patch的显著性高,则被选择的概率越大,然后在选择的patch内根据梯度值进一步选择点,可参考DSO的策略。
c. 论文的理论依据
显著性区域的点对于光照和视角的变化更加鲁棒。
1.2 选择具有更大信息量的点
Visual SLAM with Network Uncertainty Informed Feature Selection(特征点法)
这篇论文还对应着一个毕业论文:SIVO:Semantically Informed Visual odometry and mapping,里面的第三章具体介绍了该论文。开源代码:https://github.com/navganti/SIVO
本文是在Active search for real-time vision和Covariance recovery from a square root information matrix for data association两篇论文的基础上改进的,参考论文使用信息熵判断观测数据是否用于更新估计的状态量,如果在新观测数据下待估计变量的协方差的秩相比之前数据条件下待估计变量的协方差的秩是否下降了一定阈值,是则选择该观测数据(特征点)参与跟踪和优化,本文在此基础上将语义分割的不确定性融入到信息熵的计算中,在选择具有。
a. 基于信息论的特征选择策略
对于一个统计变量X,它的熵(平均不确定性)记为H(X),在条件Y下的熵记为H(X|Y),两者的差值记为I(X;Y),为X和Y之间的互信息。
在SLAM问题中,I表示为位姿数据和观测数据之间的互信息,是衡量观测数据质量的指标,如果在某个新的观测数据(特征点)的加入下,位姿的熵变化∆H 超过一个阈值,则该观测数据(特征点)被选择,说明该特征点具有的信息量大。
b. 融合语义分割不确定性的特征选择策略
本文的创新点在于计算∆H的时候引入了语义分割的不确定性,即下面等式的最后一项H(ci|I,D)。如果某个特征点(像素)在语义分割中的不确定性H(ci|I,D)越高,则∆H 越小,该特征越不容易被选择,例如,语义分割网络是输出该像素属于每种类别的概率都相同,则H(ci|I,D)最大;反之,如果该像素属于某种类别的概率达到了100%,则H(ci|I,D)=0。综上所述,即某特征点互信息越大,分类不确定性越小,越容易被选择。
c. 论文的效果
减少了大量的信息量少的特征点,减小了地图的规模,同时能够达到和ORBSLAM差不多的精度。
1.3 去除动态(e.g,car)和远处(e.g, sky)的类别的点
Utilizing Semantic Visual Landmarks for Precise Vehicle Navigation—ITSC2017
本文的思路比较简单,在因子图中增加了一个门限信号c,如果该类别有效,则对应的观测数据lt就添加到因子图中,否则不添加。本文认为无效的类别为:non-static (such as Pedestrian, Vehicle, Bike) and far-away classes (such as Sky)
二
语义信息用于动态slam
实际上该类别也属于语义信息用于特征点的选择里面,只是动态slam论文比较多,方法也各不相同,所以单独总结下。
(1)Detect-SLAM: Making Object Detection and SLAM Mutually Beneficial_WACV2018
本文的贡献在于:通过目标检测去除动态点,但是为了使得目标检测线程和slam线程同步,没有对每一帧进行检测,而是只在关键帧进行检测,然后通过特征匹配和扩展影响区域的形式进行运动概率的传播,然后在slam过程中去除动态点的影响,只利用静态点进行跟踪。另外,slam过程中构建的地图能够提高目标检测的结果。下面分别介绍:
a. 动态点的去除
运动概率更新
对关键帧进行目标检测,在动态物体检测框内的点运动概率为1,不在框内的点运动概率为0。特征点投影到世界坐标系中的地图点具有相同的运动概率,但是同一个地图点在不同帧中对应不同的特征点,而这些特征点不一定具有相同的运动概率,所以当地图点匹配到新的特征点时需要对地图点的运动概率进行更新:
第一项表示上一关键帧更新的运动概率,第二项表示当前关键帧根据检测结果得到的运动概率,α表示对两个量的信任权重,本文设置α=0.3,表示更相信之前更新的运动概率,因为检测结果总会有错误。
运动概率传播
普通帧的特征点的运动概率通过特征匹配传播,包括与上一帧的匹配和与局部地图的匹配;另外,具有高概率的点,无论是高概率的动态点还是高概率的静态点都会将其运动概率传播到周围半径为r的一个区域。
b. slam加强目标检测结果
将SLAM构建的点云语义地图投影到图像上得到可能出现物体的候选区域,然后用于挖掘困难样本,这些样本可以作为训练数据提高或者微调检测网络。
(2)DS-SLAM: A Semantic Visual SLAM towards Dynamic Environments—IROS2018
本文采用语义分割和运动一致性检测结合的形式进行动态点的去除,并没有用到语义分割的类别,只是用语义分割得到一个物体的边界,无论该物体类别是什么,只要有经过运动检测判定为动态的点位于该物体内,即去除该物体的所有点,但实际上该论文的代码里值针对人这一类物体进行检测。代码:https://github.com/ivipsourcecode/DS-SLAM
运动一致性检测
由于语义分割比较耗时,所以在语义分割的线程进行过程中,跟踪线程进行运动一致性检测。采用如下策略:
第一步:计算光流金字塔以获得当前帧中匹配的特征点。
第二步:如果匹配的特征点太靠近图像边缘或者与中心处3×3图像块的像素差太大,则将会被丢弃当前的匹配。
第三步:通过 RANSAC 算法求取基础矩阵。紧接着,使用基础矩阵计算当前帧的极线。最后,判断从匹配点到其对应极线的距离是否小于某个阈值。如果距离大于阈值,则确定匹配点是移动的。
(3)DynaSLAM: Tracking, Mapping and Inpainting in Dynamic Scenes—IEEE Robotics and Automation Letters, 2018
代码:https://github.com/BertaBescos/DynaSLAM
文章不仅能够去除动态物体,还能恢复出动态物体遮挡的背景。同时本文针对RGBD输入图像动态点的去除做了很多细致的处理:
a. 不具有运动性质的物体发生运动,例如人手上的书
对于每个当前帧,选择具有高重叠的之前5帧关键帧,然后计算关键帧的每个特征点在当前帧的投影,得到投影点和深度值,和该位置的深度图值进行比较,如果差值超过一定的阈值,则判断为动态点。下图a是仅通过上述方法判断的动态点,b是通过mask-rcnn检测的动态点,c是结合两个方法检测的动态点。
b. 将动态像素周围具有相同深度值的像素设置为动态。
c. 如果一个动态像素周围的patch的深度具有很大的方差,则设置该点为静态,防止因为边缘分割不准确,将背景点也误分类为动态点。
(4)Semantic Monocular SLAM for Highly Dynamic Environments—IROS2018
大多数语义用于动态slam都是将所有潜在运动的物体的点直接去除,但是例如停靠的车等并没有发生运动,如果运动的物体占据相机视角的大部分,那么将车上的点都去除会对位姿估计产生很严重的错误,另外,本文提到一种场景,当车停在信号灯前面时是静止的,但是随着时间的推移,车会慢慢开始运动,所以本文提出对地图点的静态率(inlier ratio)进行估计,能够实现地图点在静态和动态状态之间的平滑过渡。
本文参考SVO的深度滤波思路:通过不断的添加新观测数据对地图点的深度进行更新,只有当地图点的深度值收敛的时候才将该地图点添加到地图中;本文在此基础上,引入对于地图点是否为静态点的概率的估计——静态率,首先,根据语义分割网络的输出赋予静态率一个先验值,例如车具有较低的静态率,建筑具有较高的静态率等,然后根据不断的引入新的观测数据来更新该地图点的静态率,实现地图点在动静态之间的平滑过渡。
如下图是车辆停在信号灯前,b是orbslam选择的点,c是将所有潜在动态物体上的点都去除(红色),d是根据本文方法选出外点,可以保留大部分车上的静态点。
(5)Semantic segmentation–aided visual odometry for urban autonomous driving—IJARS2017
本文将直接法和特征点法结合,并引入语义信息减少动态物体的影响。通过计算相邻帧间某类物体的所有像素的总投影误差为每类物体赋予不同的权重,这个权重作为RANSAC选择点的权重,由于静态物体的投影误差小,所以更倾向于被选择。
(6)Stereo Vision-based Semantic 3D Object and Ego-motion Tracking for Autonomous Driving—ECCV2018
本文出自港科大的沈劭劼团队,同样基于自动驾驶的背景研究动态环境下的slam问题,利用Faster R-CNN在双目的左图上进行目标检测,利用视点分类的方法扩展出物体的3D检测框,然后将语义信息融合到一个统一的优化求解框架中。
作者将ORB特征点分为背景点和物体点,首先利用背景点进行相机位姿和背景点的3D 位置进行最大似然估计,即找出一组参数 x,f 使得模型产生观测数据的概率最大,式中变量的上下角标的0都表示背景点,下式就是一个典型的SLAM方法:
有了相机的位姿,接下来进行运动物体的跟踪,在这里面融入了物体的先验尺寸信息和语义测量(bounding box)信息,由于有了可利用的先验信息,所以采用最大后验估计的方法估计物体的位姿:
其中,要求解的第一个变量表示第k个物体的状态,从左到右依次是:3D检测框的中心点在世界坐标系中的位置,物体的三维尺寸(x,y,z长宽高),水平旋转角度,速度角和转向角。
第二个变量表示第k个物体帧上的特征的3D位置,注意运动物体上的特征相对于物体帧是静止的。sk表示语义测量,即检测框,zk表示物体上的特征点测量,所以上述最大后验理解为:在已知相机位姿,特征点观测和语义测量的条件下,估计最有可能的物体状态以及物体上特征点的3D位置。公式(7)中引入了物体的先验尺寸p(dk)将最大后验概率写成最大似然和先验概率的乘积。
接下来,同样将最大后验转化为最小二乘的问题:
下面分别介绍这四个优化项:
第一项的形式和求解相机位姿的最小二乘形式相似,同样是特征点的重投影误差。区别在于是将世界坐标系的点投影到物体帧上比较重投影误差,因为运动物体的点相对于物体帧本身是静止的。第二项是尺寸先验的误差,即估计的物体3D框的尺寸和先验值的差。第三项是物体的运动模型,根据t-1时刻的运动状态估计t时刻的运动。第四项是物体的3D框在图像上的投影与原本的2D检测框的差。
三
语义信息用于单目SLAM的尺度恢复
(1)Recovering Stable Scale in Monocular SLAM Using Object-Supplemented Bundle Adjustment_IEEE Transactions on Robotics 2018
本文将点和物体构建为统一的模型——球体,由中心点位置和半径组成,点的半径为0,论文里仅提到了车这一类物体,定义一个经验半径为1.2m。
物体在图像上的投影表示为:
然后将点和物体的重投影误差构建为最小二乘的形式,由于两个路标具有统一的形式,并且物体的半径是不需要优化的,点的半径为0,所以需要优化的量只有点和物体的中心点位置,所以将误差函数化简为下面的形式:
其中,重投影误差为:
(2)Bayesian Scale Estimation for Monocular SLAM Based on Generic Object Detection for Correcting Scale Drift—ICRA2018
核心思想:设置物体(车辆)的先验高度,或者说是服从先验高度(1.5m)的一个高斯分布,利用这个真实的高度比上地图中表达的车的高度就是要求的尺度因子。
所以现在的主要问题就是如何求地图中的车的高度,首先,局部地图中的3D点投影到图像上,投影位置在检测款内的3D点被认为是类别为car的点,在这里需要滤除一些偏差太大的点,下图中用不同颜色区分
计算类别为car的点的均值,表示为下图中的红色点ps,以ps所在竖直方向画一条竖线就是车的高度方向所在的直线,将直线投影到2d图像上得到一条竖直线和bounding box有上下两个交点,绿色表示,然后将两个点投影回3D空间确定了一个线段的长度,也就是车的高度,于是,尺度因子就是先验高度和实际高度之比。
四
语义信息用于long-term定位
Long-term Visual Localization using Semantically Segmented Images—ICRA2018
论文作者Erik Stenborg,是瑞典查尔姆斯理工大学信号处理研究小组的博士,参与了车辆定位项目,该项目旨在将车辆定位提高到足以实现自动驾驶的可靠性。
本文解决的问题是在已有的3D地图上进行定位,传统方法是基于特征匹配进行的,但是在自动驾驶的应用场景下,当前检测的特征和保存的地图特征一般具有很大的时间跨度,而普通的特征不具有鲁棒性,所以本文提出了一种依赖于语义标签和3D位置的定位算法。
本文对基于SIFT特征和基于语义特征定义了统一的观测模型:
ft表示当前图像,xt表示相机的位姿,M表示已知的地图,公式中将图像ft 表示为(ut,dt)的集合,即图像是由图像中所有的特征点及其描述子构成的,对于SIFT来说,就是图像中所有的SIFT特征点及计算出来的描述子,对于语义特征来说,特征是图像中所有的像素,描述子是每个像素对应的语义标签(因为语义分割可以获取图像中所有像素的语义标签),所以语义特征的图像是稠密的。
λ t 表示图像上的特征点和地图中的地图点之间的数据关联,下面公式表示当前图像第i个特征点对应地图中的第j个地图点,如果j>0表示地图中存在一个地图点和该特征点对应,如果j=0表示当前特征点没有对应的的地图点:
数据关联的获取对于SIFT特征和语义特征有差别。对于SIFT来说,首先获取地图M中位于当前相机位姿xt视角下的局部地图Ms,将局部地图中的点和图像特征进行匹配,包括使用RANSAC方法得到更准确的匹配关系作为数据关联;对于语义特征来说,同样获取当前相机视角下的一个局部地图Ms,将Ms中的每个点都投影到当前图像上,因为当前图像是稠密的,每一个像素都是特征点,所以可以直接建立数据关联,即地图点和投影点之间的对应。需要注意的是:有的图像像素没有对应的地图点,即 λ t =0的情况。
本文假设ut和dt相互独立,所以将观测模型的概率分为两项的乘积:
上式第一项的意义为在像素i位置检测到特征点的概率,由于语义图像上每一个像素点都是特征,所以该项是一个常数。可以将概率化简为:
这里存在两种情况:λit = 0,特征点没有对应的地图点,λit > 0 特征点有对应的地图点。
对于第一种情况,我们无法从地图中得到关于该特征点类别的信息,所以将特征点类别的分布假设为在所有类别上的边缘分布:
对于第二种情况, 特征点有对应的地图点,所以写成在已知对应的地图点类别的条件下特征点的类别概率分布。但是该地图点可能被遮挡,所以引入一个检测概率:δ=1,未遮挡;δ=0,遮挡。将分布概率改写成下面形式:
上述公式中,第一项表示对应地图点可见或者被遮挡下的特征点的类别概率,第二项表示对应的地图点可见或被遮挡的概率,公式不列出了。
语义的观测模型的意义在于通过位姿的调整使得图像中像素点类别和对应的地图点类别尽可能多的一致。在定义了运动模型和观测模型后,利用粒子滤波实现定位。
五
语义信息用于提高定位精度
(1)Probabilistic Data Association for Semantic SLAM—ICRA2017
本文第一次将几何,语义,IMU统一到一个优化框架中,用EM算法求解,实现了一个更高定位精度的slam系统,不考虑几何和IMU部分,下面介绍一下作者是如何将语义信息融合到SLAM优化框架中的。
首先,论文里提到数据关联,即观测与地图中路标之间的对应关系。由于几何的数据关联是通过特征跟踪实现的,所以这里只考虑语义的数据关联,即图中观测的检测框是地图中哪个物体的。本文没有考虑硬性的数据关联,观测就是和某个路标对应,而是考虑每一个观测和每一个路标之间都有可能对应,这个对应关系的可信度用一个权重因子w来表示,如果观测的数量和路标的数量近似相等,那么数据关联的个数就是平方的关系。w是EM算法的E步骤求解的。
对于每一个数据关联,定义一个语义factor,所有的语义factor加上几何factor加上IMUfactor一起构成要优化的目标函数(每个factor对应一个代价函数):
下面介绍一下语义factor的几何意义:
skb是图像中通过DPM算法得到的物体检测框,hπ()表示路标lj在图像上的投影点,作者假设相机对于lj的观测服从高斯分布,均值是投影点,方差和检测框的大小成正比,也就是相机对于lj的观测位置应该位于以投影点为中心的一个不确定椭圆内,不确定性大致就是检测框那么大,作者在公式(10)中定义的代价函数几何意义就是最小化投影点到检测框中心的距离,即最小化高斯分布均值和检测框中心点位置之间的差。
EM算法的E步骤就是计算上面提到的数据关联的权重;M步是已知权重,计算相机位姿和路标点的位置, 用ISAM2求解。
(2)VSO Visual Semantic Odometry—ECCV2018
本文利用场景语义信息建立跟踪过程中的中期约束(相邻帧匹配为短期约束,闭环检测为长期约束),从而减少视觉里程计的漂移。
在这里,作者定义了一个语义误差项,意图是:如果一个标签为car的地图点,在图像上的投影位置离图像中的最近的一个car(记为正确分类)的距离小于一个阈值,就最小化这个投影误差,通过调整估计的相机位姿将投影位置拉到正确分类内。但是car那么大,具体拉到哪一个点呢,作者在求解的时候考虑到这个问题,即语义误差项缺少结构信息,所以提出了几个解决办法:
a 语义误差项和基本的视觉里程计误差联合优化,优化的位置参考VO结果给出的建议
b. 多个点同时优化,优化的位置参考其他点给出的建议
那么,需要将投影过来的点与正确分类的距离转化为概率才能加如到目标函数中参与优化,作者定义了距离转化函数DT,投影点距离正确分类的距离越近,具有该类别的概率就越高,反之越小。
然后就可以定义语义误差项了,再将语义误差E_sem和视觉里程计的误差E_base设置一个权重进行联合优化
(3)CubeSLAM: Monocular 3D Object Detection and slam without prior
本文出自卡内基梅隆大学的Shichao Yang,作者有很多优秀的开源代码:shichaoy - Overview,包括本篇论文也部分开源,可以在作者的github上找到。本文利用目标检测算法生成2D检测框,然后通过消失点法生成物体的3D检测框,将物体作为一个路标,最后将物体约束结合几何信息融合到一个最小二乘公式中,提高slam的定位精度。本文也是基于单目相机,但是没有利用语义先验信息恢复尺度,而是通过固定相机的高度实现尺度的统一。
下面公式为本文构建的最终目标函数,联合优化相机位姿C,物体O,点P:
其中 ,相机位姿Tc ∈ SE(3),点P ∈ R3,物体O= {To , D} ,物体的6自由度位姿:To ∈ SE(3) ,物体尺寸D ∈ R3,长宽高。上面的目标函数包含下面三类误差:
object-camera误差:O= {To , D},Tc
a. 3D 测量:
第一项是将物体的位姿转化到相机坐标系下(前两个T相乘),和已有的3D框的测量值比较(Tom),由于误差形式是log误差,所以位姿是通过乘逆的形式进行比较,如果Tc^-1*To=Tom,那么log函数里面是1,该误差为0,如果不相等,则会产生一定的误差。第二项比较简单,直接比较物体的尺寸的差。通过读作者开源的部分代码可知,作者将第0帧观测到的物体作为世界坐标系的顶点,以后每一帧都对这个物体有一个观测作为比较的基准。
b. 2D 测量:
将3D框投影到图像平面上,如下图红色的2D框,和当前帧本身的检测框(蓝色)作比较,c是检测框的中心点位置,d是框的尺寸,包括长和宽。
将3D框投影到图像平面上,如下图红色的2D框,和当前帧本身的检测框(蓝色)作比较,c是检测框的中心点位置,d是框的尺寸,包括长和宽。
Object-point误差:O= {To , D},P
如果点属于一个物体,那么应该位于物体的3D检测框内,公式为:
即将点根据物体的6自由度位姿转化到物体帧的点坐标应该小于物体本身的长宽高Dm,即位于3D框内,此时误差取0。如果转化后的点坐标超出了物体的尺寸,误差取超出的距离。
Point-camera误差:P,Tc即传统slam中的重投影误差。
类似的论文:QuadricSLAM: Dual Quadrics From ObjectDetections as Landmarks in Object-Oriented SLAM,本文将物体建模为一个二次曲面,同样作为一个路标添加到优化中。作者来自昆士兰科技大学机器人视觉中心,他们有一个面向物体的语义SLAM建立的网站,http://semanticslam.ai/quadricslam.html
(4)Stereo Visual Odometry and Semantics based Localization of Aerial Robots in Indoor Environments—IROS2018
本文利用粒子滤波实现定位,机器人的状态向量定义为:x [m]=[ x y z θ φ ψ ],前三个值表示机器人在世界坐标系中的位置坐标,后三个值表示相对于世界坐标系帧的pitch, roll and yaw,在粒子滤波中,每个粒子都表示一个可能的x [m]。
在预测阶段,通过一个双目视觉里程计计算的位姿增量实现初步的下一时刻状态预测
在更新阶段,分为以下两个方面进行更新:
a. IMU 用于更新x [m]中的θ,φ,ψ;
通过计算每个粒子的θ,φ,ψ与IMU测量出的三个值进行做差来更新每个粒子的权重,决定resample阶段更相信哪些粒子的状态。
b. 语义数据用于更新x [m]中的x, y, z;
图像中的2D检测框通过计算的深度信息投影到世界坐标系中形成物体的三维点云作为语义数据,包含位置信息,类别,包含的3D点的数量和类别置信度。论文中提到参与更新的语义数据需要满足几个条件,例如置信度大于一个阈值,包含的3D点数量大于一个阈值等。
首先,将恢复出的物体点云的位置通过每个粒子代表的机器人位姿转化到世界坐标系下,然后和地图中具有相同类别的物体点云比较位置的差异,如果小于一个阈值,就将恢复出的物体点云和地图中已有的物体建立联系,并利用上述差异更新粒子的权重,更相信将物体点云投影后和地图中对应点云位置差小的粒子(每个粒子代表一个可能的机器人位姿)。另外,如果找不到对应的地图中的物体,就新建一个。
-----END-----
作者 | 张珊珊(https://www.zhihu.com/people/zhang-shan-shan-50-57-2)
作者 | 张珊珊(https://www.zhihu.com/people/zhang-shan-shan-50-57-2)
版权声明
本文版权归《张珊珊》,转载请自行联系
联系客服