DS-SLAM: A Semantic Visual SLAM towards Dynamic Environments
一、 introduction
这篇文章主要提出了结合语义信息和运动特征点检测,来滤除每一帧中的动态物体,从而提高位姿估计的准确性。同时建立了语义八叉树地图。
在高运动的场景中,与ORB SLAM2相比提升明显。但也存在不足,如仅能识别20种物体,并只认为人是移动的类别;八叉树地图的作用不知道是干嘛的,闭环时要重新建图,并且类别概率关联不清楚。
contribution:
- 基于ORB SLAM2,提出完整的语义SLAM系统,能够减少动态环境下,移动物体对于位姿估计的影响。
- 创建独立的实时语义分割线程,语义分割框架使用segnet。语义分割结合动态一致性检测方法,跟踪环境中的动态物体。
- 创建了一个独立线程,构建语义的三维八叉树地图(3D octo-tree map),使用log-odds评分方法,滤出不稳定的voxels并更新其语义标签。
二、system introduction
1. framework
在这里插入图片描述
系统共有五个独立线程并行:
- tracking
- semantic segmentation
- local mapping
- loop closing
- dense semantic map creation
slam框架是ORB SLAM2,使用Kinect2分别捕捉彩色图和深度图。RGB图送入semantic线程和tracking线程。tracking线程中,首先提取ORB特征点,然后检查这些特征点的移动一致性(moving consistency),并记录潜在的外点。同时,semantic线程并行运行,其pixel wise的分割结果于tracking线程的ORB特征结合,将移动物体的特征点定为外点。这些外点和上一步的潜在外点都被丢弃。根据剩余的稳定内点,计算转换矩阵。
注意这里semantic线程运行比tracking满,一致性检测后,要等待semantic的结果。
后头说semantic的时间约等于feature extraction+consistency check的时间。
2. semantic segmentation
使用的网络结构是SegNet,在caffe上使用VOC训练,共20个类别。
认为标签为行人的特征点最有可能是外点。(先验?)
3. Moving Consistency Check
这步的目的是:检查分割结果中的关键点是否是动态的。(大概是,当前帧有语义标签之后,它提取的特征点,是不是动态的?)
论文说思想很简单,不太懂: If some points are determined to be dynamic within a segmented object, then the object could be regarded as a dynamic object。
如果这个点的语义标签是动态类别,那么它所属的物体的点就都是动态的?
检测流程是:
- 计算optical flow pyramid,得到当前帧中,与参考帧匹配的特征点。这个是光流金字塔,是可以追踪特征点的。
- 检测特征点匹配是否合法。若太靠近边界,或其像素值,与以它为中心的邻域的3x3区域内的像素值差别太大,就认为不合法,丢弃这对匹配。(但是没说这两条检测规则,是针对于参考帧还是当前帧的像素点?)
- 使用RANSAC和这些匹配的内点对,计算基础矩阵。
- 对于每一对匹配点,根据参考帧的像素坐标和基础矩阵计算极线。
- 计算这对匹配中当前帧的像素点,到极线的距离。
- 若这个距离大于阈值,则认为它是一个动态点。
理解一下:基础矩阵(3,3)的功能是,将参考帧中的特征点,映射到当前帧的对应搜索域中, p 2 T F p 1 = 0 p_2^{T}Fp_1=0 p2TFp1=0。这里的 p p p,是像素平面上的点(2,1)。极线表示对应特征点可能出现的位置,计算公式为: I = F P 1 I=FP_1