熊 炜,金靖熠,王 娟,刘 敏,曾春艳
(1.湖北工业大学电气与电子工程学院,湖北 武汉 430068; 2.南卡罗来纳大学计算机科学与工程系,哥伦比亚 29201)
即时定位和建图SLAM(Simultaneous Localization And Mapping)是指搭载特定传感器的主体,在没有环境先验信息的情况下,根据运动引起的图像变化,估计相机的运动以及周边地图[1],是解决机器人、无人驾驶、增强现实、虚拟现实导航定位的重要技术[2]。SLAM技术起源于国外,近年来也逐渐成为国内产业和学术研究的热点。视觉里程计VO(Visual Odometry)是SLAM的重要组成部分。
从前端来看,VO可分为2大类:特征点法[3]、直接法[4]或光流法[5]。特征点法的VO根据已提取的特征点使用多视图几何方法求解相机的位姿,而直接法或光流法基于光度不变假设来直接计算相机位姿。本文的研究属于特征点法的范畴。在计算机视觉领域,SIFT(Scale Invariant Feature Transform)方法[6]提取的特征点展现了出众的效果,SURF(Speeded Up Robust Features)方法[7,8]相较于SIFT方法在速度上具有明显优势。由于SLAM对实时性要求较高,SIFT、SURF 2种方法因效率问题都无法胜任前端VO。FAST(Features from Accelerated Segment Test)方法[9]是一种速度很快的关键点提取方法,但它不具有描述子,因此匹配效果较差。ORB(Oriented FAST and Rotated BRIEF)方法[10]在FAST角点基础上增加了尺度和旋转的描述,增强了性能与速度的均衡性,是特征点法SLAM常用的方法。
SLAM作为2D、3D视觉领域结合的热点问题,通常用传统的图像处理和机器学习去解决,因空间几何难度和实时性的限制,这些方法很难像解决纯2D视觉问题那样完全被深度学习所替代。图像特征点的提取属于2D视觉的范畴,而深度学习中的神经网络在图像特征提取方面具有卓越的优势。基于深度学习的特征点与传统特征点相似,包含关键点和描述子。LIFT(Learned Invariant Feature Transform)[11]利用深度学习网络框架实现了特征点的检测、方向估计和特征描述,相比于SIFT提取的特征点更加稠密。MagicPoint[12]使用双卷积神经网络架构,1个用来提取图像角点,另1个用来对2幅图像的角点进行匹配。
为了弥补传统特征点法对光照和视点变化比较敏感的缺陷,本文在深度学习特征点SuperPoint方法[13]和现有VO方法的基础之上,提出了基于深度学习特征点SuperPoint方法的VO,简称DSP-VO(Deep Learning SuperPoint Visual Odometry)。本文使用亮度非线性逐点调整方法增强了特征点检测器对光照变化的鲁棒性,对公开的单目数据集实现了角点的提取和描述子的计算,使用NMS(Non Maximum Suppression)方法[14]剔除冗余角点,基于最邻近方法[15]改进的双向最邻近方法进行特征点匹配,通过匹配的特征点对VO进行初始化,利用基础矩阵或单应矩阵恢复相机位姿,建立最小化重投影误差[16,17]方程优化相机位姿及空间点参数。
VO作为SLAM的前端,求解出较好的运动估计结果,为后端优化提供良好的基础。在传统的VO中,对特征点的提取是先进行角点检测,然后计算描述子。本文提出的DSP-VO,其系统框架如图1所示。主要操作流程如下所示:
(1)DSP模型训练。将特征点的提取从VO中单独分离出来,使用基于深度学习的方法训练得到1个模型——DSP检测器。使用DSP检测器可以同时得到图像的角点和对应的描述子。
(2)特征点检测。使用基于(1)得到的DSP检测器,对数据集序列进行特征点的检测,即得到图像的角点信息与对应的描述子信息。针对DSP检测器的特点,本文使用NMS方法剔除冗余角点。
(3)特征匹配。使用基于最邻近方法改进的双向最邻近方法,获得更加精准的特征点匹配结果。
(4)位姿估计。根据特征匹配结果,利用基础矩阵或单应矩阵恢复相机位姿。前2帧需要通过三角化测量对轨迹、3D空间点的尺度进行初始化。
(5)局部优化。若位姿估计成功,利用特征点对应的3D空间点,构建最小化重投影误差函数,求解得到优化的位姿变换;若位姿估计失败,则结束VO。
Figure 1 System framework of DSP-VO图1 DSP-VO系统框架
DSP是一种利用自监督学习方式对角点进行提取并生成对应描述子的网络架构[13]。该架构流程如图2所示,主要分为3个阶段:(1)使用OpenCV图像处理库生成数量庞大的包含简单几何形状的图像,图像中加入了适量的高斯噪声,并记录相应的角点标注信息(标签);使用VGG-16网络[18]对这些人工生成标注的图像进行训练得到1个基础的角点检测器。(2)结合Homegraphic Adaptation方法,使用(1)中得到的角点检测器对大量的自然场景图像进行角点提取,即通过自监督的方式得到了自然场景图像的角点标注信息。(3)使用Warp方法,对(2)中所得的带有标注信息的图像进行变形操作,生成角点标注图像对;使用VGG-16网络对角点标注图像对进行再训练,通过最小化角点距离误差函数和图像对匹配误差函数,最终得到可以同时提取角点和描述子的模型。
Figure 2 Training process of DSP图2 DSP训练流程
针对VO对光照变化鲁棒性较差的特征,在原始DSP训练流程第(3)步的联合训练过程中,对仿射变换的图像进一步实施光度变换。本文使用亮度非线性逐点调整方法[19,20]对图像亮度进行Gamma调整。图像亮度Gamma调整如式(1)所示。
I′(x,y)=(I(x,y)/255)γ·255,0.5≤γ≤2
(1)
其中,I(x,y)和I′(x,y)分别是像素(x,y)的灰度值和校正值,γ为调整参数,取值为[0.5,2],当γ大于1时可增加图像亮度,反之则降低图像亮度。
γ值的变化较好地模拟了相机捕获自然场景图像时图像细节的放大或抑制。将受到不同光照的图像对放入到DSP框架中训练,有利于网络学习到由光照引起的图像细节变化,从而使得最终检测到的特征点置信度更高,描述子的性能更优。
在SLAM领域,传统的特征点包含点的像素坐标和描述子(描述子为特征点的特征向量)。DSP特征点和传统的特征点不同,其角点包含了置信度信息。DSP检测器对单幅图像进行特征点提取,得到特征点集P,对于某个特征点(x,d)∈P,其中x为角点,d为对应的描述子,其形式如式(2)和式(3)所示。
(2)
d=(d0,d1,…,d255)T,
di∈{-1,1},i=0,1,…,255
(3)
其中,x为一个列向量,表示单个角点;u,v为角点在图像中的像素坐标,第3维c为角点像素坐标的置信度。d为描述子,d0~d255为描述子每个维度的值。
使用DSP检测器对图像进行角点提取时,若图像的角点和纹理比较丰富,检测的特征点会出现局部拥挤的现象,需经过必要的角点剔除和筛选,否则会形成角点冗余,且造成较多的误匹配。DSP特征点不仅包含角点像素坐标,还包含角点对应的置信度,根据该特点,本文使用NMS方法对角点进行筛选。(1)首先创建1个像素网格矩阵G,其维度为h×w,h和w分别等于被检测图像的像素高度和宽度;(2)提取角点x的像素坐标(u,v)为索引值,将G中对应元素赋值为1,其余赋值为0;(3)创建1个形状为α×α的滑动窗口W,其中α为抑制距离,以α为横向和纵向步长对G进行遍历,并将遍历重叠部分的角点置信度按照维度索引赋值给A,即滑动窗口内的角点置信度矩阵;(4)以式(4)为判定标准对角点进行抑制,其中Px表示特征点的角点集合;(5)经过遍历,G中元素等于-1的维度索引,即为最终保留的特征点的像素坐标。
(4)
其中,(u,v)∈W,(u,v,c)∈Px。
(5)
(6)
arg mindm,n*,dm,n*<δ,m=1,2,…,M}
(7)
Ci↔i+1=Ai→i+1∩Bi+1→i
(8)
(9)
(10)
其中,Ti,i+1为第i帧到第i+1帧的位姿变换。
(11)
选择计算基础矩阵F和单应矩阵H2种方法得到的最小化重投影误差中的较小者,获得最优的相机位姿参数和特征点对应的3D空间坐标。
本文的实验内容主要围绕2部分展开:DSP检测器性能及提取特征点的匹配效果,视觉里程计的结果、对比及误差分析。为了保证实验结果的有效性和实验方法对比的一致性,实验在同一硬件及软件环境下完成。实验所使用的设备内存为16 GB,CPU为Intel CORE i7-8750H,GPU为NVIDIA GTX1080,显存为8 GB,运行系统为Ubuntu16.04。使用Pytorch深度学习框架对DSP检测器进行训练。对于2种视觉里程计方法的对比,均使用CUDA库进行加速。
本文使用Hpatches数据集[21]作为特征点提取的验证数据集,此数据集包含了相同场景下光照、视点发生变化的图像,以用于检测不同特征提取方法对光度、视点变化的鲁棒性。在视觉里程计中,使用The KITTI Vision Benchmark Suite提供的Visual Odometry数据集[3]。为了使实验结果可对比和评估,本文选取其中提供真实轨迹的00~10共11个序列的Sequence作为验证数据集。
Figure 3 Comparison of feature points matching图3 特征点匹配对比
本文利用训练好的DSP检测器对Hpatches数据集图像的特征点进行提取与匹配,同时利用OpenCV库自带函数检测并匹配ORB特征点、SIFT特征点,进而对3种方法进行对比。实验结果如图3所示,本文DSP检测器提取的特征点更加均匀、清晰。在相同场景下,当光照发生变化时,ORB方法和SIFT方法的提取和匹配结果发生了明显的变化;而DSP检测器的提取与匹配结果表现出更强的鲁棒性。当视点发生变化时,ORB方法只提取到图像中部分角点,而且有较多的误匹配;SIFT方法倾向于提取更丰富的角点,但匹配率较低,且复杂度较高,这意味着更大的时间开销,不利于视觉里程计的实时性与工程化;DSP特征点不仅在分布范围上接近SIFT,与之相比有更高的匹配率,在匹配准确率方面也明显优于ORB方法。在DSP检测器的训练过程中,对训练图像进行Gamma调整,相对于无Gamma调整的情况,在视点变化的实验中检测结果无明显差别,但在光度变化的实验中,检测特征点的数量更多,分布更加均衡。
本文采用Visual Odometry公路数据集进行实验验证,不限定图像序列的读取帧率,以记录视觉里程计的实时帧率。如图4所示,将跟踪结果与真实轨迹数据进行同步对比,并实时进行误差计算(如图4a所示)。为了验证DSP特征点法视觉里程计的性能表现,使用传统ORB方法作为实验对比方法(图4b为2种方法的轨迹与真实值的对比)。
Figure 4 Visual odometry visualization图4 视觉里程计可视化
为了同时检测DSP特征点法视觉里程计在视点、光照变化的图像上的性能表现,选择了属于室外场景的Visual Odometry公路数据集。本文采用了均方根误差RMSE(Root Mean Square Error)来评估方法的性能。绝对轨迹的均方根误差RMSE(s)定义如式(12)所示:
(12)
在Sequence 08序列上运行,对于每一帧都计算绝对轨迹均方根误差。实验还使用了基于ORB特征点法的视觉里程计(ORB-VO)进行对比。如图5所示,从测试结果可以看出,随着追踪帧数的增加,本文方法的绝对轨迹均方根误差趋于稳定,而ORB-VO的绝对轨迹均方根误差总体趋向于不断增长。
Figure 5 Real-time absolute trajectory error of sequence 08图5 Sequence 08实时绝对轨迹误差
本实验不涉及后端优化,所以不可避免地会产生追踪轨迹漂移现象。由于没有姿态信息,绝对轨迹均方根误差无法直观地体现产生漂移的位置。对此,本文还使用了相对位姿均方根误差RMSE(T)作为评价标准,其定义如式(13)所示:
(13)
位姿可以分解为平移分量和旋转分量,因此将相对位姿误差分解为相对平移误差和相对旋转误差来分别进行评价。由于存在轨迹漂移,导致绝对轨迹误差较大,但由图6可以看出,在Sequence 08序列上运行,本文DSP-VO的RMSE(T)保持在较低水平,且全程优于ORB-VO的。在追踪过程中,ORB-VO多次出现较大的旋转偏移(如图6b中圆圈标记位置),这表明可能遇到较大的旋转、较小的平移或者较强的光线干扰,而DSP-VO则在这些位置表现出更强的稳定性。
Figure 6 Real-time relative pose error of sequence 08图6 Sequence 08实时相对位姿误差
实验一共测试了00~10这11个Sequence,并给出了DSP-VO和传统方法ORB-VO在帧率、绝对轨迹误差、相对平移误差和相对旋转误差等评价指标上的对比。表1所示为偶数序列的实验结果,可以看出,DSP-VO在速度方面低于ORB-VO,但仍然达到了实时性要求;在其他指标对比中,除了02序列的相对位姿均方根误差,DSP-VO的表现全面优于ORB-VO。
本文提出一种基于深度学习特征点法的视觉里程计,将深度学习特征点方法应用到视觉里程计中,通过对输入DSP网络的图像增加光度变换处理,得到光照鲁棒性更强的DSP特征提取模型,采用非极大值抑制方法对DSP特征点进行冗余点剔除,采用双向最邻近方法对DSP特征点进行匹配,结合位姿追踪方法建立视觉里程计。实验结果表明,在Visual Odometry公路数据集的11个Sequence
Table 1 Pose tracking analysis results表1 位姿追踪分析结果
序列中,本文的DSP-VO平均运行帧率达到了19.4 fps,符合实时性要求,对比于传统ORB-VO,绝对轨迹误差、相对平移误差和相对旋转误差等有明显提升,表明了深度学习特征点用于视觉里程计的可行性与优越性。未来的工作主要对本文方法进行工程优化,提高运行速度;加入后端优化,进一步减小误差。