当前位置: 首页 > news >正文

论文于祥读及复现——《Multi-level Map Construction for Dynamic Scenes》

论文祥读之——动态场景的多层次地图构建

  • 0. 出发点(暨摘要)
  • 1. 引言
  • 2. 相关工作
  • 3.主要内容概括
    • 3.1 几何地图的构建
      • 3.1.1 密集点云地图和八叉图的构建
      • 3.1.2 平面地图的构建
    • 3.2 对象地图的构建
      • 3.2.1 对象参数化和数据关联
      • 3.2.2 对象的更新与优化
  • 4. 实验
    • 4.1 构建几何地图
    • 4.2 构建物体地图
    • 4.3 在真实环境中的稳健性测试
    • 4.4 动态物体跟踪实验
  • 5. 本文总结
  • 6. 个人读后感

论文网址:https://arxiv.org/pdf/2308.04000.pdf
源码网址:https://github.com/Hbelief1998/DyMLM-SLAM
注意 源码好像还没发不出来,git下来的文件里面只有一些图片。

0. 出发点(暨摘要)

在动态场景中,视觉SLAM中的定位和建图都面临着重大挑战。近年来,大量优秀的研究工作为定位问题提出了有效的解决方案。然而,针对动态场景下的长时间一致性地图构建的优秀研究工作较少,严重阻碍了地图应用的发展。
针对这一问题,设计了一种面向动态场景的多层次地图构建系统。该系统采用多目标跟踪算法、DBSCAN聚类算法和深度信息对目标检测结果进行校正,准确提取静态点云,并构建密集的点云图和八叉树图。提出一种面向动态场景的平面地图构建算法,涉及动态环境下平面的提取、过滤、数据关联和融合优化,从而生成平面地图。此外,还提出了一种针对动态场景的目标地图构建算法,包括目标参数化、数据关联和更新优化。在公开数据集和真实场景上的大量实验验证了所构建的多层次地图的准确性和所提算法的鲁棒性。最后,利用构建的目标映射展示了算法在动态目标跟踪中的实际应用前景。

1. 引言

下图1为动态场景多层次地图构建算法的系统框架。

  • 浅绿色部分为输入模块,输入RGB图像和深度图像。
  • 深绿色部分为预处理模块,主要负责语义信息的获取和预处理。
  • 黄色、蓝色和棕色模块为映射模块,分别表示构建密集点云地图和八叉树地图、平面地图、物体地图的一般过程。
  • 紫红色为输出模块,输出由映射模块构建的多级映射。
    系统框架图

本文的主要贡献有:

  1. 基于修正后的目标检测结果对点云进行过滤,构建干净的点云图和只包含静态元素的八叉树图。
  2. 提出一种在动态场景中构建平面地图的方法,实现对环境的结构感知。
  3. 提出一种在动态场景中构建物体地图的方法,使SLAM能够服务于更高层次的需求,如机器人环境理解、物体操纵和语义增强现实。
  4. 目前为止是第一个进行尝试在动态场景中,构建平面地图的工作,对物体进行精确参数化,构建精确完整的轻量化物体地图的。

2. 相关工作

对于动态场景制图,目前主要解决两个关键问题:

  • 解决语义信息缺失引起的动态噪声块
  • 提高映射效率

对于动态场景制图的研究,目前主要集中在:

  • 构建密集点云地图
  • 构建八叉图
  • 基于体素或TSDF的密集重建

为本文的分析打下基础的一些研究:

  • DS-SLAM使用log-odds评分来过滤不稳定的体素,并更新这些体素的语义,以构建密集的语义3D八叉树。
  • Detect-SLAM为每个关键点实时传播运动概率,并构建环境的实例级语义图。
  • Han等利用光流和PSPNet对动态点进行检测和剔除,同时创建了语义点云图和语义八叉树图。
  • Wen et al.利用深度误差、光度误差和重投影误差为静态点分配鲁棒权值,删除动态对象构建八叉树语义地图
  • Cheng等人将几何信息、语义信息和人类活动融合在一个精确可靠的3D稠密地图中。
  • RS-SLAM采用最大置信度融合方法进行语义更新,构建具有语义标签的静态背景语义八图。
  • SG-SLAM结合几何和语义信息快速去除动态特征,然后使用ROS接口构建语义对象图和全局octo图。
  • Yang等将改进的基于光流的移动一致性检测方法与深度信息调整的语义分割结果相结合,构建静态对象的语义八叉图。

