DynaSLAM 2018论文翻译

news2024/12/29 13:07:59

Dynaslam:动态场景下的跟踪、建图和图像修复

摘要-场景刚性假设是SLAM算法的典型特征。这种强假设限制了大多数视觉SLAM系统在人口稠密的现实环境中的使用,而这些环境是服务机器人或自动驾驶汽车等几个相关应用的目标。
在本文中,我们提出了一个基于ORB-SLAM2[1]的视觉SLAM系统DynaSLAM,它增加了动态目标检测和背景绘制的功能。DynaSLAM在单目、立体和RGB-D配置的动态场景中具有鲁棒性。我们能够通过多视图几何、深度学习或两者兼而有之来检测移动物体。拥有一个静态的场景地图,可以在被这些动态对象遮挡的框架背景中进行绘制。
我们在公共单目,立体声和RGB-D数据集中评估我们的系统。我们研究了几种准确性/速度权衡的影响,以评估所提出方法的限制。在高度动态的情况下,DynaSLAM的表现优于标准视觉大满贯基线的准确性。它还可以估计场景静态部分的地图,这对于现实世界环境中的长期应用来说是必须的。

1.引言

同时定位和绘图(SLAM)是许多机器人应用的先决条件,例如无碰撞导航。SLAM技术仅根据机载传感器的数据流,联合估计未知环境的地图和机器人在该地图中的位姿。该地图允许机器人在相同场景中连续定位且没有累积误差。这和里程计方法相反,其整合窗口内的增量运动,并且在重新访问地点时不能修正漂移。
视觉SLAM,其中的主要传感器是一个摄像头,在过去的几年里得到了高度的关注和研究努力。单目相机时代的极简解决方案在尺寸、功率和成本方面具有实际优势,但也存在一些挑战,例如尺度或状态初始化的不可观察性。通过使用更复杂的设置,如立体或RGB-D相机,这些问题得到解决,视觉SLAM系统的鲁棒性可以大大提高。
研究界从许多不同的角度讨论了SLAM。然而,绝大多数方法和数据集都假定是静态环境。结果是它们只能通过将动态内容分类为静态模型的异常值来管理一小部分动态内容。尽管静态假设适用于某些机器人应用,但它限制了视觉SLAM在许多相关情况下的适用性,例如长时间在人口稠密的现实环境中运行的智能自主系统。
视觉SLAM可分为基于特征的方法[2],[3],它们依赖于显著点匹配,只能估计稀疏重建;直接方法[4],[5],[6],通过直接最小化光度误差和TV正则化,原则上可以估计出完全密集的重建。一些直接的方法集中在高梯度区域估计半稠密地图[7],[8]。
考虑到目前的技术水平,上述方法都没有解决场景中动态对象的常见问题,例如行人、自行车或汽车。在可视化SLAM中检测和处理动态对象揭示了建图和跟踪的几个挑战,包括

  • 如何在图像中检测到这样的动态物体呢?防止跟踪算法使用属于动态对象的匹配项。防止建图算法将移动对象作为3D地图的一部分。
  • 如何完整化3D地图中暂时被运动物体遮挡的部分。

许多应用程序将从这些方面的进展中受益匪浅。其中包括增强现实、自动驾驶汽车和医学成像。所有这些将会从成功复用之前得到的地图。检测和处理动态对象是估计稳定地图的必要条件,对长期应用很有用。如果未检测到动态内容,则它将成为3D地图的一部分,从而使其用于跟踪或重新定位的可用性复杂化。
在这项工作中,我们提出了一种在线算法来处理RGB-D,立体和单目SLAM中的动态目标。这是通过向最先进的ORB-SLAM2系统[1]添加前端阶段来完成的,目的是更准确地跟踪和可重复使用的场景地图。在单目和立体情况下,我们的建议是使用CNN对帧中的先验动态对象(例如人和汽车)进行逐像素分割,这样SLAM算法就不会提取它们的特征。在RGB- D的情况下,我们建议结合多视图几何模型和基于深度学习的算法来检测动态物体,并在将它们从图像中删除后,用正确的场景信息重新绘制被遮挡的背景(图1)。
在这里插入图片描述

2.相关工作

