首页 > 编程语言 >经典跟踪算法总结

经典跟踪算法总结

时间:2024-08-31 12:50:29浏览次数:7  
标签:SORT 外观 检测 目标 算法 跟踪 经典 关联

https://github.com/mikel-brostrom/boxmot

SORT

 SORT是一种多目标跟踪算法,可以有效地关联目标,并提升跟踪的实时性。SORT的核心主要是卡尔曼滤波和匈牙利算法的结合,可以达到较好的跟踪效果。在当时,跟踪速度达到了260HZ,相比其他方法速度提升了20倍。

SORT关注的重点是实时跟踪,我们能提供给追踪器的信息主要有两个:过去帧和当前帧。因此可以看作是一个数据关联问题,目的是在视频序列的帧之间关联检测。此外,还要权衡精度和速度,也就是在保证精度的前提下拥有实时性。

具体实现

SORT由以下几个部分组成:检测、当前帧到未来帧的转换、当前帧与对象相的关联、管理追踪目标的生命周期。

检测

由于SORT是在2016年提出的,当时用的检测框架是two-stage的FasterRCNN检测框架。

预测模型

这里的预测模型,是将目标的标识等信息传播到下一帧。也就是采用一个匀速模型来近似物体的每一帧的位移,这个模型独立于其他物体,也独立于拍摄物体的摄影机的运动。每个目标的状态被建模为:

其中,u和v代表目标中心的x、y坐标,s、r表示bounding box的尺寸(面积)和长宽比。这里的长宽比是固定的,所以前后帧的长宽比都一样,后面的u^,v^,s^表示下一帧的预测中心的坐标和检测框面积。bounding box用于更新目标状态,其中的速度分量使用卡尔曼滤波进行求解。如果没有和目标关联的检测框,就使用线性的预测模型而不需要修正。

数据关联

为现有的目标分配检测框时,每个目标的边界框形状是通过预测其在当前帧中的新位置估计的。然后计算分配代价矩阵,将其作为目标与检测框之间的交并比(IOU)。如果你不了解IOU的话,可以看一下《IOU、GIOU、DIOU、CIOU损失函数详解》。作者采用了匈牙利算法求解这个问题,此外,如果IOU小于一定的阈值,则拒绝分配检测框。使用IOU的好处是可以隐式解决目标的短期遮挡问题,也就是当目标被遮挡对象覆盖时,只检测遮挡对象,这样的话,只有遮挡在上面的目标是可以分配到检测框的,而被覆盖目标是不受影响的,因为压根就没有给它分配检测框。

创建和删除跟踪标识

当视频中物体刚出现时,给它创建标识。当物体离开画面时,销毁标识。这时需要考虑所有的小于IOU阈值的重叠的检测,代表还有没有被跟踪到的对象。跟踪器初始化为速度为0的bounding box,由于在此时没有速度,速度分量的协方差被初始化为很大的值,用来反映这种不确定性。此外,新的跟踪器会经历一个预热期,在此期间,以积累足够的目标需要与检测相关联的信息,防止错误跟踪。如果跟踪器在一定时长T(实验采用1帧作为时长)内没有被检测到,就会停止追踪,防止跟踪器数量无限增大。之所以把T设置为1,有两个原因,一是实际检测中的物体一般不是匀速运动的,二是论文主要关注点是短时目标追踪。另外,把已经丢失的目标尽早删除可以提升追踪效率。但是,这样做的弊端是目标的ID会频繁改变,计数会出现问题,而且实际跟踪效果也会比较差。

https://baijiahao.baidu.com/s?id=1724072928603021342&wfr=spider&for=pc

DeepSort

DeepSort算法是一种基于‌深度学习的多目标追踪算法,其核心原理是利用深度学习模型进行目标检测,并结合‌卡尔曼滤波器进行目标状态预测和数据关联,从而实现目标的连续跟踪。DeepSort算法在准确性和实时性之间取得了良好的平衡,适用于各种场景下的多目标跟踪任务。

DeepSort算法的工作流程

  1. 目标检测‌:首先,使用深度学习模型(如YOLO、Faster R-CNN等)对视频帧进行目标检测,获取目标的边界框。
  2. 特征提取‌:提取每个目标的表观特征(如颜色、形状等)和运动特征(如位置、速度等)。
  3. 数据关联‌:利用卡尔曼滤波器预测每个目标在下一帧中的位置,并通过匈牙利算法和级联匹配计算前后两帧目标之间的匹配程度,为每个追踪到的目标分配一个唯一的ID。
  4. 目标追踪‌:根据匹配结果,将每一帧中的目标连接起来,形成目标的运动轨迹。

OCSORT (CVPR2022)

https://github.com/noahcao/OC_SORT

