DeepSORT 目标跟踪算法

DeepSORT算法流程图:

一、核心思想与要解决的问题

目标跟踪(Multi-Object Tracking, MOT)的任务是:给定一个视频序列,在每一帧中定位出多个目标(如行人、车辆),并在整个视频中维持每个目标的唯一身份标识(ID),即弄清楚“谁是谁”。

这个任务的主要挑战在于:

  1. 目标遮挡:一个目标被另一个目标或物体遮挡,之后又重新出现。

  2. 外观相似性:多个目标穿着、体型相似,容易导致身份切换(ID Switch)。

  3. 检测器失效:目标检测算法可能在某一帧漏检(False Negative)或误检(False Positive)。

DeepSORT 的核心思想就是利用目标的外观信息(Appearance Information) 来弥补运动信息(Motion Information) 的不足,从而更好地解决上述挑战。


二、算法流程概述

DeepSORT 的流程可以概括为以下步骤,这些步骤在每一帧中循环执行:

  1. 目标检测:使用目标检测器(如 YOLO, Faster R-CNN)获取当前帧中所有目标的边界框(Bounding Boxes)。DeepSORT 本身不包含检测器,它是一个“跟踪-by-检测”(Tracking-by-Detection)的框架。

  2. 预测:使用卡尔曼滤波(Kalman Filter)根据上一帧的轨迹(Tracks)预测它们在当前帧的位置。

  3. 关联匹配:这是算法的核心。将当前帧的检测结果(Detections) 和预测的轨迹(Tracks) 进行匹配。匹配基于两个度量:

    • 运动关联使用马氏距离(Mahalanobis Distance)衡量预测的轨迹和检测框在运动层面的一致性。

    • 外观关联使用余弦距离(Cosine Distance)衡量预测的轨迹和检测框在外观特征层面的相似性。

  4. 状态更新

    • 对于匹配成功的检测,用该检测结果更新对应轨迹的卡尔曼滤波状态。

    • 对于未匹配的检测,初始化为新的轨迹(New Tracks)。

    • 对于未匹配的轨迹,标记为“丢失”(Lost),并在一定时间未匹配后删除。

  5. 轨迹生命周期管理:管理轨迹的创建、确认和删除。


三、核心组件详解

1. 状态估计与卡尔曼滤波(Kalman Filter)
  • 目的:预测目标在下一帧的位置,并为运动关联提供度量依据。

  • 状态向量:DeepSORT 使用一个 8 维状态空间 (u, v, γ, h, ẋ, ẏ, γ̇, ḣ)

    • (u, v):边界框中心的坐标。

    • γ:宽高比(aspect ratio)。

    • h:高度。

    • (ẋ, ẏ, γ̇, ḣ):分别是前四个变量的速度信息。

  • 观测向量:检测器直接提供的观测值 (u, v, γ, h)

  • 工作流程

    • 预测(Predict):根据上一帧的状态,预测当前帧的目标位置和速度(先验估计)。

    • 更新(Update):当预测的轨迹与某个检测成功匹配后,用这个检测到的实际观测值来修正预测值,得到更准确的后验估计。

  • 在马氏距离中的作用:卡尔曼滤波不仅提供了预测位置,还提供了预测位置的不确定性(协方差矩阵)。马氏距离正是利用了这个不确定性来计算预测和检测之间的“统计距离”,考虑了运动的方向和速度,比简单的欧氏距离更可靠。

2. 关联匹配(数据关联)

这是 DeepSORT 相比 SORT 改进最大的地方。它使用了一种级联匹配(Cascade Matching) 的策略,并融合了两种度量。

a. 外观特征提取(Deep Appearance Descriptor)

  • DeepSORT 使用一个在大规模行人重识别(Re-ID)数据集上预训练的深度卷积神经网络。

  • 这个网络接收一个裁剪出的目标图像块(根据检测框),输出一个 128 维的向量(特征嵌入)。

  • 这个向量被归一化,其模长为 1。它编码了目标的外观信息,对姿势变化、部分遮挡有一定鲁棒性。

  • 对于每个轨迹,算法会保存最近 100 个关联成功的外观特征向量,形成一个外观特征库

