Semantic Visual SLAM 简述

语义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系统: 运动方程: ![在这里插入图片描述](https://file.jishuzhan.net/article/1693478945132908545/c46cca751d62459c8b0c5ada8dad9082.png) `ut` 是 t 时刻的相机运动测量值,`Rt` 是相机位姿噪声的协方差矩阵。 观测方程: ![在这里插入图片描述](https://file.jishuzhan.net/article/1693478945132908545/6a2e6cd9686c45da87f170b230a801a2.png) `yt` 是 t 时刻观测到的路标,`Lt` 是 M 个物体的度量值,`Qz` 是噪声。 我们用 `Z` 表示整个时间上的传感器度量数据集。 视觉slam会创建 D 个关键帧来减少重复计算,用 `F1:D = {Fd}` 表示。 假设在当前场景下 Fd 可以观测到 Nd 个物体度量值 Ldi,而每个度量值 Ldi 又可以表示为: ![在这里插入图片描述](https://file.jishuzhan.net/article/1693478945132908545/f3265928ac0740159a91dec6e255d97d.png) c 表示物体类别,s 表示置信度,b 表示 bbox。 环境中的路标数量远远少于检测到的物体数量。原因在于,在连续的关键帧中可以观察到相同的地标,而在每个关键帧中可以检测到多个物体度量值。因此引入了 object association 的概念,即各关键帧中的物体度量值 Ldi 均与同一路标 Ok 相关联,我们将这种关联定义为 `Sdi = (Ok,Ldi)`。从而 t 时刻的关联可以表示为: ![在这里插入图片描述](https://file.jishuzhan.net/article/1693478945132908545/d26551f2c26c45ca8eaf4d8d48e9b2e0.png) 随着相机的运动,物体度量是增加的,所以 object association 是一个动态的过程,所以又可以表示为: ![在这里插入图片描述](https://file.jishuzhan.net/article/1693478945132908545/d5391a2313884f0dab77b36bcb0a90f4.png) X,L,Z 分别表示相机位姿,物体度量,传感器度量。X 和 L 随着 object association 进行优化更新。 ![在这里插入图片描述](https://file.jishuzhan.net/article/1693478945132908545/fcba491f7a6b4bc59dd8e6e013ff9a05.png) 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 框架,将语义对象与实时构建稀疏语义地图相结合。 # 四、数据集 ![在这里插入图片描述](https://file.jishuzhan.net/article/1693478945132908545/01dc4822b6364237acd61daa798023d0.png) # 五、语义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 等,不再赘述。 ![在这里插入图片描述](https://file.jishuzhan.net/article/1693478945132908545/d08285e433104c4eb6915ea87e2d0f36.png) 展望:multi-modal data、multi-robot、加强 data association

相关推荐
jay神10 小时前
大米杂质检测数据集(YOLO格式)
人工智能·深度学习·yolo·目标检测·毕业设计
AGV算法笔记11 小时前
二维码目标检测论文精读:EA-OBB 如何用轻量化旋转检测提升 QR 码定位效果?
人工智能·目标检测·目标跟踪
jay神12 小时前
基于 YOLOv8 的PCB 缺陷检测系统
python·深度学习·yolo·目标检测·信息可视化·毕业设计
QQ6765800812 小时前
基于yolo26算法的水下目标检测图像数据集 海洋生物识别 海胆识别 海龟识别数据集 海洋生物监测与保护工作 潜水作业安全辅助系 水下环境感知第10408期
算法·目标检测·水下目标检测·海洋生物识别·海胆 海龟识别·海洋生物监测与保护工作·潜水作业安全辅助 水下环境感知
加油JIAX1 天前
滑动窗口模型与边缘化
slam·边缘化·滑动窗口优化
加油JIAX1 天前
IMU预积分-旋转残差求雅可比
slam·imu·预积分
羊羊小栈1 天前
基于「YOLO目标检测 + 多模态AI分析」的智慧农业茶叶病害检测预警系统
人工智能·yolo·目标检测·计算机视觉·毕业设计·大作业
前端摸鱼匠1 天前
YOLOv11 在零售领域实战:利用公开的商品检测数据集 (如 SKU110K 的子集),训练一个 YOLOv11 模型,用于识别货架上的各种商品
人工智能·yolo·目标检测·ai·目标跟踪·视觉检测·零售
深度学习lover1 天前
<数据集>yolo微藻识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·微藻识别
动物园猫2 天前
电缆损坏目标检测数据集分享(YOLO系列)| 电缆断裂 雷击损伤 断股 烧蚀痕迹 输电线路巡检 目标检测标注
人工智能·yolo·目标检测