DOT slam论文翻译

news2024/9/22 7:27:44

DOT:视觉SLAM的动态目标跟踪

摘要 - 在本文中,我们提出了DOT(动态目标跟踪),这是一个添加到现有SLAM系统中的前端,可以显着提高其在高动态环境中的鲁棒性和准确性。DOT结合实例分割和多视图几何来生成动态对象的掩模,以允许基于刚性场景模型的SLAM系统在优化时避免此类图像区域。
为了确定哪些对象实际上在移动,DOT首先分割潜在动态对象的实例,然后,随着估计的相机运动,通过最小化照片度量重投影误差来跟踪这些对象。相对于其他方法,这种短期跟踪提高了分割的准确率。最后,只生成实际的动态蒙版。我们使用ORB-SLAM 2[1]在三个公共数据集中评估DOT。我们的研究结果表明,我们的方法显著提高了ORB-SLAM 2的精度和鲁棒性,特别是在高动态场景中。

1.引言

同时定位与制图(Simultaneous Localization and Mapping,简称SLAM)是机器人平台自主导航的基本能力之一[4]。它的目标是根据嵌入式传感器的信息,对机器人的运动和周围环境的地图进行联合估计。视觉SLAM,其传感器主要或完全是摄像头,是最具挑战性的相关配置之一。
尽管SLAM在过去二十年中取得了重大进展,但大多数最先进的系统仍然假设静态环境,其中场景点之间的相对位置不会改变,唯一的运动是由相机完成的。基于这一假设,SLAM模型将视觉变化完全归因于相机的相对运动。一种常用的方法[5],[1]是将动态区域建模为离群值,在姿态跟踪和地图估计过程中忽略它们。然而这几个方法直到这些动态区域作为离群值被丢弃,它们的数据才会被用于SLAM优化,从而在地图和相机姿态的估计中引入误差和不一致。此外,对于基于特征的SLAM方法,跟踪少量显著图像点,相对少量的动态区域匹配产生的误差是相关的,并可能导致系统故障。机器人或AR系统必须运行的世界和实际应用远不是静态的。我们可以以汽车或无人机的自主导航、拥挤场景中的AR甚至行星探索任务为例,在这些任务中,糟糕的纹理使SLAM系统在阴影或其他机器人的存在下变得不稳定。因此,对于许多应用程序来说,开发足够健壮的SLAM系统以在高动态环境中运行是必不可少的。
如图1所示,这项工作旨在开发一种图像处理策略,以提高视觉SLAM系统在动态环境中的鲁棒性。我们的具体贡献是动态对象跟踪(DOT)的开发,这是一个前端,它结合了实例分割和多视图几何来跟踪相机运动,以及动态对象的运动,使用直接方法[6]。预处理的结果是一个包含每个图像的动态部分的掩模,SLAM系统可以使用它来避免在这些区域产生匹配。
在这里插入图片描述

我们在三个不同的公共数据集上的实验结果表明,我们的语义分割和几何引导跟踪的组合在动态场景中表现优于目前的技术水平。我们还发现DOT作为一个独立的前端模块实现,因此易于插入现有的SLAM系统。由于DOT包含短期掩码跟踪,我们避免了序列中所有帧的分割,大大节省了计算量。最后,尽管我们针对汽车导航的特定领域调整和评估了DOT,但我们的策略对其他应用程序也是有效的。

2.相关工作