OCSort基于卡尔曼滤波器的跟踪算法OC-SORT,它是SORT的扩展。SORT依赖于目标跟踪的线性运动假设,并利用卡尔曼滤波器将来自目标检测器的预测与IoU的运动模型的位置估计相关联。当视频帧速率高时,线性运动假设对于相邻视频帧上的目标位移是有效的。然而,当跟踪目标在遮挡下消失时,卡尔曼滤波器期间的缺失测量会随着卡尔曼滤波器参数的时间二次更新复合误差。

作者指出SORT中的三个问题:

  1. 状态噪声的敏感性。从数学上理解,SORT的状态中有x和y方向的速度,速度的方差与(Δt)2成反比,时间间隔越小,速度的方差越大。从直观理解,在高帧率视频的连续帧之间,物体位移的噪声可能与实际物体位移的大小均为一两个像素,位移的微小误差会带来速度的剧烈变化
  2. 误差累积。如果目标在每帧都有观测,那状态误差还能被及时纠正;而如果缺乏T段时间的观测,估计出的位置的误差δut+T∼N(0,2T2σ2u)方差与T2成正比
  3. 以估计为中心。上述两点问题揭示出的核心问题就是,SORT中的KF以估计为中心,观测只用于修正估计。而在有遮挡情况下,利用了外观信息的神经网络生成的观测应该比KF估计更重要。

OCSort提出三个创新点打包解决上述问题,OOS(以观测为中心的在线平滑)、OCM(以观测为中心的动量)、OCR(以观测为中心的恢复)

  1. OOS(Observation-centric Online Smoothing) 在一个轨迹从失去观测到再次被关联时,把丢失期间看作匀速直线运动建立虚拟轨迹,用虚拟轨迹重新更新丢失期间的kalman滤波器参数,这样就不会有误差累积。注意OOS只更新滤波器参数,而不会更改之前输出的轨迹结果。OOS与贝叶斯平滑在动机和操作上均不同:贝叶斯平滑是作用于轨迹结果,而没有更新KF参数。
  2. OCM( Observation-Centric Momentum) 在建立关联时的代价矩阵时,不仅考虑iou,还加了运动方向(即动量V)的一致性。这里的动量是轨迹的方向和由轨迹的历史检测和新检测形成的方向,这里计算方向时需要选择一个时间差,附录中证明了时间差越大得到的动量方差越小,但是也不能选的过大,以满足线性运动假设,所以需要一个权衡。
  3. OCR(Observation-Centric Recovery) 由于检测器不可靠、物体遮挡等原因,轨迹会中断。作者提出OCR来处理物体停止或被遮挡一段时间的情况:一旦一条轨迹在正常关联阶段之后仍然没有被跟踪,我们尝试将这条轨迹的最后一次观测与新到来的时间步上的观测进行关联

https://cloud.tencent.com/developer/article/2345318

ByteTrack(2021.10)

StrongSORT(2022.02)

BoTSORT(2022.06)

DeepOCSORT(2023.02)

https://github.com/GerardMaggiolino/Deep-OC-SORT

DeepOCSort是一种基于深度学习的多目标跟踪算法。它利用深度学习模型进行目标检测,并结合卡尔曼滤波器进行目标状态预测和数据关联,从而实现目标的连续跟踪。DeepOCSort算法的主要步骤包括从原始视频流中获取连续的视频帧,利用深度学习模型(如YOLOSSD等)对视频帧中的目标进行检测,提取检测到的目标的特征(包括表观特征和运动特征),以及进行目标匹配和追踪。通过引入目标外观信息,DeepOCSort算法能够更好地处理复杂运动模式和外观变化的情况,提高目标关联和跟踪的准确性和鲁棒性‌。

DeepOCSort提出了一种基于动态和自适应启发式的模型,以将视觉外观与基于运动的线索结合在单个阶段中进行对象关联。如果没有细粒度语义(例如实例分割),可以提高使用对象之间的视觉比较进行关联的准确性。除了更有效地将外观线索添加到基于运动的对象关联之外,还集成了相机运动补偿,通过补充以对象为中心的运动模型来提高性能。

https://www.aminer.cn/research_report/63fc1fa87cb68b460f9738cb

随着先进的目标检测器和基于运动的关联算法的成功,除了简单的移动平均模型之外,视觉外观与基于运动的匹配的有效集成仍然相对不足。

在这项工作中从最近的基于纯运动的跟踪算法OC-SORT开始,通过将视觉外观与新方法相结合来提高跟踪鲁棒性。强嵌入模型的边界框级视觉特征仍然包含由于遮挡、运动模糊或类似外观的对象而产生的显著噪声。

本文提出了一种基于动态和自适应启发式的模型,以将视觉外观与基于运动的线索结合在单个阶段中进行对象关联。如果没有细粒度语义(例如实例分割),可以提高使用对象之间的视觉比较进行关联的准确性。除了更有效地将外观线索添加到基于运动的对象关联之外,还集成了相机运动补偿,通过补充以对象为中心的运动模型来提高性能。