在大多数SLAM系统中,动态对象被归类为虚假数据,因此既不包括在地图中,也不用于相机跟踪。最典型的离群值抑制算法是RANSAC(例如在ORB-SLAM[3],[1]中)和鲁棒成本函数(例如在PTAM[2]中)。
有几个SLAM系统可以更具体地处理动态场景内容。在基于特征的SLAM方法中,一些最相关的是:

  • Tan等人[9]通过将地图特征投影到当前帧中进行外观和结构验证来检测场景中发生的变化。
  • Wangsiripitak和Murray[10]在场景中跟踪已知的三维动态物体。同样,Riazuelo等人[11]通过检测和跟踪人来处理人类活动。
  • 最近,Li和Lee[12]的工作使用了深度边缘点,这些点具有关联的权重,表明其属于动态对象的概率。

一般来说,直接方法对场景中的动态对象更敏感。专门为动态场景设计的最相关的作品是:

  • Alcantarilla等人[13]通过立体摄像机的场景流表示来检测运动物体。
  • Wang和Huang[14]使用RGB光流对场景中的动态物体进行分割。
  • Kim等人[15]提出通过计算投影在同一平面上的连续深度图像之间的差值来获取场景的静态部分。
  • Sun等[16]计算连续RGB图像之间的强度差。像素分类是通过对量化深度图像的分割来完成的。

所有基于特征的方法和直接的方法,仅从序列[1],[3],[9],[12],[13],[14],[15],[16],[17]中包含的信息映射静态场景部分,都无法估计保持静态时的先验动态对象长期模型,例如停放的汽车或坐着的人。另一方面,Wangsiripitak和Murray[10]以及Riazuelo等人[11]会检测到那些先验的动态物体,但无法检测到静态物体产生的变化,例如,一个人正在推的椅子,或者有人扔的球。即前一种方法可以成功地检测到运动物体,后一种方法可以成功地检测到多个运动物体。我们的提案,DynaSLAM,结合了多视图几何和深度学习来解决这两种情况。类似地,Anrus等人[18]通过结合动态分类器和多视图几何来分割动态对象。

3.系统描述

图2显示了我们系统的概述。首先,RGB通道通过一个CNN,该CNN按像素划分出所有先验的动态内容,例如人或车辆。
在RGB-D的情况下,我们使用多视图几何从两个方面改进了动态内容分割。首先,我们对之前由CNN获得的动态目标进行细化分割。其次,我们将大多数时候静态的对象实例标记为动态新对象实例(即检测在CNN阶段未设置为可移动的移动对象)。
为此,有必要知道相机的姿势,为此已经实现了一个低成本的跟踪模块,以在已经创建的场景地图中定位相机。这些分段的帧是用于获得相机轨迹和场景地图的帧。请注意,如果场景中的移动对象不在CNN类中,则多视图几何阶段仍将检测到动态内容,但准确性可能会降低。一旦完成了相机的完整动态目标检测和定位,我们的目标是用先前视图中的静态信息重建当前帧的遮挡背景。这些合成与增强现实和虚拟现实以及终身地图中的位置识别等应用相关。
在单眼和立体情况下,通过CNN对图像进行分割,使得属于先验动态对象的关键点既不被跟踪也不被建图。在下一个小节(III-A至III-E)中深入描述所有不同阶段。
在这里插入图片描述

A. 使用CNN对潜在动态内容进行分割

对于检测动态对象,我们建议使用CNN来获得图像的逐像素语义分割。在我们的实验中,我们使用Mask R-CNN[19],这是对象实例分割的最新技术。Mask R-CNN可以同时获得逐像素语义分割和实例标签。对于这项工作,我们使用逐像素的语义分割信息,但实例标签可能在未来的工作中用于跟踪不同的运动物体。我们使用Matterpor的TensorFlow实现。Mask R-CNN的输入为RGB原始图像。这个想法是将那些可能是动态的或可移动的类(人、自行车、汽车、摩托车、飞机、公共汽车、火车、卡车、船、鸟、猫、狗、马、羊、牛、大象、熊、斑马和长颈鹿)分割开来。我们认为,对于大多数环境,可能出现的动态对象都包含在此列表中。如果需要其他类,在MS COCO[20]上训练的网络可以使用新的训练数据进行微调。
假设输入是大小m×n×3的RGB图像,网络的输出是大小m×n×l的矩阵,其中l是图像中对象的数量。对于每个输出通道i∈L,获得了二进制掩码。通过将所有通道组合到一个通道中,我们可以获得在场景中一个图像中出现的所有动态对象的分割。

