[2019]Semantic Monocular Visual Localization and Mapping Based on Deep Learning in Dynamic environment
1.作者
Linhui Xiao, Jinge Wang, Xiaosong Qiu, Zheng Rong, Xudong Zou
2.时间
2019
3.整体结构
- 运动目标检测线程使用SSD目标检测网络去计算目标的分类和位置。
- 通过语义校正线程将目标分为静止的或者运动的。
- 追踪线程可以提供动态目标的位置。
4.整体思想
1.漏检补偿算法
目标检测可以用精度(P)和查全率(recall)来衡量,作者认为对于动态SLAM系统查全率更加重要:
在SSD中添加了一个L1平滑损失项:
这里给出了一个假设:在短时间内,运动目标的速度趋近于一个常量,也就是说加速度为0。
其中,运动目标在像素平面上的速度为:v,加速度的阈值为a_max,则满足如下关系:
运动速度v用运动目标几帧之间的运动位移来表示,在实际中,在视频序列中相邻两帧的时间差异非常小,动态目标的运动位移变换不明显。
通过如下公式预测第K帧bounding box的位置:
- bounding box:
- 当前K帧中心点的位置=上一帧中心点的位置+前几帧该物体位移的平均值
- 目标存在的可能区域如下:由a_max确定。
- 目标存在的可能区域的中心点位置=上一帧物体位置+前几帧该物体位移的平局值±最大加速度阈值
算法1:遍历当前帧中上一帧出现过的物体的bounding box的list,预测这些物体在当前帧中可能存在的区域A,然后遍历当前帧所有实际检测到的bounding box判断是否在A中,如果在A中,计算中心位移,否则预测D,然后将D的结果添加到当前帧中的D_K中去,更新D_k。
- 这里最开始判断当前帧实际检测到的bounding box是否落在上一帧通过预测后得到的区域中,如果这些框没有落在我预测的区域中,那么就根据上一帧的中心点直接预测,换句话说,先检测实际的,不行就自己预测。
漏检补偿算法的效果,对追踪目标非常重要。
2.基于先验信息判断动态目标
根据人的先验信息,生活中一般物体运动的分数:
这是一个最大后验概率问题,当前一帧的bounding box被检测为运动的,那么当前帧也会被重复检测为运动的(这没太看懂,好像初始化的时候用的)
根据贝叶斯公式得到:
然后第K帧由前K-L帧决定,由此扩展条件概率公式:
3.目标检测和追踪
并不是所有特点都可用于追踪,但也并不是所有运动目标上的特征点不能用于追踪,这里有两种特殊情况:
- 是潜在运动目标,但是没有动,比如停放的车辆。
- 运动目标占据了视野的大半部分。
首先,将动态目标区域的mask设置为1,静止区域设置为0:
计算静止点的平局位移S_L(u,v):
接着计算潜在运动区域的位移,判断是否超过S_L(u,v)
算法2:选择跟踪算法,遍历当前帧所有的特征点,计算静止点的平均位移,对于潜在运动的区域通过和其静止点的平均位移进行比较,判断是否为动态的点。
对于静止的点,使用PnP求解位姿Pose,然后使用BA最小化重投影误差:
5.结果
1.SSD的校正
在TUM RGB-D benchmark的walking_rpy的序列中,和原SSD进行召回率对比:
方法 | 召回率 | 漏检率 |
---|---|---|
原方法 | 82.3% | 17.3% |
改进后 | 99.8% | 0.2% |
实验表明,漏检补偿算法能够提高目标检测的召回率。
2.与原ORB_SLAM2对比
- 图7表示,本文的方法和原ORB_SLAM2提取特征点差异性
- 图8表示,两种方法建图的效果,ORB_slam2在经过一定的移动后,就停止了,尺度发生严重的漂移,红色的地图点不在更新,如图8左。
- 图9表示,场景中静止点和运动点数量的比例,其中每帧大约3090个特征点,动态的点大约占74.11%,比静止的特征点多47.93%。
3.初始化测试
当相机固定,在初始化时测试动态目标的影响,可以看出ORB_SLAM2不能在动态环境下分辨前景目标和背景目标。反而,Dynamic-slam 能够检测动态目标的位置并且避免错误的初始化。
接下来,相机轻微的摆动,而且人与相机的位置不断改变,重复20次,结果显示,ORB_SLAM2能够初始化15次,成果比例为75%,而Dynamic-SLAM能够初始化19次,成功率为95%,这个方法提高了在动态环境下的初始化,因为动态目标被先验知识和训练网络检测到了。
4.在室内Tum数据集上测试
- 效果
- 精度的对比
- 时间的对比
5.在室外数据集上测试
6.真实数据采集
- 平台
- 实验
6.结论
这是一篇利用深度学习去提高SLAM在动态环境下性能的工作,主要采用的单目视觉,有以下贡献:
- 在低召回率的目标检测网络下,提出了漏检补偿算法(基于速度不变性)。
- 提出了一种简单有效的选择性追踪算法,能够提高系统的精度和鲁棒性。
- 结合先验知识和深度学习去检测动态目标,实现语义级的检测。