1引子
当我从事自动驾驶工作的时候,曾经接到了一个任务: 指导一组感知实习生。
在我预见到的所有项目中,有一个项目非常突出,它来自于一个工程实习生,他写了一篇关于基于相机的3D目标检测的论文。当时,我们只有2D目标检测,而且正在集成2D目标跟踪。但自从看了这篇论文,我们就在考虑进行全3D目标跟踪。
当你环顾 LinkedIn,会发现大多数目标跟踪应用程序都是2D 的。但是现实世界是3D 的,无论是在跟踪汽车、人、直升机、导弹,还是在做增强现实(AR),都需要使用3D。
在 CVPR 2022(计算机视觉和模式识别)会议上,看到了大量的3D 目标检测论文,而且开始看到越来越多的论文提交给像 IEEE (电气与电子工程师学会)或《国际计算机视觉杂志》这样的机构。
在本文中,我将探讨3D跟踪领域,并向您展示如何设计一个3D目标跟踪系统。我们将从平面的2D 开始,然后转移到3D,将看到2D 和3D 跟踪之间的区别。
2什么是3D目标跟踪?
目标跟踪是指随着时间的推移对目标在空间中的位置和方向进行定位和跟踪。它包括在一系列图像(或点云)中检测一个目标,然后在随后的帧中预测它的位置。
我们的目标是持续地估计目标的位置和方向,即使在遮挡、相机运动和不断变化的光照条件下也是如此。
很多人提到使用多目标跟踪进行跟踪,跟踪领域实际上是更广泛的,涉及的主题,如特征跟踪或光流。然而,最常见的方法是通过2D 多目标跟踪; 在本文中,我想讨论3D目标跟踪这个问题。
在关于2D跟踪的文章中,我谈到了2D目标检测,然后使用匈牙利算法和 Kalman 滤波进行跟踪。在本文中,我们将看到如何从目标检测开始将其扩展到3D。
3从2D到3D目标检测
我们大多数人都习惯了2D目标检测,这个任务是从图像中预测感兴趣目标(比如汽车、行人、自行车等)的边界框坐标。虽然2D目标检测可能是整个计算机视觉领域中最流行的技术,但当你想在现实世界中使用它时,它还缺少很多信息。
第一个在3D 中改变的元素是边界框。
从2D 到3D 边界框
这个部分可以让不止一个人感到困惑,但是3D框确实不同于2D 框。我们不是仅仅预测一个图像帧中的4个像素值,我们是在相机帧中,预测像精确的 XYZ 位置(包含深度) ,框的长度和深度,以及偏航(yaw),俯仰(pitch)和滚动(roll)角。2D 对3D目标检测,注意我们还需要多少参数来预测和跟踪!
为了简化问题,我们总是可以假设一些值是恒定的,比如俯仰和滚动(想象一下在像旧金山这样的城市里没有“俯仰速率”) ,但是3D 边界框是以自然为导向的。
我们在 KITTI 数据集中看到了下面这张图片,请注意我添加的方向: 与2D 不同,每个3D 目标框都需要一个“偏航”方向参数。
在2D 中,你不需要预测这些方向,而且你的目标框要简单得多。但是如果你做3D 目标跟踪,你需要处理3D框。接下来,让我们看看如何生成这些框。
计算机视觉中生成3D目标框
如果使用相机,3D 目标检测可以基于单个图像,也可以基于双目视觉设置。通常,算法使用包括发送一个图像到一个模型,直接输出一个框。
一个使用YOLO3D 算法进行单目3D 的例子:
无论是单目还是双目,许多目标检测器都是以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 目标检测。
一些激光雷达探测算法快速列表: AVOD (2018)、 Frustum PointNet (2018)、 PointrCNN (2019)、 IOU (2020)、 PV-rCNN (2021)、 Cas-A (2022)。
接下来,让我们开始跟踪:
43D跟踪: 你如何3D跟踪一个目标?
在目标跟踪领域,通常有两种方法:
分离跟踪器 ーー通过检测进行跟踪,首先使用目标检测器,然后一张图一张图的跟踪其输出。
联合跟踪器 ーー通过向深度学习模型发送2幅图像(或点云)来进行联合检测和3D 目标跟踪。既然我们已经在目标检测上花了很多时间,那么让我们继续讨论3D 目标框。
从3D目标检测进行3D目标跟踪
在2D目标跟踪(独立的跟踪器)中,跟踪pipeline如下:
给定连续两个时间步长的检测结果:
- 以2D形式计算 IOU (或任何其他代价,如框的形状或外观指标)
- 将其放入二分图算法,如匈牙利算法。
- 关联最高匹配并设置颜色/id号
- 使用卡尔曼滤波器来预测下一个位置(从而在下一步有一个更准确的关联)
我们将在3D 中也如上面一样做,但有两件事情会改变:
- IOU
- 卡尔曼滤波器
匈牙利算法告诉哪个是用于 MOT 任务,将保持不变。
为什么匈牙利算法不应该改变
当我们跟踪一个边界框时,通常做的是计算2个重叠框从一个图像到另一个图像的 IOU (交并比)。如果 IOU 很高(框重叠),那么这意味着目标是相同的,它移动了一点,因此应该跟踪它。如果不是,那就意味着它是另一个目标。我们也可以用二分图来跟踪多个目标。如下图中2D检测和2D跟踪,前面的框被记住,用于匹配。
匈牙利算法的目标是获取2个障碍列表物list(来自 t-1和 t时刻),并根据cost返回关联。这个cost可以是IOU,但是无论是2D 还是3D IOU,关联步骤都是完全相同的。
来自2个连续帧的匈牙利算法cost图示例:
3D IOU介绍
IOU是时间(t-1)的框与时间(t)的框有多少重叠。虽然它不足以保证2框应该匹配,但这是最流行的因素,可以很容易地设置。
如果我们想从2D 转移到3D,必须了解如何计算3D IOU,所以现在不比较面积,而是比较体积
这里有一个很酷的图片来可视化2D 和3D IOU 之间的差异:
今天,3D IOU有许多一行的实现存在,真的只是交集除以并集。
虽然3D IOU是一个很酷的度量标准,但它远非唯一可以使用的,而且对于遥远的目标可能会失败。另一方面,还可以使用点云距离(倒角损失)、方位差甚至质心的欧几里得度量等其他指标。
消失的重叠问题
在2D 中,重叠是一个问题,因为汽车可以重叠,即使它们彼此相距很远。但是在3D 中,这个问题就消失了。因为是在3D 中,我们知道有些框不会重叠,即使它们在平面图像中看起来是重叠的。在3D 中,重叠不是问题,因为现在已经使用了深度。
让我们暂停一下: 到目前为止,我们已经看到应该:
- 获取两个连续的时间步长的3D 框
- 计算两个框列表的3D IOU,受益于匈牙利算法(得到了正确的颜色和 ID)
所有剩下的就是使用卡尔曼滤波器,将预测下一步。
5使用3D卡尔曼滤波器
什么是2D卡尔曼滤波器?
一个2D卡尔曼滤波器是一个算法,输入2个坐标,在历史信息的基础上预测下一个位置。这是一个迭代算法,这意味着它存储前一个值的内存,并随着时间的推移继续。在2D MOT 中,用它来预测目标框中心的下一个位置(也可以预测框的所有4个坐标)。
为此,我们使用两个变量: 平均值 μ 和标准差或不确定性 σ。用一个2D高斯表示边界框,并且使用一个预测/更新循环。卡尔曼滤波器的预测、测量和更新曲线如下:
什么是3D 卡尔曼滤波器?
当我们在3D空间时,至少可以做一个3D 卡尔曼滤波器,这意味着跟踪 x、 y 和 z。使用2D和3D卡尔曼滤波器时平均值和标准差矩阵的形状:
不确定性(这里使用的是随机数)可能很难处理,但这是我们在进行3D目标跟踪时需要做的最低限度。我们现在已经得到了所需要的一切,所以让我们总结一下吧!
6总结
- 3D目标跟踪是关于跟踪真实世界中目标的技术
- 3D目标检测可以通过相机、LiDAR或RADAR完成。它只用于生成框。
- 对于每个目标,我们的检测器将返回一个3D边界框。
- 多目标跟踪过程与2D跟踪过程相同,只是多目标跟踪过程采用3D IOU 关联,预测过程采用3D卡尔曼滤波器。
这里有一个很酷的3D 跟踪演示:
3D目标跟踪是感知领域中最引人入胜的领域之一。在自动驾驶汽车中,这是“规划”之前的最后一步。当我们谈论3D,当加上时间的概念,就是4D!
这张思维导图可以提醒我们所看到的一切,橙色的部分就是今天所讲到的内容。
7参考
[1]. https://www.thinkautonomous.ai/blog/3d-object-tracking/
原文首发微信公众号【自动驾驶之心】:一个专注自动驾驶与AI的社区(https://mp.weixin.qq.com/s/NK-0tfm_5KxmOfFHpK5mBA)