B.低成本跟踪

在潜在的动态内容被分割后,使用图像的静态部分跟踪相机的姿势。由于线段轮廓通常成为高梯度区域,因此容易出现突出的点特征。我们不考虑轮廓区域内的特征。
该算法在此阶段实现的跟踪比ORB-SLAM2[1]中的跟踪更简单,因此计算量更轻。它在图像帧中投影地图特征,在图像的静态区域中搜索对应的地图特征,并最小化重投影误差以优化相机姿态。

C.基于Mask R-CNN和多视图几何的动态内容分割

通过使用Mask R-CNN,可以对大多数动态对象进行分割,而不用于跟踪和映射。然而,有些对象无法通过这种方法检测到,因为它们不是先验的动态的,而是可移动的。最新的例子是某人携带的一本书,某人正在移动的一把椅子,甚至是长期绘图中家具的变化。本节将详细介绍用于处理这些情况的方法。
对于每个输入帧,我们选择具有最高重叠的前一个关键帧。这是通过考虑新帧和每个关键帧之间的距离和旋转来完成的,类似于Tan等人[9]。在我们的实验中,重叠关键帧的数量被设置为5,作为动态对象检测的计算成本和准确性之间的折衷。
然后,我们计算每个关键点x从之前的关键帧到当前帧的投影,获得关键点x’,以及它们的投影深度zproj,依据相机运动计算。注意,关键点x来自ORB-SLAM2中使用的特征提取器算法。对于每个关键点,其对应的3D点为X,我们计算x和x’的反向投影之间的夹角,即视差角α。如果这个角度大于30,该点可能被遮挡,从那时起将被忽略。我们观察到,在TUM数据集中,视差大于30的静态对象由于视点差异而被认为是动态的。考虑到重投影误差,我们获得当前帧z中剩余关键点的深度(直接从深度测量中),并将其与zproj进行比较。如果差值z = zproj z超过阈值τz,则关键点x被认为属于动态对象。这个想法如图3所示。为了设置阈值τz,我们在TUM数据集中手动标记了30幅图像的动态对象,并评估了我们的方法在不同阈值τz下的精度和召回率。通过最大化0.7 Precision+0.3 Recall的表达式,我们得出τz= 0.4m是一个合理的选择。
在这里插入图片描述
一些标记为动态的关键点位于移动对象的边界上,这可能会导致问题。为了避免这种情况,我们使用深度图像给出的信息。如果一个关键点被设置为动态的,但是深度图中它周围的补丁有很高的方差,我们将标签更改为静态。
到目前为止,我们知道哪些关键点属于动态对象,哪些关键点不属于。为了对所有属于动态对象的像素进行分类,我们在深度图像中围绕动态像素生长区域[21]。RGB帧及其对应的动态蒙版示例如图4a所示。
在这里插入图片描述
CNN的结果(图4b)可以与该几何方法的结果相结合,进行全动态目标检测(图4c)。我们可以发现两种方法的优点和局限性,因此有动机将它们结合使用。对于几何方法,主要问题是初始化并不简单,因为它具有多视图的性质。学习方法使用单一视图具有令人印象深刻的性能,不存在这样的初始化问题。但主要的限制是,应该是静态的对象可以移动,而该方法无法识别它们。最后一种情况可以使用多视图一致性测试来解决。
这两种面对运动目标检测问题的方法如图4所示。在图4a中,我们看到后面的人,这是一个潜在的动态对象,没有被检测到。这有两个原因。首先,RGB-D相机在测量远距离物体深度时面临的困难。其次,可靠的特征存在于图像的已定义部分,也就是附近的部分。尽管如此,这个人还是被深度学习方法检测到了(图4b)。除此之外,一方面,我们在图4a中看到,不仅检测到图像前面的人,而且还检测到他拿着的书和他坐的椅子。另一方面,在图4b中,两个人是唯一检测到的动态对象,而且他们的分割也不太准确。如果只使用深度学习方法,就会有一本漂浮的书留在图像中,并错误地成为3D地图的一部分。
由于两种方法的优缺点,我们认为它们是互补的,因此它们的组合使用是实现精确跟踪和映射的有效方法。为了实现这一目标,如果用两种方法都检测到一个对象,则分割掩码应该是几何方法的掩码。如果一个对象只被基于学习的方法检测到,分割掩码也应该包含这个信息。上一段示例的最终分割图像如图4c所示。分割的动态部分从当前框架和地图中移除。

