李 波 肖 勇
(武汉数字工程研究所 武汉 430205)
近年来无人船市场增长迅速,为无人船安全航行提供保障的自主导航技术也在不断地发展[1~2]。如何实现自主定位和环境感知是无人船实际应用时的关键问题之一。在许多涉及到无人船应用的场景中,比如路径规划[3]、自主航行[4]、环境感知等,定位与创建地图的过程被视作是先决条件。视觉SLAM(Simultaneous Localization and Mapping)算法可以借助视觉传感器,在没有环境先验信息的情况下,在运动过程中创建周围环境的地图,同时进行自主定位。
ORB-SLAM 算法(Orinted FAST and BRIEF-Simultaneous Localization and Mapping)是一种完全基于稀疏特征点的单目视觉SLAM 算法,包括视觉里程计、特征提取、回环检测等流程,其核心是使用ORB(Orinted FAST and BRIEF)作为核心特征[5~8]。但是,ORB-SLAM 算法构建的地图无法提供周围环境中物体的语义信息,视觉传感器获取的图像信息未能得到充分利用。因此,ORB-SLAM 算法只能解决无人船自主导航的问题,却无法对航行过程中通过视觉传感器拍摄到的物体进行智能识别。
Mask R-CNN 算法是近年来非常具有代表性的基于深度学习的实例分割算法,可被应于目标检测、目标关键点检测与实例分割等领域[9~12]。现实中大量的物体会有复杂且不规则的边界形状,而边界形状的精确预测对于整个实例的分割影响重大,Mask R-CNN 算法对物体实例边界识别的精度略有欠缺。
综上,现有的ORB-SLAM 方法虽然可以解决无人船的自主定位与地图创建问题,但是无法对航行过程中拍摄到的物体进行类型识别,现有的Mask R-CNN 算法虽然可以进行实例分割获取语义信息,但其对物体边界的精确识别还略有欠缺。因此,提供一种用于无人船生成三维语义地图的方法,既能支撑无人船自主地位与地图创建,又能对航行中遇到的物体智能识别,以增强无人船在执行航行、探索等任务时的效率,是当前无人船技术领域的当务之急。
无人船生成三维语义地图主要包括获取关键帧、关键帧实例分割、三维点云地图更新、特征融合和构建三维语义地图等步骤,如图1所示。
1)获取关键帧:无人船在航行过程中借助视觉传感器连续采集图像帧,获得图像帧序列,利用ORB-SLAM 算法来处理图像帧序列中的连续图像帧以获得初始化的三维点云地图,同时,通过对从连续图像帧提取的特征点进行判断来获得连续的关键帧;
2)关键帧实例分割:使用Mask R-CNN 算法对连续的关键帧进行实例分割,获得连续的关键帧中各关键帧包含的物体实例,并对这些实例进行语义标注,转至步骤4);
3)三维点云地图更新:在初始化的三维点云地图中加入连续的关键帧,实现对三维点云地图的更新,转至步骤4);
4)特征融合:从连续关键帧中可以提出各关键帧的特征点,并获得各关键帧的物体实例,与上一个关键帧的特征点和物体实例进行匹配,综合特征点以及物体实例匹配的结果对各关键帧的位姿估计结果进行局部非线性优化,从而获得各关键帧携带的物体实例语义标注信息;
5)构建三维语义地图:将连续的关键帧中各关键帧携带的物体实例语义标注信息与各关键帧在三维点云地图上的坐标进行关联,完成对三维点云地图的语义标注,获得三维语义地图。
实例分割是一种将语义分割和目标检测相结合的技术,相对于目标检测的边界框,实例分割可以得到更加精确的物体边缘;相对于语义分割,实例分割能够区分出同一物体的不同个体。对关键帧进行实例分割主要是为了获取每帧关键帧中所有物体实例。
本文采用的实例分割算法是Mask R-CNN。Mask R-CNN 算法可以同时进行目标检测与实例分割,并获得极佳的效果。Mask R-CNN 的处理过程可以分为两个阶段,第一个阶段对关键帧进行扫描同时生成提议,即可能包含一个目标的区域;第二阶段将提议有效分类,之后便能生成边界框和掩码。
具体的处理流程如图2 所示:在主干网络(Backbone)中输入连续的关键帧,通过从关键帧中提取特征获得特征图(Feature map);在特征金字塔网络(Feature Pyramid Networks,FPN)中输入获得的特征图,将特征图中低分辨率、高语义信息的高层特征和高分辨率、低语义信息的低层特征进行自上而下的侧边连接,从而使所有尺度下的特征都有充足的语义信息;在RPN(Region proposal Net,区域建议网络)中输入经过FPN 处理过的特征图,RPN是一个轻量的神经网络,它用滑动窗口来扫描图像,并寻找存在目标的区域,RPN 网络会在特征图中生成候选区域,对每一个RPN 获得的候选区域,执行RoIAlign 操作,经过RoIAlign 处理后每个RoI都可以产生固定尺寸的特征图;这些处理过的特征图之后被用在两个分支:一个是classifier 分支,用于生成回归框和预测类别;另一个是Mask分支,用于生成掩码。
图2 改进的Mask R-CNN实例分割算法模型
一般情况下,物体会有复杂且不规则的边界形状,边界形状的精确识别能极大地影响无人船智能识别前方物体的准确度。因此,为了使边缘的分割精度提升,本文在Mask 通路之后增加一个边界细化模块(Boundary refinement,BR),该模块借助一个残差结构来优化生成的掩码,以进一步拟合实例边界,能极大提升边界处的识别能力。
本文为了完成对掩码的优化,使用联合训练损失函数,该联合训练损失函数L的公式为
其中,Lcls表示目标检测时对兴趣区域目标类别预测的交叉熵,即为分类误差;Lbox表示目标检测时对兴趣区域位姿修正的损失函数,即为检测误差;Lmask表示执行语义分割任务时预测的掩码与实际掩码的逐像素交叉熵之和,即为分割误差。其中,Lmask为平均二值交叉熵损失函数,该公式表示为
其中,y表示二值化后正确标记的数据,表示二值化后预测的分割结果。然而,在执行分割任务时,交叉熵损失函数由于过于依赖区域信息而忽略对边界信息的预测,导致在最终的分割结果中边界分割的准确度不高。
本文在Lmask中加入BWL(边界加权损失函数),来优化生成的掩码。Lmask-bwl是优化后的公式,可表示为
其中,Ldis表示边界加权损失函数,α 表示权重系数,B 表示分割结果的边界,R 表示整个分割区域,Mdist表示正确标记的数据分割边框的距离变换,相当于一个距离图。这样相当于在Lmask增加了边框损失的权重,可以得到精确度更高的分割结果。
通过边界细化模块处理后可以获得关键帧中的物体实例,经过classifer 分支处理后可以获得物体的类别信息,两者结合最终获得Mask R-CNN 算法的处理结果,即关键帧中的物体实例及其语义标注信息。使用Mask R-CNN 算法对连续的关键帧处理完后,可在后续进行特征融合。
该过程需融合特征点匹配和实例匹配对ORB-SLAM 的位姿估计结果进行局部非线性优化,得到携带物体实例语义标注信息的关键帧。对关键帧进行实例分割和特征编码后,获得了每帧关键帧图像内所有物体实例的特征描述向量,可以利用空间金字塔匹配算法来计算两个实例的特征描述向量之间相似度。
进行位姿估计时,假定k-1 时刻图像帧中特征坐标为pik-1,该特征对应的三维地图点在世界坐标系下的坐标为piw。通过特征匹配,获得k 时刻图像帧中对应的特征坐标为pik。借助位姿变换和投影函数,获得该三维地图点在k 时刻图像帧中的坐标。在之前的过程中只估计了两帧图像间的相机位姿。进一步地,在创建地图的过程中,通过地图点的共视关系,建立局部地图,获得局部地图点,局部关键帧,固定关键帧集合,固定地图点集合。当前关键帧观测到的地图点为局部地图点,观测到局部地图点的关键帧为局部关键帧。被局部关键帧观测到,而没有被当前关键帧观测到的地图点为固定地图点,观测到固定地图点而不属于局部关键帧的关键帧为固定关键帧。
通过结合实例的特征描述向量和实例的空间位置相似度对实例进行有效地跟踪与匹配,完成实例的识别与目标关联,从而有效区分场景中形状外观相同的实例,提高实例匹配和物体识别的准确率。
将携带物体实例语义标注信息的关键帧映射到实例三维点云中,构建出三维语义地图。采用OpenGL 可以进行点云的融合和更新,进而拼接成全局点云地图。在全局三维点云地图生成的同时,进行语义标注,将关键帧的像素级语义标注结果映射到对应的点云地图上,根据无人船位姿变换矩阵,可将每一个像素点的相机坐标转换为世界坐标,最后根据每个像素点所对应的三维空间坐标,将关键帧图像的二维语义分割结果映射到对应的三维点云地图上,完成三维点云地图的语义标注任务,最终生成需要的语义地图。
仿真实验考虑周围环境的复杂度和算法的难度,事先选择适量的位置固定的特征点当作先验信息,此时无人船的三维语义地图生成过程是一个部分环境信息给定的同步定位与语义地图创建的过程。仿真实验中无人船从起点出发执行任务,在行驶轨迹周围有着适当数量的环境特征,算法处理过程和仿真结果如图3所示。
图3 无人船生成三维语义地图方法仿真
图3(a)表示无人船生成三维语义地图方法处理过程,而图3(b)则是算法处理后获得的对环境特征位置及自身位置的估计结果。图3(b)中的红色线表示无人船在行驶过程中对自身位置的估计,而实际轨迹则是起始点、三个转折点与终点组成的闭合图形,通过对比可知仿真实验中算法对无人船轨迹的估计与其实际运动的轨迹大体上是一致的。图3(b)用蓝色圆圈表示环境特征的估计位置,用红点表示环境特征的实际位置,从图中可以看出算法对环境特征的估计基本上趋近于最优估计。通过图3(a)可知算法处理过程中获得的环境特征预测点都在特征点实际位置附近,随着特征点数量增加,无人船生成三维语义地图的方法收敛效果越好。
当前仿真验证了无人船生成三维语义地图方法在创建环境地图方面的准确性,后续将结合语义信息开展仿真实验验证其在识别物体上的准确性。
本文主要对无人船生成三维语义地图进行研究,三维语义地图生成是未知环境下无人船进行自主导航的关键问题,具有重要的研究价值和应用价值。针对ORB-SLAM 方法无法对航行过程中拍摄到的物体进行类型识别的缺陷,结合Mask R-CNN提出了一种无人船生成三维语义地图方法。针对传统的Mask R-CNN 算法在识别物体边界时精确度略有欠缺的问题,增加边界细化模块并优化损失函数,提升Mask R-CNN 算法对物体边界识别的精确性。通过仿真实验验证了无人船生成三维语义地图方法在创建环境地图方面的准确性,后续将进一步验证其在识别物体上的准确性。