多目标跟踪算法综述,目标跟踪 python
最新多目标跟踪算法综述-2020年8月23日多目标跟踪:排序和深度排序1。什么是多目标跟踪?多目标跟踪(MOT),其主要任务是给定一个图像序列,找到图像序列中的运动物体,识别不同帧中的运动物体,也就是说给出一个确定的、准确的id。当然,这些对象可以是任意的,比如行人、车辆、各种动物等。而研究最多的是行人跟踪。由于人是非刚性物体,行人检测和跟踪在实际应用中更加有效。
大多数MOT算法无非就是这四个步骤:检测特征提取,运动预测相似度计算数据关联。
2.常用算法(1)SORT算法
源代码
分拣被称为简单在线和实时跟踪。对于目前的多目标跟踪,更多的是取决于它的检测性能,也就是说,通过更换检测器可以提高18.9%。这种排序算法虽然只是结合了卡尔曼滤波、匈牙利算法等常用算法,但可以媲美2016年的SOTA算法,速度可以达到260Hz,比前者快20倍。
为了遵循奥卡姆剃刀,作者在跟踪目标时没有使用被跟踪目标的任何外观特征,只是使用检测框的位置和大小来估计目标的运动和关联数据,没有进行任何重新识别算法。所以目标丢了就找不回来了,只能通过检测重新更新ID,不符合跟踪算法常识,需要改进。当然,这篇文章主要讲的是对速度的追求!而不是过分关注检错的鲁棒性!在实验中,作者使用了两种检测模型,基于CNN的快速CNN和基于传统行人检测的ACF。此外,为了解决运动预测和数据关联问题,使用了两种非常高效的算法:卡尔曼滤波和匈牙利算法。
这种算法在实际应用中确实应用广泛,其核心是两种算法:卡尔曼滤波和匈牙利算法。卡尔曼滤波算法分为预测和更新两个过程。在该算法中,目标的运动状态被定义为八个正态分布的向量。预测:当目标运动时,通过目标帧的参数和上一帧的速度来预测当前帧的目标帧位置和速度。更新:预测值和观测值,两个正态分布的状态进行线性加权,得到当前系统的预测状态。* *匈牙利算法:* *它解决了一个指派问题。通过计算MOT主要步骤中的相似度,得到前后两帧的相似度矩阵。匈牙利的算法就是求解这个相似度矩阵,从而求解前后两帧的真实匹配目标。这个sklearn库有相应的函数linear_assignment来求解。在排序算法中,相似度矩阵是由前后两张借据构造的,所以排序计算速度很快。
算法总结:作者使用了Faster RCNN来进行模型的检测,并使用Kalman滤波预测状态,基于检测框位置和IOU的匈牙利算法,使得算法有很高的效率,但是这么频繁的ID切换,在实际应用中就失去了跟踪的价值了。(2)Deep SORT
源代码
(引用https://zhuanlan.zhihu.com/p/133678626的类图)
先前的排序算法使用简单的卡尔曼滤波器来处理逐帧数据的相关性,并使用匈牙利算法来测量相关性。这种简单的算法在高帧率下取得了良好的性能。但是,由于SORT忽略了被检测对象的表面特征,因此只有当对象状态估计的不确定性较低时,它才会准确。在深度排序中,使用更可靠的度量代替相关性度量,并使用CNN网络在大规模行人数据集上训练并提取特征,以增加网络对丢失和障碍的鲁棒性。与排序相比,通过整合表观信息可以提高排序的性能。通过这种扩展,模型可以更好地处理目标被长时间遮挡的情况,ID切换指标降低了45%。表观信息也是与目标相对应的特征。本文通过在大型行人识别数据集上训练的深度相关测度提取表观特征(借用了ReID领域的模型)。
状态估计和轨迹处理:状态估计:继续用一个8维空间来刻画轨迹在某一时刻的状态,包括包围盒中心的位置、长宽比、高度以及在图像坐标中对应的速度信息。然后,使用卡尔曼滤波器来预测更新的轨迹。卡尔曼滤波器采用匀速模型和线性观测模型。
连续排序算法使用8维状态空间,其中(u,v)表示bbox的中心点、长宽比R、高度H和图像坐标中相应的相对速度。本文采用常运动线性观测模型的标准卡尔曼滤波器,将上述8维状态作为对象状态的直接观测模型。
轨迹处理:这个主要说轨迹什么时候终止,什么时候产生新的轨迹。首先,每个轨迹有一个阈值A来记录从最后一次成功匹配到当前时刻的时间。当该值大于预设阈值时;认为轨迹变化终止,直观上是指长时间无法匹配的轨迹被认为完成。然后,当匹配时,认为可能在没有成功匹配的情况下为检测生成新的轨迹。但是这些检测结果可能是一些虚警,所以这种情况下新生成的轨迹用状态标记,然后在接下来的连续几帧(文中为3帧)观察连续匹配是否成功。如果是,则认为是新轨迹,否则认为是假轨迹,并标记状态。
在排序中,我们直接使用匈牙利算法来解决预测卡尔曼状态和新状态之间的相关性。现在我们需要通过融合这两个相似的度量指标,将目标运动和表面特征信息结合起来。通过CNN网络提取表面特征信息。对于目标运动的测量,风中的口红距离用于评估预测的卡尔曼状态和新状态。需要注意的是,当目标运动的不确定性较低时,风中的口红距离是一个很好的相关性度量。但实际操作中,如果镜头移动,风中口红距离可能不匹配。导致测量失败。这就是深度排序方法的要点,添加表面信息。
整合第二个度量,并检查每个BBox框;我们计算一个表面特征描述符,我们会创建一个图库来存储L个轨迹的最新描述符,然后用第I个轨迹和第j个轨迹之间的最小余弦距离作为第二个度量!
级联匹配级联匹配是深度排序的一个核心算法,不同于排序。它致力于解决目标被长时间阻挡的问题。为了使当前检测与当前时间最近的轨迹匹配,在匹配时,检测优先匹配消失时间较短的轨迹。当目标被长时间遮挡时,卡尔曼滤波器的预测结果会增加不确定性(由于遮挡时间内没有观测对象进行调整,不确定性会增加),状态空间内的可观测性会大大降低。当两个轨迹竞争同一检测时,消失时间较长的轨迹往往与风中距离较小的口红相匹配,这使得检测更有可能与遮挡时间较长的轨迹相关联。这种情况会破坏一个曲目的持久性,这也是SORT中ID开关过高的原因之一。
总之,距离测量对短期预测和匹配是有效的,而视在信息对长期丢失轨迹是有效的。超级参数的选择取决于具体的数据集。例如,对于摄像机运动幅度较大的数据集,不直接考虑运动匹配程度。
深度排序可以看做三个部分:检测:目标检测的效果对结果影响很大,无论是召回率还是准确率都要非常高才能满足要求。如果用yolov3作为目标检测器,目标跟踪过程中大约60%的时间都花在yolov3上,场景中的目标越多,这部分时间也就越多(NMS花的时间)。表观特征:即里德模型。原论文使用的是广域住宅网,其中包含了大量的参数,可以考虑使用性能更好、参数更低的新ReID模型来完成这部分工作。相关:包括卡尔曼滤波算法和匈牙利算法。
深度排序算法在排序算法的基础上,增加了已确定的新的匹配级联轨迹。总体过程是:卡尔曼滤波器预测轨迹,利用匈牙利算法将预测轨迹与当前帧中的检测进行匹配(级联匹配和IOU匹配)进行卡尔曼滤波器更新。(3)JDE算法:Towards Real-Time Multi-Object Tracking
允许学习目标检测和外观嵌入共享模型的MOT系统。具体来说,我们将外观嵌入模型结合到单镜头检测器中,使模型可以同时输出检测结果和相应的嵌入。这样,系统被表达为一个多任务学习问题:有多个目标,即锚点分类、包围盒回归和嵌入式学习;每个损失都自动加权。
(4)FAIRMOT算法:A Simple Baseline for Multi-Object Tracking
源代码
这是一个基于无锚点的MOT算法,用于检测reid的存在。
随着深度学习中多任务学习的成熟,单任务MOT开始引起更多的研究关注。核心思想是在单个网络中同时完成对象检测和身份嵌入(Re-ID函数),通过分担大部分计算来减少推理时间。例如,Track-RCNN在Mask-RCNN的顶部添加一个Re-ID头,并返回每个建议的边界框和Re-ID函数。在YOLOv3框架上引入JDE算法,可以实现接近视频速率的推断。但单次法的跟踪精度通常低于两步法。这是因为学习到的Re-ID函数不是最优的,会导致大量的ID切换。因此,这种公平算法深入研究了原因,发现锚点提取的身份嵌入特征与物体中心不对齐,导致严重的歧义。为了解决这个问题,我们提出使用无锚方法进行目标检测和身份嵌入,这可以显著提高在所有基准上的跟踪精度。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。