Semantic Visual SLAM 简述

本文探讨了语义SLAM如何通过结合语义信息在动态复杂环境中改善视觉SLAM的性能,介绍了物体检测、实例分割和语义对象关联的方法,重点阐述了如何在运动方程和观测方程中整合语义信息,以及在定位和建图中的应用,包括ORB-SLAM2的发展和动态环境处理策略。
摘要由CSDN通过智能技术生成

语义slam解决的问题:在动态和复杂环境下的定位问题

语义slam的关键:语义信息的提取与联系。

本文仅讨论视觉slam。

参考文献:
[1] https://arxiv.org/abs/2209.06428
[2] slambook

一、简介

slam的目的在于定位和建图。

视觉slam由于其低成本、小场景下的高准确度、丰富的环境信息,得到了充分的应用,但同时又受到光照变化、动态物体、缺乏纹理信息的环境的挑战,且需要的计算资源较高,实时性较差。

将语义信息与slam结合能够提升对图像特征的理解并建立高精度的语义地图,如早期的Slam++等。

二、语义信息

语义信息包含物体的位置、姿态、颜色、纹理、形状等属性。传统的视觉slam通常适用于静态环境,因其难以匹配动态点特征,且常常需要剔除掉动态点,而语义slam则可以在定位与建图中追踪相似的物体信息,提高slam的运行和存储效率。

2.1 Semantic Information Extraction

目标检测

可以分为两类:

One-Stage method(ssd、yolo)实时性
One-Stage的思想是将图像划分为S×S的小格子,即直接在特征图上对anchor进行回归以及类别预测。这样的做法避免了随机搜索得到region proposal,也避免了重复卷积运算,所以计算效率很高,检测速度非常快,但是由于缺乏搜索region proposal(即背景筛选),导致精度不是很高,还有一个原因就是图像中的小物体或者图像中挨得很近的多个物体会造成漏检。随着one-stage方法的不断优化迭代,很多性能优异的Backbone和Tricks被提出,比如CSPDarknet、各种数据增强(Mosaic)、FPN、SPP等等,他们都可以在牺牲些许检测速度的同时(甚至不牺牲)提升检测精度。

Two-Stage method(Faster R-CNN)准确性
Faster R-CNN 的出现确立了two-stage、anchor-based 检测器的主导地位。Faster R-CNN由一个 rpn 网络和一个 region-wise 的预测网络(R-CNN)组成,然后预测目标。之后,人们又提出了许多的算法来提升其表现,包括结构重新设计、注意力机制、多尺度训练、训练策略和损失函数、特征融合和增强、候选框平衡等。

检测获得的bbox中还包含前景和其他物体信息,这会影响物体重构和定位精度。因此,研究人员尝试使用语义分割或实例分割来获取像素级对象。

语义分割
U-Net、SegNet、PSPNet(基于整合全局上下文信息的金字塔池化模块)

不能区分同一类别的对象实例,从而限制了应用范围。

实例分割
Mask-RCNN

缺少实时性

2.2 Semantic Object Association

在视觉slam中,假设用 I1:T = {I1,···,IT} 表示从初始时刻到T时刻所有获取的图像,用 C = {1,···,c} 表示当前环境中的物体label,xt 表示 It 对应的相机位姿,X 表示整个相机轨迹集合。我们通常用两个方程表示整个slam系统:

运动方程:
在这里插入图片描述
ut 是 t 时刻的相机运动测量值,Rt 是相机位姿噪声的协方差矩阵。

观测方程:
在这里插入图片描述
yt 是 t 时刻观测到的路标,Lt 是 M 个物体的度量值,Qz 是噪声。

我们用 Z 表示整个时间上的传感器度量数据集。

视觉slam会创建 D 个关键帧来减少重复计算,用 F1:D = {Fd} 表示。

假设在当前场景下 Fd 可以观测到 Nd 个物体度量值 Ldi,而每个度量值 Ldi 又可以表示为:
在这里插入图片描述
c 表示物体类别,s 表示置信度,b 表示 bbox。

