MUTR3D:基于3D到2D查询的多相机跟踪框架 CVPR2022

1 前言
自从去年4月参加工作以来,就算一直没有再做跟踪任务,只中间给车道线加了个sort算法,实现了id输出和跟踪,也不过是半天的事情,而且方法相当传统。
最近,终于又开始做跟踪功能了,于是做了一些调研和整理,不得不感慨跟踪任务发展也是相当快,诞生了很多改进方案。后面也打算陆续写个系列进行分享,欢迎感兴趣的朋友保持关注,也欢迎做跟踪任务的朋友加入交流群一起交流讨论。
关于目标跟踪,一般分为单目标跟踪(SOT)和多目标跟踪(MOT),我接触的主要是MOT,之前也分享过几篇文章:
点击链接进入:
多目标跟踪MOT入门教程、百度实时跟踪系统PP-Tracking介绍与上手
多目标跟踪MOT未来研究方向讨论
https://www.bilibili.com/read/cv16181337?spm_id_from=333.999.0.0
今天给大家分享一篇近期开源的新工作MUTR3D,也是中了CVPR 2022 Workshop on Autonomous Driving。
3D跟踪在自动驾驶、机器人、虚拟现实等任务的感知环节至关重要,其负责预测每帧对象,并在时间上找到不同帧目标之间的对应关系。当使用多相机进行3D跟踪时,会出现检测精度降低、复杂场景中的遮挡和模糊、边界对象丢失等问题。为此,本次分享的MUTR3D提出了一种端到端的多相机多对象跟踪算法,该算法适用于已知参数的任意相机,效果可以。并且,代码已经在几天前开源。

原文:https://arxiv.org/abs/2205.00613
代码:https://github.com/a1600012888/MUTR3D
2 摘要
多相机的精确和一致的3D跟踪是基于视觉的自动驾驶系统的关键组成部分,其涉及跨多个相机在复杂场景中建模3D动态对象。由于深度估计、视觉遮挡、外观模糊等,这个问题本身具有较大的挑战性。此外,目标并不总是跨时间、跨相机相关联的。为了解决这些问题,文章提出了一个名为MUTR3D的端到端多相机跟踪框架。
与先前的工作相比,MUTR3D不明确依赖于目标的空间和外观相似性。相反,MUTR3D引入3D轨迹查询来为出现在多个相机和多帧中的每个目标建模空间和外观连贯轨迹。使用相机变换将3D跟踪器与它们在2D图像中的观察结果关联起来。每个跟踪器根据从相机图像获得的特征进行进一步细化。
MUTR3D使用集合到集合的损失来度量预测的跟踪结果和ground truth之间的差异。因此,不需要非最大值抑制、边界框关联等后处理操作。在基准数据集nuScenes上,AMOTA指标上MUTR3D的性能高于最先进的方法5.3个点。
3 算法介绍

上图是MUTR3D的示意图,以端到端的方式使用空间和外观相似性将目标关联到3D轨迹中。具体说,MUTR3D引入了3D轨迹查询,它直接模拟目标轨迹随时间和 不同相机的3D状态和外观特征。
对于每一帧,3D轨迹查询来自所有可见相机的样本特征,并学习去创建、跟踪、结束轨迹。与以往算法不同的是,MUTR3D在一个统一的端到端框架中同时执行检测和跟踪。文章作者总结主要有以下三方面的贡献:
MUTR3D是第一个完全端到端的多相机3D跟踪框架。与现有的使用显式跟踪试探法的检测跟踪方法不同,MUTR3D隐式地模拟了目标轨迹的位置和外观变化。此外,MUTR3D通过消除常用的后处理步骤,如非最大值抑制、边界框关联和Re-ID,简化了3D跟踪流程。
MUTR3D引入一个3D轨迹查询,它可以模拟一个目标的整个轨迹的3D状态。3D轨迹查询从所有可见相机采样特征,并端到端地逐帧更新轨迹。
在nuScenes纯视觉3D跟踪任务上实现了SOTA性能。
提出了两个新的指标来评估当前3D跟踪器中的运动模型:平均跟踪速度误差(ATVE)和跟踪速度误差(TVE)。可以测量被跟踪目标的估计运动的误差。
3.1 基于查询的目标跟踪
MUTR3D采用基于查询的跟踪,在每一帧开始时,初始化一组新生查询,然后查询以自回归的方式逐帧更新自身。解码器头从每帧中的每条轨迹查询中预测一个候选对象,并且在来自同一轨迹查询的不同帧中解码的预测被直接关联。通过适当的查询生命周期管理,基于查询的跟踪可以以在线方式执行联合检测和跟踪。

