首页 > 编程知识 正文

多目标跟踪技术,目标跟踪算法python实现

时间:2023-05-06 21:32:51 阅读:241584 作者:3946

最新多目标跟踪算法综述-2020年08月23日 多目标跟踪:SORT和Deep SORT 1. 多目标跟踪是什么?

多目标跟踪,即Multiple Object Tracking(MOT),主要任务中是给定一个图像序列,找到图像序列中运动的物体,并将不同帧的运动物体进行识别,也就是给定一个确定准确的id,当然这些物体可以是任意的,如行人、车辆、各种动物等等,而最多的研究是行人跟踪,由于人是一个非刚体的目标,且实际应用中行人检测跟踪更具有商业价值。

绝大多数MOT算法无外乎这四个步骤:①检测 ②特征提取、运动预测 ③相似度计算 ④数据关联。

2.常用的算法

(1)SORT算法
源码
SORT全称为Simple Online And Realtime Tracking, 对于现在的多目标跟踪,更多依赖的是其检测性能的好坏,也就是说通过改变检测器可以提高18.9%,本篇SORT算法尽管只是把普通的算法如卡尔曼滤波(Kalman Filter)和匈牙利算法(Hungarian algorithm)结合到一起,却可以匹配2016年的SOTA算法,且速度可以达到260Hz,比前者快了20倍。

作者为了遵循Occam’s Razor,作者在进行目标跟踪时没有使用任何被跟踪目标的外观特征,而仅仅使用了检测框的位置和大小进行目标的运动估计和数据关联,也没有进行任何的重识别的算法,所以当目标跟丢时,就找不回来,只能通过检测去重新更新ID,这就不符合跟踪算法的常理了,需要改进,当然这篇文章主要就是追求速度!而不是过多的关注与检测错误的鲁棒性!实验中,作者使用了CNN-based的网络Faster RCNN和传统的行人检测ACF两个检测模型,另外,为了解决动作预测和数据关联,使用了两个十分高效的算法卡尔曼滤波和匈牙利算法。

这个算法确实是在实际应用中使用较为广泛的一个算法,核心就是两个算法:卡尔曼滤波和匈牙利算法。卡尔曼滤波算法分为两个过程,预测和更新。该算法将目标的运动状态定义为8个正态分布的向量。预测:当目标经过移动,通过上一帧的目标框和速度等参数,预测出当前帧的目标框位置和速度等参数。更新:预测值和观测值,两个正态分布的状态进行线性加权,得到目前系统预测的状态。**匈牙利算法:**解决的是一个分配问题,在MOT主要步骤中的计算相似度的,得到了前后两帧的相似度矩阵。匈牙利算法就是通过求解这个相似度矩阵,从而解决前后两帧真正匹配的目标。这部分sklearn库有对应的函数linear_assignment来进行求解。SORT算法中是通过前后两帧IOU来构建相似度矩阵,所以SORT计算速度非常快。

算法总结:作者使用了Faster RCNN来进行模型的检测,并使用Kalman滤波预测状态,基于检测框位置和IOU的匈牙利算法,使得算法有很高的效率,但是这么频繁的ID切换,在实际应用中就失去了跟踪的价值了。
(2)Deep SORT
源码