D.跟踪和建图

该阶段系统的输入包含RGB和深度图像,以及它们的分割掩码。我们提取静态图像片段中的ORB特征。由于线段轮廓是高梯度区域,因此必须移除落在该交点上的关键点。

E.背景绘制

对于每一个被移除的动态对象,我们的目标是用之前视图中的静态信息重新绘制被遮挡的背景,这样我们就可以合成一个没有移动内容的逼真图像。我们认为,这种包含环境静态结构的合成帧,对于虚拟现实和增强现实等应用,以及地图创建后的重新定位和相机跟踪都很有用。
因为我们知道之前和当前帧的位置,所以我们将所有之前关键帧(在我们的实验中是最后20帧)的RGB和深度通道投射到当前帧的动态片段中。一些空白没有对应关系,被留白;一些区域不能被绘制,因为它们对应的场景部分到目前为止还没有出现在关键帧中,或者,如果它出现了,它没有有效的深度信息。这些缝隙不能用几何方法重建,需要更精细的绘画技术。图5显示了来自TUM基准测试的不同序列的三个输入帧的合成图像。注意动态内容是如何被成功分割和移除的。此外,大多数分割的部分已经正确地加入了来自静态背景的信息。这些合成帧的另一个应用是:如果将帧的动态区域与静态内容进行绘制,则系统可以使用绘制的图像作为静态假设下的SLAM系统。
在这里插入图片描述

5.实验

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

学习react,复制了一个C站Civitai

苦肝两个多月,终于复制了一个C站,也就是现在最热门的AI绘画社区Civitai。 来看看效果图吧! 技术栈介绍 我还是一个菜鸡,所以不像c站那样用了各种技术。 目前只是为了展示数据,我的Civitai简单技术栈如下 前端&…

Java17:IO流

一:File类: 1.File类的理解: 1.File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹) 2.File类声明在java.io包下 3.File类中涉及到关于文件或文件目录的创建,删除,重命名…

仙境传说RO:添加自定义道具

