总览
算法的方块流程图。黑色实线和虚线分别是rgb图像和深度图像pipeline,红色表示稀疏图的数据流向。
来自双目、或者单目的图像,经过Mask R-CNN获得像素级的语义分割。深度图像则使用另一种基于多视图几何的方法实现更精确的运动分割,为此,我们需要一种低成本的跟踪算法。获得相机位姿跟踪后,我们修补动态对象所遮挡的背景。
使用R-CNN分割RGB图像
使用Mark R-CNN获得像素级别语义分割 与 对象标签。网络的输入是原始RGB图像,分割出动态或可移动的物体类别——人、自行车、汽车、摩托、鸟、猫等等。且对于大多数环境,可能出现的动态物体都已经考虑。网络的输出是 m × n × l m{\times}n{\times}l m×n×l,其中, { m , n } \{m,n\} {m,n}是图像尺寸, l l l是物体数量。对其中的每个通道 i ∈ l i{\in}l i∈l,图像都是对应物体的二进制掩码图像。
低成本跟踪(Low-Cost Tracking)
在对图像的动态内容进行分割后,我们对图像的静态部分进行跟踪。
采用将地图特征投影到像素平面上,最小化重投影误差以优化相机位姿。
使用Mask R-CNN和多视角几何 分割动态物体
因为Mask R-CNN针对的是语音分割,在处理动态物体上有一定缺陷——当语义上是静态的物体,但实际发生了移动。
对当前帧,我们定义“重叠关键帧”,即,考虑当前帧和关键帧的距离和旋转,选择重叠度最高的关键帧。
对当前帧,我们选出五张“重叠关键帧”,计算关键帧中每个关键点
x
x
x在当前帧中的投影,获得投影点
x
′
x'
x′,和投影深度
z
p
r
o
j
z_{proj}
zproj。对于每一个关键帧,其对应的3D点为
X
X
X,我们计算
x
x
x与
x
′
x'
x′的反投影角度,即它们的视角差
α
\alpha
α,如果该角度大于30°,我们认为该点可能被遮挡,此后将会被忽略。而在TUM数据库中,对于大于30°视差角的静态对象将会被认为为动态对象。考虑投影深度
z
′
z'
z′(该深度值,来源于当前帧的深度图像),与
z
p
r
o
j
z_{proj}
zproj进行比较,如果误差
Δ
z
=
z
p
r
o
j
−
z
′
\Delta z=z_{proj}-z'
Δz=zproj−z′大于阈值
τ
z
\tau_z
τz,则关键点
x
′
x'
x′被认为是动态物体。
由深度判断动态物体的示意图。来自关键帧的点
x
x
x在当前帧上的投影点
x
′
x'
x′及其深度
z
′
z'
z′(来自当前帧深度图),计算深度为
z
p
r
o
j
z_{proj}
zproj。
我们显示地将动态物体的边界标注为静态:如果关键点标签为动态,且深度图中周围补丁具有较大差异,则标记为静态。
Mask R-CNN和多视角几何两种方法分割动态物体实例。关键在于能否识别出1背景板后的人(RGB-D相机难以检测远处物体);2前景人手中的书和椅子。可见将两者结合起来效果最好。
多视图几何方法的局限主要是初始化困难。
跟踪和建图
这一步的输入是删去动态部分的RGB图像和深度图像,在静态部分提取ORB特征,同时注意删除处于动态静态交界处的特征点。
背景修补
对于每个被移除的动态物体,我们希望利用历史帧的静态部分,修补被遮挡的背景。
我们使用20帧历史关键帧,将RGB图像和深度图像投影到当前帧的动态部分中,进行修补。如果某些区域没有对应部分,我们便留白。
背景修补示意图:上四张图是输入,下四张是分别修补的结果。