动态环境中的SLAM是一个开放的研究问题,有大量的科学参考文献。我们将把不同的方法分为三大类。
第一类,也是最普遍的一类,将场景建模为一组非刚性部件,因此包括可变形和动态对象[7][8][9]。虽然这条研究路线是最普遍的,但也是最具挑战性的。在本文中,我们将假设对象内刚性,这是其他两类动态视觉SLAM的前提。
第二类旨在通过仅重建场景的静态部分来提高视觉SLAM的准确性和鲁棒性。在相机姿态跟踪和地图估计中,动态目标被分割出来并被忽略。沿着这条路线,建立在ORB-SLAM2[1]之上的DynaSLAM[10]旨在估计场景静态部分的地图,并在长期应用中重用它。通过结合1)潜在移动对象的语义分割和2)检测刚性模型中不一致性的多视图几何来去除动态对象。掩码R-CNN[11]用于语义分割,它检测场景中的物体并将其分类为不同的类别,其中一些类别已被预先设置为潜在动态(例如,汽车或人)。DynaSLAM被设计用来掩盖场景中所有潜在的移动物体,如[10]所示,在包含潜在移动物体但实际上没有移动的场景中(例如,有许多停放的汽车的场景),其精度低于原始ORB-SLAM2。这项工作的目的正是为了克服这个问题,因为只有那些在那个精确时刻运动的物体才会被标记为动态的。另一项具有类似方法的工作是StaticFusion[12],这是一个密集的RGB-D视觉SLAM系统,其中通过使用场景背景的3D重建作为传播场景静态部分的时间信息的一种方式来执行分割。
最后,动态视觉SLAM的第三行工作超出了对动态对象的分割和抑制,包括MID-Fusion[13]、MaskFusion[14]、DynSLAM[15]和ClusterVO[16]等。他们的目标是同时估计相机和多个动态对象的姿态。为此,在MID-Fusion[13]和MaskFusion[14]中,创建每个可能移动物体的子地图,并对物体和相机姿势进行联合估计。
提到的大多数系统[13][14][15][16][10]涉及深度学习方法,由于分割网络的有限频率造成的瓶颈,目前在某些情况下无法实时实现。在这项工作中开发的贡献消除了对所有帧进行分割的要求,这使得系统能够独立于网络的分割频率,从而使其能够实时实现。

3.DOT

A.系统概览

图2显示了我们提案的概述。DOT的输入是RGB-D或一定视频速率的立体图像,其输出是对场景的静态和动态元素进行编码的掩模,可以直接被SLAM或里程计系统使用。在这里插入图片描述
第一个块(实例分割)对应于按像素分割出所有潜在动态对象的CNN。在我们使用自动驾驶数据集完成的实验中,只有汽车被分割为潜在的移动。稍后会详细说明,因为DOT从一帧到另一帧跟踪蒙版,所以这个操作不需要在每一帧都做。
图像处理块提取并分离属于图像静态区域的点和位于动态对象中的点。相机的位姿只使用场景的静态部分进行跟踪,从这个块中,考虑到相机位姿,每个分割对象的运动被独立估计(对象跟踪)。
下一个块(物体在运动吗?)使用几何方法确定被网络标记为潜在动态的物体是否确实在运动。此信息用于更新编码每个帧的静态和动态区域的掩码,并反馈给的里程计/SLAM视觉系统。
最后,DOT从物体运动的估计中生成新的掩码(掩码传播),因此不是每个帧都需要由网络分割(见图3)。鉴于实例分割的显著降低计算负载,与其他最先进的方法相比,这可能是DOT的一个相关优势。
在这里插入图片描述

B.实例分割

我们使用带有Mask R-CNN R50-FPN 3x[17]的COCO实例分割基线模型[18],该模型由Detectron2[3]训练,用于分割图像中存在的所有潜在可移动实例。对网络的输出进行了修改,以在单个图像中获得所有的分割掩码。未被划分为潜在移动类别的图像区域被赋予背景标签,并在随后的块中被视为静态。这些类别仅限于那些被认为是刚性对象和潜在的可移动对象,因此将人类排除在跟踪之外。如果需要其他类别,网络可以使用这些权重作为起点进行微调,或者使用自己的数据集从头开始训练。
为了在多个帧中一致地跟踪对象,我们在DOT计算的掩码和由net提供的掩码之间包含了一个匹配步骤。不匹配任何现有对象的新检测用于初始化新实例。

C.相机和目标跟踪

