文露婷,李智
(四川大学 电子信息学院,四川成都,610065)
SLAM 技术是指在运动过程中通过机载传感器实时采集的数据来构建环境地图并实现自身定位的技术,是智能移动机器人可以在未知环境中自主作业的关键技术。常用传感器有相机、激光雷达、惯性传感器、编码器等,相机即为视觉 SLAM 使用的传感器。由于相机价格低廉、适用性高并且获得的图像信息丰富等特点,视觉 SLAM 成为当前研究的热点[1]。
现有的视觉 SLAM 根据前端获取图像信息的方式不同,可分为两大类:特征点法和直接法。特征点法的主要思路是在图像中提取出一些关键点,然后通过特征点描述子计算它们之间的相似性并完成匹配,最后利用三角或对极几何的方法估算相机运动,优秀算法代表有 PTAM[2]、ORB-SLAM3[3]。直接法则是直接利用像素灰度值进行匹配,基于光度不变性,通过最小化图像中两个对应位置的光度误差来估计相机运动[4],优秀算法代表有 LSDSLAM[5]、DSO[6]。两种方法在静态场景中均可实现高精度定位和高鲁棒性运行,但现实场景中的动态物体如行人、车辆,会使系统出现错误的匹配,导致其定位精度和鲁棒性大幅度下降。
为了减小上述动态物体对视觉 SLAM 系统的影响,国内外学者分别提出了三种方法:基于多视几何的方法,该方法首先建立静态场景中的标准约束,然后通过判断提取的特征点是否违背这些约束来检测物体的静止或运动状态;基于光流的方法,该方法通过比较两幅图像中对应像素的亮度值的变化,来推断像素在图像中的运动方向和大小;基于深度学习的方法,该方法通过运用目标检测网络和语义分割网络识别并剔除场景中的动态特征点。上述方法在一定程度上能够解决动态目标对系统的影响问题,但普遍存在精度较低或实时性较差的问题。鉴于以上,本文以动态环境为研究背景,以 ORB-SLAM3 为框架,开展相关研究,主要有以下改进和创新:改进 YOLOv5s,将其主干网络替换为 MobileNetV3[7]轻量级网络,并引入SE[8]注意力机制,构成 MN-YOLOv5 模型。在 ORB-SLAM3 的框架中添加 MNYOLOv5s 模型组成的动态特征点剔除模块,用于检测并剔除动态特征点,减小动态物体对视觉 SLAM 系统的影响。
2015 年,Raul Mur-Artal 等人提出了只针对单目相机的 ORB_SLAM[9],主要有跟踪、建图、回环检测三个线程,由此开始了 ORB-SLAM 系列算法。经过几年的迭代,2020 年该团队开源了 ORB-SLAM3,是第一个支持视觉、视觉+惯导、混合地图的 SLAM 系统,被认为是目前最优秀的 SLAM 算法之一。如图1 所示,ORB-SLAM3 系统具有跟踪、局部建图、闭环检测 3 个并行线程。从编程实现上来看,三大线程是父子关系,跟踪线程持有其他两个子线程的指针;但是从逻辑实现上,三大线程是并发的,系统的随机性使得各个线程的运行顺序是不固定的。跟踪线程主要负责处理传感器信息,通过最小化匹配地图点的重投影误差实时计算帧间相对位置,还会初始化地图并根据地图集来进行重定位,同时会筛选新的关键帧,之后的局部建图和回环检测线程均只处理关键帧以减少内存消耗。局部建图线程负责对得到的关键帧进行管理,增加关键帧和特征点到地图中,剔除掉冗余的关键帧和点,并使用视觉或视觉惯性光束平差法(BundleAdjustment,BA)优化地图,在惯性情况下,IMU 参数通过线程使用最大后验估计技术来进行初始化和优化。回环检测线程本质上是通过计算图像数据间的相似性,从而解决位置估计随时间漂移的问题,首先根据查询数据库和计算 Sim3/SE3 来检测回环,而后通过循环融合和优化本质图来进行回环矫正,最后利用全局 BA 优化所有地图点和关键帧组成的位姿图[10]。
图1 ORB-SLAM3 系统框架
1.2.1 YOLOv5s 目标检测网络
相比于之前版本,YOLOv5 改进方向有些许不同,它优化了网络结构、训练策略并进行了数据增强,使得其在速度和精度上都有所提升。YOLOv5 目前仍在迭代更新,不同版本之间的主要区别在于深度及特征图的宽度不同,YOLOv5s 网络是YOLOv5 系列中深度、特征图宽度最小的网络,也是模型最小、运行速度最快的网络,对硬件设备要求较低,因此更适合在移动端部署。本文采用的是 YOLOv5-6.1 版本,其主要网络结构如图2 所示,主要有四个组件:输入层 Input 部分负责数据处理及增强,采用Mosaic 数据增强算法增加训练样本的多样性和复杂性;骨干网络 Backbone 部分负责对经过处理后的图像进行特征提取并输出三个特征层;颈部网络 Neck 部分负责将来自不同层次的特征图进行融合,生成大、中、小三种类型的特征信息;头部网络 Head 部分负责生成最终的检测结果。
图2 YOLOv5s-6.1 网络结构
1.2.2 MobileNet-V3 轻量级网络
由 Google 在2019 年提出的网络架构 MobileNetV3是专注于移动端设备的轻量级 CNN 网络,在保证准精确率的同时大幅度减少了模型参数。MobileNetV3 经过 V1和 V2 的迭代,它有以下创新:首先使用神经网络架构搜索技术,用于发现和优化网络结构;其次引入 SE 注意力模块并将 Sigmoid 换成 hard-sigmoid,提升了模型的精确率和计算速度;同时更新激活函数,ReLU 替换成 hardswish,提升了模型计算速度;最后优化 V2 网络的最后几层,改进和删除了许多所需计算时间较长的层,减少了运算量。MobileNetV3 有 Large 和 Small 两个版本,本文采用Small,整体结构如图3 所示。
图3 MobileNetV3 网络结构
1.2.3 SE 注意力机制
SE 在通道维度增加注意力机制,主要思想是通过一个权重矩阵,从通道域的角度赋予图像不同位置不同的权重,对当前任务有益的特征图的通道进行提高,反之抑制,从而让神经网络重点关注某些特征通道。SE 的实现步骤如图4所示: Squeeze 使用全局平均池化将每个通道的特征图压缩为向量;Excitation 使用两个全连接层处理上述向量,构建通道间的特征相关性,生成通道权重值,输出的权重值数目和输入特征图的通道数相同;Scale 用第二步得到的归一化权重对特征图进行赋值。图中输入前特征图的每个通道都是一样重要,输出后每个通道的重要性不再一样,不同颜色代表不同的权重。
图4 SE 注意力机制实现步骤
1.2.4 MN-YOLOv5 目标检测网络
考虑到移动设备内存及算力的限制,本文以 YOLOv5s网络为基础,提出 MN-YOLOv5 轻量化目标检测算法,有以下改进:首先将骨干网络 Backbone 替换为更加轻量化的MobileNet-V3 轻量级网络,大幅度减少网络参数,有效地提高了运行速度;其次在 Backbone 中添加 SE 注意力机制,增强网络对于重要信息的捕捉能力。MN-YOLOv5 网络结构如图5 所示。
图5 MN-YOLOv5 网络结构
1.3.1 基于MN-YOLOv5 的动态特征点剔除
本文主要研究室内场景,因此选择人和动物作为先验动态目标。将目标检测网络 MN-YOLOv5 与 ORB-SLAM3 跟踪线程结合,当图片帧进入系统后,首先在跟踪线程中提取图片上的所有特征点得到集合,同时通过 MN-YOLOv5得到图像中目标检测框的集合,见式(1):
其中是第k帧图像中的第m个特征点,是第k帧图像中的第n个目标检测框。若目标检测框为人或动物,且,则判定为先验动态点。由此可得到动态特征点集合和静态特征点集合由于目标检测框为矩形,框内的特征点除了动态目标外还存在其他静态特征点,如果一并剔除会导致 SLAM 系统匹配的特征点大幅度减少,不利于定位精度,因此引入光流法对动态特征点进行判断剔除。
1.3.2 基于 LK 光流法的动态特征点剔除
首先运用 LK 光流法估计先验静态点的平均运动矢量,其关键在于灰度不变假设,即像素在运动过程中的灰度值恒定,由此可建立方程式(2):
其中等号左边为t时刻位于 (x,y) 的像素灰度值,右边为t+dt时刻位于 (x+dx,y+dy) 的像素灰度值,泰勒展开得:
结合式(2)和式(3)可得:
利用最小二乘法,并引入运动一致性约束,可求得每个先验静态点的运动矢量,再求平均即可得到背景运动速度U、V:
最后构建不等式(7)判断集合Dp内特征点是否为动态特征点:
γ为自适应阈值,若不等式不成立,则说明该特征点为静态特征点,移入静态特征点集合Sq。最后仅用Sq中的特征点用于特征匹配、相机的位姿估计,其余特征点被剔除。
在原 ORB-SLAM3 系统中的跟踪线程加入动态特征点剔除模块,将目标检测网络获取的图语义信息与提取到的ORB 特征点结合,以获取先验特征点,然后引入 LK 光流对先验特征点进行二次判断,最终仅利用静态特征点进行位姿估计,降低动态物体对 SLAM 系统的影响。本文算法框架如图6 所示。
图6 本文算法框架
实验所用设备的性能参数如表 1 所示,操作系统为 Ubuntu18.04,实验环境为 Python3.6 +Pytorch1.2.1。
表1 实验设备参数
实验使用 VOC2007+VOC2012 数据集对 MNYOLOv5 及 YOLOv5 系列进行网络训练,训练均不使用预训练权重,训练超参数如表2 所示,使用 SGD 优化器训练 500 轮次,设置早停机制,若精度在30 个轮次内没有上升就停止训练。训练过程精确率如图7 所示,明显 YOLOv5x 收敛最快且精确率最高,YOLOv5l 次之,YOLOv5n 最慢。
表2 训练超参数
图7 目标检测网络训练过程的精确率
训练后采用 VOC 测试集进行性能测试,含4952 张图片,结果如表3 所示。由表可知,相比于 YOLOv5s,本文提出的 MN-YOLOV5 参数量减少了56.08%,算力要求减少了57.86%,权重文件减少了49.66%,帧率增加了3.03%,精度减少了0.96%,在可接受范围内提高了系统的运行速度,更容易部署在移动端。
表3 目标检测网络测试结果
本文轨迹误差实验采用德国慕尼黑工业大学提供的TUM 数据集[11]中的五个图像序列,使用绝对轨迹误差和相对轨迹误差作为评价指标,评估参数有均方根误差(Root Mean Squared Error,RMSE)、标准误差(Standard Deviation,STD)和平均值(Mean)。为了验证本文算法的有效性,对原 ORB-SLAM3 与本文算法进行对比实验,结果如表4 和表5 所示。由表可知,本文算法在高动态场景walking_xyz、walking_half 中表现优异,相较于原 ORBSLAM3 算法误差下降 90% 以上,而在静止场境 sitting_static 中,误差下降不明显甚至还有轻微上升。这表明ORB-SLAM3 在静态环境中的确是一个定位精度高的系统,但是无法在高动态环境中实现鲁棒运行,而本文算法在动态场景中仍能保持较小的定位误差,证实适合应用于动态环境的位姿估计。
表4 ORB-SLAM3 与本文算法的绝对轨迹误差对比
表5 ORB-SLAM3 与本文算法的相对轨迹误差对比
本文提出了一种基于MN-YOLOv5 的动态视觉SLAM算法,使用轻量级网络 MobileNetV3 替换目标检测网络YOLOv5s 的主干网络,并加入 SE 注意力机制,构建 MNYOLOv5 轻量级目标检测网络,改进后模型参数减少了56.08%,能更好地在移动端运用。将 LK 光流法与MNYOLOv5 目标检测网络结合,加入 ORB-SLAM3 系统的跟踪线程,用于剔除动态特征点。实验结果表明,在动态场景中本文算法可实现低误差定位,相较于原 ORB-SLAM3 算法,位姿估计的均方根误差下降了90% 以上。因此,本文提出的动态视觉 SLAM 算法具有较好的实际应用前景。接下来的工作将有两个前进方向:继续改进目标检测网络,提升网络的精确率;考虑引入基于多视图几何的动态目标检测,加强系统对动态点的识别能力。