当前位置: 首页 > 编程日记 > 正文

Towards Real-time Semantic RGB-D SLAM in Dynamic Environments(动态语义SLAM)

动态环境下的实时语义SLAM

  • 简介
  • 摘要
  • 系统流程
  • 实验结果
  • 总结

简介

在ICRA 2021上看到这样一篇论文:Towards Real-time Semantic RGB-D SLAM in Dynamic Environments,发现它也是使用的语义网络+基于深度图的多视图几何方法来去除图片中的动态对象的。这一方法和之前看到的 DynaSLAM 类似,所以就挺好奇地去看了看。

摘要

论文作者认为当前大多数 SLAM 都仅适用于静态环境中。虽然近期有些学者通过深度学习来帮助 SLAM 在动态环境下工作,但这种做法需要消耗很高的计算资源,且无法处理未经过网络训练的物体(即语义网络无法识别的物体)。针对这些问题,作者做了一些尝试:首先为了减少计算资源的消耗,作者仅在关键帧 KF 上进行语义分割;然后,为了处理网络无法识别的物体,作者先对深度图进行聚类,对聚类结果采用多视图几何的方法进行动态点的判断。作者将上述优化方法用于 ORB-SLAM2 系统(ORB-SLAM2太狠了),最后也用多个数据集和实际环境验证了优化后系统的性能(能用于实际场景确实不错)。

系统流程

系统的整体流程图如下
在这里插入图片描述

以流程图为参考,整个系统有以下几个工作步骤:
1、数据获取:
  通过 RGB-D 相机采集 RGB 图片和深度图片;
2、特征提取:
  采用 ORB-SLAM2 的方法提取RGB图片中的特征点。
3、语义分割:
  如果当前帧是关键帧,则对图片进行语义分割,根据分割后的结果更新 LocalMapLocal MapLocalMap,以保证 LocalMapLocal MapLocalMap 只保留静态点。如果当前帧不是关键帧,则不用进行语义分割,通过现有的 LocalMapLocal MapLocalMap 实现跟踪定位。因为仅在关键帧上进行语义分割,所以较之 DynaSLAM(每帧都语义分割),该系统的计算速度会快很多。这一步能够获得系统的初始位姿估计;
3、深度图聚类+多视图几何:
  对每帧深度图进行 K均值聚类,类别总数为 NNN(以深度值作为聚类的依据)。每一个聚类结果都被当作是某一物体的表面,且归属于同一类的所有点都满足同一运动约束(同类中各点的运动方式一致)。然后将 LocalMapLocal MapLocalMap 中的点投影到当前帧上寻找匹配点,计算出各聚类结果的平均重投影误差(某一类中所有点的重投影误差求和取平均),如下式:
在这里插入图片描述
(1) 式在求重投影误差时还加上了一个惩罚函数 ρρρuuu 表示是图像上的点,PPPuuuLocalMapLocal MapLocalMap 中匹配上的三维点。
  动态点的判断依据为:根据各类的平均重投影误差,把其中误差相对较大的几类定义为动态类,将动态类中所有点都剔除,不用于位姿估计。这种方法在泛化性方面比深度学习网络要好。但是在判定动态类时,“误差相对较大” 这句话比较难以把握。
(这种先将部分点归于一类后再进行动态判断的方法比直接对每一个点进行判断的方法要更加稳定有效,因为后者受到图片的测量误差的影响更大,即单个点发生误判的概率较大。这也是该系统和DynaSLAM系统的一大不同之处)
4、位姿估计:
  根据第3步的结果,对第2步的估计位姿进行优化,获得更加精确的位姿。后续的步骤和 ORB-SLAM2 相似。

上面就是整个系统的大致工作流程,作者也给出了分别采用第2步和第3步进行动态判断的结果:
在这里插入图片描述

图片中可以看出语义分割和多视图几何的方法是相辅相成的,两者都有好有坏,但又能够互相补充。

实验结果

下面是在数据集上的实验结果、时间消耗,以及在实际环境下的测试结果:

在这里插入图片描述
    可以看出,虽然比 DynaSLAM 精度稍差,但是在时间消耗上比 DynaSLAM 有很大优势。此外,这个系统比仅采用深度学习的 DS-SLAM 性能更佳。

总结

感觉作者应该受到了 DyanSLAM 系统的很多启发,因为 DynaSLAM 也是采用的语义分割+基于深度图的多视图几何方法。得益于作者所提出的两个优化方案,在保证计算性能的同时,还保证了系统的整体精度。从实验结果中可以看出,该系统的精度和 DynaSLAM 的精度差距不是很大,但是速度比 DynaSLAM 快了将近一倍。如果把聚类和多视图几何判断方法再进行优化,应该可以获得一个更好的效果。

相关文章:

gpupdate /force 遇报错解决过程

windows server 2008 修改策略后&#xff0c;需要更新。在cmd中执行 gpupdate /force&#xff0c;遇到报错。报错内容为 The processing of Group Policy failed. Windows attempted to read the file \\<domain.name>\SysVol\<domain.name>\Policies\{xxxxxxxx-xx…

pytorch学习——torch.cat和torch.stack的区别

合并tensors torch.cat 沿着特定维数连接一系列张量。torch.stack 沿新维度连接一系列张量。 torch.cat 在给定维度中连接给定的 seq 个张量序列。 所有张量必须具有相同的形状&#xff08;连接维度除外&#xff09;或为空。 torch.cat(tensors, dim0, *, outNone) → Tens…

Docker将容器制作成镜像并提交到远程仓库

Docker将容器制作成镜像并提交到远程仓库 步骤如下 先在dockerhub上创建一个自己的用户https://hub.docker.com/。或者在阿里云也可以。 2. 然后先创建一个空的镜像名。 3. 在终端上登录。 4. 这里有一个容器ID为fe08a32503b1。想把它制作成镜像以备后期自己用。 5. 将容器制作…

关于子业之间相互取得元素或者方法

1.跳转是将页面name带过去 例子&#xff1a; url&#xff1a;"login.jsp?windowName"window.name; 传递参数到子页面 &#xff0c;使得子页面能够通过名字返回数据 2.获取跳转到页面 window.top.frames[0].frames["${param.windowName}"].document转载于:…

windows 2008 (非R2)使用批处理文件调整组策略过程记录

2021年12月8日&#xff0c;对windows server 2008 &#xff08;不是 windows server 2008 R2&#xff09; 调整组策略。其中有一部分&#xff0c;无法通过图形界面&#xff08;gpedit.msc&#xff09;进行&#xff0c;只能在cmd用命令行执行。执行时遇到如下报错。 猜想是由于中…

【Leetcode】 刷题之路1(python)

leetcode 刷题之路1&#xff08;python&#xff09; 看到有大佬总结了一些相关题目&#xff0c;想着先刷一类。 1.两数之和15.三数之和16.最接近的三数之和11.盛最多的水18.四数之和454.四数相加II 1. 两数之和给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你…

MySQL数据库中的内置函数

SQL函数分为单行函数和多行函数&#xff1a; 单行函数: 红色标注的为重点。 … … … …字符串函数: … … … … … … … … … … 1.length() 存储长度 … … … … … … … … … … 2.char_length() 字符个数 … … … … … … … … … … 3.concat()首尾相连 … ……

elasticsearch从入门到出门-01windows上安装使用

elasticsearch 1、安装JDK&#xff0c;至少1.8.0_73以上版本&#xff0c;java -version2、下载和解压缩Elasticsearch安装包&#xff0c;目录结构3、启动Elasticsearch&#xff1a;bin\elasticsearch.bat&#xff0c;es本身特点之一就是开箱即用&#xff0c;如果是中小型应…

读django文档——Managing static files (e.g. images, JavaScript, CSS)