环境中的路标数量远远少于检测到的物体数量。原因在于,在连续的关键帧中可以观察到相同的地标,而在每个关键帧中可以检测到多个物体度量值。因此引入了 object association 的概念,即各关键帧中的物体度量值 Ldi 均与同一路标 Ok 相关联,我们将这种关联定义为 Sdi = (Ok,Ldi)。从而 t 时刻的关联可以表示为:
在这里插入图片描述
随着相机的运动,物体度量是增加的,所以 object association 是一个动态的过程,所以又可以表示为:
在这里插入图片描述
X,L,Z 分别表示相机位姿,物体度量,传感器度量。X 和 L 随着 object association 进行优化更新。
在这里插入图片描述
object association 的难点在于当前图像中存在多个类别相同、外观相似、位置相近的物体时,如何将新的物体度量值与地图中已有的三维路正确关联起来。

有些方法从概率角度考虑语义对象关联,采用 EM 算法来寻找对象测量值与地标之间的对应关系,但缺乏鲁棒性。

EM算法的基本思想是:在有隐变量的情况下,极大似然估计的直接求解方法并不可行,需要通过先假设隐变量的值,然后求解参数的期望(E步骤),接着最大化这个期望来更新参数(M步骤),重复这个过程直至收敛。

EM算法的步骤如下:
E步骤(Expectation Step):根据当前参数的值和观测数据,计算隐变量的后验分布,即对隐变量的每个取值,计算其对于给定观测数据的条件概率。
M步骤(Maximization Step):根据计算出来的隐变量后验分布,最大化完整数据的对数似然函数,得到新的参数估计值。
重复执行E步骤和M步骤,直到参数估计值收敛。

针对动态物体,通常采用刚性模型和匀速运动模型,并采用特征点匹配进行关联。

非概率方法在对象级语义slam中也非常流行。例如可以利用 Mahalanobis 距离和匈牙利算法被用来将新的物体度量与路标关联起来,但这些算法会消耗大量的计算资源。

三、语义在slam中的应用

3.1 Semantic Localization

视觉slam可以提取丰富的语义信息,帮助相机感知环境中的高级信息。 此外,语义信息中还包含几何约束,可以有效提高系统的定位精度。

对于室外场景,由于天气、光线等因素,特征难以匹配。为了解决这些问题,有些研究尝试了一种基于语义分割图像和语义点特征图的定位算法,解决了长期视觉定位的问题;还有基于跟踪过程中的语义信息建立了中期约束,减少了视觉里程计的漂移误差;面对剧烈的视点变化,采用语义图描述符匹配进行全局定位,实现了多视点下的定位。

对于室内场景,缺乏 cognitive-level 上的能力。有研究提出采用 dual quadrics 表示路标,包含路标的大小、位姿;factor graph-based ,可在解决联合估计物体 dual quadrics 表示和相机位姿;EAO-SALM 基于 iForest ,框架包含约束稳健异常值中心点、比例估计和物体姿态初始化,共同促进了位姿优化。然而,这些方法没有考虑动态因素,quadric 或 cuboid 表示的是在稀疏地图中创建的物体,缺乏物体细节。

而语义信息有助于区分静态和动态物体,提高相机在动态环境中的定位精度和鲁棒性。采用语义信息来分割运动物体并过滤掉与运动物体相关的特征点是经常采用的方法之一,可改善动态环境中的系统定位。

在改进定位过程中,语义通常用于slam的初始化、后端优化、重定位和回环检测等阶段。

3.2 Semantic Mapping

通常我们希望slam系统能够保存地图,这样在下一次mapping中就不需要重复构建地图,从而节省大量计算资源。在应用中,视觉slam构建的地图包括稀疏图、半稠密图和稠密图。与稀疏图相比,稠密图包含许多三维空间点来描述地图,更适用于定位、导航、避障和重建。