仍然存在的问题:
密集映射可以满足增强现实等需求,但耗时较长。相比之下,平面映射以较低的计算需求实现了类似的功能,但缺乏相关研究。
目前面向动态场景的语义映射方案在对静态物体建模方面较为粗糙,缺乏对物体姿态、大小等信息的测量,且普遍缺乏物体数据关联和物体地图更新,即使部分工作存在这一环节,方法也相对简单,只适用于简单场景,缺乏强有力的实验支持来证明方法的有效性。此外,目前的研究工作主要集中在椅子和监视器两个物体的建模,忽略了场景中的其他物体。

3.主要内容概括

3.1 几何地图的构建

3.1.1 密集点云地图和八叉图的构建

处理工作:
在语义先验信息存在的情况下,可以根据语义类别删除目标检测框或者语义掩码中的点云,构建只包含静态因素的密集点云地图。
但是,这样操作会存在两个问题——漏检、欠分割。这两个问题会导致动态对象删除不完全。
本文使用YOLOX进行语义信息的获取对这两个问题的解决如下:

漏检利用多目标跟踪算法进行漏检补偿
欠分割首先,采用DBSCN类聚算法提取出潜在运动物体边界框内的前景点
然后,基于邻近像素沿着检测框边界和前景点的深度信息,适当扩展检测框
最后,为了避免DBSCAN聚类引起的错误,将检测框四个方向设置为扩展限制,限制为50个像素

建图工作:
在关键帧中,提取并映射到3D世界坐标系中的潜在移动对象的校正边界框外的像素。
然后,基于我们先前研究提供的相机姿态,将不同关键帧提取的点云进行拼接和融合,随后通过体素网格滤波进行下采样。
为了提高存储效率并支持导航和避障等任务,点云地图转换为八叉树地图

3.1.2 平面地图的构建

平面地图的初始化:

  • 平面提取的方法————>PEAC算法,得到当前相机坐标系下平面的参数和点云。
  • 提取平面的边缘点
  • 对平面进行二次拟合————>利用PCL点云库,获取精化后的参数和内点,移除平面边缘点的异常值

在此过程中,根据深度信息、内点比例以及与目标检测框的位置关系等各种因素对平面进行过滤
完成平面地图初始化后,遍历当前帧中检测到的平面和地图中已存在的平面,建立数据关联。

这样操作完会存在一定的问题,在复杂的动态场景中,检测到的平面常常会出现显著的错误和随机性,导致平面数据关联失败。但随着更多的观测,未成功关联的两个平面将朝着正确的方向进行优化,使得后续关联变得更加容易。

因此进行以下的操作:
在局部地图构建线程中,对地图中的平面进行成对比较。如果两个平面满足上述关联条件,它们将被视为潜在的未关联。然后,将观测次数较少的平面合并观测次数较多的平面中并进行优化,随后,将观测次数较少的平面从地图中移除

3.2 对象地图的构建

3.2.1 对象参数化和数据关联

由于要建模的对象通常属于背景,且远离相机,提取的地图点通常数量稀少且质量较差,使用聚类算法进行异常值去除是不可行的。因此每帧中使用密集点云进行对象建模,并利用DBSCAN密度聚类算法处理点云。

在当前帧k中,对于每个检测到的实例,我们对地图中的每个对象实例进行关联判断。运动IoU,投影IoU,3D-IoU和非参数统计是常见的对象数据关联策略。尽管它们存在限制,但在集成时,这些策略可以相互补充,从而产生更强大、准确和多功能的对象数据关联算法。

3.2.2 对象的更新与优化