黑色虚线框中的所有彩色小方块代表跟踪查询,蓝框代表新生查询,橙色框表示来自先前帧的旧查询
如上图所示,MUTR3D包括三个关键部分:
基于查询的对象跟踪损失为两种不同类型的查询(新生查询和旧查询)分配不同的回归目标。
多相机稀疏注意使用3D参考点来为每个查询采样图像特征。
运动模型估计目标动态并跨帧更新查询的参考点。跟踪查询伴随多相机特征以在当前帧中的候选目标中解码,然后过滤掉不活跃的查询,并更新主动查询的参考点来进行补充目标运动和自身运动。最后,更新的查询转到后续帧来跟踪相同的目标。
3.2 端到端目标跟踪损失
MUTR3D对于每一帧有两种类型的查询,并且有不同的标签分配策略。新生查询(newborn query)是一组经过学习的查询,它们与输入无关并且在每帧开始时被添加到查询队列中。新生查询负责在当前帧中检测新出现的目标,并使用新出现的真值目标作为查询的回归目标,在新生查询的候选目标之间执行匹配。旧查询(old query)是来自成功检测或跟踪目标的先前帧的活跃查询。旧查询负责跟踪当前帧中之前出现的目标,它在第一次成功检测到真值目标后被分配。
3.3 多相机跟踪查询解码
MUTR3D的transformer解码器头负责跟踪查询,关注它们的多相机图像特征,并提取的查询特征将用于解码候选目标。解码器有两种注意力模块:查询中的自注意力和查询及图像特征中的交叉注意力。为了提高效率,作者采用了来自DETR3D的基于参考点的注意力来执行交叉注意力。在具体的执行方面,分别包括查询初始化、查询特征提取以及3D对象参数化三个步骤。
3.4 查询生命周期管理
为了以在线方式处理已经消失的对象,MUTR3D在每一帧删除不活跃的查询。具体来说,将每个查询的置信度分数定义为其预测框的分类分数,使用两个阈值参数Tnew和Told作为目标框分数和一个时间长度T来控制查询的生命周期。
在算法执行过程中,对于每一帧中的新生查询,如果分数低于Tnew,就执行删除。对于旧的查询,如果它们的分数低于连续T帧的Told,就执行删除。
3.5 查询更新和运动模型
在过滤掉无效查询后,MUTR3D会更新跟踪查询,包括它们的特性和3D参考点。更新三维参考点的目的是为了模拟目标的动力学和补偿自身运动。同时,作者使用从查询中预测的速度,它的好处是可以通过帧进行更新,并可以聚合多帧特征。
同时,为了隐式地建模多帧外观变化,MUTR3D使用来自历史帧的特性来更新跟踪查询。与MOTR做法类似,作者为每个活动查询维护一个固定大小的先入先出队列,即memory。在每一帧为每个查询及其memory应用一个注意力模块。跟踪查询作为注意模块的查询,相应的memory作为一组键和值。
4 实验
在基准数据集nuScenes上进行算法评估,并使用AMOTA和AMOTP作为主要指标。

为了评估不同跟踪算法的运动模型,作者提出了两种评价标准ATVE (Average Tracking Velocity Error) 和TVE (Tracking Velocity Error)。其中TVE是在MOTA最高的召回时的平均速度误差,ATVE的计算公式如下:

下表是运动模型的评价结果,与基于运动模型的卡尔曼滤波相比:

消融实验
消融实验中研究了两个因素。首先,作者研究不使用运动模型的影响,即不在每帧结束时更新3D参考点。下表实验结果表明移除运动模型会降低所有指标的性能。

同时,作者研究训练帧数的影响。对所有的实验采用ResNet-50作为backbone,下表为分别使用3、4、5帧进行训练的结果,结果表明提升训练帧数会逐渐提升性能。

5 可视化效果


推荐阅读:(点击进入)