DynaSLAM 2018论文翻译

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.实验

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV 入门教程:膨胀和腐蚀操作

OpenCV 入门教程:膨胀和腐蚀操作 导语一、膨胀操作二、腐蚀操作三、示例应用3.1 图像增强3.2 边缘检测 总结 导语 膨胀和腐蚀是图像处理中常用的形态学操作,用于改变图像的形状和结构。在 OpenCV 中,膨胀和腐蚀是基于结构元素的像素操作&…

chatgpt生成pygame opengl实现旋转用图片填充的3d三角形

import pygame from pygame.locals import * from OpenGL.GL import * from OpenGL.GLU import *def draw_triangle():vertices ((0, 2, 0), # 顶点1(-2, -2, 0), # 顶点2(2, -2, 0) # 顶点3)tex_coords ((1, 2), # 顶点1的纹理坐标(1, 1), # 顶点2的纹理坐标(2, …

R语言绘图丨论文中最常用箱线图绘制教程,自动进行显著性检验和误差线标注

多组比较式箱线图 在科研论文绘图中,对于多组数据进行比较一般采用箱线图的方法,今天分享一下这个经典数据可视化方法,从零开始绘制一张带误差棒并自动计算显著性比较结果的箱线图。 前言:箱线图有什么优势? 数据分布…

mac电脑上,webm格式怎么转换成mp4?

mac电脑上,webm格式怎么转换成mp4?webm格式的视频也是最近几年也越来越多的,小编最近就不止一次的下载到过webm格式的视频,很多小伙伴肯定对它还并不是很了解,webm是由谷歌公司所提出以及开发出来的视频文件格式&#…

python实现语音识别(讯飞开放平台)

文章目录 讯飞平台使用python实现讯飞接口的语音识别第一步:导入需要的依赖库第二步:声明全局变量第三步:初始化讯飞接口对象第四步:收到websocket建立连接后的处理函数第五步:收到websocket消息的处理函数第六步&…

神经网络学习小记录74——Pytorch 设置随机种子Seed来保证训练结果唯一

神经网络学习小记录74——Pytorch 设置随机种子Seed来保证训练结果唯一 学习前言为什么每次训练结果不同什么是随机种子训练中设置随机种子 学习前言 好多同学每次训练结果不同,最大的指标可能会差到3-4%这样,这是因为随机种子没有设定导致的&#xff0…

删除链表的倒数第 N 个结点——力扣19

题目描述 法一)计算链表长度 class Solution { public:int getLength(ListNode* head){int len0;while(head){len;head head->next;}return len;}ListNode* removeNthFromEnd(ListNode* head, int n) {int len getLength(head);ListNode* dummy new ListNode …

【Hello mysql】 mysql的约束

Mysql专栏:Mysql 本篇博客简介:介绍mysql的约束 mysql的约束 表的约束空属性默认值列描述zerofill主键自增长唯一键外键总结 表的约束 为什么要有约束? 我们在收集一些数据的时候会要求该数据必须存在 比如说像是国家在登记公民信息的时候身…

【Linux | Shell】Linux 安全系统 —— 用户、组、文件权限 - 阅读笔记

目录 一、Linux 的安全性1.1 /etc/passwd 文件1.2 /etc/shadow 文件1.3 添加新用户 —— useradd1.4 删除用户 —— userdel1.5 修改用户 —— usermod、passwd、chpasswd 二、使用 Linux 组2.1 /etc/group 文件2.2 创建新组 —— groupadd2.3 修改组 —— groupmod 三、理解文…

Swagger-Bootstrap-UI

Swagger-Bootstrap-UI 是一个为 Swagger 提供美观、易用的界面展示和增强功能的开源项目。它通过自定义样式和交互,提供了更好的文档展示和交互体验,包括美化的界面、接口测试工具、在线调试、文档导出等功能。 更高阶的有Knife4j,Knife4j是一个集Swagg…

免费 Selenium各大浏览器驱动【谷歌chrme、火狐Firefox、IE浏览器】

aardio群 625494397 废话不多说 直接开整! 竟然还有脸收费 服了 下载对应版本的浏览器驱动 目标网址 应用场景 Selenium库涉及到 安装selenium库 pip install selenium-i https://mirrors.aliyun.com/pypi/simple/下载对应浏览器驱动 https://registry.npmmirror.c…

水电站运行数据3D可视化展示方便管理运维

水电站是现代能源体系中的重要组成部分,对于保障国家能源安全和经济发展具有重要的意义。然而,由于水电站的建设和管理涉及到大量的技术和专业知识,许多人对水电站的运行和维护存在许多疑惑和困惑。为了解决这些问题,我们引入了全…

TCP 重传机制 滑动窗口 流量控制 拥塞控制 学习总结!

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 这篇博客主要记录 tcp 的基础知识的学习总结相关内容!备注:图片均来自作者:小林哥 tcp 的三大特性 tcp 大家都不陌生&#xff0c…

Work20230705

//main.c #include "uart4.h" extern void printf(const char *fmt, ...); void delay_ms(int ms) {int i,j;for(i 0; i < ms;i)for (j 0; j < 1800; j); }int main() {while(1){//将获取到的字符1发送到终端//hal_put_char(hal_get_char()1);hal_put_string…

chatGPT之100个例子-从体验到精通

简介 本博文演示了100个chatGPT在各行各业的使用例子,全部看完有助于培养chatGPT解决问题的思维。 在人工智能时代,智能软件并不会淘汰人类,淘汰人类的是会使用人工智能的人! 我们直接使用openAI官方chatGPT,生动演示了chatGPT的一些妙用! 请仔细看完,一定会有收获! 每…

[期末网页作业]-精仿华为官网10个网页(html+css+js)

经过漫长的期末考试季节&#xff0c;我成功地完成了一个华为官网的仿写项目&#xff0c;并且非常高兴地与大家分享。这个项目包含了10个页面&#xff0c;每一个页面都经过了精心的设计和努力的填充。 首先&#xff0c;我注重了页面的整体布局与设计。借鉴了华为官网的风格&…

apache php mysql python 环境部署与离线安装deb包

文章目录 1.背景介绍2. 主要涉及操作2.1 安装系统&#xff1a;2.2 apache mysql php安装2.3 配置2.4 python相关库安装 3. 操作记录3.1 软件安装3.2 读取文件内容后进行文件内容抽取3.3 执行以上的sh脚本3.4 所学3.5 打包发送 4. 参考文献 1.背景介绍 使用的系统为ubuntu18.04…

vscode安装+配置+使用+调试【保姆级教程】

1. VScode是什么 Visual Studio Code简称VS Code&#xff0c;是一款跨平台的、免费且开源的现代轻量级代码编辑器&#xff0c;支持几乎主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性&#xff0c;也拥有对git的开箱即…

架构师进阶之路 - 微服务怎么划分

目录 微服务划分目标 业务、技术、团队导向规划服务 领域检查 依赖DAG检查 分布式事务检查 性能分布检查 稳定&#xff08;易变&#xff09;性检查 调用链检查 微服务划分目标 我们常说服务的合理划分是微服务成功的重中之重&#xff0c;一个合理的服务划分应该符合一下…

Linux性能优化实践——CPU上下文

CPU上下文切换 Linux是一个多任务操作系统&#xff0c;它支持远大于CPU数量的任务同时运行。这些任务不是真正意义上的并行运行&#xff0c;而是系统在短时间内&#xff0c;将CPU轮流分配给它们&#xff0c;造成任务同时运行的错觉。 CPU需要知道任务从哪里加载&#xff0c;从…