在上一篇读django文档——nginx uwsgi 部署django项目_苦行僧的妖孽日常-CSDN博客 部署django项目后&#xff0c;发现在runserver时都能正常部署的 static 文件都没有生效。查看文档解决该问题&#xff0c;记录这一过程。 If you use django.contrib.staticfiles as explaine…

pytorch中tensor.mul()和mm()和matmul()

tensor.mul tensor.mul和tensor * tensor 都是将矩阵的对应位置的元素相乘&#xff0c;因此要求维度相同&#xff0c;点乘torch.mul(input, other, *, outNone) → Tensor 参数&#xff1a; input (Tensor) – the input tensor. other (Tensor or Number) torch.mul(input, …

python学习笔记 day44 数据库三范式

参考自 https://www.cnblogs.com/wangfengming/articles/7929118.html 1. 数据库三范式概念&#xff1a; 为了建立减少冗余&#xff0c;结构合理的数据库&#xff0c;涉及数据库时必须要遵守一定的规则&#xff0c;在关系数据库中&#xff0c;这种规则就成为范式&#xff0c;范…

行内标签(最常用的:a标签、img标签、span标签)

a 标签&#xff1a; 功能&#xff1a; 从一个页面跳转到其他页面&#xff0c;或者是当前页面的其他位置。 属性&#xff1a; href &#xff1a;指定跳转的目标路径。 值可以是一个外部网站的地址&#xff1b;也可以是一个内部网页的地址 target: _self 默认值&#xff0c;在当…

SAP HR模块配置假期日历和缺勤类型

目录 一、配置假期日历 二、配置缺勤信息类型 2.1、定义缺勤类型 2.2、定义缺勤的计算规则 2.3、分配缺勤计算规则到缺勤类型 一、配置假期日历 SAP的HR模块中&#xff0c;业务顾问在实施的时候一般会配置未来10年的假期日历&#xff0c;到期后再进行配置。 延长假期日…

表格(table、tr、th、td、colspan、rowspan)

