简介
在ICRA 2021上看到这样一篇论文:Towards Real-time Semantic RGB-D SLAM in Dynamic Environments,发现它也是使用的语义网络+基于深度图的多视图几何方法来去除图片中的动态对象的。这一方法和之前看到的 DynaSLAM 类似,所以就挺好奇地去看了看。
摘要
论文作者认为当前大多数 SLAM 都仅适用于静态环境中。虽然近期有些学者通过深度学习来帮助 SLAM 在动态环境下工作,但这种做法需要消耗很高的计算资源,且无法处理未经过网络训练的物体(即语义网络无法识别的物体)。针对这些问题,作者做了一些尝试:首先为了减少计算资源的消耗,作者仅在关键帧 KF 上进行语义分割;然后,为了处理网络无法识别的物体,作者先对深度图进行聚类,对聚类结果采用多视图几何的方法进行动态点的判断。作者将上述优化方法用于 ORB-SLAM2 系统(ORB-SLAM2太狠了),最后也用多个数据集和实际环境验证了优化后系统的性能(能用于实际场景确实不错)。
系统流程
系统的整体流程图如下
以流程图为参考,整个系统有以下几个工作步骤:
1、数据获取:
通过 RGB-D 相机采集 RGB 图片和深度图片;
2、特征提取:
采用 ORB-SLAM2 的方法提取RGB图片中的特征点。
3、语义分割:
如果当前帧是关键帧,则对图片进行语义分割,根据分割后的结果更新
L
o
c
a
l
M
a
p
Local Map
LocalMap,以保证
L
o
c
a
l
M
a
p
Local Map
LocalMap 只保留静态点。如果当前帧不是关键帧,则不用进行语义分割,通过现有的
L
o
c
a
l
M
a
p
Local Map
LocalMap 实现跟踪定位。因为仅在关键帧上进行语义分割,所以较之 DynaSLAM(每帧都语义分割),该系统的计算速度会快很多。这一步能够获得系统的初始位姿估计;
3、深度图聚类+多视图几何:
对每帧深度图进行 K均值聚类,类别总数为
N
N
N(以深度值作为聚类的依据)。每一个聚类结果都被当作是某一物体的表面,且归属于同一类的所有点都满足同一运动约束(同类中各点的运动方式一致)。然后将
L
o
c
a
l
M
a
p
Local Map
LocalMap 中的点投影到当前帧上寻找匹配点,计算出各聚类结果的平均重投影误差(某一类中所有点的重投影误差求和取平均),如下式:
(1) 式在求重投影误差时还加上了一个惩罚函数
ρ
ρ
ρ。
u
u
u 表示是图像上的点,
P
P
P 是
u
u
u 在
L
o
c
a
l
M
a
p
Local Map
LocalMap 中匹配上的三维点。
动态点的判断依据为:根据各类的平均重投影误差,把其中误差相对较大的几类定义为动态类,将动态类中所有点都剔除,不用于位姿估计。这种方法在泛化性方面比深度学习网络要好。但是在判定动态类时,“误差相对较大” 这句话比较难以把握。
(这种先将部分点归于一类后再进行动态判断的方法比直接对每一个点进行判断的方法要更加稳定有效,因为后者受到图片的测量误差的影响更大,即单个点发生误判的概率较大。这也是该系统和DynaSLAM系统的一大不同之处)
4、位姿估计:
根据第3步的结果,对第2步的估计位姿进行优化,获得更加精确的位姿。后续的步骤和 ORB-SLAM2 相似。
上面就是整个系统的大致工作流程,作者也给出了分别采用第2步和第3步进行动态判断的结果:
图片中可以看出语义分割和多视图几何的方法是相辅相成的,两者都有好有坏,但又能够互相补充。
实验结果
下面是在数据集上的实验结果、时间消耗,以及在实际环境下的测试结果:
可以看出,虽然比 DynaSLAM 精度稍差,但是在时间消耗上比 DynaSLAM 有很大优势。此外,这个系统比仅采用深度学习的 DS-SLAM 性能更佳。
总结
感觉作者应该受到了 DyanSLAM 系统的很多启发,因为 DynaSLAM 也是采用的语义分割+基于深度图的多视图几何方法。得益于作者所提出的两个优化方案,在保证计算性能的同时,还保证了系统的整体精度。从实验结果中可以看出,该系统的精度和 DynaSLAM 的精度差距不是很大,但是速度比 DynaSLAM 快了将近一倍。如果把聚类和多视图几何判断方法再进行优化,应该可以获得一个更好的效果。