从前一步的实例分割中,我们的目标是估计相机和动态物体的运动。由于相机的运动和物体的运动在图像中是耦合的,所以我们采用两步的方法进行估计。首先,我们找到相机的姿态作为一个相对变换 T c ∈ S E ( 3 ) T_c\in SE(3) TcSE(3),然后我们利用它来估计物体的运动到 T o ∈ S E ( 3 ) T_o\in SE(3) ToSE(3)。我们的优化与最近的直接视觉里程计和SLAM方法有关[6],其目的是找到最小化光度重投影误差的运动。
优化。我们对相机姿态和随后的物体运动估计都使用高斯-牛顿方法
在这里插入图片描述
这里 J ∈ R n × 6 J\in \mathbb R^{n \times6} JRn×6包含残差函数的导数(式(3)和式(5)), ∑ r ∈ R n × n \sum_r \in\mathbb R^{n \times n} rRn×n是包含光度残差 r ∈ R n r \in \mathbb R^n rRn的协方差的对角矩阵。李代数的位姿增量 x ^ s e 3 ∈ s e 3 \hat x_{se3}\in se3 x^se3se3 ⋅ ^ s e 3 \hat {\cdot}_{se3} ^se3是向量到切空间的矩阵表示的映射算子[19],被表示为向量 x ∈ R 6 x\in \mathbb R^6 xR6。我们使用左矩阵乘法和指数映射算子exp(·)来更新变换。这两种算法都是用一个恒定的速度模型和一个多尺度金字塔图像来初始化,以帮助收敛。
相机跟踪。假设相机校准和点深度已知,使用来自静态场景区域P的高梯度像素的稀疏子集和多视图约束[20]来估计相机运动。静态点 p ∈ P p\in P pP从参考帧 F j F_j Fj中的像素坐标 p j p^j pj到帧 F i F_i Fi的匹配坐标 p i p^i pi的投影如下:
在这里插入图片描述
这里 π \pi π π − 1 \pi^{-1} π1对应于透视投影和反向投影模型, z j z_j zj为该点在参照系 F j F_j Fj中的深度。通过最小化光度重投影误差来优化相机位姿:
在这里插入图片描述
它被计算为参考帧中所有点之间的强度差和它们在被跟踪帧中的投影。我们用Huber范数γ。
目标跟踪。一旦估计了 T c T_c Tc,就可以使用属于该对象的图像高梯度像素 Q o Qo Qo的子集来类似地估计每个潜在动态对象的位姿。将潜在的动态对象建模为具有姿态 T o T_o To的实体,帧 F j F_j Fj中的每个点 p ~ \tilde p p~到帧 F i F_i Fi中的坐标的投影为
在这里插入图片描述
与公式3类似,我们通过最小化以下光度重投影误差来估计 T o T_o To
在这里插入图片描述

D.追踪质量、异常值和遮挡

遮挡、光照条件的变化和分割误差对物体和相机姿态的精度有显著影响。正如在算法1中所看到的,我们开发了几个策略,我们在目标跟踪步骤之后应用这些策略来减少它们的影响。
在这里插入图片描述

跟踪质量。动态目标的外观变化很大,增加了跟踪误差。我们使用Pearson相关系数 φ o ∈ [ − 1 , 1 ] φ_o\in [-1,1] φo[1,1]来建模外观相似性。该度量反映了参考强度与其相应估计值之间的线性相关程度,因此对增益和偏移变化是不变的。请注意,这也可以应用于相机跟踪 φ c φ_c φc,尽管背景外观的变化通常不太明显。
离群值拒绝。通常,使用光度误差的绝对阈值来拒绝异常值。更复杂的作品[6]根据中值残余,运动模糊或照明变化来调整它。如图4所示,我们建议相对于强度之间的线性关系设置一个阈值,使误差与图像的光度变化无关。
在这里插入图片描述
遮挡。动态对象可能相互遮挡。去除遮挡部分作为异常值在我们的研究中是不够的。我们实施了一种策略,包括从最近到最远跟踪物体,依次更新它们各自的掩模。通过这种方式,我们在每次迭代中更新被较近物体遮挡的较远物体的点。