分别使用密集点云稀疏地图点来对检测实例和对象实例进行参数化,这种方法弥补单个帧中地图点不足的缺点和多个帧中密集点云的显著耗时。在成功的数据关联之后,地图点和参数将会更新,随后,利用对象的地图点与平面或与对象关联的平面之间的距离以及孤立森林算法,从这些地图点中去除异常值
地图点的异常值剔除
图2为地图点的异常值剔除(a)确定桌面平面。(b)根据点到平面的距离剔除异常值。(c)使用隔离森林算法剔除异常值。

4. 实验

实验是在性能较高的笔记本电脑上运行的。在TUM RGB-D数据集上评估了算法性能,并在实际场景中应用算法进行动态物体跟踪。研究主要重点是地图构建,由于测试序列没有提供真值地图,实验主要旨在定性地展示地图构建结果。

4.1 构建几何地图

点云地图和八叉树地图

稠密点云地图和八叉树地图的构建结果如图3所示。可以观察到,由于缺乏处理动态物体的模块,ORB-SLAM2算法无法在高动态场景中进行定位和地图构建。在低动态场景中,该算法保留了动态物体的点云。由于物体检测中的漏检和完全覆盖潜在运动物体的边界框的挑战,通过删除位于原始潜在运动物体检测边界框内的点云构建的稠密点云地图包含了这些物体的大量残留痕迹。

下图为图3,点云地图和八叉树题图。顶部一行显示了使用ORB-SLAM2算法和密集建图模块构建的稠密点云地图。第二行展示了使用先前研究的方法 [9] 作为定位模块构建的稠密点云地图,其中排除了位于潜在运动物体检测区域内的点云。第三行展示了我们算法构建的稠密点云地图。底部一行展示了我们算法生成的八叉树地图。
点云地图和八叉树地图

平面地图

平面地图在动态场景中准确地感知静态背景平面结构。这可以应用于高级场景,如增强现实,并作为地标来增强相机姿态估计的准确性

下图为图4,相邻放置的重复物体的生成地图,左侧的图像提供了序列的概览
在这里插入图片描述

4.2 构建物体地图

在TUM数据集的8个动态序列上评估了物体地图构建的性能,如图5所示。为了验证物体地图构建的准确性,我们将构建的物体模型叠加在稠密地图上,并将它们投影到图像平面上。在高动态场景中,本文的算法能够准确地对场景中的几乎所有物体进行建模,不受相机不同的运动模式和环境中动态物体的影响。

然而,在低动态场景中,两个人一直坐在桌子旁边,导致了静态物体和背景的严重遮挡。因此,本文的算法对于某些物体缺乏足够的观测,导致了一些物体的建模不够准确,这是不可避免的。

实验结果表明,本文的算法在物体参数化、物体数据关联和物体优化策略方面具有很强的有效性,通过克服动态物体的影响,构建的物体地图为后续的应用,如语义导航、物体抓取和增强现实,提供了有力的支持。

下图为图5——物体地图。常规形状的物体,如显示器、书籍和键盘,使用立方体表示,而不规则形状的物体,如椅子、瓶子和泰迪熊,使用二次曲面表示。
物体地图

4.3 在真实环境中的稳健性测试

使用Realsense D435i相机在真实世界场景中对本文的方法进行了测试,来验证其有效性和稳健性。在实验中,一个人在相机的视野范围内进行了不规则的运动。为了验证算法的稳健性,评估了两种相机运动方式:

  1. 从场景的一端到另一端的移动;
  2. 几乎静止。多级地图构建的结果如图6所示。

实验结果表明,本文的算法能够在物体和相机的不同运动状态下构建准确的稠密点云地图、八叉树地图、平面地图和轻量级物体地图

下图为图6——真实世界场景中的多级地图构建结果,在上面一组图像中,相机从场景的一端移动到另一端;在下面一组图像中,相机几乎保持静止。图像(a)、(b)和©分别代表稠密点云地图、八叉树地图和平面地图。图像(d)展示了轻量级物体地图,其中物体被叠加在稠密点云地图上(图像(e)),并投影到图像上(图像(f)),以展示物体地图构建的有效性。

