目标跟踪 | 3D目标跟踪高级入门!

简介: 在本文中,我将探讨3D跟踪领域,并向您展示如何设计一个3D目标跟踪系统。我们将从平面的2D 开始,然后转移到3D,将看到2D 和3D 跟踪之间的区别。

1引子



当我从事自动驾驶工作的时候,曾经接到了一个任务: 指导一组感知实习生。

在我预见到的所有项目中,有一个项目非常突出,它来自于一个工程实习生,他写了一篇关于基于相机的3D目标检测的论文。当时,我们只有2D目标检测,而且正在集成2D目标跟踪。但自从看了这篇论文,我们就在考虑进行全3D目标跟踪。


当你环顾 LinkedIn,会发现大多数目标跟踪应用程序都是2D 的。但是现实世界是3D 的,无论是在跟踪汽车、人、直升机、导弹,还是在做增强现实(AR),都需要使用3D。


在 CVPR 2022(计算机视觉和模式识别)会议上,看到了大量的3D 目标检测论文,而且开始看到越来越多的论文提交给像 IEEE (电气与电子工程师学会)或《国际计算机视觉杂志》这样的机构。


在本文中,我将探讨3D跟踪领域,并向您展示如何设计一个3D目标跟踪系统。我们将从平面的2D 开始,然后转移到3D,将看到2D 和3D 跟踪之间的区别。


2什么是3D目标跟踪?



目标跟踪是指随着时间的推移对目标在空间中的位置和方向进行定位和跟踪。它包括在一系列图像(或点云)中检测一个目标,然后在随后的帧中预测它的位置。


我们的目标是持续地估计目标的位置和方向,即使在遮挡、相机运动和不断变化的光照条件下也是如此。

很多人提到使用多目标跟踪进行跟踪,跟踪领域实际上是更广泛的,涉及的主题,如特征跟踪或光流。然而,最常见的方法是通过2D 多目标跟踪; 在本文中,我想讨论3D目标跟踪这个问题。

640.png


在关于2D跟踪的文章中,我谈到了2D目标检测,然后使用匈牙利算法和 Kalman 滤波进行跟踪。在本文中,我们将看到如何从目标检测开始将其扩展到3D。


3从2D到3D目标检测



我们大多数人都习惯了2D目标检测,这个任务是从图像中预测感兴趣目标(比如汽车、行人、自行车等)的边界框坐标。虽然2D目标检测可能是整个计算机视觉领域中最流行的技术,但当你想在现实世界中使用它时,它还缺少很多信息。

第一个在3D 中改变的元素是边界框。


从2D 到3D 边界框


这个部分可以让不止一个人感到困惑,但是3D框确实不同于2D 框。我们不是仅仅预测一个图像帧中的4个像素值,我们是在相机帧中,预测像精确的 XYZ 位置(包含深度) ,框的长度和深度,以及偏航(yaw),俯仰(pitch)和滚动(roll)角。2D 对3D目标检测,注意我们还需要多少参数来预测和跟踪!

640.png


为了简化问题,我们总是可以假设一些值是恒定的,比如俯仰和滚动(想象一下在像旧金山这样的城市里没有“俯仰速率”) ,但是3D 边界框是以自然为导向的。


我们在 KITTI 数据集中看到了下面这张图片,请注意我添加的方向: 与2D 不同,每个3D 目标框都需要一个“偏航”方向参数。


640.png


在2D 中,你不需要预测这些方向,而且你的目标框要简单得多。但是如果你做3D 目标跟踪,你需要处理3D框。接下来,让我们看看如何生成这些框。


计算机视觉中生成3D目标框


如果使用相机,3D 目标检测可以基于单个图像,也可以基于双目视觉设置。通常,算法使用包括发送一个图像到一个模型,直接输出一个框。

一个使用YOLO3D 算法进行单目3D 的例子:

640.png


无论是单目还是双目,许多目标检测器都是以3D 形式存在的,而且大多数公司已经在相机上使用了3D 目标检测。


额外收获 : 基于相机的3D 目标检测快速列表:

3D Bounding Box Estimation Using Deep Learning and Geometry (我的实习生, 2017),

M3D-RPN: Monocular 3D Region Proposal Network for Object Detection (2019),

FCOS3D: Fully Convolutional One-Stage Monocular 3D Object Detection (2021)。


从点云生成3D目标框


使用激光雷达时,我们将使用像 Point-RCNN 这样的算法,从点云输出3D 框。例如,这里有一个叫做3D Cascade R-CNN 的算法,它利用激光雷达进行3D 目标检测。


640.gif

一些激光雷达探测算法快速列表: AVOD (2018)、 Frustum PointNet (2018)、 PointrCNN (2019)、 IOU (2020)、 PV-rCNN (2021)、 Cas-A (2022)。

接下来,让我们开始跟踪:


43D跟踪: 你如何3D跟踪一个目标?



在目标跟踪领域,通常有两种方法:

分离跟踪器 ーー通过检测进行跟踪,首先使用目标检测器,然后一张图一张图的跟踪其输出。