E.目标在运动吗?

该块接收相机 T c T_c Tc和物体 T o T_o To的变换矩阵作为输入,并估计物体是否在移动。SLAM或里程计系统使用的输出是掩模,用于存储动态物体所占用的图像区域以及它们是否处于运动状态。掩模是通过使用前一步估计的 T c T_c Tc T o T_o To将每个对象的像素投影到新帧中来获得的。
在图中直接观察物体运动,由于图像噪声的传播,很难建立确定物体是否运动的绝对阈值。在这项工作中,我们选择使用二维图像测量来观察物体的运动。我们将度量表示为动态视差,即点的投影(如果它是静态 p i p^i pi)与其实际投影 p ~ i \tilde p^i p~i之间的距离(以像素为单位)。对于每个对象,我们计算这个点 p ~ ∈ Q \tilde p \in Q p~Q的动态差异中值 d d = m e d ∣ ∣ p i , p ~ i , ∀ p ~ ∈ Q d_ d=med{||p^i,\tilde p^i,\forall \tilde p \in Q} dd=med∣∣pi,p~i,p~Q,一个点的三维运动产生不同的图像运动,这取决于1)它的图像坐标,2)它的深度,以及3)物体方向与相机运动之间的相对角度。从非线性位姿优化(见式(1))中,我们可以推导出物体运动估计中的不确定性 ∑ x = ( J T ∑ r − 1 J ) − 1 \sum_x=(J^T \sum^{-1}_rJ)^{-1} x=(JTr1J)1。假设一个k维高斯分布,它的微分熵为 H ( x o ) = 1 2 l o g ( ( 2 π e ) k ∣ ∑ x o ∣ ) H_(xo) = \frac{1}{2}log((2\pi e)^k|\sum_{}xo|) H(xo)=21log((2πe)kxo)
微分熵可以看作是由光度残差最小化得到的位姿不确定性。换句话说,高熵的运动观测会导致图像像素的大偏移(如图5所示)。相反,低熵的观测会产生较小的图像差。在这里插入图片描述
基于此,物体运动分类算法的工作原理如下:我们将动态差异与随熵平滑增长的可变阈值 Δ d = f ( H ( x ) ) \Delta d= f(H(x)) Δd=f(H(x))进行比较。我们将动态视差超过这个阈值 ( d d > d ) (d_d> d) (dd>d)的所有物体标记为运动中。对于每个低于熵阈值 H m i n H_{min} Hmin的值,我们假设无法观察到物体的运动。因此,将物体标记为静态需要运动是可观察到的 ( H ( x ) > H m i n ) (H(x) >H_{min}) (H(x)>Hmin),并且动态视差的中位数小于可变阈值 ( d d < Δ d ) (d_d<\Delta d) (dd<Δd)
虽然选择最优的功能配方还需进一步研究,但该表达式符合要求,并在本工作中显示出良好的效果(见第四节)。图3是DOT传播掩模的示例。标记为运动的对象以彩色表示,而标记为静态的对象则以黑色消失。用灰色表示的汽车既不能确定是静态的,也不能确定是动态的。

F.掩膜传播

为了将同一3D物体的不同帧的实例关联起来,DOT将神经网络产生的掩码与通过多视图方程和计算的相机和物体姿态投影前一帧的像素传播的掩码重叠。
状态传播。将新的语义实例与先前存在的对象联系起来,使我们能够预测它们的运动(这对于快速移动的对象至关重要)。此外,在物体移动到运动不可观测位置的情况下,运动状态可以保持(见第III-C节)。
独立的细分。我们的建议允许从初始种子开始随着时间和空间传播语义分割掩码,从而消除了对每帧进行分割的需要。在较低频率下运行神经网络有助于在低端平台上实时跟踪目标。作为一个额外的好处,DOT能够填补网络在连续图像之间暂时失去对象实例化的空白。

4.实验结果

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

5.结论