多层次地图构建在现实场景中产生效果

4.4 动态物体跟踪实验

进一步将构建的物体地图应用于动态物体跟踪,使用Pico Neo3设备捕获场景图像,并利用本文的算法构建物体地图。

在这种情况下,通过立体匹配获得地图点的深度信息,这些计算仅在关键帧上进行,以确保实时性能。构建的物体地图如图7(a)所示。

一旦构建了物体地图,用户可以选择目标物体进行跟踪。当用户移动物体时,系统使用KCF单物体跟踪光流跟踪算法计算物体的实时姿态。图7(b)-(d)展示了书、键盘和瓶子的动态跟踪结果。实验结果表明,本文的算法能够在动态环境中准确建模物体,为物体跟踪提供准确的物体模型和姿态,从而对实际应用非常有价值。此外,这也突显出我们的算法不依赖于特定设备,展示了其稳健性和通用性

下图为图7——实际场景中的物体建模和动态跟踪。
实际场景中的物体建模和动态跟踪

5. 本文总结

提出一种适应动态场景的多层次地图构建算法。本文成功地构建了密集的点云地图、八叉树地图、平面地图和在动态干扰存在下只包含静态背景和物体的物体地图。丰富了移动机器人的环境感知能力,拓展了动态环境下构建地图的应用场景。大量实验验证了算法的准确性和鲁棒性,动态目标跟踪实验进一步验证了算法的实用性。
未来,计划考虑除了人类之外其他可移动物体的真实运动,并以平面和物体作为地标优化相机姿态,进一步提高定位精度。

6. 个人读后感

整篇论文读下来感觉最创新的地方在于平面地图的构建与应用。整个操作就是用现有的知识和算法进行罗列和拼接,但是能达到自己的目的也挺好。

如果能在本文的基础上加上本论文实验的准确性和鲁棒性的数据值与其他算法比较的数据值的比较会更有说服力。

个人读后感只代表自己的感受,不喜勿喷,欢迎指正批评。

相关文章:

论文于祥读及复现——《Multi-level Map Construction for Dynamic Scenes》

论文祥读之——动态场景的多层次地图构建 0. 出发点(暨摘要)1. 引言2. 相关工作3.主要内容概括3.1 几何地图的构建3.1.1 密集点云地图和八叉图的构建3.1.2 平面地图的构建 3.2 对象地图的构建3.2.1 对象参数化和数据关联3.2.2 对象的更新与优化 4. 实验4…...

IDEA 报 Cannot resolve symbol ‘HttpServletResponse‘ 解决

springboot2版本换成springboot3之后,代码这里突然报红了, 首先要淡定,把原先Import的引入删掉,重新引入试试呢,是不是很简单哈哈。 原来,springboot3的路径是: import jakarta.servlet.http…...

linux-samba-window登不上

登不上查了很久发现是防火墙导致的 sudo firewall-cmd --list-all //查看所有的防火墙信息sudo firewall-cmd --permanent --zonepublic --add-servicesamba //service里添加sambafirewall-cmd --reload //重启 便可以登录了,小问题...

Java Web3J :使用web3j监听、查询、订阅智能合约的事件

前面有文章写如何使用Docker-compose方式部署blockscout浏览器+charts图表,区块链浏览器已经部署成功了,同时我们在链上增加了治理投票流程,如何实时的把治理事件快速同步到浏览器呢?这时就想到了Web3J来监听智能合约的事件,来达到同步事件的效果 目录 Web3J简介功能简介m…...

C语言入门 Day_13 二维数组

目录 前言: 1.字符串 2.创建二维数组 3.使用二维数组 4.易错点 5.思维导图 前言: 我们学习了字符类型char,我们可以用char来表示一个大写或者小写的字母,但真实应用中我们往往使用的是多个字符组成的一个单词或者句子。 …...

通过HFS低成本搭建NAS,并内网穿透实现公网访问