早期的语义地图通常使用先验的物体 CAD 模型数据库来构建三维语义地图,这样既能还原真实场景,又能节省大量存储密集点云地图的空间。然而,CAD 模型仅限于预定义数据库中的对象。

在动态环境重建方面,通常将物体分割为背景、运动物体或潜在运动物体。考虑到 mapping 中实时性问题,一些研究尝试构建稀疏语义映射。也有基于 ORB-SLAM2 框架,将语义对象与实时构建稀疏语义地图相结合。

四、数据集

在这里插入图片描述

五、语义slam

传统slam主要是基于滤波器、关键帧、直接法等方法完成的。

基于滤波器的方法将每一时刻的系统状态视为高斯概率模型,并根据滤波器预测准确的位姿。常用的有扩展卡尔曼 EKF,其推导简单,易于多传感器融合,但基于一阶马尔科夫性,过于简单,还要求数据不能有outlier,需要存储所有状态量的均值和方差,呈平方增长。

PTAM 是第一个基于关键帧的 BA 单目视觉slam系统,ORB-SLAM 基于 PTAM 架构,增加了map初始化(常用的初始化方法有:当特征点在平面上时,使用单应矩阵恢复R、t;使用E或F恢复R、t。ORB-SLAM基于统计选择合适的方法)和回环检测,并优化了关键帧选择。

直接法(DTAM 、LSD-SLAM)不依赖于特征点的提取和匹配,而是通过构建前后帧之间像素灰度值的光度误差来解决相机运动问题。在特征缺失和图像模糊的情况下,这些方法比前两种方法具有更好的鲁棒性,省略特征提取的时间,只需有像素梯度而不必是角点(对白墙等地方有较好效果),可稠密或半稠密,但是灰度不变难以满足(易受曝光和模糊影响),单像素区分性差,会受到图像非凸性的影响(可部分地由金字塔减轻)。

目前,基于特征点的语义视觉slam系统主要基于 ORB-SLAM2 算法框架。如用cuboid、quadric等表示物体的,其中quadric能够紧凑地表示路标的大小、位置和方向。EAO-SLAM 综合了cubeslam、quadricslam的方法,并在 iForest 方法的基础上改进了物体位姿估计,从而可以更准确地估计路标的位置、姿态和尺度。

针对动态环境,有一些 dynamic outlier detection 方法,如 Ds-slam、Dynaslam、detect-slam 等,不再赘述。
在这里插入图片描述
展望:multi-modal data、multi-robot、加强 data association

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Semantic SLAM是一种基于语义分割技术的同时定位与建图方法。它结合了ORB-SLAM2和八叉树地图,并通过使用语义分割技术来增强SLAM系统的感知能力。Semantic SLAM的GitHub地址是https://github.com/floatlazer/semantic_slam 。 在开始使用semantic_slam包之前,您需要先安装一些依赖项。根据引用提供的信息,安装过程中可能会出现一个错误,提示无法解析rosdep定义。这意味着可能需要检查您的系统中是否安装了catkin,因为semantic_slam依赖于catkin。确保您已正确安装catkin后,您可以继续安装semantic_slam包。 安装完依赖项后,您可以启动semantic_mapping.launch文件来启动Semantic SLAM系统。根据引用提供的信息,您可以使用以下命令启动launch文件:roslaunch semantic_slam semantic_mapping.launch。 启动后,semantic_mapping.launch文件将开始执行Semantic SLAM算法,同时定位与建图,并将语义信息与地图进行关联,从而提高系统的感知能力。 总结起来,Semantic SLAM是一种基于语义分割的同时定位与建图方法,它结合了ORB-SLAM2和八叉树地图。您可以从GitHub地址https://github.com/floatlazer/semantic_slam获取该方法的实现代码。在使用semantic_slam包之前,您需要安装catkin作为依赖项,并确保已成功安装并配置相关的依赖项后,您可以使用roslaunch命令启动semantic_mapping.launch文件来启动Semantic SLAM系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值