b. 度量计算

  • 运动度量(马氏距离)
    $$d^{(1)}(i, j) = (d_j - y_i)^T S_i^{-1} (d_j - y_i)$

    • d_j:第 j 个检测框的观测值。

    • y_i:第 i 条轨迹的预测值。

    • S_i:第 i 条轨迹的卡尔曼滤波预测状态的协方差矩阵。

    • 马氏距离过大(超过阈值)的匹配对会被拒绝,可以有效地排除因为运动不确定性而产生的不可靠匹配。

  • 外观度量(余弦距离)
    d^{(2)}(i, j) = min\left \{ 1-r_{j}^{T}r_{k}^{(i) } \mid r_{k}^{(i)} \in R_{i}\right \}

    • r_j:第 j 个检测框的外观特征向量。

    • R_i:第 i 条轨迹的外观特征库(保存了最近 100 个特征向量)。

    • 这个公式计算的是当前检测特征与轨迹历史特征中最小的余弦距离。1 - cosine_similarity 就是余弦距离。取值在 [0, 2] 之间,0 表示完全相同。

c. 融合度量与级联匹配

  • 最终代价矩阵(Cost Matrix)
    最终的匹配代价是运动度和外观度量的线性加权:
    C_{i,j}=\lambda d^{(1)}\left (i,j \right )+(1-\lambda )d^{(2)}\left (i,j \right )
    通常更依赖外观信息,λ 取值较小(如论文中为 0)。

  • 级联匹配(Cascade Matching)

    • 动机:解决频繁遮挡导致的问题。一个目标被遮挡多帧后,其卡尔曼滤波的预测不确定性会越来越大(协方差矩阵膨胀),马氏距离的阈值限制会使其难以与正确的检测结果匹配。

    • 策略:优先匹配更“年轻”(最近出现)的轨迹,而不是像 SORT 一样对所有轨迹一视同仁。

      1. 算法会为当前帧的每个检测,尝试与所有轨迹进行匹配。

      2. 但匹配顺序不是随机的,而是按照轨迹被成功匹配的“年龄”排序。最近成功匹配的轨迹(更可能被看到)优先进行匹配。

      3. 这样,刚刚被遮挡了一两帧的目标(年龄较小)会优先获得匹配机会,避免其被不确定性更大的、长期丢失的轨迹所“挤占”。

  • 匈牙利算法(Hungarian Algorithm)
    使用匈牙利算法(或KM算法)来解决这个分配问题,根据最终的代价矩阵 C_{i,j} 找到最优的匹配对,使得总体的匹配代价最小。

3. 轨迹生命周期管理
  • 新轨迹诞生:任何未与现有轨迹匹配的检测框,都会被初始化为一个暂定(Tentative) 轨迹。

  • 轨迹确认:一个暂定轨迹如果在连续的 N 帧(如 3 帧)中都成功匹配到检测,则被提升为确认(Confirmed) 轨迹。这有助于过滤掉误检。

  • 轨迹消亡:一个确认轨迹如果在最近的 M 帧(如 max_age>30)内都未能匹配到任何检测,则被终止删除。暂定轨迹只要有一帧没匹配上就会被删除。

四、DeepSORT 与 SORT 的对比

特性SORT (Simple Online and Realtime Tracking)DeepSORT (Deep Simple Online and Realtime Tracking)
核心度量仅马氏距离(运动)马氏距离 + 余弦距离(外观)
匹配策略全局匹配(所有轨迹平等)级联匹配(优先匹配年轻轨迹)
处理遮挡弱。遮挡后马氏距离不确定性增加,易导致ID切换利用外观特征,即使遮挡后重新出现也能找回
ID Switch较多显著减少
计算成本较高(需要运行CNN提取特征)

五、总结

DeepSORT 的成功在于它巧妙地融合了目标的运动信息和外观信息

  1. 卡尔曼滤波提供了基于运动的短期预测,效率高且适合线性运动。

  2. 深度外观特征提供了强大的长期辨别能力,能够在大幅度运动变化、遮挡和重现后,依然可靠地确认目标身份。

  3. 级联匹配策略优化了匹配顺序,有效解决了长期遮挡带来的匹配不确定性问题。

正是这种“运动模型为骨,外观模型为魂”的设计理念,使得 DeepSORT 在保持较高实时性的同时,大幅提升了多目标跟踪的准确性和鲁棒性,成为工业界和学术界广泛使用的基线模型。

六、对应过程的代码

https://download.csdn.net/blog/column/11257654/122827312#%E4%BA%8C%E3%80%81%E5%89%8D%E6%8F%90%E7%9F%A5%E8%AF%86%EF%BC%9ASort%20%E5%A4%9A%E7%9B%AE%E6%A0%87%E8%B7%9F%E8%B8%AA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只懒洋洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值