1. 引言
同步定位与地图构建(Simultaneous Localization and Mapping, SLAM)是指搭载特定传感器的移动机器人在未知环境中,通过运动来获取环境信息,并实时构建环境地图,明确自身所处位置[1]。根据使用传感器的不同,SLAM主要可分为激光SLAM和视觉SLAM。相较于搭载激光雷达的SLAM,搭载相机的视觉SLAM具有体积小、成本低廉、获取环境信息量大等优点[2]。随着图像处理技术的快速发展,使得视觉SLAM得到了更多关注与研究,这也使其发展得越来越成熟,逐渐成为移动机器人领域研究的关键问题[3]。
视觉SLAM工作流程主要可以分为五大部分:信息采集、前端视觉里程计(Visual Odometry, VO)、后端优化(Optimization)、闭环检测(Loop Closing)、建图(Mapping)。而前端视觉里程计是整个SLAM过程中极其关键的一部分。其主要任务是通过相邻两帧图像之间的相对位移来估计其中相机的运动,以及所包含的局部地图的模样,从而恢复场景的空间结构。视觉里程计主要是从图像中选取特征明显的像素点,通过它们在不同图像帧间的位置信息来计算两个图像之间的运动。正是这一特性,使得视觉里程计与计算机视觉领域紧密相关,特别是图像的特征提取与匹配[4]。
传统视觉SLAM技术在静态、刚体、光照变化不明显且没有人为干扰场景下的应用已经十分成熟,并且有着相当不错的性能,例如:ORB-SLAM2 [5]、VINS-Mono [6]、LSD-SLAM [7]等。但是当场景中出现动态目标时,图像中的动态点会导致系统在跟踪过程中出现大量误匹配,这就造成系统漂移误差变大,定位精度下降,这就使得传统视觉SLAM技术难以应对现实复杂多变的动态场景。因此找到一种能使SLAM系统稳定高效应对此场景的方法显得至关重要。
2. 相关工作
针对SLAM系统存在的这种问题,学者们主要采用剔除动态特征点的方法来提高SLAM系统在动态场景下的定位精度与鲁棒性。目前主流的处理方法主要分为几何约束和结合深度学习这两种方法。
在基于几何约束方法中,假定只有静态特征符合几何约束条件,而动态特征不满足。Engel等[8]结合直接概念模型将包括几何约束以及相机运动在内的所有模型参数联合优化,完全不依赖于关键点和描述子,大大提高了系统的跟踪精度和鲁棒性;Li等[9]通过选取深度边缘点来实现帧到关键帧之间的匹配,为关键帧中的边缘点设计静态加权方法,从而减少动态目标对系统的影响;Cheng等[10]提出一种基于贝叶斯框架的稀疏运动剔除模型,通过连续帧间的相似性以及当前帧与参考帧间的差异性来剔除输入帧的动态区域;Wang等[11]提出一种基于数学模型和几何约束的检测方法,将数据过滤过程纳入到SLAM流程中,对深度图像进行聚类,进而识别出动态对象。由于几何方法通常是需要预定义阈值来判断特征点是否符合要求,再将其确定为动态或静态特征点,这容易导致系统识别过于激进或保守。
在结合深度学习的方法中,Xun等[12]结合语义信息和深度信息来检测动态对象的特征点,从而提取除此之外的静态特征点用于相机位姿估计;Feng等[13]使用SegNet语义分割网络对图像进行分割,并融合RGB-D相机和编码器信息增强分割效果,以此来区分动态对象;Liu等增加了语义线程以及优化线程,在检测动态对象过程中不同的线程能够并行运行,同时去除跟踪线程中的异常值;Yu等[14]将语义分割与光流法相结合,提出了一种名为DS-SLAM算法,降低了动态物体对系统的影响,提高了系统定位精度;Bescos等[15]发表的DynaSLAM将Mask R-CNN与多视图几何相结合,在对动态目标进行分割处理后再由几何模型剔除动态特征点,仅使用静态特征点来完成SLAM系统的跟踪与建图;He等[16]提出了一种动态环境下无预定义动态标签的SLAM系统,通过平均重投影误差降低动态点带来的影响;Su等[17]将轻量级目标检测网络并行语义线程融合到SLAM系统中,能够更快地获取场景中的语义信息,提高了系统精度与实时性,但对于场景中潜在动态目标的特征点检测仍存在问题。在结合深度学习的基础上融入几何约束很大程度上提升了SLAM系统的性能,但依然存在些许不足。例如Mask R-CNN [18]、SegNet [19]等语义分割网络在对场景中目标进行分割时较为耗时,且需要多帧图像来实现几何约束。
结合现阶段的文献来看,这些方法虽然在一定程度上提升了SLAM系统在动态场景下的性能,但仍存在定位精度低、运行耗时较长等方面的原因,在实际应用过程中依然面临实时性和稳定性方面的挑战。针对这些问题,本文将改进的YOLOv8n目标检测网络与光流法结合,更加高效、合理的剔除场景中的动态特征点,并在TUM数据集的多个序列中进行实验验证,明显提高了SLAM系统的精度与实时性。
3. 系统框架
系统在ORB-SLAM2算法原有基础上进行改进,添加基于YOLOv8n目标检测网络和LK光流线程。系统采集到原始图像信息后,通过改进的YOLOv8n目标检测网络对场景中的潜在动态目标进行识别,并对这些目标添加目标检测框。同时,利用LK光流线程对潜在动态目标检测框内的特征点进行判断,得到潜在动态目标的真实运动状态,将动态目标检测框内的动态特征点剔除,非动态目标检测框内的特征点予以保留。最后将筛选后的静态特征点运用到后续位姿估计、优化、建图等环节中。
3.1. 改进YOLOv8n目标检测网络
YOLOv8是目前单阶段检测算法YOLO系列中十分成熟的目标检测算法,其结构主要包括主干特征提取网络(Backbone)、特征强化提取网络(Neck)和网络检测头(Head)三个部分。相较于之前版本,YOLOv8采用了更加合理、简洁的模型结构,检测性能得到不同程度提升。其中Backbone部分和Neck部分中的跨阶段局部网络(cross stage partial network, CSP)模块由YOLOv5的C3结构替换成了C2f结构,使网络在变得轻量化的同时能获取到更加丰富的梯度流信息,并将该模块预处理部分的卷积次数减少了一次,加快网络运行速度。在Head部分将YOLOv5网络中的耦合头结构换成了解耦头结构,将Anchor-Based策略换成了Anchor-Free策略,整体采用无锚点分体式检测头,相较之前提高了检测的准确性。YOLOv8的Loss计算包含分类损失和回归损失。
针对复杂、多元的检测任务,YOLOv8基于缩放系数可分为YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l、YOLOv8x五种不同大小的模型。为了避免模型过于复杂对目标任务产生计算冗余而影响后续SLAM系统实时性,在综合考虑检测精度与运行速度后,本文采用最轻量的YOLOv8n网络作为基线,并采用Ghost卷积替换原网络常规卷积。Ghost卷积操作时不同于原有的卷积运算,而是使用一种廉价线性运算对前一步普通卷积生成的通道数更少的特征图进行处理,使其特征与通道数增加,从而能在保持特征输出图固有特征的同时,大大减少网络计算量。Ghost卷积模块原理如图1所示。
Figure 1. Ghost convolutional structure diagram
图1. 鬼影卷积结构图
Figure 2. YOLOv8n structure diagram
图2. YOLOv8n结构图
在对场景中潜在动态目标进行识别时,由于人的移动和遮挡会使部分远距离小目标的细节丢失,导致检测效果不佳。为了解决这个问题,本文在YOLOv8n网络原有的3个检测层的基础上,添加了一个小目标检测层P2。组成的新检测头能够利用有限的特征信息进行识别,减少了小目标特征信息的丢失,有效提高了检测效果。改进后的YOLOv8n检测网络结构图如图2所示。
3.2. LK稀疏光流法
光流是在连续变化的时间内,描述像素在图像之间运动的方法。相比于传统特征点法在存在耗时、容易丢失特征信息等的缺点,光流法在保留特征点的基础上,跳过计算与匹配描述子的过程,节省了计算时间,也避免了特征缺失的情况。根据使用图像像素数量的大小,光流法分为稠密光流法和稀疏光流法两种,为了降低系统计算量,本文采用计算图像部分像素的Lucas-Kanade稀疏光流法。
在LK光流法中,存在两个基本假设:(一) 同一像素灰度值在各图像中保持恒定;(二) 相邻像素具有相同的运动。
将
作为图像在时间上的函数,可得
时刻位于
处的像素灰度为
,根据假设(一)可得:
(1)
将式(1)左端泰勒展开,得:
(2)
其中
为高阶无穷小系数,可忽略不计,从而:
(3)
将其中
、
对
的导数分别记为像素在对应轴上的运动速度
、
。
、
分别表示图像在该点
、
处、方向上的梯度,记为
、
。把灰度对时间的变化量记为
,整理可得:
(4)
由上式可知,求解
、
需引入额外约束。根据假设(二),选取一个以特征点为中心,大小为
的像素窗口。可知窗口内
个像素具有相同的运动:
(5)
上式为关于
、
的超定线性方程组,使用最小二乘法求解。将得到的目标区域像素的相对运动速度等信息与目标检测网络相结合,把两帧图像之间被检测网络框标识的潜在动态目标以外的静态区域的平均速度近似为相机运动速度,设其为阈值。当特征点运动速度大于阈值时,可判断该特征点为动态特征点并予以剔除,反之则为静态特征点。
3.3. 动态特征点剔除
现有的部分结合目标检测的视觉SLAM动态特征点剔除方法会将动态目标检测框内的特征点全数作为动态特征点处理,但是在动态目标移动的过程中,目标检测框会将场景中其他静态区域的特征点包含在内。若尽数剔除,则会使场景中这些静态特征点数量减少,从而影响系统的定位精度。
针对这类情况,本文提出了一种依据先验信息的动态特征点剔除策略。根据先验信息先对场景中的目标进行分类,将会不断移动的目标,例如:人、猫、狗等定为动态目标;将椅子、书本、水杯等本身为静态物体,但可能因为人为因素影响而在场景中移动的物体定为潜在动态目标。将位于动态目标框内的特征点归属于动态特征点,位于潜在动态目标框内的归属于潜在动态特征点,场景中剩余特征点则为静态特征点。
当SLAM系统正常运行提取特征点时,本文改进的YOLOv8n目标检测算法同时也对场景中的各个目标进行检测,将先验信息中的动态目标和潜在动态目标分类标识,场景中其余部分的特征点则视为静态特征点;再利用LK光流法对动态目标与潜在动态目标框内的特征点速度进行计算,将结果与静态区域特征点的平均速度比对,若其速度小于阈值,则该点为静态特征点并予以保留,其余特征点视为动态特征点剔除。最后,将场景中剩余的所有静态特征点用于系统后续的特征匹配与位姿估计等流程。
4. 实验部分
4.1. 基于轻量化改进YOLOv8n实验
论实验采用的数据集为VOC2007 + VOC2012,是Pascal VOC Challenges官方数据集,其中包含20类物体,标注的物体包括人、猫、狗、桌椅、TV、水杯等种类,数据集一共有11,530张图片,标注了超过27,450个物体。由于数据集存在部分需求之外的类别图片,通过筛选重组,将选出的5862张图片分为训练集和测试集进行检测,其中训练集4690张图片,验证集1172张图片。实验参数如下:输入图片尺寸为640 × 640,批量大小为16,初始学习率设为0.01,优化器为SGD,动量设置为0.937,迭代次数为200,权重衰减为0.0005。
本实验使用精确率P、召回率R、平均精确率mAP@0.5作为模型检测性能的评价指标,数值大小与性能呈正相关,其定义式如下:
(6)
(7)
(8)
其中,TP为检测正确的目标数量,FP为检测错误的目标数量,FN为漏检数量,
为P、R曲线下包围的面积,M表示目标类别总数。mAP@0.5表示在将IoU值设置为0.5时,模型中所有类别
的平均值。
为验证本文改进方法对YOLOv8n模型的影响,对其在上述数据集中进行了测试。其中“√”表示模型中使用了该方法,反之则未使用改进方法。实验结果如表1所示。
Table 1. Comparison of ablation experiments on VOC datasets
表1. VOC数据集消融实验对比
Ghost |
小目标检测层 |
P/% |
R/% |
mAP@0.5/% |
Params/M |
|
|
78.3 |
70.4 |
74.6 |
3.16 |
√ |
|
77.8 |
68.9 |
74.1 |
2.73 |
|
√ |
79.5 |
71.6 |
75.3 |
2.98 |
√ |
√ |
79.4 |
71 |
75.5 |
2.68 |
从表中可以看出,仅添加Ghost模块时,算法模型的精确率、召回率等仅略微下降,但参数量相较原模型减小了14%;当仅添加小目标检测层时,算法模型的精确率、召回率以及平均精度都得到了提升,但参数量缩减程度不如仅添加Ghost模块时明显。在整合以上改进后,与原算法模型相比,改进后的算法在精确率、召回率和平均精度上有部分提升,但在模型参数量上得到了显著缩减,仅为原算法模型的84%。这就使得该算法模型能够在完全保证检测精度的同时,大大提高系统的运行速度。
为进一步验证本文改进算法的有效性,在相同实验条件下,将其与当前主流目标检测算法进行对比,结果如表2所示。
Table 2. Comparison of VOC dataset with other models
表2. VOC数据集上与其他模型效果对比
算法 |
P/% |
R/% |
mAP@0.5/% |
Params/M |
YOLOv8n |
78.3 |
70.4 |
74.6 |
3.16 |
YOLOv5s |
78.5 |
68.3 |
74.3 |
7.4 |
PP-LCNet |
76.1 |
70.2 |
73 |
4.32 |
改进算法 |
79.4 |
71 |
75.5 |
2.68 |
实验结果表明,改进后的算法有着更好的检测精度和速度。由于本文将Ghost卷积模块替换了原网络的普通卷积,从而减小了算法模型大小,降低计算量,同时又引入小目标检测层提高模型的检测精度,使得改进的算法模型能够很好的满足后续SLAM系统的相关要求。
4.2. 数据集运行效果对比
为了验证本文所提算法性能,实验采用德国慕尼黑工业大学(TUM)公开提供的RGB-D数据集。该开源数据集是评估SLAM系统基准的常用数据集,共包含39个序列,其中每个序列包含彩色图、深度图以及相机位姿等信息,图像的分辨率为640 × 480。本文主要针对动态场景下的SLAM系统,因此选用TUM数据集中walking序列作为主要实验数据序列,walking序列属于高动态场景,记录了两个人围绕办公室移动,选取了其中walking_xyz、walking_static、walking_half三个序列;此外还选取了sitting_static低动态序列,场景中两人坐在桌前,仅在肢体上有些许动作。实验的仿真环境为:CPU i7-12650H,GPU NVIDIA RTX3060,系统环境为Ubuntu20.04。
Figure 3. Comparison of dynamic feature point culling effects
图3. 动态特征点剔除效果对比
选用TUM数据集中walking_half序列进行动态特征点剔除效果对比,图3(a)为原ORB-SLAM2算法所采集的特征点,其中存在大量动态特征点被采集;图3(b)为本文算法采集的特征点,能够直观看出其有效识别出动态特征点并进行了剔除,同时存在于动态目标框内的静态特征点也予以了保留。
4.3. 实验结果分析
本文实验采用SLAM系统评估定位精度时常用的绝对轨迹误差(Absolute Trajectory Error, ATE)和相对轨迹误差(Relative Pose Error, RPE)进行定量估计,给出了均方根误差(Root Mean Squared Error, RMSE)以及标准差(Standard Deviation, SD)两个指标具体表明定位精度。为了直观体现本文算法相较于ORB-SLAM2原算法的精度提升效果,计算公式为:
(9)
式中
为原算法运行结果,
为本文算法运行结果。
图4~6分别展示了ORB-SLAM2和本文改进算法在使用低动态序列和高动态序列时ATE和RPE的对比情况。可以看出,本文算法在低动态序列中的定位精度相较于ORB-SLAM2没有明显提升,但在高动态序列中的ATE和RPE要显著小于ORB-SLAM2,定位精度提升明显。
Figure 4. Sitting sequence ATE and RPE
图4. Sitting序列ATE和RPE
Figure 5. walking_half Sequence ATE and RPE
图5. walking_half序列ATE和RPE
根据表3数据对比可以看出,与ORB-SLAM2相比,本文算法在高动态序列下RMSE和SD的精度提升效果可以达到90%以上,特别是在walking_xyz序列中提升效果尤为明显,分别达到了97.76%和97.59%。而在低动态序列中各项数据提升较少,分别为10.47%和8.82%,这是因为当场景中动态物体较少时,ORB-SLAM2依靠自身优化算法也能够较好的处理,此时本文算法的提升效果有限。
根据表4,表5 RPE结果可以看出,本文算法与ORB-SLAM2在平移误差和旋转误差两个方面的减小趋势同ATE十分相似。在高动态序列中本文算法精度提升效果显著,在低动态序列提升有限。
Table 3. ATE comparison
表3. ATE对比
序列 |
RMSE/m |
SD/m |
精度提升/% |
ORB-SLAM2 |
本文算法 |
ORB-SLAM2 |
本文算法 |
RMSE |
SD |
walking_xyz |
0.7231 |
0.0162 |
0.3984 |
0.0096 |
97.76% |
97.59% |
walking_half |
0.7139 |
0.0369 |
0.3387 |
0.0268 |
94.83% |
92.09% |
walking_static |
0.3977 |
0.0108 |
0.1704 |
0.0081 |
97.28% |
95.25% |
sitting_static |
0.0086 |
0.0077 |
0.0034 |
0.0031 |
10.47% |
8.82% |
Figure 6. walking_xyz sequence ATE and RPE
图6. walking_xyz序列ATE和RPE
Table 4. Comparison of translation errors in RPE
表4. RPE中平移误差对比
序列 |
RMSE/m |
SD/m |
精度提升/% |
ORB-SLAM2 |
本文算法 |
ORB-SLAM2 |
本文算法 |
RMSE |
SD |
walking_xyz |
0.5936 |
0.0264 |
0.3536 |
0.0138 |
95.55% |
96.10% |
walking_half |
0.8325 |
0.0588 |
0.4811 |
0.0293 |
92.94% |
93.91% |
walking_static |
0.5864 |
0.0312 |
0.3891 |
0.0243 |
94.68% |
93.75% |
sitting_static |
0.0106 |
0.0098 |
0.0053 |
0.0049 |
7.55% |
7.55% |
Table 5. Comparison of rotational errors in RPE
表5. RPE中旋转误差对比
序列 |
RMSE/(˚) |
SD/(˚) |
精度提升/% |
ORB-SLAM2 |
本文算法 |
ORB-SLAM2 |
本文算法 |
RMSE |
SD |
walking_xyz |
8.5542 |
0.6993 |
5.4462 |
0.4316 |
91.83% |
92.08% |
walking_half |
10.5562 |
0.9563 |
7.5395 |
0.5802 |
90.94% |
92.30% |
walking_static |
7.0211 |
0.4633 |
4.5563 |
0.2588 |
93.40% |
94.32% |
sitting_static |
0.3166 |
0.3029 |
0.1439 |
0.1356 |
4.33% |
5.77% |
同时将本文算法与DS-SLAM、DynaSLAM在相应序列中的运行结果和运行时间进行比对,结果如表6,表7所示,本文算法能够达到与二者近似的精度。其中,DynaSLAM在高动态序列的RMSE略小于本文算法,但该算法在运行中耗费的时间过长,牺牲了系统的实时性。而本文算法在精度相近的前提下,显著提高了系统运行速度,改进了DynaSLAM在速度方面的缺陷。综合考量各项指标,本文算法在精度与速度之间实现了更好的平衡,性能更优。
Table 6. Comparison of RMSE of Absolute Trajectory Error (ATE) of different algorithms
表6. 不同算法绝对轨迹误差(ATE)的RMSE对比
序列 |
DS-SLAM |
DynaSLAM |
本文算法 |
walking_xyz |
0.0247 |
0.0150 |
0.0162 |
walking_half |
0.0303 |
0.0250 |
0.0369 |
walking_static |
0.0081 |
0.0060 |
0.0108 |
sitting_static |
0.0066 |
\ |
0.0077 |
Table 7. The tracking of the algorithm is time-consuming (unit s)
表7. 算法的跟踪耗时(单位s)
序列 |
ORB-SLAM2 |
DS-SLAM |
DynaSLAM |
本文算法 |
walking_xyz |
0.0396 |
0.3053 |
1.2248 |
0.0719 |
walking_half |
0.0419 |
0.2756 |
1.2836 |
0.0783 |
walking_static |
0.0381 |
0.2925 |
1.1738 |
0.0744 |
sitting_static |
0.0324 |
0.3267 |
1.2516 |
0.0751 |
5. 结论
本文算法在ORB-SLAM2的基础上设计了目标检测线程和动态特征点剔除线程。对于目标检测线程,选择YOLOv8n网络作为基线,首先采用Ghost卷积替换原模型中的常规卷积,减小网络模型参数量,其次增加了一个小目标检测层,提高模型对图像中小尺寸目标的检测效果。最后将改进后的YOLOv8n目标检测网络与LK稀疏光流法结合,用于剔除场景中的动态特征点,保留更多的静态特征信息。实验结果表明,本文算法在高动态序列下相较于ORB-SLAM2,ATE和RPE降低了90%以上,精度提升效果显著。与DS-SLAM、DynaSLAM相比,本文算法能在保证精度的前提下,大幅提高系统的运行速度,实现了精度与速度之间的平衡。
今后将针对动态目标在场景中占比过大或运动过快导致系统定位精度下降、目标检测模糊等问题,持续优化算法,应对更多不同类型的复杂场景,进一步提高算法在极端条件下的性能。