席志红,温家旭
哈尔滨工程大学 信息与通信工程学院,黑龙江 哈尔滨 150001
同步定位与地图构建(SLAM)已广泛应用于服务机器人、无人驾驶、虚拟现实等领域[1-2],与人们日常生活密切相关。而室内场景中的动态对象会严重影响相机位姿估计的准确性,从而降低地图创建的效果,因此室内动态场景SLAM 成为了一个研究热点[3]。
视觉SLAM 在动态场景下仍然存在很大的挑战,而且目前SLAM 通常建立稀疏点云地图[4],缺少对环境地图信息的理解,因此基于深度学习的室内动态场景SLAM 逐渐受到人们的关注[5-6]。
ORB-SLAM2[7]被认为是目前最完整的SLAM框架之一,但是在动态场景中ORB-SLAM2 系统定位与建图效果并不理想,并且仅创建稀疏点云地图,无法用于移动机器人后续导航工作。本文以提高室内动态场景下相机位姿估计准确性以及地图创建效果为目的,在目前相对完整的ORBSLAM2 框架的基础上进行优化,将深度学习与SLAM 相结合,剔除分布在动态物体内的特征点,减少动态对象对相机位姿估计的影响,同时提高移动机器人对周围环境的理解能力,利用背景修复[8]和点云拼接技术[9]相结合的方法建立无动态物体干扰的实例级稠密点云地图[10]以及语义八叉树地图[11],大大减少了地图存储空间。
本文SLAM 系统采用ORB-SLAM2 框架来提供SLAM 方案,并行运行实例分割、特征点提取与跟踪、局部建图、闭环检测和地图构建5 个线程。本文SLAM 系统框架如图1 所示。首先由彩色和深度(red,green,blue and depth,RGBD)相机捕获的彩色(red,green and blue,RGB)图像经过实例分割线程处理,得到每个像素实例级别标签;特征点提取与跟踪线程负责提取静态物体内的特征点,并且利用多视几何方法[8,12]进一步剔除潜在外点;最后利用筛选后的静态点估计相机位姿,地图构建线程负责建立无动态物体干扰的实例级稠密点云地图以及语义八叉树地图。
图1 本文SLAM 系统框架
Mask RCNN[13]是一个基于深度学习的图像实例分割框架,它利用检测框物体分类、检测框坐标回归和检测框逐像素分割3 个卷积网络分支来完成实例分割任务,改进了特征金字塔网络的感兴趣区域池化,在区域生成网络 (region proposal network,RPN)顶部添加了并列的全卷积网络(fully convolutional networks,FCN)层来扩展Faster R-CNN[14],并且计算掩码损失。每个类对应一个掩码可以有效避免类间竞争,通过双线性插值使候选区域和卷积特征对齐,不因量化而损失信息。
Mask RCNN 实例分割网络不仅可以实现对图像中物体语义信息的标注,而且可以准确区分同类物体中的不同个体,这对于帮助移动机器人理解周围环境起着重要的作用。
本文SLAM 系统采用Mask RCNN 实例分割网络进行动态物体检测,在实际室内场景中,人、狗、猫被认为是主要动态对象。若实例分割后的结果中含有上述动态对象,则将动态对象内部特征点剔除,这样可以显著降低动态对象的影响。
通过使用Mask RCNN,大多数动态物体可以被分割并且不被用于跟踪和建图。但是,由于一些可移动物体不是先验动态的,因此不能被该方法检测到。本文SLAM 系统利用多视几何方法进一步检测动态物体,判断动态物体示意如图2所示。对于每个输入帧,选择之前具有最大重叠的关键帧,然后计算每个关键点n从之前关键帧(key frame,KF)到当前帧(current frame,CF)的投影,获得关键点n和投影深度p;同时获得其对应的3D 点N。计算n的反投影和关键点n′之间夹角α,如果 α>30°,那么静态物体被考虑为动态物体,获得n′对应的深度值z′,若z′与p的差值超过设定的阈值τ,则判定关键点n′属于动态物体。
图2 多视几何判断动态物体示意
经过动态检测并剔除动态特征点,即可仅利用静态特征点进行相机位姿估计,从而提高相机位姿计算精度。假设筛选后的静态特征点P的坐标为(x,y),其三维坐标为(X,Y,Z),由几何投影关系可得
式中:K为内参矩阵,R为 旋转矩阵,T为平移矩阵(各矩阵均为3×3矩阵)。
设对应点P′的坐标为(x′,y′),则重投影误差函数为
式中s为尺度因子。
对相邻关键帧中的所有特征点构建最小二乘问题:
式中(R,T)*即为所求位姿[15]。
为了创建无动态物体干扰的地图,需要将图像中的动态对象滤除。本系统采用将之前20 关键帧彩色图像和深度图像投影到当前帧上的方法实现背景填充,背景修复前后图像如图3 和图4所示。
图3 背景修复前图像
图4 背景修复后图像
本文选用TUM RGB-D 公开数据集[16]中的动态序列f3_w_xyz、f3_w_halfsphere 和f3_w_static对本文系统和ORB-SLAM2 进行对比测试,运行平台为配备Intel Core i7 处理器、GeForce GTX 1050Ti 型号GPU、8 GB 内存的台式电脑。
本文使用绝对轨迹误差(absolute trajectory error,ATE)值(eATE)作为评价指标,利用evo 工具绘制相机的轨迹,并评估估计轨迹与真值的误差。ORB-SLAM2 和本文系统在3 个公开数据集上的绝对轨迹误差测试结果分别如表1 和表2 所示,其中均方根误差(ermse)反映估计值与真实值之间的偏差;平均误差(emean)反映所有估计误差的平均水平;中值误差(emedia)代表所有误差的中等水平;标准偏差(estd)反映系统轨迹估计的离散程度。
表1 ORB-SLAM2 绝对轨迹误差结果cm
表2 本文系统绝对轨迹误差结果cm
本文利用evo 工具分别对ORB-SLAM2 系统与本文系统绘制相机的轨迹,并评估估计轨迹与真值的误差,在f3_w_xyz 数据集下的实验结果如图5~8 所示。
图5 ORB-SLAM2 系统相机估计轨迹与真实轨迹及误差
由以上实验结果可以看出:在室内动态场景数据集f3_w_xyz、f3_w_halfsphere 和f3_walking_static中,相对ORB-SLAM2 系统来说,本文系统绝对轨迹均方根误差分别降低了97.59%、93.49%和98.18%,本文SLAM 系统相机位姿估计误差明显降低,其原因在于本文系统增加了对动态物体的处理,利用动态检测方法筛选后的静态特征点进行位姿估计,从而提升精度。
本文利用实例分割后的图像与相机运动轨迹创建静态语义地图,将二维信息投影到三维地图中,赋予地图物体实例信息,经过实例分割并滤除动态对象后的稠密点云地图如图9 所示。
图6 本文系统相机估计轨迹与真实轨迹及误差
图7 ORB-SLAM2 系统相关误差曲线
图8 本文系统相关误差曲线
从图9 可以看出,对背景修复和实例分割后的图像进行点云拼接,可以将二维信息投影到三维地图中,其中不同颜色代表不同物体实例,然而在背景填充过程中难免存在始终被遮挡区域,造成图像出现裂痕。
图9 实例级稠密点云地图
相对于实例级稠密点云地图,语义八叉树地图所占的空间(3 MB)约是点云地图(14.8 MB)的20%,能够节省大量存储空间,为机器人提供含有环境物体信息的导航地图。本文系统生成的语义八叉树地图如图10 所示。
图10 语义八叉树地图
本文提出了一种基于实例分割的室内动态场景SLAM 系统。
1)该系统实例分割网络不仅可以应用于对环境动静物体的分割,而且可以在地图中添加物体实例信息,有效减小动态对象对相机位姿估计的影响,同时提高地图构建的准确性,弥补了ORBSLAM2 应用于动态场景下的缺陷。
2)构建的实例级稠密点云地图和语义八叉树地图有助于机器人理解环境,对后续导航工作有着重要的意义。
然而,本文SLAM 系统在减小误差的同时,也增加了运行时间,在接下来的工作中,将进一步提升实例分割网络性能以减小相机位姿估计误差,并且保证系统的实时性。