本发明涉及视觉技术slam领域,更为具体的,涉及一种基于深度学习与gpu加速的动态场景下视觉slam优化方法。
背景技术:
1、即时定位与地图构建(simultaneous localization and mapping,slam)是移动机器人实现智能化的关键技术。这一技术使得机器人能够通过传感器在未知环境中自主构建一致性地图,并在其中精确定位。相比激光slam,视觉slam所用的相机具有成本低、能耗低、以及提供丰富语义和纹理信息等优势,同时随着计算机硬件的更新迭代,视觉slam技术已成为研究热点。
2、传统视觉slam技术在静态环境下表现优异,但在动态场景中存在困难。动态对象可能导致错误的数据关联,影响定位精度和鲁棒性,尤其当运动物体占相机采集图像较大比例时,现有算法可能失效。同时,传统方法缺乏关于对象的高级信息,限制了其执行高级任务的能力。
3、针对这一挑战,已有学者将语义分割、实例分割和目标检测整合至slam系统,以适应动态环境。然而,然而基于深度学习的目标检测方案仅靠种类标签判断动态物体过于粗糙且容易遗漏,更精细化的语义分割或实例分割方案占用过多计算资源,此外,这些方法使用需要实时处理大量图像数据的视觉传感器,需要很高的计算成本,这对嵌入式和移动平台的实时操作提出了很大的挑战。因此需要一种在有限计算资源的平台上实现基于深度学习的动态视觉slam算法,以兼顾定位精度和实时性的方案。这对移动机器人在动态场景下的智能应用具有重要意义。
技术实现思路
1、本发明的目的在于克服现有技术的不足,提供一种基于深度学习与gpu加速的动态场景下视觉slam优化方法,可以在搭载嵌入式开发板的移动机器人上同时实现基于深度学习的动态视觉slam方法的准确定位和良好实时性能。
2、为实现以上发明目的,本发明采用以下技术方案:
3、一种基于深度学习与gpu加速的动态场景下视觉slam优化方法,包括以下步骤:
4、s1.通过相机获取图像帧的rgb图像与深度图像;所述相机为深度摄像头;
5、s2.对rgb图像进行orb特征提取,并使用yolov5目标检测算法获取边界框检测结果,将边界框检测结果分为动态物体和静态物体两类;
6、s3.根据提取的orb特征,基于深度图像得到的深度值信息对动态物体检测框进行前背景分割,筛选并剔除被认为是动态特征点的前景点;
7、s4.对剩下的静态特征点进行相机位姿估计和优化,得到准确的相机运动结果;
8、进一步地,步骤s2中的orb特征提取和yolov5目标检测算法在gpu上进行,所述步骤s2的orb特征提取使用cuda技术实现算法并行化,所述步骤s2的yolov5目标检测算法使用tensorrt技术提高网络的推理速度;
9、进一步地,所述步骤s2中的orb特征提取步骤如下:
10、s21.构建金字塔:对rgb图像构建图像金字塔,并为每层金字塔图像分配应提取的特征点数量nk,计算公式如下:
11、
12、其中,n代表图像金字塔各层设置的总特征点数,l代表图像金字塔总层数,α代表图像金字塔各层的缩放因子,k代表当前层数;
13、使用cuda技术实现并行化后,使用opencv中cuda模块的函数cuda::copymakeborder对rgb图像构建金字塔图像;在构建完金字塔图像之后才进行下一步操作,使用函数mcvstream.waitforcompletion()等待全部金字塔构建完成;
14、s22.特征检测:首先对每层金字塔图像及边界信息传入给检测函数处理,然后在金字塔图像上划分网格,对每一网格进行特征点提取:选定在所述网格中的任一像素为待检测像素,以其为圆心,以r为半径作一个圆,与该圆相交的共有m个像素,若所述m个像素中有连续m个像素与待检测像素灰度值的差大于预设阈值t,则将该待检测像素为特征点;其中m一般取11或9,阈值t设置为原点像素亮度的20%;然后循环检测每个像素以获取所有特征点;使用cuda并行化后,对于每层金字塔,根据图像大小申请对应的grid和block,这里的block设置为32*8来表示一个待检测区域,grid根据图像大小和block大小划分为对应的网格;
15、s23.四叉树算法:对步骤s22提取的特征点,使用基于四叉树分布算法进行剔除与均匀分布的优化;
16、s24.特征点方向计算:对于步骤s23得到的每个特征点,根据灰度质心法计算出它们的方向;使用cuda技术实现并行化后,启动一个cuda异步内核来计算特征点方向,设置核函数的block大小为32*8,grid大小设置为特征点数量,将特征点平均分配给不同核函数计算方向加快计算;
17、s25.计算描述子:利用rbrief算法计算所述步骤s24中每个特征点的描述子,实现所述金字塔图像中当前帧与参考帧的特征点匹配;使用cuda技术实现并行化后,对于每层金字塔,都会启动一个cuda异步内核来计算特征点的描述子,核函数的grid设置为对应的特征点数量,并为每一个特征点申请32个线程块以便对其邻域内的像素进行比较并生成二进制描述子,并通过cudamemcpyasync函数将128维描述子从显存传输到内存中;
18、所述图像金字塔构建、特征点提取、方向计算、描述子计算模块均采用cuda流的形式实现。
19、进一步地,所述步骤s2中的yolov5目标检测算法具体包括以下内容:
20、使用tensorrt提高yolov5目标检测算法的推理速度:通过tensorrtx推理框架将python版本下训练好的yolov5s.pt权重文件转换为yolov5s.engine,然后将生成的引擎文件放入slam框架中使用,为平衡推理精度和速度,对低精度推理采用fp16,并将批大小设置为1。
21、进一步地,所述步骤s3中的基于深度图像得到的深度值信息对动态物体检测框进行前背景分割,筛选并剔除被认为是动态特征点的前景点,具体包括以下内容:
22、首先,遍历每一帧rgb图像的所有目标检测框,检测目标检测框中的像素位置所对应的深度值是否在有效范围内,然后取出有效深度值并存入容器中;其次,对深度值进行升序排序,并使用中位数值作为阈值,过滤掉低于该中值的深度值;接下来,在边界框内计算这些深度值的统计信息;通过卡方检验来识别出具有异常深度值的点,这些点被判定为属于背景,即被认为是静态点;其中有效深度值范围为0.05米到10米之间。假设前景点的深度值遵循高斯分布,此时利用卡方分布模型来识别具有异常深度值的点,将特征点的卡方值定义为:
23、
24、式中d表示点的深度值。设卡方自由度为1,显著性水平为0.1,卡方阈值为当点的卡方值小于阈值时,将其视为前景点;最后,剔除边界框中的前景点,剩余背景点属于静态特征点。
25、进一步地,所述步骤s4中的位姿估计和优化方法如下:
26、对于剩余的静态特征点,通过pnp(perspective-n-piont)算法估算出帧间位姿变换(r,t),然后使用光束法平差优化来通过最小化特征点pi和3d地图点pi之间的重投影误差来优化相机的旋转矩阵r和位移t,从而得到准确的相机运动结果:
27、
28、其中,ρ是鲁棒地huber函数,n是静态特征点匹配的数量,σ表示协方差矩阵与特征点的尺度相关,π(·)代表从3d坐标到2d坐标的相机投影函数。
29、本发明技术方案具有以下有益效果:
30、1.本发明在传统视觉slam方法中加入目标检测线程,并与跟踪线程并行,能够不阻塞跟踪线程的同时得到动态区域的检测框,并结合深度信息来分割检测框中的前背景区域,以避免剔除静态的背景点,这是一种充分利用目标检测先验知识和深度信息的方法,具有简单、快速和有效的优点,同时提高系统的定位精度;
31、2.将跟踪线程的orb特征提取和目标检测线程中的yolov5目标检测算法分别进行cuda并行化和tensorrt优化,并调用gpu进行加速,减轻cpu的计算负担,提升处理速度,减小低功耗设备的计算时间,实现嵌入式设备的实时动态视觉slam。
1.基于深度学习与gpu加速的动态场景下视觉slam优化方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于深度学习与gpu加速的动态场景下视觉slam优化方法,其特征在于,步骤s2中的orb特征提取和yolov5目标检测算法在gpu上进行,所述步骤s2的orb特征提取使用cuda技术实现算法并行化,所述步骤s2的yolov5目标检测算法使用tensorrt技术提高网络的推理速度。
3.根据权利要求1所述的基于深度学习与gpu加速的动态场景下视觉slam优化方法,其特征在于,所述步骤s2中的orb特征提取步骤如下:
4.根据权利要求3所述的基于深度学习与gpu加速的动态场景下视觉slam优化方法,其特征在于,所述图像金字塔构建、特征点提取、方向计算、描述子计算模块均采用cuda流的形式实现。
5.根据权利要求1所述的基于深度学习与gpu加速的动态场景下视觉slam优化方法,其特征在于,所述步骤s2中的yolov5目标检测算法具体包括以下内容:
6.根据权利要求1所述的基于深度学习与gpu加速的动态场景下视觉slam优化方法,其特征在于,所述步骤s3中的基于深度图像得到的深度值信息对动态物体检测框进行前背景分割,筛选并剔除被认为是动态特征点的前景点,具体包括以下内容:
7.根据权利要求1所述的基于深度学习与gpu加速的动态场景下视觉slam优化方法,其特征在于,所述步骤s4中的位姿估计和优化方法如下: