【算法分析】SORT/Deep SORT 物体跟踪算法解析

目录

SORT - SIMPLE ONLINE AND REALTIME TRACKING

概述

解析SORT算法代码

SORT算法的优缺点

Deep SORT - SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC

关联度量(ASSOCIATION METRIC)

关联算法 Matching Cascade


SORT - SIMPLE ONLINE AND REALTIME TRACKING

 

概述

SORT算法示意2

SORT跟踪算法到底在干什么?(以单目标跟踪为例说明如下)

  • 假设T1时刻成功跟踪了某个单个物体,ID1,绘制物体跟踪BBox(紫色)
  • T2时刻物体检测BBox总共有4个(黑色),预测T2时刻物体跟踪的BBox(紫色)有1个,解决紫色物体跟踪BBox如何与黑色物体检测BBox关联的算法,就是SORT物体跟踪算法要解决的核心问题
  • SORT关联两个BBox的核心算法是:用IOU计算Bbox之间的距离 + 匈牙利算法选择最优关联结果
SORT算法示意2

物体跟踪与物体检测是两件不同的事

物体跟踪是把物体跟踪预测的BBox与物体检测的BBox关联,然后用对应的物体检测BBox代表成功跟踪的BBox结果

以上图为例

  • T1时刻已经成功跟踪了3个检体(不同颜色的BBox代表不同的物体ID)
  • T2时刻除了所有物体检测的新位置BBox(灰色),还要物体跟踪预测的Bbox(非灰的其它不同颜色BBox)与物体检测Bbox(灰色)关联,从而分辨出哪一个物体跟踪的Bbox对应哪一个物体检测的BBox,从而产生T2时刻的物体跟踪BBox结果(包括新增物体跟踪器跟踪T2中新检测到的物体)
  • T3时刻如果被追踪的物体发生了遮挡(红框BBox的物体),那么要继续能找到该物体并追踪 (避免ID Switch)

物体跟踪有几个主要任务以及它们对应的解决方案

  • 检测-深度学习的各种检测网络来实现物体检测
  • 跟踪预测与关联-Tracking的算法来实现物体追踪(比如 本文介绍的SORT)
  • ID Switch- Tracking的算法来解决遮挡物体(比如 deep SORT)
  • ReID(跨摄像头发现和跟踪同一个物体,避免ID switch) -  比如 deep SORT

解析SORT算法代码

代码分析1
代码分析2
算法图示
代码分析3
代码分析4
代码分析5
代码分析6
代码分析7

SORT算法的优缺点

优点缺点

速度快 

对于物体遮挡几乎没有处理,导致ID switch 次数很高

在没有遮挡的情况下准确度很高

有遮挡的情况下准确度很低

SORT是一个很粗糙的跟踪算法,所以又有了Deep SORT

 

Deep SORT - SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC

 

关联度量(ASSOCIATION METRIC)

  • 计算公式(1) 
  • 马氏距离计算物体检测Bbox dj和物体跟踪BBox yi之间的距离
  • 注:不使用欧式距离的原因是djyi 的空间域分布不同,欧式距离忽略空间域分布的计算结果不能准确反映两者的真实距离
  • 当两者距离≤特定阈值,则表示两者关联 
  • 但马氏距离依然不能很好的解决物体被长时间遮挡后关联不正确导致ID Switch的问题
  • 计算公式(2
  • 物体检测BBox dj 通过CNN网络计算对应的128feature向量rj 称为appearance descriptor
  • 具体的做法是把物体检测BBox dj  对应的图像patch作为下图CNN输入,输出128feature向量rj
Deep Cosine Metric Learning for Person Re-identification

 

  • 对于跟踪器i,为它创建一个集合保留它过去Lk 次成功跟踪后物体检测Bbox对应的Lk Feature向量集合公式(2)是在计算第i个物体跟踪的所有Feature向量和第j个物体检测之间的最小余弦距离具体含义参考下图
  • 当两者距离≤特定阈值,则表示两者关联 
    公式(2)的几何解释

    组合计算公式(1)和(2)作为计算第i个物体跟踪和第j个物体检测之间关联度量的总公式

    组合距离阈值判断不等式,作为总的判断第i个物体跟踪和第j个物体检测之间的距离(关联度量)是否关联的总公式

  • 关联算法 Matching Cascade

T是物体跟踪集合

D是物体检测集合

  1. C矩阵存放所有物体跟踪i与物体检测j之间距离的计算结果
  2. B矩阵存放所有物体跟踪i与物体检测j之间是否关联的判断(0/1)
  3. 关联集合M初始化为{}
  4. 将找不到匹配的物体检测集合初始化为D
  5. 从刚刚匹配成功的跟踪器循环遍历到最多已经有Amax 次没有匹配的跟踪器
  6. 选择满足条件的跟踪器集合Tn
  7. 根据最小成本算法计算出Tn与物体检测j关联成功产生集合[xi,j]
  8. 更新M为匹配成功的(物体跟踪i,物体检测j) 集合
  9. U中去除已经匹配成功的物体检测j
  10. 循环
  11. 返回 M U 两个集合
### DeepSort 跟踪算法实现与解释 #### 3.1 概述 DeepSort 是一种用于多目标跟踪的强大算法,它结合了深度学习特征提取和卡尔曼滤波器来提高跟踪性能。该方法不仅考虑物体检测框的位置信息,还利用外观特征来进行更稳定的长期跟踪。 #### 3.2 卡尔曼滤波器 为了预测对象的状态并减少噪声影响,DeepSort 使用线性动力学模型下的卡尔曼滤波器估计目标位置。通过状态向量表示目标的位置和速度,并基于此构建观测矩阵 H 和转移矩阵 F 来更新预测值[^1]。 ```python import numpy as np from filterpy.kalman import KalmanFilter def init_kf(): kf = KalmanFilter(dim_x=7, dim_z=4) # 初始化参数... return kf ``` #### 3.3 特征提取网络 对于每个检测到的对象,使用预训练好的卷积神经网络 (CNN) 提取其视觉特征。这些特征被用来计算不同帧间相似度得分,从而帮助解决遮挡等问题带来的挑战。通常采用 ResNet 或 MobileNet 这样的架构作为骨干网[^2]。 ```python import torch from torchvision.models.resnet import resnet50 class FeatureExtractor(nn.Module): def __init__(self): super().__init__() self.backbone = resnet50(pretrained=True) def forward(self, x): features = self.backbone(x) return features ``` #### 3.4 关联策略 当有多个候选匹配时,DeepSort 利用匈牙利算法最小化代价函数 C(i,j),其中 i 表示当前帧中的检测结果索引,j 对应于前一时刻已知轨迹 ID。成本由马氏距离(Mahalanobis Distance)以及余弦相似度共同决定: \[C_{ij}=\alpha d_M(\hat{x}_i,x_j)+(1-\alpha)c_f(f_i,f_j)\] 这里 \(d_M\) 表达的是 Mahalanobis distance;\(c_f\) 计算两个特征向量之间的 cosine similarity;\(\alpha \in [0,1]\) 控制两者权重比例[^3]。 #### 3.5 实现流程总结 - **初始化**: 创建一组空闲轨迹池; - **处理每一帧图像**: - 获取所有检测边界框及其对应的 CNN 特征; - 更新现有轨迹的卡尔曼滤波器预测; - 应用关联逻辑分配新的或现有的轨迹给各个检测; - 如果某个轨迹长时间未更新,则将其标记为丢失; 最终输出每帧中所有活动轨迹的信息列表。
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值