DOT算法是一种基于实例分割和多视图几何方程的SLAM系统前端算法,能够对运动目标进行鲁棒检测和跟踪。我们在三个用于自动驾驶研究的公共数据集中使用ORB-SLAM2进行了评估[2],[21],[22],结果表明,dot生成的物体运动信息使我们能够对动态内容进行分割,显著提高了其鲁棒性和准确性。
DOT与SLAM的独立性使其成为一个通用的前端,可以通过最小的集成工作适应任何最先进的视觉里程计或SLAM系统。与其他系统不同,DOT掩码跟踪降低了分割的速率,减少了相对于最新技术的计算需求。

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

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

相关文章

实现 Rollup 插件alias 并使用单元测试提高开发效率

本篇文章是对 实现 Rollup 插件 alias | 使用 TypeScript 实现库的基本流程 | 使用单元测试提高开发效率 的总结。其中涉及到开发一个组件库的诸多知识点。 实现一个经常用的 rollup 插件 alias 首先执行npm init命令初始化一个package.json文件&#xff0c;因为插件使用了ty…

DevOps系列文章之Argo CD 使用

一、什么是 argo cd Argo CD 是用于 Kubernetes 的声明性 GitOps 连续交付工具。 二、为什么使用 argo cd Argo CD 可在指定的目标环境中自动部署所需的应用程序状态&#xff0c;应用程序部署可以在 Git 提交时跟踪对分支&#xff0c;标签的更新&#xff0c;或固定到清单的特…

测试开发之路 ---- 可读性,可维护性,可扩展性

目录 前言 测试框架与测试脚本的目标&#xff08;部分&#xff09; 分层 使用类似 xml 这种可扩展性强的语义存储数据 代码复用&#xff1a;抽象一切可抽象的&#xff0c;减少一切可能的代码相似与重复 活用 java 注解和反射&#xff08;python 中应该也有相关的机制&…

如何从视频中提取音频?分享三个免费的方法给大家!

在数字时代&#xff0c;视频和音频的使用越来越广泛。有时&#xff0c;您可能希望从视频中提取音频&#xff0c;以便单独使用或与他人分享。无需购买昂贵的软件或具备专业技能&#xff0c;下面将介绍三种免费的方法&#xff0c;帮助您从视频中提取音频。这些方法简单易行&#…

Unity学习笔记--siki学院保卫萝卜

生命周期&#xff1a; 在同一个脚本中的执行先后顺序&#xff1a;先左后右 Inspector 赋值 > 外部调用 > Awake > OnEnable > Start 脚本对象的失活与激活不作用于Awake方法&#xff0c;当方法中只有Awake方法时&#xff0c;控制脚本激活失活的对勾会消失掉 当…

vue3 中ref的函数用法

简介 这里说的ref不是响应式ref,是用在组件身上的ref标识&#xff0c;一般都是ref“某一个字符串”&#xff0c;本文介绍第二种用法&#xff0c;ref“()>{}”,对没错&#xff0c;ref可以等于一个回调函数 ref可以是一个回调 <el-input:ref"(vc: any) > (inputAr…

lwip-2.1.3自带的httpd网页服务器使用教程(三)使用CGI获取URL参数(GET类型表单)

上一篇&#xff1a;lwip-2.1.3自带的httpd网页服务器使用教程&#xff08;二&#xff09;使用SSI动态生成网页部分内容 认识URL参数 在上网的时候&#xff0c;我们经常会见到在网址后面带有?AB&CD这样的语法格式。例如&#xff1a;https://blog.csdn.net/ZLK1214/articl…

OpenCV的HSV颜色空间在无人车中颜色识别的应用

RGB属于三基色空间&#xff0c;是大家最为熟悉的&#xff0c;看到的任何一种颜色都可以由三基色进行混合而成。然而一般对颜色空间的图像进行有效处理都是在HSV空间进行的&#xff0c;HSV(色调Hue,饱和度Saturation,亮度Value)是根据颜色的直观特性创建的一种颜色空间, 也称六角…

