NGD-SLAM的重要模块之一是与框架无关的掩码预测机制,这也是动态跟踪的基础组件,与深度神经网络的前向过程相比,这种预测速度要快得多,在CPU上处理一次仅需几毫秒。它可以直接适用于任何视觉SLAM框架,并保持其实时性能。图2展示了掩码预测的流程,包括六个组件。
检测:
在语义线程中使用YOLO-fastest模型检测帧中的多个目标,并基于语义信息识别潜在的动态目标。该模型通过OpenCV DNN集成以兼容C++,NGD-SLAM采用该模型是因为其效率高,同时也允许根据需要轻松替换其他目标检测或分割模型。
分割:
使用目标检测模型比使用分割网络更高效,但它仅提供检测目标的边界框。为改善这一点,NGD-SLAM使用深度信息分割这些边界框内的目标。在识别出动态目标(如人)后,它对每个边界框内的像素深度进行排序,并使用中值作为该检测目标的估计深度。边界框会被扩展,所有接近该深度值的像素都会被掩码化。该方法比聚类方法计算效率更高。随后,使用连通组件标记算法排除深度相似但不属于主要目标的对象掩码,并在传递到输出缓冲区之前进行膨胀处理进一步优化掩码。
采样:
在获得识别出的动态目标掩码后,从掩码内提取动态点。图像被划分为15×15的单元格。在每个单元格内,识别出满足FAST关键点标准并被掩码化的像素,选择阈值最高的像素。如果没有合适的FAST关键点,则在该单元格内随机选择一个像素。这个网格结构允许均匀提取动态关键点,由于关键点的独特性及其与高梯度区域的关联性,确保了跟踪的稳定性。
跟踪:
系统利用Lucas-Kanade光流法跟踪采样的动态点,假设关键点的灰度值在不同帧之间保持不变。假设像素在小窗口内均匀移动,可以建立一个优化问题,利用窗口内的像素梯度通过最小化匹配像素的总灰度误差来估计像素运动(dx, dy)。
聚类
:对于当前帧中跟踪的动态点,使用DBSCAN(基于密度的空间聚类算法)对彼此接近的点进行聚类,并将那些显著远离任何聚类的点区分为噪声。使用该方法可以有效区分来自不同动态目标的跟踪点。此外,通过考虑每个跟踪点的2D位置和深度,算法可以有效排除异常值,如显著偏离聚类的点或在2D图像中看似接近但深度差异显著的点。
预测
:在得到聚类后,系统能够确定当前帧中动态实体的位置。因此,首先为每个聚类生成一个粗略的掩码,通常是一个矩形,以覆盖聚类内的所有点。随后,使用每个聚类中点的深度信息将相应的掩码细化为动态目标的精确形状。如图2所示,为当前帧预测的掩码非常精确。