Semantic Visual SLAM 简述

news2024/11/18 15:36:35

语义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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/905774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子器件系列57:三防漆

三防漆是一种特殊配方的涂料,用于保护线路板及其相关设备免受环境的侵蚀。三防漆具有良好的耐高低温性能;其固化后成一层透明保护膜,具有优越的绝缘、防潮、防漏电、防震、防尘、防腐蚀、防老化、耐电晕等性能。 三防漆根据每个地区和每个厂家…

【Kubernetes】Rancher管理集群

目录 1、安装 rancher 2、登录 Rancher 平台 3、Rancher 管理已存在的 k8s 集群 4、Rancher 部署监控系统 5、使用 Rancher 仪表盘管理 k8s 集群 以创建 nginx 服务为例 创建名称空间 namespace 创建 Deployment 资源 创建 service 1、安装 rancher 在 所有 node 节点下…

org.xml.sax.SAXParseException: 元素类型 “select“ 必须后跟属性规范 “>“ 或 “/>

项目场景: springBoot项目build编译成功,maven依赖都没问题,项目启动run服务的时候报异常: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name demoUserController: Unsatisfie…

燃尽图、甘特图、鱼骨图

燃尽图、甘特图、鱼骨图 1. 燃尽图 燃尽图(burn down chart)是在项目完成之前,对需要完成的工作的一种可视化表示。燃尽图有一个Y轴(工作)和X轴(时间)。理想情况下,该图表是一个向下…

运动控制-CodeSys编程书籍

陆国君 <<PLC综合开发利器-CodeSys基础编程及应用指南 网上流传的陆国君PDF书籍 <<PLC综合开发利器-CodeSys基础编程及应用指南>> 很不错, 这本书网上有两个版本 556页是新的版本, 423页是老的版本, 不过内容差异不大. 423页是老的版本下载: url80.ctfile.co…

FL Studio21.1最新中文版本新功能有哪些?详细下载教程

FL Studio 21.1通过钢琴卷中的音阶吸附和基于 Python 的脚本&#xff0c;提供了更快捷、更有创意的音符编辑功能。更新版还带来了针对更好的管理采样的彩色波形&#xff0c;Hyper Chorus 极致合唱插件、Edison 中的 AI Declipper&#xff08;人工智能去削波器&#xff09;等。 …

Google Play P12文件

一、P12文件 给到后台用于订单消费/订单查询等功能&#xff0c;这个就是谷歌的凭证&#xff0c;没有这个你不配查&#xff0c;要的就是安全性。 1.应用要用到Google Pay&#xff1b; 2.自己后台去谷歌后台做订单消费/订单查询&#xff0c;如果所以操作由移动端去做&#xff0…

(7)(7.6) 恢复任务回放

文章目录 前言 7.6.1 配置 7.6.2 工作原理 7.6.3 局限性 前言 本页介绍了什么是"任务继续时后退"功能以及如何使用该功能。 &#xff01;Note 从 4.1 版起&#xff0c;Plane、Copter 和 Rover 均可使用此功能。 在某些应用或运行区域&#xff0c;为了消除冲突&…

Java自学到什么程度就可以去找工作了?

引言 Java作为一门广泛应用于软件开发领域的编程语言&#xff0c;对于初学者来说&#xff0c;了解到什么程度才能开始寻找实习和入职机会是一个常见的问题。 本文将从实习和入职这两个方面&#xff0c;分点详细介绍Java学习到什么程度才能够开始进入职场。并在文章末尾给大家安…

Docker的数据管理及端口映射与容器互联(使用centos镜像)

目录 Docker数据管理 1&#xff0e;数据卷 2&#xff0e;数据卷容器 Docker端口映射 Docker容器互联 Docker数据管理 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&…

一些异常情况

对象注入失败 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name hotelServiceImpl: Unsatisfied dependency expressed through field baseMapper; nested exception is org.springframework.beans.factory.NoSuchBeanDefini…

(自记录)LINUX部署docker+opencv的标注软件CVAT

开源代码地址 https://github.com/opencv/cvat 主要参考官方用户手册 https://opencv.github.io/cvat/docs/administration/basics/installation/#ubuntu-1804-x86_64amd64 其中涉及换源&#xff0c;不然太慢了&#xff0c;有个坑&#xff0c;官方的换源地址第四个是错的&#…

arduino使用FreeRTOS实时操作系统

How to use FreeRTOS with Arduino – Real time operating system 如何让Arduino运行FreeRTOS实时操作系统 在本文中&#xff0c;您将学习如何使用带Arduino的Freertos操作系统来执行特定的任务。实时操作系统又称RTOS&#xff0c;是一种旨在满足实时应用要求的操作系统。它…

将字符串的大小写字母进行转换大写字母转换为小写字母小写字母转换为大写字母str.swapcase()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将字符串的大小写字母进行转换 大写字母转换为小写字母 小写字母转换为大写字母 str.swapcase() 选择题 以下程序的运行结果是? str"I Like Python!" print("【显示】str:&quo…

可自定义实时监控系统HertzBeat

什么是 HertzBeat &#xff1f; HertzBeat是一个拥有强大自定义监控能力&#xff0c;无需 Agent 的开源实时监控告警系统。集 监控告警通知 为一体&#xff0c;支持对应用服务&#xff0c;数据库&#xff0c;操作系统&#xff0c;中间件&#xff0c;云原生&#xff0c;网络等监…

算法:双指针解决数组划分和数组分块问题

文章目录 实现原理实现思路典型例题移动0复写0快乐数盛最多水的容器有效三角形的个数三数之和四数之和 总结 在快速排序或者是其他和数组有关的题目中&#xff0c;有很经典的一类题目是关于数组划分的&#xff0c;数组划分就是把数组按照一定的规则划分为不同的区间&#xff0c…

jupyter notebook出现ERR_SSL_VERSION_OR_CIPHER_MISMATCH解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

SQL阶段性优化

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;微信小程序、页面跳转、移动端、前端☀️每日 一言&#xff1a;我们要把懦弱扼杀在摇篮中。 一、前言 我们在做系统的过程中&#xff0c;难免会遇到页面查询速度慢&#xff0c;性能差的问题&…

敏感信息泄露

由于后台人员的疏忽或者不当的设计&#xff0c;导致不应该被前端用户看到的数据被轻易的访问到。 比如&#xff1a; —通过访问url下的目录&#xff0c;可以直接列出目录下的文件列表; —输入错误的url参数后报错信息里面包含操作系统、中间件、开发语言的版本或其他信息; —前…