1. 语义slam中的时间效率问题

  针对动态场景下的SLAM问题,解决方法大致可以分为两大类,一类是使用多视图几何或者其他传统方法检测外点或者残差较大的动态区域,另一类是使用深度学习的方法,包括目标检测和实例分割的一些网络,将一些先验的运动的物体分割出来进行剔除。在特定使用的场景下,后者能够高效的剔除动态物体上的特征点,大大提升定位精度,将其与传统方法结合将是未来的趋势。
  但是很多神经网络融合进SLAM后并不能实时运行,而且分割精度与准确度通常和时间效率成反比,要想得到更快的分割速度,往往需要以牺牲精度为代价。所以,在使用深度学习方法解决动态环境下的SLAM问题时,如何提高系统运行效率是一个亟待解决问题。

2. 解决方法探讨

2.1 方案一:将分割网络放在单独的线程

  清华大学的论文《DS-SLAM: A Semantic Visual SLAM towards Dynamic Environments》中,提出将语义分割网络放在一个单独运行的线程之中,这样语义分割可以和ORB特征提取、运动一致性检测并行运行,可以提高系统运行的效率。这种做法得到了之后很多人的采纳,但是在这里运动一致性检测不再能使用语义分割结果,而且所使用的语义网络运行速度也需要足够高,否则还是会成为提升性能的瓶颈所在。


2.2 方案二:目标检测与语义分割网络之间的切换

  首先要知道目标检测是用方框将将图像中的每一个检测到的物体框起来,语义分割是像素级别的将图像中每一类物体进行分类,实例分割是像素级将图像中每一个物体进行分类。由此可见语义分割与实例分割的分割结果要优于目标检测,所以一般来说分割所需要的时间也更长一些。故可以在特征点丰富的情况下,使用目标检测网络以提高系统运行的效率,而在特征点较少的情况下,使用像素级别的语义分割以提高分割精度来得到更多背景上的静态的特征点。


  例如,为了解决平衡计算速度和mask准确度,如论文《STEREO CAMERA VISUAL SLAM WITH HIERARCHICAL MASKING AND MOTION-STATE CLASSIFICATION AT OUTDOOR CONSTRUCTION SITES CONTAINING LARGE DYNAMIC OBJECTS》中提出了一种分层对象去除(Hierarchical Object Masking)的策略。具体的,首先使用EfficientDet网络进行目标检测,如果车辆检测框占图像面积比例超过一定的阈值,则认为背景上的特征点过少,需要使用像素级别的分割网络Mask-Rcnn得到更加精细的分割结果,从而得到更多的背景上的特征点。



 

2.3 方案三:只在关键帧上进行目标检测

  既然不能实时的在SLAM系统中运行神经网络,那就只在关键帧上进行检测,然后将结果传播到其他帧上去。2018年北京大学发表在WCACV的论文《Detect-SLAM: Making Object Detection and SLAM Mutually Beneficial》提出了一个在GPU加速的情况的可以实时运行的开源动态SLAM系统Detect-SLAM。具体的文中介绍到,将SLAM与目标检测算法相结合可以很好的弥补二者的不足,利用目标检测算法去除运动目标上的特征,可以提高动态环境下的SLAM系统定位性能,而利用SLAM系统建立的语义地图又可以帮助改善在具有挑战性条件下的目标检测效果。下面我们只讨论我们关心的部分,如何让融合目标检测网络实的SLAM系统实时运行?


  Detect-SLAM提出了两种策略克服时间效率问题:1.只在关键帧中进行目标检测(SSD网络),然后对局部地图中地图点的更新运动概率2. 通过特征点匹配和匹配点传播来传播运动概率,之后使用移动概率小的特征点进行跟踪。
 
更新运动概率
  对关键帧In的RGB图像进行目标检测,由于目标检测需要较长时间,此时其他图像Tn+i通过上一帧图像的概率传播获得移动概率。当目标检测完成后(移动物体比如人上的特征点设为1,背景上的特征点设为0),对局部地图中对应特征点的概率进行更新,具体方法为:


 
传播运动概率
  对于除了关键帧以外的普通帧,需要通过帧与帧之间的概率传播得到当前帧各个特征点的运动概率,具体包括特征匹配和匹配点扩散两种形式。1. 将当前帧的特征点与上一帧和局部地图中的特征点进行匹配,若匹配成功,则之间将其运动概率拷贝过来。2. 对于匹配失败的特征点,利用特征点的空间一致性得到运动概率。对于置信度高(分数过低或过高)的特征点设置影响半径,向影响到的未匹配到的特征点传播运动概率。


2.4 方案四:使用最近的关键帧进行分割

  论文《RDS-SLAM: Real-Time Dynamic SLAM Using Semantic Segmentation Methods》以及后续的论文《RDMO-SLAM: Real-Time Visual SLAM for Dynamic Environments Using Semantic Label Prediction With Optical Flow》新增了语义线程,只在关键帧中进行语义分割,并根据分割结果更新特征点的运动概率。其详细分析和对比了各种关键帧选择方案的语义延时,并给出了一种关键帧的选择策略,适用于各种速率的分割网络,可以最大限度的降低语义延迟、挖掘语义信息的潜力。


  假设每两帧选择一帧关键帧,使用Mask-Rcnn进行分割(每分割一张图片,slam可以处理10帧)。下面具体分析三种关键帧的选择策略所产生的语义延迟:
  方法1,按顺序对每一帧关键帧进行分割:首先对关键帧KF0(F0)进行分割,则10帧后F10得到分割结果,语义延迟为10。KF1(F2)在第11帧开始分割,20帧得到结果,此时F20的语义延迟为18。按此规律F30延迟为26,F40为34…语义延迟随时间呈线性增长。
  方法2,使用两个网络对图像按顺序同时进行分割:F12的语义延迟为10,F22的延迟为16。以次类推,语义延迟仍然随时间呈线性增长,故通过增加语义分割的线程数不能从根本上解决问题。
  方法3,使用两个网络,从队列的头和尾部进行分割,一个网络分割最近的关键帧。语义延迟为常数10。

  论文采用方法3进行分割,丢队列头部的关键帧进行语义分割的目的在于,语义线程是在跟踪线程之后的,导致前几帧是没有语义信息进行参考的(Mask-Rcnn为10),前期可能会积累很大误差,需要语义信息进行修正。
  以后新分割的语义信息通过贝叶斯理论融合到地图点中去,以更新移动概率,移动概率以权重的方式融合到位姿优化之中。

3. 分析与总结

  方案一将分割网络放在一个单独的线程运行,通过系统并行运行提高效率,但是这种方案需要网络分割速度足够快,否则还是会成为提高性能的瓶颈。
  方案二在两个网络间切换的策略容易实现,一定程度上可以提高系统运行速度,但是受算法原理的限制,速度不可能提高到快,即最快情况下等于目标检测网络的速度,没有从根本上解决问题。
  方案三在关键帧中进行目标检测,能够保证系统高效的运行。但是关键帧的插入是由环境决定的,即关键帧之间的间隔是不稳定的,可能会因为关键帧间隔过大导致目标检测的能力没有充分发挥出来,也可能会因关键帧间隔过短导致目标检测速度跟不上。(Detect-SLAM想法还是非常非常巧妙和强大的)。
  方案四将创建了一个队列用来存储关键帧,同时分割队列头部和尾部的关键帧,适用于不同速率的网络,在极大缩短语义时延的同时,对前几帧没有语义信息的图像进行分割,一定程度上弥补了初始阶段的误差累积。