DeepOCSORT的3个模块:相机运动补偿(CMC)、动态外观(DA)和自适应加权(AW)。

由于OC-SORT高度依赖于检测质量,作者引入CMC来更精确地定位运动场景中的逐帧目标。给定缩放旋转矩阵和平移,其中,将它们分别应用于OC-SORT的3个分量:OOS + CMC、OCM + CMC和OCR + CMC

动态外观

在之前的工作中,用于描述轨迹的深度视觉嵌入是由深度检测嵌入逐帧的指数移动平均(EMA)给出的。这需要一个加权因子α来调整来自历史和当前时间步长的视觉嵌入的比例。

作者建议根据检测器的置信度,在每帧的基础上修改EMA的α。这种灵活的α允许只在高质量的情况下有选择地将外观信息合并到轨道的模型中。

作者使用低检测器置信度作为代理来识别由于遮挡或模糊造成的图像退化,允许拒绝损坏的嵌入。让et是轨迹的外观嵌入在时间t。标准EMA为

其中是被添加到模型中的匹配检测的外观。建议定义为

自适应加权

自适应加权根据外观嵌入的区别性增加了外观特征的权重。使用轨道和框嵌入的标准余弦相似度可以得到一个外观成本矩阵,,其中分别是轨道和检测的数量。表示在第m行和第n列相交处的条目。这通常与IoU成本矩阵Ic结合为,在−C上具有最小的线性和分配成本最小。

https://mp.weixin.qq.com/s/zcN27UvxGGBrg8a_p2Vs_w

HybridSORT(2023.08)

标签:SORT,外观,检测,目标,算法,跟踪,经典,关联
From: https://blog.csdn.net/m0_60857098/article/details/141614799

相关文章

  • 【机器学习】sklearn核心分类算法比较
    sklearn核心分类算法比较sklearn分类问题的核心算法及其关联核心分类算法其他分类算法算法之间的关联示例代码运行结果sklearn分类问题的核心算法及其关联在scikit-learn中,分类问题是机器学习中最常见的任务之一。scikit-learn提供了多种分类算......
  • 【PSO-BP】基于粒子群算法优化BP神经网络的风电功率预测研究(Matlab代码实现)
            ......
  • 亦菲喊你来学机器学习(16) --K-means聚类算法
    文章目录K-means基本步骤优缺点构建模型总结K-meansK-means算法是一种广泛使用的聚类算法,旨在将数据集划分为K个簇,使得每个簇内的数据点尽可能相似,而不同簇之间的数据点尽可能不同。这个算法通过迭代的方式实现,每次迭代都会更新簇的中心(即簇内所有点的均值),然后将......
  • 【电力系统短期负荷预测】基于ELM、白鲸算法优化ELM、鹭鹰算法优化ELM极限学习机的电
       ......
  • 算法讲演录[1]
    准备在线测评系统Codeforces是一个提供在线评测系统的俄罗斯网站。截止2023年,该网站已经拥有超过2,000,000的注册用户。AtCoder是日本最大的算法竞技网站。提供编程在线比赛、过往比赛提交、在线评测等服务。准备工作安装Code::Blocks。安装Edge浏览器。安装浏览器扩......
  • 【数据结构】排序算法篇一
    【数据结构】排序算法篇一1.插入排序(1)基本思想:(2)动态图解:(3)具体步骤:(4)代码实现:(5)特性总结:2.希尔排序(缩小增量排序)(1)基本思想:(2)静态图解:(3)具体步骤:(4)代码实现:(5)特性总结:3.堆排序(1)基本思想:(2)具体步骤:(3)代码实现:(4)特性总结:4.选择排序(1)基本思想:(2)动态图解:(3)具体步骤:(4)代码实现:(5)特......
  • 代码随想录算法day4 - 链表2
    题目124.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1]......
  • 【秋招笔试】8.30饿了么秋招(算法岗)-三语言题解
    ......
  • 深度强化学习算法(六)(附带MATLAB程序)
    深度强化学习(DeepReinforcementLearning,DRL)结合了深度学习和强化学习的优点,能够处理具有高维状态和动作空间的复杂任务。它的核心思想是利用深度神经网络来逼近强化学习中的策略函数和价值函数,从而提高学习能力和决策效率。一、关键算法分类1.1深度Q网络(DeepQ-Networ......
  • 卡尔曼滤波算法(c语言代码)
    卡尔曼滤波器是一种用于估计动态系统状态的算法,常用于信号处理、控制系统、机器人和导航等领域。以下是一个简单的卡尔曼滤波器的C语言实现示例。这个示例展示了如何使用卡尔曼滤波器来估计一维系统的状态。1.卡尔曼滤波器算法概述卡尔曼滤波器由两部分组成:预测和更新。基......