(引用类图作者:https://zhuanlan.zhihu.com/p/133678626)
之前的SORT算法使用简单的卡尔曼滤波处理逐帧数据的关联性以及使用匈牙利算法进行关联度量,这种简单的算法在高帧速率下获得了良好的性能。但由于SORT忽略了被检测物体的表面特征,因此只有在物体状态估计不确定性较低是才会准确,在Deep SORT中,使用更加可靠的度量来代替关联度量,并使用CNN网络在大规模行人数据集进行训练,并提取特征,以增加网络对遗失和障碍的鲁棒性。相比SORT,通过集成表观信息可以来提升SORT的表现。通过这个扩展,模型能够更好地处理目标被长时间遮挡的情况,将ID switch指标降低了45%。表观信息也就是目标对应的特征,论文中通过在大型行人重识别数据集上训练得到的深度关联度量来提取表观特征(借用了ReID领域的模型)。

状态估计和轨迹处理:

状态估计: 延续使用一个8维空间去刻画轨迹在某时刻的状态,包括bounding box中心的位置、纵横比、高度、以及在图像坐标中对应的速度信息。然后使用一个kalman滤波器预测更新轨迹,该卡尔曼滤波器采用匀速模型和线性观测模型。
延续SORT算法使用8维的状态空间,其中(u,v)代表bbox的中心点,宽高比r, 高h以及对应的在图像坐标上的相对速度。论文使用具有等速运动和线性观测模型的标准卡尔曼滤波器,将以上8维状态作为物体状态的直接观测模型。

轨迹处理:这个主要说轨迹什么时候终止、什么时候产生新的轨迹。首先对于每条轨迹都有一个阈值a用于记录轨迹从上一次成功匹配到当前时刻的时间。当该值大于提前设定的阈值;则认为改轨迹终止,直观上说就是长时间匹配不上的轨迹认为已经结束。然后在匹配时,对于没有匹配成功的检测都认为可能产生新的轨迹。但由于这些检测结果可能是一些错误警告,所以对这种情形新生成的轨迹标注状态 ,然后观查在接下来的连续若干帧(论文中是3帧)中是否连续匹配成功,是的话则认为是新轨迹产生,否则认为是假性轨迹,状态标注。

在SORT中,我们直接使用匈牙利算法去解决预测的Kalman状态和新来的状态之间的关联度,现在我们需要将目标运动和表面特征信息相结合,通过融合这两个相似的测量指标。表面特征信息通过CNN网络进行特征的提取。对于目标运动的度量,采用风中的口红距离进行评测预测的kalman状态和新来的状态。需要注意的是在目标运动不确定性较低的时候,风中的口红距离是一个很好的关联度量。但是实际中如果相机运动可能会导致风中的口红距离不能匹配。造成度量失效。这也就是Deep SORT方法的重点,加入表面信息。
整合第二个度量标准,对每一个BBox检测框;我们计算一个表面特征描述子, 我们会创建一个gallery用来存放最新的L个轨迹的描述子,然后使用第i个轨迹和第j个轨迹的最小余弦距离作为第二个衡量尺度!

级联匹配

级联匹配是Deep SORT区别于SORT的一个核心算法,致力于解决目标被长时间遮挡的情况。为了让当前Detection匹配上当前时刻较近的Track,匹配的时候Detection优先匹配消失时间较短的Track。当目标被长时间遮挡,之后卡尔曼滤波预测结果将增加非常大的不确定性(因为在被遮挡这段时间没有观测对象来调整,所以不确定性会增加), 状态空间内的可观察性就会大大降低。在两个Track竞争同一个Detection的时候,消失时间更长的Track往往匹配得到的风中的口红距离更小, 使得Detection更可能和遮挡时间较长的Track相关联,这种情况会破坏一个Track的持续性,这也就是SORT中ID Switch太高的原因之一。

总之,距离度量对于短期的预测和匹配效果很好,而表观信息对于长时间丢失的轨迹而言,匹配度度量的比较有效。超参数的选择要看具体的数据集,比如文中说对于相机运动幅度较大的数据集,直接不考虑运动匹配程度。

Deep SORT可以看成三部分:检测: 目标检测的效果对结果影响非常非常大, 并且Recall和Precision都应该很高才可以满足要求. 如果使用yolov3作为目标检测器, 目标跟踪过程中大概60%的时间都花费在yolov3上,并且场景中的目标越多,这部分耗时也越多(NMS花费的时间).表观特征: 也就是reid模型,原论文中用的是wide residual network,含有的参数量比较大,可以考虑用新的、性能更好、参数量更低的ReID模型来完成这部分工作。关联:包括卡尔曼滤波算法和匈牙利算法。

Deep SORT算法在SORT算法的基础上增加了级联匹配(Matching Cascade)+新轨迹的确认(confirmed)。总体流程就是:卡尔曼滤波器预测轨迹Tracks使用匈牙利算法将预测得到的轨迹Tracks和当前帧中的detections进行匹配(级联匹配和IOU匹配)卡尔曼滤波更新。
(3)JDE算法:Towards Real-Time Multi-Object Tracking

一种MOT系统,该系统允许在共享模型中学习目标检测和外观嵌入。具体而言,我们将外观嵌入模型合并到单发检测器中,以便该模型可以同时输出检测结果和相应的嵌入。这样,该系统被表述为一个多任务学习问题:存在多个目标,即,anchor分类、边界框回归和嵌入学习;自动对各个损失进行加权。

(4)FAIRMOT算法:A Simple Baseline for Multi-Object Tracking
源码
这是一种基于anchor free的检测和reid在一起的一种MOT算法。

随着深度学习中多任务学习的成熟,单次MOT已开始引起更多研究关注。核心思想是在单个网络中同时完成对象检测和身份嵌入(Re-ID功能),以通过共享大部分计算来减少推理时间。例如,Track-RCNN 在Mask-RCNN 的顶部添加了一个Re-ID头,并为每个proposal回归了边界框和Re-ID功能。 JDE算法是在YOLOv3 框架之上引入的,该框架可实现接近视频速率的推断。但是,单发方法的跟踪精度通常低于两步方法的跟踪精度。这是因为学习到的Re-ID功能不是最佳的,这会导致大量的ID切换。因而这个Fair算法深入研究了原因,发现在锚点提取的身份嵌入特征与对象中心不对齐,这导致了严重的歧义。为了解决该问题,我们建议对对象检测和身份嵌入使用无锚方法,这可以显着提高所有基准上的跟踪精度。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。