方 娟, 方振虎
(北京工业大学信息学部, 北京 100124)
同时定位与建图(simultaneous localization and mapping,SLAM)在移动机器人、自主驾驶、增强现实等领域有着广泛的应用. SLAM的目标是在没有任何先验知识的情况下,根据传感器数据实时构建周围环境地图,同时,根据这个地图推测自身的定位,实现自主导航.
近年来,有许多学者研究SLAM,并取得了显著的成果,如ORB-SLAM2[1]、基于直接法的大范围单目同时定位和建图(large-scale direct monocular SLAM,LSD-SLAM)[2]、稀疏直接法里程计(direct sparse odometry,DSO)[3]等方法. 然而,大多数方法无论是基于特征的方法还是直接法,都是基于静态场景的假设,而真实场景中动态对象的存在是不可避免的[4]. 如果动态对象具有较强的纹理信息,系统会从动态对象上提取大量的特征,当跟踪到不稳定的特征点时,会严重影响姿态估计,造成较大的轨迹误差甚至跟踪丢失. 此外,视觉词袋(bag of visual word,BoVW)[5]方法虽然在开源SLAM框架中取得了不错的效果,但对场景中的光照条件和动态物体等参数十分敏感,容易造成误匹配[6-7].
随着深度学习算法的发展和计算机性能的提高,目标检测和语义分割方法取得了很大的进展[8-9]. 研究人员逐渐意识到这些方法可能有助于解决上述SLAM问题. 传统视觉SLAM技术与基于深度学习的语义分割、目标检测方法结合可以大大提高动态环境下SLAM系统的鲁棒性和准确性[10].
Bescos等[11]提出DynaSLAM,它利用Mask R-CNN[12]获得语义分割结果,进而判断可能移动的特征点. 同时,使用多视图几何的方法检测图中语义分割未检出的动态物体,然后将2个检测结果合并. 对于一个特征点,只要2个检测结果中有1个是动态的,就认为该特征点是动态的,并将其删除. 但是,由于使用Mask R-CNN 网络,加上背景修复功能,系统难以实时运行.
Dynamic-SLAM[13]使用SSD(single shot multibox detector)[14]网络检测潜在的动态对象,把出现在目标边界框内部的所有特征点删除,然后采用基于相邻帧速度不变特性的补偿算法来处理目标检测缺少、遗漏的情况. 但是,目标的姿态不同,检测框的大小也不同,这样导致剔除的特征点过多,容易跟踪失败.
针对动态环境下SLAM系统的研究,大部分工作都集中在提高机器人在视觉里程计定位精度上,但是所提出的模型很难满足移动机器人的实时性,而且对于光线变化环境下如何同时去优化回环检测几乎没有研究. 动态场景下SLAM的优化可以从2个方面出发:一个是相机姿态估计的准确性,另一个是回环检测的准确性.
为了提高室内动态环境下SLAM系统的鲁棒性,本文提出了一种基于语义边界框和深度图的动态环境下SLAM系统位姿优化方法. 该系统基于ORB-SLAM2架构,采用RGB-D相机,首先使用目标检测网络检测当前帧所有可识别物体,得到物体语义信息与边界框,根据语义信息区分潜在移动物体,如“人”,结合边界框与当前帧对应的深度图,分割出前景物体,剔除物体上的特征点,用剩下的特征点来计算相机位姿信息,同时使用可识别物体的语义信息和边界框构造图像特征,然后与历史帧比较,检测是否发生回环. 实验结果表明,本方法可以有效提高 ORB-SLAM2在高动态场景中的性能.
本文提出的SLAM系统的结构见图1,在经典开源系统ORB-SLAM2基础上,新增了目标检测线程,如图中绿色部分,将目标检测结果嵌入到视觉里程计与回环检测模块. 本系统的视觉传感器采用RGB-D相机,该相机不仅能获得场景彩色图像,而且还能得到彩色图像中每个像素对应的深度值,这个深度值的大小对应着该像素距离相机的远近.
图1 本文算法框架
首先,采用ORB[15]特征提取模块提取当前帧的特征点,同时通过目标检测模块检测场景语义信息,得到物体的语义边界框,根据语义信息区分潜在动态物体与静态物体;然后,把潜在动态语义边界框送入前背景分割模块,将分割出的前景信息与ORB特征点相结合,根据特征点坐标是否落在分割区域来确定是否剔除该特征点;最后,使用剩下的特征点计算相机位姿. 同时,如果当前帧中不存在潜在可移动物体,那么就把该帧送入回环检测模块,根据图像中物体边界框信息构建语义特征图,通过与历史特征图比较来确定是否检测到回环. 得到帧间估计结果或回环检测结果后,需要经过后端优化模块进行全局轨迹优化,最后建立地图.
目前,主流的目标检测算法可分为一阶段检测算法和两阶段检测算法[16-17]. 两阶段检测算法在精度和准确度上都有较大的优势,但在检测速度上,一阶段检测算法具有更好的性能. SLAM系统对目标检测的实时性提出了较高的要求,一阶段检测算法省去了候选区域的生成步骤,在同一个卷积神经网络中实现了特征提取、目标分类和回归,将目标检测过程简化为一个端到端的回归问题,大大提高了基于深度学习的目标检测算法的速度. 本文目标检测算法采用YOLOv4[18], YOLOv4算法在保持高处理帧速率的同时具有最先进的精度, 在MS-COCO数据集上的预测精度达到43.5%.
本文在低功耗GPU MX150上测试,YOLOv4推理速度约为10帧/s,而Mask R-CNN推理速度不到1帧/s. 对于目标检测网络,高精度不再是唯一要求,另外,希望模型能在移动设备上持久运行. 因此,用低功耗的硬件实时处理输入图像对于移动机器人变得非常重要.
目前,帧间估计主流的计算方法有特征点法与直接法. 由于特征点对光照、运动、旋转比较不敏感,相机运动较快也能跟踪成功,鲁棒性好,因此,基于特征点法的视觉里程计目前比较成熟[19]. ORB特征则是目前非常具有代表性的实时图像特征. 提取ORB特征点后,接下来需要进行特征匹配. 特征匹配解决了 SLAM 中的数据关联问题,即确定当前看到的路标与之前看到的路标之间的对应关系. 其特征匹配效果如图2所示.
图2 特征点匹配效果
对2幅RGB-D图像进行了特征匹配之后,得到了特征点之间的对应关系,假设有一组配对好的3D点
P={p1,p2,…,pn},Q={q1,q2,…,qn}
(1)
现在需要求解一个欧氏变换R、t,使得
∀i,pi=Rqi+t
(2)
成立.首先,定义第i对点的误差项
ei=pi-(Rqi+t)
(3)
然后,构建最小二乘问题,求使误差平方和达到极小的R、t,公式为
(4)
如果定义2组点的质心为
(5)
那么目标函数可以简化为
(6)
如果有大量特征点在移动,那么估计出的位姿信息会有较大偏差.如果在位姿计算前,剔除动态特征点,那么就能有效地降低误差.如图3所示,可以看见图中有2个人,其中一位坐着,另一位在走动.系统从其中1个人身上采集了大量的特征点,如果把这些特征点删除掉,那么剩下的特征点就有利于计算位姿.图3(b)是删除后的效果.
图3 潜在动态特征点对比
本文使用已训练的目标检测网络预测每一帧图像,建立先验语义信息,然后结合语义信息与深度图分割出可移动物体,剔除该物体上的特征点.
对于目标检测,目标周围的边界框不能完全拟合目标的实际边界,不可避免地包含一些背景信息.
在这种情况下,判断特征点是否在目标对象上并不容易.基于深度学习的实例分割虽然在分割效果上有很好的表现,但需要花费较长的计算时间.因此,需要一种快速分割方法来提取物体边界框中的前景.因为目标检测框与深度图结合得到的图像区域内只存在单个前景,所以本文考虑单目标前景区域提取问题,使用最大类间方差算法.最大类间方差法是一种自适应的阈值选取算法,它按图像的灰度特性,将图像分成背景和目标两部分.背景和目标之间的类间方差越大,说明构成图像的两部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小[20].
RGB-D相机提供的深度图存在像素的深度值为0的情况,可能是该点的深度值超出了相机量程,或者没有检测到深度.在计算深度分割阈值之前,应该首先过滤掉深度图中深度值为0的像素.因此,修改后的最大类间方差算法如下.
对于图像I(x,y),假设图像的大小为W×H,将前景(即目标)和背景的分割阈值记作T,图像中灰度值小于阈值T的像素个数记作N0,像素灰度大于等于阈值T的像素个数记作N1,像素为0的个数记作E,属于前景的像素点数占整幅图像的比例记为ω0,则
(7)
其平均灰度为
(8)
将背景像素点数占整幅图像的比例记为ω1,则
(9)
其平均灰度为
(10)
将图像的总平均灰度记为μ,则
μ=ω0×μ0+ω1×μ1
(11)
将类间方差记为g,则
g=ω0×(μ0-μ)2+ω1×(μ1-μ)2
(12)
将式(11)代入式(12),得到等价公式为
g=ω0×ω1×(μ0-μ1)2
(13)
最后,边界框内前背景分割的结果如图4所示.
图4 边界框内图像分割
只有相邻关键帧数据时,视觉里程计无法消除累积误差. 回环检测模块能够给出除了相邻帧之外的一些时间间隔更长的约束. 回环检测的实质是图像匹配问题,但对实时性要求很高,需要满足机器人快速搜索历史帧数据的条件. 目前,一些成熟的视觉SLAM系统,如ORB-SLAM2,使用了BoVW方法来检测回环. 该方法将场景的一些视觉信息存储为一个视觉词典,利用尺度不变特征变换(scale-invariant feature transform,SIFT)、ORB等特征点构造图像特征,从而计算图像之间的相似度.
虽然BoVW方法在开源SLAM框架中取得了显著的效果,但是由于可移动物体的存在、光照条件的变化,BoVW方法识别真实回环的效率不高,容易出现误匹配问题. 此外,BoVW中的词汇量越大,占用的内存就越多. 本文专注于在线特征数据库,尝试通过使用不同于传统BoVW的方法来减少存储特征的内存使用,同时通过使用图像的深层和更抽象的特征而不是手工制作的特征来改进回环检测. 使用BoVW方法,不同光线下ORB特征提取与匹配结果如图5所示.
图5 不同光线下ORB特征提取与匹配
图5中的2张图光线不同,图(a)室内的灯只开了一半,可以看见后面的墙壁比较暗,图(b)室内的灯全开了,可以看见后面的墙壁比较亮. 然后对这2张图像提取ORB特征,每张图都提取了200个特征,匹配成功的只有60个,特征点匹配成功数量显著减少.
用该图像测试目标检测算法,结果如图6所示. 图6(a)共检测到12个物体,图6(b)共检测到15个物体,检测到的物体类别没有变化,数量上有些差异,每个物体的置信度可能不同. 图6(a)比图6(b)少的3个物体分别为cup_0.45、chair_0.50和tv_0.41. 这里的0.45、0.50、0.41表示的是置信度,也就是说去掉那些置信度比较小的物体,那么留下的物体在不同光线下差异就会很小,因此,考虑使用这些边界框信息描述整幅图像.
图6 不同光线下目标检测结果
回环检测前需要提取图像特征,下面详细介绍特征提取方法.从图6的图像中可以得到当前帧中边界框数量和每个边界框的坐标Bcd、面积Bar、类别Bty、置信度Bcf.
环境亮度不同,目标检测得到的物体数量、类别和置信度可能就不同,但是置信度越高,在不同亮度下检测到的可能性就越大.因此,首先遍历所有的边界框,去掉置信度小于T1的,再统计边界框的数量Bct.然后,按照边界框的面积把边界框从大到小排序,得到面积最大的边界框Mab和与之对应的类别Mat,累加所有边界框的面积得到Tba.如果Mab/Tba大于T2,则丢掉该图像,目的是减小边界框面积太大的物体对特征比对阶段的影响.之后,根据Bty构建特征表Bta.Bta特征结构如表1所示.
表1 特征结构
从表中可以看出,共有5种类型,其中面积最大的类别为TV, 该类别下有2个实例,并按面积大小做了排序,最大面积比为0.383.最后,把Mat、Bta组合一起,得到图像特征Fmap.特征提取后,进行特征比对,算法流程如算法1所示.在算法1中,首先根据Mat加快匹配速度,之后为了过滤不匹配的图像,使用了交并比(intersection over union,IOU)[21],即2个矩形框面积的交集和并集的比值,记为I.假设2个边界框A和B坐标已知,面积分别为SA、SB,那么
(14)
算法1特征比对
输入:当前帧Fmap、历史帧Flist、阈值T
输出: 是否检测到回环
ForFmap_iinFlist
Bty_i=Fmap_i->Mat
判断特征表中最大面积元素是否相同
IFFmap->Mat!=Bty_i:
continue
Bta=Fmap->Bta
Bta_i=Fmap_i->Bta
R1=calcIou(Bta[0] ,Bta_i[0] )
计算2个特征表中最大面积元素IOU
IFR1<0.8:
continue
R2=calcAllBoxIou(Bta,Bta_i)
IFR2>T
return True
return False
因此,根据式(14)可以得到R1,本文考虑到边界框面积越大的物体越容易检测到,而且在现实生活中位置改变的可能性就越小,比如水杯、鼠标会经常改变位置,但是显示器、桌子就不会经常改变位置,因此,采用加权IOU的方式来计算整幅图像的特征相似度,calcAllBoxIou计算方式如下:
1) 保留当前帧特征表Bta与历史帧特征表Bta_i中有相同类型的边界框.
2) 根据Bta中记录的面积比,计算2幅图的加权IOU,得到R3.
3) 根据Bta_i中记录的面积比,计算2幅图的加权IOU,得到R4.
4) 返回 (R3+R4)/2.
其中计算加权IOU的方式为
(15)
式中:OA,B为A与B的加权IOU;N为相同类别数量;Ci为当前类别对应的边界框数量;Si,j为该边界框的面积比.
把改进的SLAM算法称为DyOD-SLAM,使用TUM RGB-D数据集和实验室内采集的不同光线相同场景的数据集,从2个方面对提出的视觉SLAM优化方法的性能进行评估.实验中TUM数据集一共选取3个序列:freiburg3_walking_halfsphere(w_half)和freiburg3_walking_xyz (w_xyz)是2个动态场景视频序列,用来验证帧间估计的准确性;freiburg1_room是静态场景视频序列,用来验证回环检测的实时性和内存消耗.这些序列包含640×480像素的8位RGB图像和640×480像素的16位深度图像.此外,真实相机移动轨迹通过具有8个高速跟踪摄像机的高精度运动捕获系统获得.
这2个选定的动态序列是在办公桌场景中拍摄的,2个人正在走路或坐着.w_xyz序列表示2个人走过办公桌前的场景,并且将相机向着xyz方向移动,同时保持角度不变.w_half序列表示2个人正走过办公室,并且摄像机在直径约1 m的小半球上移动.这些序列旨在评估视觉SLAM算法对移动动态对象的鲁棒性.
对于位姿误差评估,本文采用绝对路径误差(absolute trajectory error,ATE)和相对位姿误差(relative pose error,RPE)作为依据.ATE表示真实轨迹点坐标与SLAM系统定位点坐标的误差,可以通过对比估计轨迹与真实轨迹的重合度来判断.RPE表现了SLAM系统得到的帧间位姿变换值与真实值的误差,可以用两者差值均方根的形式进行表示,即
(16)
图7 基于w_half数据集的绝对路径轨迹
图8 基于w_xyz数据集的绝对路径轨迹
从图7、8可以看出,DyOD-SLAM 在w_half、w_xyz 数据集中估计的运动轨迹与真实轨迹基本重合,相比较ORB-SLAM2 有较大的提升.
图9中横坐标t表示系统运行的时间. 可以看出,ORB-SLAM2在w_half序列前20 s估计的ERPE波动较大,后续比较平稳,而DyOD-SLAM仅在第8秒左右有较大的波动. 在w_xyz序列第7秒左右时,两系统的ERPE均出现明显波动. 分析其原因,视野中出现了较大面积的移动目标,动态特征点导致了系统的ERPE增大. ORB-SLAM2在 w_half、w_xyz数据集上的ERPE上限为1.2 m,而DyOD-SLAM滤除了大部分动态特征点,在2个数据集上误差上限分别为0.16、0.08 m,远小于ORB-SLAM2,改进的系统的ERPE波动较低,说明DyOD-SLAM更稳定. 定量比较结果见表2、3,评价指标包括均方根误差(root mean squard error,RMSE)、平均误差、标准差和中值误差.
图9 ORB-SLAM2与DyOD-SLAM在2个数据集上的RPE
表2 平移漂移结果
表2表示相机平移相对轨迹误差,表3表示相机旋转相对角度误差. 表4与表5详细地与DS-SLAM[22]做了比较. DyOD-SLAM在w_half序列,相对于ORB-SLAM2的RMSE性能分别提升91.3%、89.4%,在w_xyz序列,性能分别提升94.6%、92.3%.
表3 旋转漂移结果
表4 与ORB-SLAM2相比平移误差的改进
表5 与ORB-SLAM2相比旋转误差的改进
DyOD-SLAM在w_xyz序列相对平移误差要优于DS-SLAM.
2种算法在w_half序列的RMSE和标准差都大于w_xyz序列,原因是此序列相机不稳定,图像模糊,有些动态特征点未检测到. 从总体的性能提升可以看出,本文算法DyOD-SLAM在动态场景数据集上的ERPE远小于ORB-SLAM2. 无论是平移,还是旋转,在RMSE方面DyOD-SLAM精度提升了近90%,表明本文算法在动态环境下具有较高的稳定性.
这里测试用的数据集来自白天实验室内的场景,通过固定相机并按照固定轨迹抓拍得到. 为了得到不同光线下的数据,先开启一半的灯得到room_dark_half数据集,然后开启全部灯得到room_light数据集,如图10所示. 最后,使用准确率- 召回率曲线来评估结果.
图10 相同数据集、不同亮度的图像对比
用目标检测算法提取2个数据集中所有图像的语义边界框,然后过滤置信度小于T1的边界框,计算2张对应图像的I,得到的结果相加,然后取平均值得到Ia. 实验中T1从0开始,测得当T1为0.55时,Ia最大. 确定T1的值后,接下来需要确定T2的值. 假设图像中最大面积的边界框占所有边界框面积的比值为Smax,通常情况下这个值越大表示这个图像中小物体越多,在光线变化环境下这些物体被检测到的可能性就越低,本文选取经验值0.7作为T2的值.
实验中提取room_light数据集中图像的ORB特征、语义边界框特征构建特征数据库. 首先,在room_light据集下做回环检测测试;然后,在改变亮度后的room_dark_half数据集中遍历图像,提取特征并与特征数据库做比较;最后,得到不同亮度数据集下的准确率- 召回率曲线. 不同亮度数据集上的回环检测比较的结果如图11所示.
图11 不同亮度数据集上的回环检测比较
freiburg1_room 数据集含有1 362张图片,统计了ORB特征数据库与语义特征数据库占用磁盘大小和内存大小与所有图像暴力匹配需要的时间,结果如表6所示.
由表6中可以看出,DyOD-SLAM占用系统资源非常少,较适合大场景下回环检测,而且实时性更高. 图11中,本文改进的方法在原始亮度环境和相同召回率下,准确率明显高于传统方法,特别是当召回率小于0.38时,本文的方法一直保持100%的准确率. 随着召回率上升,准确率下降,但是DyOD-SLAM的准确率下降速度小于ORB-SLAM2,当召回率为0.78时,2种方法准确率差距最大. 当亮度发生改变时,2种方法准确率都有下降,DyOD-SLAM准确率下降得比较少,在召回率小于0.60的情况下,基于语义特征的回环检测方法性能都高于ORB-SLAM2. 准确率下降的原因是有些物体未检测到或置信度过低,发生在小物体比较多的情况下. 实验中发现,如果室内场景中可识别的物体较少,本文方法较容易产生漏匹配问题,因此,后续考虑将图像全局特征与语义特征相结合能适应更多场景.
表6 资源消耗对比
1) 本文基于ORB-SLAM2,结合目标检测网络修改帧间估计模块、回环检测模块,提高系统在动态环境下位姿估计的稳定性.
2) 在帧间估计阶段,使用目标检测网络确定当前图像是否存在潜在可移动物体,根据最大类间方差算法分割边界框内前背景,过滤潜在动态特征点,相对位姿准确率提升近90%.
3) 在回环检测阶段,使用上个阶段提取的语义边界框信息,构建语义特征,实现特征比对,在召回率小于0.60的情况下,相较于ORB-SLAM2准确率提升20%,而且占用系统资源少,查询速度快.
4) 本文只是根据语义信息来区分移动物体,没有实际验证是否发生移动,存在遗漏动态特征点的情况.
5) 本文的回环检测方法适用于室内,而且需要较丰富的可识别物体,适应场景能力不足,未来将针对此问题进行研究.