文章目录 前言1.下载安装cpolar1.1 设置HFS访客1.2 虚拟文件系统 2. 使用cpolar建立一条内网穿透数据隧道2.1 保留隧道2.2 隧道名称2.3 成功使用cpolar创建二级子域名访问本地hfs 总结 前言 云存储作为一个新概念,在前些年炒的火热,虽然伴随一系列黑天鹅…...

【SpringMVC】工作流程及入门案例

目录 前言 回顾MVC三层架构 1. SpringMVC简介 …...

【JVM】垃圾收集算法

文章目录 分代收集理论标记-清除算法标记-复制算法标记-整理算法 分代收集理论 当前商业虚拟机的垃圾收集器,大多数都遵循了“分代收集”(Generational Collection)[1]的理论进 行设计,分代收集名为理论,实质是一套符…...

K8s的Pod出现Init:ImagePullBackOff问题的解决(以calico为例)

对于这类问题的解决思路应该都差不多,本文以calico插件安装为例,发现有个Pod的镜像没有pull成功 第一步:查看这个pod的描述信息 kubectl describe pod calico-node-wmhrw -n kube-system 从上图发现是docker拉取"calico/cni:v3.15.1&q…...

数据结构 -作用及基本概念

为什么要使用数据结构 学习数据结构是计算机科学和软件工程领域中非常重要的一门课程。以下是学习数据结构的几个重要原因: 组织和管理数据:数据结构提供了一种组织和管理数据的方式。通过学习不同的数据结构,你可以了解如何有效地存储和操作…...

数学建模--时间序列预测模型的七种经典算法的Python实现

目录 1.开篇版权提示 2.时间序列介绍 3.项目数据处理 4.项目数据划分可视化 5.时间预测序列经典算法1:朴素法 6.时间预测序列经典算法2: 简单平均法 7.时间预测序列经典算法3:移动平均法 8.时间预测序列经典算法4:简单指…...

nginx-反向代理缓存

反向代理缓存相当于自动化动静分离。 将上游服务器的资源缓存到nginx本地,当下次再有相同的资源请求时,直接讲nginx缓存的资源返回给客户端。 本地缓存资源有一个过期时间,当超过过期时间,则重新向上游服务器重新请求获取资源。…...

大模型重塑区域人才培养,飞桨(重庆)人工智能教育创新中心正式启动

2023年8月22日,重庆市高校人工智能产教融合院长研讨会暨飞桨(重庆)人工智能教育创新中心启动仪式在重庆大学成功召开。会上,由百度飞桨、重庆大学组织重庆市二十一所高校共建的飞桨(重庆)人工智能教育创新中…...

PAT 1164 Good in C 测试点3,4

个人学习记录,代码难免不尽人意。 When your interviewer asks you to write “Hello World” using C, can you do as the following figure shows? Input Specification: Each input file contains one test case. For each case, the first part gives the 26 …...

LabVIEW对EAST长脉冲等离子体运行的陀螺稳态运行控制