如何撤销git上一次的commit(或已push)

如何撤销git上一次的commit&#xff08;或已push&#xff09; 当多人开发时&#xff0c;我们本地commit后&#xff0c;刚要push&#xff0c;发现忘记pull最新代码&#xff0c;此时会有冲突push失败&#xff0c; 我们想要撤销最近的一次commit 我们先简单介绍一下git git有三大…

GreenPlum数据库日常维护

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61…

使用 YOLOv8 和 Streamlit 构建实时对象检测和跟踪应用程序:第3部分:添加跟踪算法

介绍 对象跟踪是随着时间的推移识别一系列帧中的特定对象或多个对象的过程。它涉及定位对象在每个帧中的位置并跟踪其跨帧的移动。对象跟踪在各个领域都有广泛的应用,包括监控、机器人、自动驾驶、运动分析等。 跟踪算法使用各种技术(例如颜色直方图、运动分析、深度学习等)…

【多线程】(二)线程安全问题与线程同步

文章目录 一、多线程带来的风险1.1 观察线程不安全1.2 线程安全概念1.3 线程不安全的原因1.4 线程安全的解决方法 二、synchronized关键字2.1 synchronized 的特性2.2 synchronized 使用示例2.3 Java 标准库中的线程安全类 三、volatile关键字3.1 保证内存可见性3.2 禁止指令重…

Java反射的应用:动态代理

代理设计模式的原理 使用一个代理将对象包装起来, 然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。 对于静态代理&#xff0c;特征是代理类和目标对象的类都是在编译期间确定下来&#xff0c;不利于程…

基于FPGA的按键消抖

文章目录 基于FPGA的按键消抖一、按键消抖原理二、按键消抖代码三、仿真代码编写四&#xff1a;总结 基于FPGA的按键消抖 一、按键消抖原理 按键抖动&#xff1a;按键抖动通常的按键所用开关为机械弹性开关&#xff0c;当机械触点断开、闭合时&#xff0c;由于机械触点的弹性…

怎么使用Netty解码自定义通信协议

网络协议的基本要素 一个完备的网络协议需要具备哪些基本要素 魔数&#xff1a;魔数是通信双方协商的一个暗号&#xff0c;通常采用固定的几个字节表示。魔数的作用是防止任何人随便向服务器的端口上发送数据。协议版本号&#xff1a;随着业务需求的变化&#xff0c;协议可能…

SAP顾问生涯闲记:在SAP工作是什么体验

又有一段时间没更新自己的公众号了&#xff0c;为什么突然决定新开一篇SAP顾问生涯闲记系列的文章呢&#xff0c;是因为最近很荣幸地当选了SAP雇主品牌推广大使&#xff0c;作为SAP官方的推广大使在收获这份荣誉的同时&#xff0c;也承担了一些工作以及责任。 集结完毕︱SAP雇…

Flask_实现token鉴权

目录 1、安装依赖 2、实现代码 3、测试 源码等资料获取方法 1、安装依赖 pip install flask pip install pycryptodome 2、实现代码 import random import string import time import base64from functools import wrapsfrom flask import Flask, jsonify, session, req…

苍穹外卖day02——员工管理功能代码开发+分类管理代码导入

目录 新增员工——需求分析与设计 产品原型 接口设计: 数据库设计: 新增员工——代码开发 在Controller层中 在Service层中 在Mapper层中 功能测试 接口文档测试: 前后端联调测试: 新增员工——代码完善 ​编辑 第一个问题 第二个问题 员工分页查询 需求分析与设计 …

PostgreSQL考试难不难 ?

当涉及到PostgreSQL考试的详细难度&#xff0c;以下是一些可能涉及的主题和考点&#xff0c;这些主题在不同的考试中可能有所不同&#xff1a; 1.数据库基础知识&#xff1a;数据库的基本概念、关系型数据库模型、表、字段、主键、外键等。 2.SQL语言&#xff1a;对SQL语言的掌…