DeepSort的简单笔记

SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC

代码:https://github.com/nwojke/deep_sort

这篇文章是在SORT基础上的改进。SORT的匹配矩阵用的是IOU,匹配方法是匈牙利算法。

Deepsort加入了外观特征和级联匹配解决了ID switch和长时间遮挡的追踪问题。

 

目标的创建和移除:

对于每个trk,记录从上一次成功与检测目标匹配之后,没有匹配上的帧数,超过最大阈值,就删除这个trk.

如果检测的目标和已有的trk没有匹配上,那么认为出现了新的目标。但新的目标要连续h帧和潜在的新的追踪器匹配上,才认为真正出现了新的trk。否则认为检测错误。

 

关联矩阵的构建:

使用了运动信息和外观信息来构建关联矩阵。

1.运动特征:

计算trk的卡尔曼预测的位置和新检测出的目标位置det之间的马氏距离。(马氏距离是一个归一化的距离)

DeepSort的简单笔记

dj​表示第j个检测框的位置,yi​表示第i个追踪器对目标的预测位置,

Si​表示检测位置与平均追踪位置之间的协方差矩阵(代码中用到了cholesky分解主要是为了加速计算马氏距离。马氏距离中需要计算协方差矩阵的逆,直接求逆是很耗时的。协方差矩阵恰好又是一个正定的,它的逆通过分解可以直接变成三角阵的逆).

马氏距离通过计算检测位置和平均追踪位置之间的标准差将状态测量的不确定性进行了考虑。
如果某次关联的马氏距离小于指定的阈值t(1),则设置运动状态的关联成功。

使用的函数为

DeepSort的简单笔记

作者设置t(1)=9.4877。

 

2 外观特征:

当运动的不确定性很低的时候,上述的马氏距离匹配是一个合适的关联度量方法,但是在图像空间中使用kalman滤波进行运动状态估计只是一个比较粗糙的预测。特别是相机存在运动时会使得马氏距离的关联方法失效,造成出现ID switch的现象。

因此引入外观特征。计算了当前det的特征向量(要求||r||=1)与trk中每个关联的特征向量的余弦距离的最小值。

DeepSort的简单笔记

如果上面的距离小于指定的阈值,那么这个关联就是成功的。阈值是从单独的训练集里得到的

最终的度量矩阵:

DeepSort的简单笔记

只有ci,j​位于两种度量阈值的交集内时,才认为实现了正确的关联。
距离度量对短期的预测和匹配效果很好,但对于长时间的遮挡的情况,使用外观特征的度量比较有效。对于存在相机运动的情况,可以设置λ=0.

 

级联匹配:

当一个目标长时间被遮挡之后,kalman滤波预测的不确定性就会大大增加,状态空间内的可观察性就会大大降低。假如此时两个追踪器竞争同一个检测结果的匹配权,往往遮挡时间较长的那条轨迹因为长时间未更新位置信息,追踪预测位置的不确定性更大,即协方差会更大,马氏距离计算时使用了协方差的倒数,因此马氏距离会更小,因此使得检测结果更可能和遮挡时间较长的那条轨迹相关联,这种不理想的效果往往会破坏追踪的持续性。这么理解吧,假设本来协方差矩阵是一个正态分布,那么连续的预测不更新就会导致这个正态分布的方差越来越大,那么离均值欧氏距离远的点可能和之前分布中离得较近的点获得同样的马氏距离值。

使用级联匹配来保证最近匹配上的trk的优先匹配权。

DeepSort的简单笔记

在匹配的最后阶段还对unconfirmed和age=1的未匹配轨迹和检测目标进行基于IoU的匹配。这可以缓解因为表观突变或者部分遮挡导致的较大变化。当然有好处就有坏处,这样做也有可能导致一些新产生的轨迹被连接到了一些旧的轨迹上。但这种情况较少

 

 

参考了https://blog.csdn.net/cdknight_happy/article/details/79731981