仙境传说RO:添加自定义道具 大家好,我是艾西今天和大家聊一下仙境传说RO怎么添加自定义道具。在我们开服时加入一些道具模组等往往会让我们的服务器更有特色以及消费点,那么让我们直接进入正题开始操作:(此处我们讲的…

k8s集群安装Istio过程记录及问题总结

目录 一、介绍二、部署Helm三、部署Istio部署官方示例 Bookinfo 四、部署KaliBug 记录部署Bookinfo demo失败 一、介绍 这篇文章记录一下k8s集群安装Helm、Istio 和 Kiali,方便学习相关概念。 前提需要k8s集群: 可参考:Arm64架构(MacBookPr…

cmake流程控制--循环

目录 for循环 普通方式 demo cmake3.17中添加了一种特殊的形式,可以在一次循环多个列表,其形式如下: demo 类似python语言的for循环 demo while循环 demo cmake跳出循环(break)和继续下次循环(continue) demo block()和endblock()命令定义的块内也是允许break()和c…

Windows下 Hexdump查看hex文件

链接 : https://www.di-mgt.com.au/hexdump-for-windows.html C:\hexdump-2.0.2 下载解压,以管理员权限拷贝至C:\Windows 便可使用查看命令

蓝牙定位系统|蓝牙网关定位和蓝牙Beacon定位的区别有哪些?

作为室外定位向室内环境的延伸,为了解决室外定位导航“最后一公里”的问题,室内定位领域的科技公司和研究机构也做出了很多的努力。目前市场主流的是基于蓝牙网关、蓝牙Beacon的室内定位方案,经常会有客户问到,这两种方案有什么区…

STL好难(7):优先级队列(priority_queue)与仿函数

目录 1.优先级队列的介绍: 2.priority_queue的函数接口 3.仿函数(函数对象)的简单理解 4.priority_queue的模拟实现: 1.优先级队列的介绍: 点击查看priority_queue的文档介绍 1. 优先队列是一种容器适配器&#x…

默认成员函数

前文提要 本文全文以日期类为例 先简单写一个日期类 class Data{ public:private:int _year;int _month;int _day; };且补充一个小知识 数据类型的划分 内置类型:是编程语言提供的基本数据类型,例如整数、浮点数、字符、布尔值 自定义类型&#xff1…

FreeRTOS实时操作系统(十二)事件标志组

系列文章目录 文章目录 系列文章目录事件标志组事件标志组API函数实验测试 事件标志组 事件标志位:用一个位来表示事件是否可以发生。 事件标志组是一组事件标志位的集合 特点: 1.每一个位表示一个事件(高8位不是) 2.每一位事件…

Java的异常Exception

异常 1、异常概述与异常体系结构 1.1、异常概述 异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”(开发过程中的语法错误和逻辑错误不是异常) Java程序在执行过程中所发生的异常事件可分为两类: Erro…

装饰器模式:通过剖析Java IO类库源码学习装饰器模式

我们通过剖析Java IO类的设计思想,再学习一种新的结构型模式,装饰器模式。它的代码结构跟桥接模式非常相似,不过,要解决的问题却大不相同。 Java IO类库非常庞大和复杂,有几十个类,负责IO数据的读取…

Appium: Windows系统桌面应用自动化测试(三) 【脚本操作】

Appium: Windows系统桌面应用自动化测试 【脚本操作】 一、常用操作1、添加被测程序1.1示例一:通过程序路径指定应用程序,例如指定写字板程序路径。1.2示例二:通过程序ID指定应用程序,例如指定计算器ID。1.3 应用程序ID&#xff0…

芯片工程师求职题目之验证篇(2)

1. 事件驱动的仿真器和和基于周期的仿真器有什么区别? 事件驱动的仿真器顾名思义就是根据事件(event)触发仿真进行的,在进入一个周期中,它会获取每个事件并通过设计传播求值,直到达到稳定状态的条件,接着进入下一个周…

Android:安卓开发采用Volley网络框架+MySQL数据库,实现从服务器获取数据并展示完成记单词APP

一、功能与要求 实现功能:设计一个记单词APP。服务器采用Tomcat,数据库采用Mysql。实现用户的注册登录功能以及单词的增删改查。 指标要求:实现UI布局;将系统数据保存到Mysql数据库中,并采用Volley网络框架实现从服务…

【机器学习核心总结】什么是随机森林

什么是随机森林 森林里有很多树,随机森林里有很多决策树。 随机森林是决策树的升级版,随机指的是树的生长过程。世上没有两片相同的树叶,随机森林中的树也各不相同。在构建决策树时,我们会从训练数据中有放回的随机选取一部分样本…

Kubernetes service服务的发布 - kube-proxy(负载均衡器)-IPVS

目录 Service Service将内部的pod暴露到外面,让用户可以访问 负载均衡策略: Service 的类型: 案例:Service服务发布案例 扩展:我们在案例再加入一个探针的使用 更改后的my_nginx.yaml文件: 创建Pod&…

ChatGLM2-6B发布,C-Eval超GPT4,支持32k上下文!

自清华大学数据挖掘实验室(THUDM)3月开源ChatGLM-6B已经过去了3个多月,最近他们又带来了性能全面提升的“船新”版本-ChatGLM2-6B。别看名字变化小,其实更新的模型性能是又有量又实用。不了解ChatGLM的小伙伴可以看我这篇文章&…

Java基础之五 反射

通过Java反射机制,可以在程序中访问已经装载到JVM中的Java对象的描述,实现访问、检测和修改描述Java对象本身信息的功能。 通过反射可以访问的主要描述信息 访问成员变量 常用方法:getFields()、getField(String name)、getDeclaredFields()…