黄圣杰,胡满江,2,周云水,2,殷周平,秦晓辉,2,边有钢,2,贾倩倩
(1.汽车车身先进设计制造国家重点实验室,湖南大学机械与运载工程学院,长沙 410082;2.湖南大学无锡智能控制研究院,无锡 214115;3.中国汽车工程学会,北京 100000)
同时定位与建图(simultaneous localization and mapping,SLAM)是指在没有周围环境先验信息的前提下,智能车辆仅依赖携带传感器的信息,完成自身位姿估计与环境地图构建的过程,它是保障无人驾驶车辆决策、规划等模块正常运行的重要前提[1]。其中,视觉SLAM以相机作为主要传感器,因具备价格低廉、色彩纹理信息丰富、功耗小等优势,近年来受到了广泛关注。
传统视觉SLAM多基于静态环境假设展开,并借助多视图几何原理建立帧间数据的关联模型,进而计算相邻帧间相机的位姿以及构建环境地图。然而,真实场景中的动态对象难以避免,如车辆和行人,动态对象的运动过程将对相机位姿和地图点的解算结果造成干扰,易导致SLAM系统的位姿漂移和地图重影问题。为解决上述问题,学者通常在前端视觉里程计之前将图像中的动态特征滤除,依赖静态点完成SLAM系统的后续任务,从而提高SLAM在动态环境下的鲁棒性与精度。因此,如何精准检测出图像中的动态特征成为动态环境下SLAM的关键问题。
依据动态特征检测方法的不同,可将现有视觉SLAM算法分为3大类:基于几何约束的动态特征检测方法、基于光流的动态特征检测方法和基于语义的动态特征检测方法。在基于几何约束的检测方法中,ORB-SLAM系列[2-4]采用了随机采样一致性方法(random sample consensus,RANSAC)来剔除离群点(离群点中包含动态特征点),即通过循环随机抽取特征点子集计算得到单应性矩阵,基于单应性矩阵校验剩余特征点,超出阈值范围的特征点则被视为离群点。魏彤等[5]通过相邻两帧相机之间的基础矩阵与极线约束估计出动态特征点,并基于深度与颜色信息进一步确定动态区域的轮廓。Zou等[6]基于三角测量一致性,计算前后帧图像特征点的重投影误差,并将误差超出阈值范围的特征点判定为动态点。Dai等[7]利用Delaunay三角剖分法建立前后帧特征点的图模型,随后移除图模型中多个关键帧之间观察不一致的约束边,进而降低动态特征点对地图点与相机位姿优化过程的影响。基于光流的动态特征检测方法中,Flowfusion[8]将PWC-Net网络估计的光流进一步划分成由相机运动产生的自我流和由动态对象运动产生的3D场景流,从而进行动态分割,经过若干迭代完成场景重建。Derome等[9]首先基于5点法[10]获取本质矩阵,进而由本质矩阵与上一帧图像获取估计图像,最后借助估计图像与当前帧图像完成特征点的光流计算,光流值超出L2距离约束的特征点被判定为动态特征点。近年来受益于深度学习在语义分割和目标检测领域的快速发展,诸多学者尝试利用相关算法解决动态场景的定位问题。Runz等[11]借助Mask-RCNN[12]和几何分割算法获取场景中的动态对象的掩码。DS-SLAM[13]结合SegNet[14]语义分割网络与运动一致性算法,滤除动态特征点,从而得到可靠的相机位姿并构建静态目标地图。程腾等[15]融合多层次多模态的特征进行目标检测。Bescos等[16]结合Mask-RCNN网络、区域生长算法对动态特征进行识别并滤除。
视觉SLAM目前已在智能车辆领域得到应用,但现有方法仍存在如下问题:(1)基于几何约束、光流法的动态特征检测方法大多受限于静态点占比更大的隐含假设,当图像中动态点占比更大时,依赖帧间数据建立的几何约束、光流向量难以有效区分动静态点;(2)大多基于语义的动态特征检测方法实时性较低,为了保证分割精度,大多研究者采用了诸如Mask-RCNN的大型分割网络,加上其他诸如背景修复的任务,系统每帧处理时长常高达几百ms,难以保证实时性要求;(3)基于语义的动态检测方法大多还存在过度去除特征点的风险,此类方法在获得所有潜在动态对象后(如,人、车),往往将位于潜在对象轮廓区域内的特征点全部删除,这样导致剔除的特征点过多,在纹理信息较少的场景,系统易跟踪失败。
为解决上述问题,本文提出一种动态场景下结合语义分割与几何约束的SLAM方法,该方法不基于静态点数量占优的假设,可在动态环境下准确分割出实际运动目标,且具备实时性与鲁棒性。本文主要创新点在于:(1)提出一种融合轻量级语义分割网络Fast-SCNN[17]和ORB-SLAM3结合的SLAM算法架构,实现了动态定位场景下的潜在动态对象的实时分割;(2)利用运动约束和卡方检验进一步筛选实际动态特征,避免了分割网络对特征点的过度分割,提高系统在欠纹理环境下SLAM系统的鲁棒性;(3)通过慕尼黑工业大学公开数据集与实车试验对该方法进行验证,证明该类方法的有效性。
系统在ORB-SLAM3原有框架的基础上,增加语义分割模块与运动一致性约束模块,总系统架构见图1。
图像数据进入系统后,分别沿蓝色箭头进入Fast-SCNN网络的语义分割线程以及沿黑色箭头进入前端里程计的跟踪线程。分割线程中,Fast-SCNN网络对图像进行分割以获得潜在动态区域掩码,同时跟踪线程基于ORB特征提取图像帧中的特征点,随后借助动态区域掩码去除所有潜在动态特征点,将剩余特征点输入位姿估计模块,获取相机位姿的初步估计。然后,结合初步估计的相机位姿、运动一致性约束与卡方检验筛选出真实动态特征点,将潜在动态特征点中的剩余静态特征点输入位姿估计模块,以完成相机位姿的进一步优化,提高SLAM精度并降低图像中特征点较少时系统的跟踪失败率。最后,依次执行图中剩余模块中的步骤,构建完整的SLAM系统。
通过语义分割剔除所有潜在动态特征点以获取相机位姿的初步估计,再结合运动约束完成对静态特征点的重添加,以进一步优化相机位姿估计。该部分从原理上避免了对静态点数目占优这一假设的依赖,同时降低了因动态点误判而造成的前端里程计跟踪失败的风险。
Fast-SCNN网络参考了文献[18]和文献[19]中提出的分支结构,以及文献[20]和文献[21]中提出的跨越连接层(skip connections)。如图1所示,该网络主要由下采样、全局特征提取、特征融合和分类器4个模块组成,其中,下采样模块在提取图像初级特征的同时降低图像分辨率以提高网络运行速度;全局特征提取模块用于提取图像全局语义信息;特征融合模块用于融合图像初高级特征以保证网络更为鲁棒的特征提取能力;分类器则输出最后的像素预测类别。Fast-SCNN网络的输入为m×n×3维度的彩色图像,输出为m×n×c维度的概率矩阵,其中c为分割的类别数量,在c维度上寻找概率最大值,即可获得表征每个像素类别的m×n维矩阵,本文中,按照潜在动态目标与非潜在动态目标,将像素分为两类标签。
为衡量语义分割网络的预测值与真值之间的差异程度以正确优化网络参数,本文采用交叉熵损失函数(cross entropy loss function)作为Fast-SCNN的优化目标函数,其数学表达如下:
式中:x为分割网络的输出;class为对应真值;c为像素类别数。
如图2所示,C1、C2为相机运动过程中t1、t2两个时刻的光心位置。p点为潜在动态对象上的一个特征点,若p为静态点,设其在两个成像平面上的像素坐标分别为xp1、xp2,且xp1、xp2分别位于极线l1、l2上;若p为动态点,且在t2时刻运动到了q位置,则其在C2图像帧中的像素坐标为xq2。
极线l2可表示为
令K为相机内参矩阵,F为C1图像帧到C2图像帧的基础矩阵,则极线l2满足:
xp2到极线l2的距离平方为
式中d2服从自由度为1的卡方分布,取95%置信度,其拒绝域为3.84。由于ORB-SLAM3中为了实现尺度不变性,采用了缩放因子为1.2的图像金字塔,故位于第n层图像金字塔的特征点像素坐标方差为1.22n,则动态点xp2到极线l2的距离平方d2应满足式(5),由此进一步确定所有潜在动态特征的动静态特性。
点p在C1、C2相机坐标系下的坐标为Pc1、Pc2,其满足:
式中:T c1_w、T c2_w分别为世界坐标系到C1、C2相机坐标系的转换矩阵。
点q在C2相机坐标系下坐标为Q c2。P c2、Q c2满足自由度为3的卡方分布,取95%置信度,其拒绝域为7.81,则动态点P c2满足:
本文中采用MHP-v2[22]数据集对Fast-SCNN语义分割网络进行训练,MHP-v2采集了真实世界场景中不同视角、不同位姿、不同遮挡情况和不同场景下的行人数据,其共包含25 403张图片,训练时训练集、验证集、测试集分别包含15 403张、5 000张、5 000张图片。Fast-SCNN训练过程在服务器上进行,其CPU为英特尔至强E5-2683,内存为64GB,同时搭载4张显存为12G的TITANX Pascal显卡。
SLAM效果利用标准数据集与实车采集数据进行评估。标准数据集采用慕尼黑大学提供的Tum数据集,具体使用其中的walking_static、walking_xyz、sitting_xyz、walking_halfsphere序列。序列中,sitting、walking分别代表数据集中的人坐和行走的不同状态,static、xyz、halfsphere分别表示相机静止、沿XYZ轴运动、沿半球运动的状态。
实车数据集利用图3(a)所示的试验小车采集,其上搭载了ZED-2i双目摄像头以及华测-410组合惯导。数据集中包含一段长度为402.3 m、频率为15 Hz、分辨率为720×1280的双目数据,以及组合惯导在RTK信号下输出的厘米级真实轨迹。数据集拍摄场景见图3(b),场景中各目标在相机视野内时而静止时而运动且随机占据不同比例的相机视野,以评估算法在实际动态场景下的运行效果。
分割网络和SLAM试验的运行均在本地笔记本上,其CPU为英特尔i5-8300H,内存为8GB,显卡为GTX 1050ti,显存为4GB。
Fast-SCNN网络使用pytorch-1.7深度学习平台搭建,训练时,采用Adam[23]优化器,学习率依据式(8)poly函数进行变换。
式中:lr为新的学习率;base_lr为基准学习率,设置为0.045;epoch为当前整个数据集的训练轮次;num_epoch为整个数据集总训练轮次,设置为200;power为指数衰减因子,设置为0.9。
数据增强部分,对输入图像进行比例为0.5~2的随机缩放、50%概率的水平翻转、50%概率的高斯模糊以及随机裁剪,每张显卡上每个训练批次输入80张图片。
试验采用像素精度(pixel accuracy,PA)、平均交并比(mean intersection over union,MIOU)和运行时间3个评价指标在MHP-v2验证集上对分割网络的训练结果进行评估。像素精度与平均交并比的计算公式分别如式(9)和式(10)所示。
式中:pij为类别为i、预测为j的像素;pji为类别为j、预测为i的像素;k为总类别数。
Fast-SCNN网络训练结果如表1所示,其像素精度与平均交并比均超过90%,每张图片的处理时间约14.5 ms,满足动态对象分割的精度和时延要求,其部分分割测试结果如图4所示。
表1 Fast-SCNN训练结果
本文利用绝对位姿误差(absolute pose error,APE)计算每一时刻算法输出的相机位姿与真值之间的绝对误差,同时,提供了误差平均值(mean)、中值(median)、均方根误差(root mean squared error,RMSE)、标准偏差(standard deviation,STD),以全面客观地反映算法性能。
图5展示了在walking_halfsphere序列上分别使用ORB-SLAM3算法和本文算法的运行结果。对比图5(a)和图5(b)可以看出,ORB-SLAM3在该动态环境下难以准确恢复相机位姿,其估计的相机轨迹与真实轨迹偏离较大,而基于本文算法剔除动态特点后,SLAM得到的相机轨迹和真实轨迹基本重合。观察图5(c)和图5(f)可以看出,本文算法在各坐标轴与各方向上均有效减少了动态特征点对原有SLAM系统的干扰,保证SLAM在动态环境的稳定运行。同时由图5(d)和图5(e)可以看出,对比ORBSLAM3,本文算法的绝对位姿误差峰值小、波动平稳,且在各类统计量上均有一个数量级上的减小。
表2提供了在各个数据集上本文算法与ORBSLAM3关于绝对位姿误差的具体数值对比,表中的提升率采用式(11)计算。可以看出,在Tum数据的walking动态序列和实车混合场景数据中,本文算法在平均值(mean)、中值(median)、均方根误差(RMSE)、标准偏差(STD)这些统计量上的平均提升率均在80%以上;在Tum sitting_xyz序列中,由于人坐在椅子上交谈并未随意行走,整个场景处于低动态状态,因此两种算法的精度都较高,但本文算法能在保留人身上静止部分特征点(如不动的躯干)的同时剔除其运动部分的特征点(如手),因而也提升了相应的试验精度;在实车复杂场景中,本文算法在各项指标上也均有大幅提升。试验结果充分说明了本文算法在动态场景下对于SLAM算法精度与鲁棒性的显著提升作用。
式中:ur为提升率;Δ1为ORB-SLAM3上的相关误差项;Δ2为本文算法的相关误差项。
针对动态场景,本文中提出了一种结合轻量级Fast-SCNN语义分割网络与运动一致性约束的SLAM方法,该方法首先通过分割网络获取潜在动态区域掩码并进行特征点去除,从而获取相机的初步位姿估计结果,随后基于运动一致性约束与卡方检验,完成动态特征点的进一步筛选,以进一步优化相机位姿估计结果。本文中训练的语义分割网络像素精度与平均交并比均在90%以上,分割耗时约14.5 ms,满足SLAM系统的实时分割要求。同时,通过将本文算法与ORB-SLAM3系统融合,并在Tum动态场景公共数据集和实车动态场景数据集上试验,本文提出的算法在各项指标的平均提升均超过了80%,显著提升了ORB-SLAM3在动态场景的运行精度与鲁棒性,有效拓宽了现有视觉SLAM的应用领域,有助于保证智能车辆运行安全。
未来将结合TensorRT工具与模型剪枝,进一步提高算法的运行效率。