LabVIEW对EAST长脉冲等离子体运行的陀螺稳态运行控制 托卡马克是实现磁约束核聚变最有希望的解决方案之一。电子回旋共振加热(ECRH是一种对托卡马克有吸引力的等离子体加热方法,具有耦合效率高,功率沉积定位好等优点。陀螺加速器是ECRH系统中…...

Fragment

Fragment是Android开发中的一个重要组件,用于构建灵活且可重用的用户界面模块。它可以作为Activity的一部分来展示用户界面,并且可以嵌套在其他Fragment中,从而形成复杂的界面层级。 以下是一个简单的示例,展示了如何在Android中…...

哈希表-救赎金

Leetcode: https://leetcode.cn/problems/ransom-note/?envTypestudy-plan-v2&envIdtop-interview-150 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true …...

vue3+vite+ts项目适配各种分辨率解决方案

现在的电脑屏幕和尺寸越来越多样化,对于前端开发来说,适配各种屏幕成了大难题,开发中一个实际例子:开发一个导航栏,ui给的是1920*60的尺寸,前端开发的时候,在自己电脑缩放比例中开发的&#xff…...

Python Opencv实践 - 矩形轮廓绘制(直边矩形,最小外接矩形)

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/stars.png") plt.imshow(img[:,:,::-1])img_gray cv.cvtColor(img, cv.COLOR_BGR2GRAY) #通过cv.threshold转换为二值图 ret,thresh cv.threshold(img_gray,…...

大数据HBASE的详细使用

摘要:本文将深入探讨大数据HBASE的使用步骤,帮助读者了解和掌握这一强大的分布式数据库系统的基本概念和操作技巧。通过本文的阅读,读者将能够熟悉HBASE的基本设置,了解其核心概念,掌握基本的查询和管理操作&#xff0…...

Sentinel 流量控制框架

1. Sentinel 是什么? Sentinel是由阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件。 2. 主要优势和特性 轻量级,核心库无多余依赖,性能损耗小。 方便接入,开源生态广泛。 丰富的流量控制场景。 …...

leetcode原题: 跳水板

题目: 你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。 返回的长度需要从小到大排列。 示例&…...

深度学习入门(Python)学习笔记1

第1章 Python入门 1.1python是什么 Python是一个简单、易读、易记的编程语言,而且是开源的,可以免费地自由使用。 使用Python不仅可以写出可读性高的代码,还可以写出性能高(处理速度快)的代码。 再者,在…...

苏州想要获得融资融券低利率账户的方法?怎么开融资融券账户?

想要获得融资融券低利率账户,可以通过以下几种方式: 选择低费率的券商:不同券商的费率不同,一些券商会提供低利率的融资融券账户,可以通过咨询券商或者比较不同券商的费率来找到最佳账户。 提升自身信用:获…...

【LeetCode周赛】LeetCode第359场周赛

LeetCode第359场周赛 判别首字母缩略词k-avoiding 数组的最小总和销售利润最大化找出最长等值子数组 判别首字母缩略词 给你一个字符串数组 words 和一个字符串 s ,请你判断 s 是不是 words 的 首字母缩略词 。 如果可以按顺序串联 words 中每个字符串的第一个字符…...

vue3+ts+tinynce在富文本编辑器菜单栏实现下拉框选择

实现效果 代码&#xff1a; <script lang"ts" setup> import Editor from tinymce/tinymce-vue import tinymce from tinymce; import { getIndicator } from /api/data-assets/data-dictoryimport {computed, ref} from "vue"; const props defin…...

前端UI组件库深度解析:构建现代化的用户体验

引言 在当今的前端开发中&#xff0c;UI组件库已经成为了我们工具箱中不可或缺的一部分。这些库可以极大地提高我们的工作效率&#xff0c;同时也使我们能够专注于实现真正的业务逻辑&#xff0c;而不是重复地编写UI代码。本篇博客将详细地探讨UI组件库的核心概念&#xff0c;…...

leetcode 1326. Minimum Number of Taps to Open to Water a Garden

x轴上的花园范围为[0,n], 0~n这个n1个离散点上有水龙头&#xff0c;第 i 个水龙头能浇水的范围为[i-ranges[i], iranges[i]]. 求能浇整个花园的最小水龙头个数。 思路&#xff1a; 方法一&#xff1a; greedy 先把每个水龙头能浇的区间准备好&#xff0c; 用一个数组保存所有…...

C++日期类的基本实现

前言 对于许多出初学C的同学来说首先接触的第一个完整的类便是日期类&#xff0c;这个类能有效的帮助我们理解C中有关类的初始化以及重载的相关知识&#xff0c;帮助我们轻松上手体验C的魅力。 文章目录 前言一、日期类整体初概二、构造2.1 判断日期是否合法2.2 构造函数 三、…...

第六章:数据结构与算法-part3:数据结构算法提升

文章目录 一、排序算法1.1 插入排序1、直接插入排序2、折半插入排序3、希尔排序 1.2、交换排序法1、起泡排序2、快速排序 1.3 选择类排序1、简单选择排序 二、业务逻辑算法设计2.1 基本概念和术语2.2 静态查找表2.3、有序表的查找 一、排序算法 排序是数据处理过程中经常使用的…...