表格一&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title></title><style>table{width: 720px;/*设置表格水平宽度为720px*/margin: 0 auto;/*使表格水平居中*/border: 1px solid black;/*设置边框…

Java基础概念性的知识总结

属于个人的所学的知识总结&#xff0c;不是全面的 1.JDK、JRE和JVM三者的区别 01.JDK&#xff1a;(Java Development ToolKit)Java开发工具包&#xff0c;是整个Java的核心。包括了Java的运行环境、JRE、一堆Java工具和Java基础的类库。 02.JRE&#xff1a;(Java Runtime Envir…

vue里的数据

背景&#xff1a; 一个项目完工在即&#xff0c;鉴于此&#xff0c;前端使用了vue&#xff0c;写下此栏&#xff0c;以供日后翻阅&#xff0c; 会涉及到我所运用到的vue相关知识&#xff0c;需要一定的js基础。 默认vue的single-file-components&#xff08;单文件组件开发&…

【Leetcode】刷题之路2(python)

哈希映射类题目&#xff08;简单题小试牛刀啦bhn&#xff09; 242.有效的字母异位词349.两个数组的交集1002.查找常用字符202.快乐数383.赎金信 242. 有效的字母异位词 用python的Counter类太绝了&#xff01;&#xff01;&#xff01; 一行代码解决问题&#xff0c;这道题实…

ORA-01113 file 1 needs media recovery

启动数据库时报错。ORA-01113 datafile1需要恢复。 rman执行恢复。恢复后尝试打开数据库&#xff0c;看结果 rman target / recover datafile 1; alter database open; 反复上述过程&#xff0c;直到所有数据文件恢复。 recover datafile 1; …… recover datafile 13; 如果…

大数据批量导入,解决办法,实践从定时从 sqlserver 批量同步数据到 mySql

c#代码&#xff0c;批量导入数据代码 public class MySql_Target : ZFCommon.DataAccesser.Base.DABase{public MySql_Target(){this.InitDataAccesser(ZFCommon.DataAccesser.DatabaseType.MySql, ReadConfig.TargetConnection);}///大批量数据插入,返回成功插入行数 /// <…

【目标检测】yolo系列:从yolov1到yolov5之YOLOv5训练自己数据集(v6.0)

一、源码下载及requirments 源码下载地址&#xff1a;https://github.com/ultralytics/yolov5 &#xff08;持续更新中&#xff09; 本人所用环境如下&#xff1a; pytorch&#xff1a;1.8&#xff08;因为cuda版本用了pytorch1.8&#xff09; cuda&#xff1a;10.1 Python&am…

CSS之常用选择器(元素、id、类、通配选择器)

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><style>/*1、元素选择器作用&#xff1a;根据标签名来选中指定的元素语法&#xff1a;标签名{}例子&#xff1a;p{} h1{} div{}*//*p{color: red;}*/…

Java中 实体类 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念

PO(persistant object) 持久对象 在 o/r 映射的时候出现的概念&#xff0c;如果没有 o/r 映射&#xff0c;没有这个概念存在了。通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的 java 对象。最简单的 PO 就是对应数据库中某个表中…

SAP有用的NOTE(持续更新)

目录 2421240 - Portal is not loaded on Chrome 56 or higher. 66971 - Supported SAP GUI platforms 66971 - Supported SAP GUI platforms 1999880 - FAQ: SAP HANA System Replication 2250144 - FAQ: SAP HANA Secure User Store 2222200 - FAQ: SAP HANA Network …

【目标检测】yolo系列:从yolov1到yolov5之YOLOv1详解及复现

检测器通常能够被分为两类&#xff0c;一类是two-stage检测器&#xff0c;最具代表的为faster R-CNN&#xff1b;另一类是one-stage检测器&#xff0c;包括YOLO&#xff0c;SSD等。一般来说&#xff0c;two-stage检测器具有高定位和识别准确性&#xff0c;而one-stage则有速度上…

Ubuntu终端命令行缩短显示路径

平时我们使用linux终端命令行的时候&#xff0c;常常会被一个问题困扰&#xff0c;那就是文件路径过长&#xff0c; 有时候甚至超过了一行&#xff0c;这样看起来非常别扭&#xff0c;其实只要两步就可以解决这个问题&#xff1a; 1&#xff0c;修改.bashrc文件&#xff08;用户…

主要的约瑟夫环问题

解说 http://poj.org/problem?id3517 n个人&#xff0c;编号为1~n。每次从1開始数&#xff0c;数到m的人出圈。最后一个出圈的人的编号。f[1] 0; for(int i 2; i < n; i) {f[i] ( f[i-1] m)%i; } printf("%d\n",f[n]1);这里第一次出圈的人的编号是m&#xff…

CSS之复合选择器(交集、并集选择器)

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><style>/*将class为red的元素设置为红色*/.red{color: red;}/*将class为red的div字体大小设置为30px*//*1、交集选择器作用&#xff1a;选中同时复合多…

SAP有用的知识(持续更新)

一、安装SAP 1.1、产品可用性矩阵&#xff08;Product Availability Matrix&#xff09; SAP官网-Maintenance-Product Availability Matrix&#xff0c;点击页面的Access the Product Availability Matrix。 选中你公司授权的商品&#xff08;Licensed Products&#xff09…

【目标检测】yolo系列:从yolov1到yolov5之YOLOv2详解及复现

YOLO v2 Yolov2论文链接&#xff1a;YOLO9000: Better, Faster, Stronger yolov2的改进 从Yolov2论文的标题可以直观看到就是Better、Faster、Stronger。Yolov1发表之后&#xff0c;计算机视觉领域出现了很多trick&#xff0c;例如批归一化、多尺度训练等等&#xff0c;v2也…

我有一个很好的思维习惯-反思

和我共事过的同事有的会说我聪明&#xff0c;我就暂且当做是夸奖吧&#xff0c;其实我并不是聪明&#xff0c;只是有一个思维习惯。做事过程中或者做完一件事之后会反思这个过程&#xff0c;有哪些地方我是重复操作的&#xff0c;有没有什么地方可以简化流程的&#xff0c;这应…