DeepSort中的Assignment Problem
论文中这一章讲的是如何衡量tracks和detections的相似度度量问题
论文采用了两种度量方法
方法一:马氏距离
计算公式如下:
其中
y
i
y_i
yi是预测框,
d
j
d_j
dj是检测框,
S
i
S_i
Si是协方差矩阵,也就是卡尔曼滤波中的
P
P
P
在跟踪任务中,该距离衡量的是从
(
u
,
v
,
r
,
h
)
(u,v,r,h)
(u,v,r,h)维度,预测框和检测框的差异
方法二:特征值欧氏距离
也就是预测框和检测框对应目标的图像特征的欧氏距离,如果特征是128维,那么这个距离就是两个128维的向量间的欧式距离
实操
那么deepsort是如何使用这两种距离进行预测框和检测框的匹配的呢?
当前任务已跟踪到的目标有两种类型:confirmed和unconfirmed,一个检测框如果没有匹配到预测框,那么它会初始化成为一个新的跟踪目标,此时是unconfirmed,当它在下一帧生成预测框后寻找匹配的检测框时,使用的是IOU,也就是看谁跟他最近,重合度最好,如此一来,如果连续多帧该目标都匹配上了检测框,使其“跟踪行为”得到了延续,那么这个跟踪目标就会变为confirmed(一般连续3帧都匹配到目标,就会变为confirmed)
变为confirmed的跟踪目标就不能简单使用IOU进行匹配了,这时我们的马氏距离和特征欧式距离就登场了,deepsort源码的做法是:首先对所有confirmed跟踪目标根据卡尔曼滤波算法计算出一个预测框,然后计算每个检测框和每个跟踪目标的特征欧式距离,注意这是一个距离矩阵,如果每个跟踪目标保存了过去n帧的目标信息,而现在有m个检测框,那么该矩阵的形状为 ( m , n ) (m,n) (m,n),我们称该矩阵为cost_matrix吧,先放在这里
计算每个预测框和检测框的马氏距离,这个距离同理也是一个 ( m , n ) (m,n) (m,n)的矩阵,这时我们引入一个阈值,且称为gating_threshold吧,我们相信距离大于这个阈值的检测框和预测框不会是match的,因此我们将所有大于这个阈值的位置记录下来,然后将cost_matrix中对应位置的值设为无穷大。这是什么意思呢?相当于用马氏距离做了一次筛选,马氏距离太远的,我们忽略其特征相似性,经过筛选后,就可以直接用cost_matrix进行衡量目标间相似性了,该矩阵就可以作为匈牙利算法的输入,最后得到匹配的结果。
一个尾巴
故事进行到这里,应该还有一个疑问,就是马氏距离筛选用的阈值gating_threshold怎么设定?对于这个问题,以下是个人的理解,如有谬误,十分欢迎提出和指证。
我们可以将马氏距离看做一组经过修正的随机变量的欧氏距离,欧式距离也就是各维度变量的平方和,经过修正之后的各变量,可以看作一组独立但是符合同一正态分布的变量。多个独立的符合正态分布的变量的平方和服从什么分布呢?卡方分布!
所以论文中选择9.4877里由来就明晰了:选择自由度为4(u,v,r,h 4个维度)的卡方分布的置信度为95%的置信上界,也就是9.4877。
这里可以这么理解:如果该检测框和预测框是匹配的,那么他们的各维度值(u,v,r,h)必然独自来源于同一分布,如果不匹配,比如值相差很大,则分布的参数肯定不一样,也就不是同一分布,那既然是同一分布,那马氏距离也必然符合卡方分布,他们有95%的概率小于9.4877,这也就是设定阈值的依据。
最后的最后
deepsort算法涉及卡尔曼滤波算法、目标关联度量、级联操作、匈牙利算法,堪称一套经典目标跟踪pipeline,本人撰写的文章也仅限于本人对一些自认为难点部分的解读,如果对deepsort流程感兴趣的同学,十分推荐这一篇文章,堪称保姆级流程解说。