联合跟踪器 ーー通过向深度学习模型发送2幅图像(或点云)来进行联合检测和3D 目标跟踪。既然我们已经在目标检测上花了很多时间,那么让我们继续讨论3D 目标框。


从3D目标检测进行3D目标跟踪


在2D目标跟踪(独立的跟踪器)中,跟踪pipeline如下:

给定连续两个时间步长的检测结果:

  1. 以2D形式计算 IOU (或任何其他代价,如框的形状或外观指标)
  2. 将其放入二分图算法,如匈牙利算法。
  3. 关联最高匹配并设置颜色/id号
  4. 使用卡尔曼滤波器来预测下一个位置(从而在下一步有一个更准确的关联)


我们将在3D 中也如上面一样做,但有两件事情会改变:

  1. IOU
  2. 卡尔曼滤波器

匈牙利算法告诉哪个是用于 MOT 任务,将保持不变。


为什么匈牙利算法不应该改变


当我们跟踪一个边界框时,通常做的是计算2个重叠框从一个图像到另一个图像的 IOU (交并比)。如果 IOU 很高(框重叠),那么这意味着目标是相同的,它移动了一点,因此应该跟踪它。如果不是,那就意味着它是另一个目标。我们也可以用二分图来跟踪多个目标。如下图中2D检测和2D跟踪,前面的框被记住,用于匹配。

640.png


匈牙利算法的目标是获取2个障碍列表物list(来自 t-1和 t时刻),并根据cost返回关联。这个cost可以是IOU,但是无论是2D 还是3D IOU,关联步骤都是完全相同的。

来自2个连续帧的匈牙利算法cost图示例:

640.png


3D IOU介绍


IOU是时间(t-1)的框与时间(t)的框有多少重叠。虽然它不足以保证2框应该匹配,但这是最流行的因素,可以很容易地设置。


如果我们想从2D 转移到3D,必须了解如何计算3D IOU,所以现在不比较面积,而是比较体积

这里有一个很酷的图片来可视化2D 和3D IOU 之间的差异:

640.png


今天,3D IOU有许多一行的实现存在,真的只是交集除以并集。

虽然3D IOU是一个很酷的度量标准,但它远非唯一可以使用的,而且对于遥远的目标可能会失败。另一方面,还可以使用点云距离(倒角损失)、方位差甚至质心的欧几里得度量等其他指标。


消失的重叠问题


在2D 中,重叠是一个问题,因为汽车可以重叠,即使它们彼此相距很远。但是在3D 中,这个问题就消失了。因为是在3D 中,我们知道有些框不会重叠,即使它们在平面图像中看起来是重叠的。在3D 中,重叠不是问题,因为现在已经使用了深度。

640.png


让我们暂停一下: 到目前为止,我们已经看到应该:

  1. 获取两个连续的时间步长的3D 框
  2. 计算两个框列表的3D IOU,受益于匈牙利算法(得到了正确的颜色和 ID)

所有剩下的就是使用卡尔曼滤波器,将预测下一步。


5使用3D卡尔曼滤波器



什么是2D卡尔曼滤波器?


一个2D卡尔曼滤波器是一个算法,输入2个坐标,在历史信息的基础上预测下一个位置。这是一个迭代算法,这意味着它存储前一个值的内存,并随着时间的推移继续。在2D MOT 中,用它来预测目标框中心的下一个位置(也可以预测框的所有4个坐标)。

为此,我们使用两个变量: 平均值 μ 和标准差或不确定性 σ。用一个2D高斯表示边界框,并且使用一个预测/更新循环。卡尔曼滤波器的预测、测量和更新曲线如下:

640.png


什么是3D 卡尔曼滤波器?


当我们在3D空间时,至少可以做一个3D 卡尔曼滤波器,这意味着跟踪 x、 y 和 z。使用2D和3D卡尔曼滤波器时平均值和标准差矩阵的形状:

640.png


不确定性(这里使用的是随机数)可能很难处理,但这是我们在进行3D目标跟踪时需要做的最低限度。我们现在已经得到了所需要的一切,所以让我们总结一下吧!


6总结



  1. 3D目标跟踪是关于跟踪真实世界中目标的技术
  2. 3D目标检测可以通过相机、LiDAR或RADAR完成。它只用于生成框。
  3. 对于每个目标,我们的检测器将返回一个3D边界框。
  4. 多目标跟踪过程与2D跟踪过程相同,只是多目标跟踪过程采用3D IOU 关联,预测过程采用3D卡尔曼滤波器。


这里有一个很酷的3D 跟踪演示:

640.png


3D目标跟踪是感知领域中最引人入胜的领域之一。在自动驾驶汽车中,这是“规划”之前的最后一步。当我们谈论3D,当加上时间的概念,就是4D!


这张思维导图可以提醒我们所看到的一切,橙色的部分就是今天所讲到的内容。

640.png


7参考



[1]. https://www.thinkautonomous.ai/blog/3d-object-tracking/


原文首发微信公众号【自动驾驶之心】:一个专注自动驾驶与AI的社区(https://mp.weixin.qq.com/s/NK-0tfm_5KxmOfFHpK5mBA

相关文章
|
传感器 并行计算 算法
多传感器感知原理解读 | BEVFusion解读(一)
多传感器感知原理解读 | BEVFusion解读(一)
1122 0
|
存储 数据采集 传感器
一文多图搞懂KITTI数据集下载及解析
一文多图搞懂KITTI数据集下载及解析
15850 3
一文多图搞懂KITTI数据集下载及解析
|
机器学习/深度学习 存储 并行计算
一篇就够:高性能推理引擎理论与实践 (TensorRT)
本文分享了关于 NVIDIA 推出的高性能的深度学习推理引擎 TensorRT 的背后理论知识和实践操作指南。
14678 9
一篇就够:高性能推理引擎理论与实践 (TensorRT)
|
传感器 机器学习/深度学习 人工智能
史上最全综述 | 3D目标检测算法汇总!(单目/双目/LiDAR/多模态/时序/半弱自监督)(下)
近年来,自动驾驶因其减轻驾驶员负担、提高行车安全的潜力而受到越来越多的关注。在现代自动驾驶系统中,感知系统是不可或缺的组成部分,旨在准确估计周围环境的状态,并为预测和规划提供可靠的观察结果。3D目标检测可以智能地预测自动驾驶车辆附近关键3D目标的位置、大小和类别,是感知系统的重要组成部分。本文回顾了应用于自动驾驶领域的3D目标检测的进展。
史上最全综述 | 3D目标检测算法汇总!(单目/双目/LiDAR/多模态/时序/半弱自监督)(下)
|
12月前
|
人工智能 JSON API
使用 Qwen 生成数据模型和进行结构化输出
本教程展示如何使用CAMEL框架和Qwen模型生成结构化数据。CAMEL是一个强大的多智能体框架,支持复杂的AI任务;Qwen由阿里云开发,具备自然语言处理等先进能力。教程涵盖安装、API密钥设置、定义Pydantic模型,并演示了通过Qwen生成JSON格式的学生信息。最后,介绍了如何利用Qwen生成多个随机学生信息的JSON格式数据。欢迎在[CAMEL GitHub](https://github.com/camel-ai/camel)上为项目点星支持。
3748 70
|
传感器 机器学习/深度学习 人工智能
超全汇总 | 基于Camera的3D目标检测算法综述!(单目/双目/伪激光雷达)
目前3D目标检测领域方案主要包括基于单目、双目、激光雷达点云、多模态数据融合等方式,本文主要介绍基于单目、双目和伪激光雷达数据的相关算法,下面展开讨论下~
超全汇总 | 基于Camera的3D目标检测算法综述!(单目/双目/伪激光雷达)
|
机器学习/深度学习
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
本文探讨了深度可分离卷积和空间可分离卷积,通过代码示例展示了它们在降低计算复杂性和提高效率方面的优势。
3052 2
深度学习笔记(十二):普通卷积、深度可分离卷积、空间可分离卷积代码
|
机器学习/深度学习 传感器 算法
单目3D目标检测 方法综述——直接回归方法、基于深度信息方法、基于点云信息方法
本文综合整理单目3D目标检测的方法模型,包括:基于几何约束的直接回归方法,基于深度信息的方法,基于点云信息的方法。万字长文,慢慢阅读~ 直接回归方法 涉及到模型包括:MonoCon、MonoDLE、MonoFlex、CUPNet、SMOKE等。 基于深度信息的方法 涉及到模型包括:MF3D、MonoGRNet、D4LCN、MonoPSR等。 基于点云信息的方法 涉及到模型包括:Pseudo lidar、DD3D、CaDDN、LPCG等。
2740 2
|
机器学习/深度学习 传感器 编解码
万字长文 | 多目标跟踪最新综述(基于Transformer/图模型/检测和关联/孪生网络)(上)
随着自动驾驶技术的发展,多目标跟踪已成为计算机视觉领域研究的热点问题之一。MOT 是一项关键的视觉任务,可以解决不同的问题,例如拥挤场景中的遮挡、相似外观、小目标检测困难、ID切换等。为了应对这些挑战,研究人员尝试利用transformer的注意力机制、利用图卷积神经网络获得轨迹的相关性、不同帧中目标与siamese网络的外观相似性,还尝试了基于简单 IOU 匹配的 CNN 网络、运动预测的 LSTM。为了把这些分散的技术综合起来,作者研究了过去三年中的一百多篇论文,试图提取出近年来研究者们更加关注的解决 MOT 问题的技术。
万字长文 | 多目标跟踪最新综述(基于Transformer/图模型/检测和关联/孪生网络)(上)
|
安全 关系型数据库 MySQL
解决:'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件。 (MySQL环境变量的配置)
解决:'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件。 (MySQL环境变量的配置)
4685 0
解决:'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件。 (MySQL环境变量的配置)