Paper阅读:Dynamic-SLAM
- 前言
- Missed detection compensation algorithm(漏检补偿算法)
- Seletive Tracking Method(选择跟踪算法)
- 总结
前言
论文原文:Semantic monocular visual localization and mapping based on deep learning in dynamic environment 在动态环境中工作时,由于动态对象的干扰,传统的SLAM框架的性能很差。 通过在对象检测中利用深度学习的优势,提出了一种语义动态的动态地图定位和映射框架Dynamic-SLAM,以解决动态环境中的SLAM问题。 本文的主要三大贡献:
- 针对SLAM系统提出了一种基于相邻帧速度不变性的丢失检测补偿算法,提高SSD的recall rate,为后续模块提供了良好的依据。
- 提出了一种选择跟踪算法,以一种简单有效的方式消除动态对象,提高了系统的鲁棒性和准确性。
- 构建了基于特征的可视化动态SLAM系统。 构建了基于SSD的目标检测模块线程,并将其检测结果作为先验知识提升SLAM性能。
主要希望解决问题:动态环境下的SLAM。
Missed detection compensation algorithm(漏检补偿算法)
传统目标检测任务无法通过上下文信息来提高检测精度。但SLAM中,视频帧按时间顺序到达时,检测结果将以柔和的方式扫描到先前的帧中,从而预测下一个检测结果,从而避免丢失或丢失。 对于SLAMIDE问题中的动态对象检测任务,Recall rate更加重要。 模型基于以下合理假设:动态对象的运动速度在短时间内趋于保持恒定(即加速度趋于0)。 用v vv表示动态物体的速度,用a m a x a_{max}amax表示像素平面中动态物体速度变化率的阈值。那么有以下关系:Δ v < = a m a x \Delta v<=a_{max}Δv<=amax 先前帧和当前帧之间的相应边界框可以通过∆ v ∆v∆v确认,也就是说可以预测上一帧物体在当前帧的位置。 下面的K a i ^Ka_iKai就表示预测的物体center位置,由上一帧物体位置+前几帧该物体位移的平均值+容错阈值 组成。 K c ^ ^K\hat{c}Kc^表示物体最后估计的center,也就是漏检补偿的坐标,由上一帧物体位置+前几帧该物体位移平均值组成。
算法:已知SSD会输出检测物体的list,那么遍历当前帧中上一帧出现过得物体list,预测这些物体在当前帧的bbx位置,再遍历当前帧所有的bounding box是否有被预测框包含,如果有则说明在这一帧被检测到了,如果没有表示没有检测到,那么就把这个物体加上。
效果:
Seletive Tracking Method(选择跟踪算法)
作用:不提取/少提取有dynamic object 的特征点,减少Bundle Adjustment求解的误差。 作者提出把一些常见动态物体打分,但是后面似乎没有说到要用到这个分值。
SLAM执行特征点采集匹配后,往往会执行pnp求出pose的初值,然后再用BA最小化重投影误差:
Dynamic-SLAM中,把动态物体区域(Mask)设为1,非动态物体区域设为0:
核心在于以下式子,13式是计算静态点的平均位移,12式是计算动态点的位移是否超过 静态点的平均位移×阈值,如果超过了就说明这个动态点在移动,不适合作为BA求解的一份子,剔除该特征点。
整体算法如下:遍历当前帧的特征点,计算静态点的平均位移。 如果是动态点,就看它是否小于所有静态点的平均位移(这里还要×一个系数),以此来判断这个动态点是否在动。
效果如下:
总结
这篇论文是我第一篇看的语义slam,之前听很多人推荐过(估计是因为开源的缘故?),他的侧重点不在于建图,而在于使SLAM更加精确,消除了部分动态物体对pose求解造成的影响。相对于其他理论算法的提升,似乎深度学习+SLAM的搭配更加容易,但后续还会再看看类似的领域看有没有更加创新的思维。