目标跟踪:Deepsort--卡尔曼滤波、匈牙利匹配、马氏距离、欧氏距离、级联匹配、reid

本文深入探讨目标跟踪中的关键技术,包括卡尔曼滤波、匈牙利匹配、马氏距离等。SORT算法通过IOU匹配进行目标跟踪,而DeepSORT则引入级联匹配和外观特征的马氏距离,提高匹配准确性。通过详细解释马氏距离的计算及其在降低不确定性中的作用,阐述了DeepSORT如何优化目标跟踪性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章供自己学习回顾,其中错误希望指出!
先把目标跟踪中涉及到的名词抛出来:
1、卡尔曼滤波、
2、匈牙利匹配:https://blog.csdn.net/DeepCBW/article/details/124740092
3、马氏距离、
4、欧氏距离、
5、级联匹配、
6、代价矩阵

一、6个名词的概念理解;

二、要想彻底理解Deepsort,先要把sort彻底理解;

sort过程比较简单,先搬个图:
sort
基于上图展开对sort的理解攻势:
1、给定视频原始帧(假设第一帧就有目标框);
2、运行目标检测器进行检测,获取目标检测框,分配初始轨迹;
3、轨迹卡尔曼滤波预测
4、使用匈牙利算法将预测后的tracks和当前帧中的detecions进行匹配(IOU匹配);
5、卡尔曼滤波更新;
上述过程应该只有4这个过程承上启下,理解模糊。以下进行详细解释:
匈牙利算法 解决的是一个分配问题,在 MOT 主要步骤中的计算相似度的,得到了前后两帧的相似度矩阵。匈牙利算法就是通过求解这个相似度矩阵(iou),从而解决前后两帧真正匹配的目标。这部分 sklearn 库有对应的函数 linear_assignment 来进行求解。

SORT 算法中是通过前后两帧 IoU 来构建相似度矩阵,所以 SORT 计算速度非常快。

Detections 是通过目标检测器得到的目标框,Tracks是一段轨迹。核心是匹配的过程与卡尔曼滤波的预测和更新过程。

匈牙利的详细过程参考:https://zhuanlan.zhihu.com/p/459758723
https://zhuanlan.zhihu.com/p/90835266

三、6个部分在Deepsort中,是如何进行目标跟踪的;

deepsort
DeepSORT的优化主要就是基于匈牙利算法里的这个代价矩阵。它在IOU Match之前做了一次额外的级联匹配,利用了reid外观特征马氏距离
级联匹配的具体过程如下图:
级联匹配
由上图可以看到,Cost Matrix 代价矩阵 是由以下两部分组成:
1、马氏距离 Mahalanobis Distance和余弦距离 Cosine Distance计算相似度矩阵,得到代价矩阵
2、门控矩阵,用于限制代价矩阵中过大的值。
接下来详细讲解由相似度矩阵和门控矩阵怎样计算出来代价矩阵:
(1) 马氏距离
看追踪和检测的Bbox的状态向量的前四维度 cx,cy,r,h的接近程度。通常来说上下帧之间移动距离不会相差太远,所以坐标越接近就越可能是同一个目标。
如何衡量两者之间的距离呢,第一反应可能就是欧式距离了。
但是,cx,cy,h是像素级的数值,而 r 宽高比 是一个比例,可能是零点几的数值,所以四者之间数量级不一样有差距,而且他们之间也不是相互独立的,存在相关性(比如r和h)。直接用欧氏距离进行计算的话不合适。
DeepSORT采取马氏距离来计算,用马氏距离就需要提供cx,cy,r,h的协方差矩阵(在卡尔曼滤波中,卡尔曼滤波的测量方程,测量空间的协方差矩阵,卡尔曼更新过程中把协方差矩阵提供给数据关联),所以,协方差是干嘛的?就是用来求取马氏距离的;协方差代表什么?表示目标位置信息的不确定性,由8x8的对角矩阵表示,矩阵中数字越大则表明不确定性越大,可以以任意值初始化。马氏距离通过计算检测位置和平均追踪位置之间的标准差将状态测量的不确定性进行了考虑。
马氏距离相似度度量计算公式:
在马氏距离插入图片描述
(2) 余弦距离
余弦距离
(3)代价矩阵
代价矩阵
但注意也不是完全没用了,主要是通过阈值矩阵(Gate Matrix)对代价矩阵(Cost Matrix)做了一次阈值限制。

接下来就是数据关联,由上面的代价矩阵进行匈牙利匹配。

匈牙利匹配的详细过程码完代码再回来总结,解决为什么是三部分。

参考:
https://zhuanlan.zhihu.com/p/133678626
https://zhuanlan.zhihu.com/p/97449724
https://blog.csdn.net/libo1004/article/details/115261950
https://blog.csdn.net/weixin_41761357/article/details/107375761

### 卡尔曼滤波器中的回冲问题及其解决方法 卡尔曼滤波器是一种用于估计动态系统的状态的算法,在处理噪声数据方面表现出色。然而,当测量值突然变化时,可能会出现所谓的“回冲”现象,即滤波器输出跟随这些突变而产生不必要的振荡。 为了减小这种回冲效应,可以采取多种策略: #### 调整过程噪声协方差矩阵 Q 和观测噪声协方差 R 通过合理设置这两个参数,可以在平滑度和平稳响应之间找到平衡点。增大 \(Q\) 可使模型更相信预测而非测量;反之,则会增加对新信息的信任程度[^1]。 ```python import numpy as np # 增大过程噪声协方差以降低敏感性 kalman_filter.Q = np.array([[0.1, 0], [0, 0.1]]) ``` #### 使用扩展窗口平均法 (EWMA) 此技术通过对最近几次的历史测量取加权均值得到当前时刻的状态估值,从而有效地抑制短期波动的影响。这种方法特别适用于那些具有较强趋势性的信号过滤场景中[^2]。 ```python def ewma(data, alpha=0.7): result = [] prev = data[0] for value in data: current = alpha * value + (1 - alpha) * prev result.append(current) prev = current return result ``` #### 实施鲁棒统计学方法 采用M估计或其他形式的稳健回归来替代传统的最小二乘拟合方式,能够显著提高抗干扰能力并减少异常点带来的影响。这类方法通常基于Huber损失函数或Tukey's bisquare权重方案构建而成。 ```python from sklearn.linear_model import HuberRegressor huber_regressor = HuberRegressor(epsilon=1.35).fit(X_train, y_train) y_pred_robust = huber_regressor.predict(X_test) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值