多目标跟踪算法——DeepSORT
1 简介
DeepSORT在SORT的基础上做了一些改进,其中最重大的改进是在做数据(track和detection)关联时利用了行人的外观特征(feature embedding)。通过加入外观特征,可以处理更长时间遮挡下的跟踪[经过更长时间的遮挡,运动模型可能完全失效,无法关联上detection,但是如果有外观特征提供的信息,还有可能关联上],以及减少ID切换。
什么是ID switch呢,加入我们跟踪到了张三,并且把张三标记为ID1,张三经过一片广告牌或一个小人群时被遮挡住了一段时间(无ID1对应的bbox),当张三(检测bbox)再次出现时,它被赋予了一个新ID(关联上的是别的track)。但我们希望,即使张三有一段时间被遮挡了,当他再次出现,仍能保持他上次出现的ID(bbox仍然和原track关联上)。
我们可以再细致地分析一下ID Switch发生的情况:
1)被遮挡的帧数小于\(T_{max}\),但张三重新出现时,它的bbox被其它track匹配上了或者未被任何track匹配上(反正就没被track A匹配上);
2)被遮挡的帧数大于\(T_{max}\),track A直接被注销了。
通过加入外观特征,可以减少情况1的发生概率。
2 算法介绍
在《多目标跟踪算法——SORT》的基础上,DeepSORT有如下变化。
2.1 运动估计
SORT的状态定义为\([u, v, s, r, \dot{u}, \dot{v}, \dot{s}]^T\),前4个值分别表示物体中心坐标、bbox面积和纵宽比。DeepSORT的状态定义为\((u, v, \gamma, h, \dot{x}, \dot{y}, \dot{\gamma}, \dot{h})\),前4个值分别表示物体中心坐标、纵宽比和高度。
2.3 数据关联
2.3.1 基于运动信息的关联
计算第\(j\)个检测目标和第\(i\)个track的马氏距离: \(\boldsymbol{d}_{j}\)是检测结果\((u, v, \gamma, h)\),\(\boldsymbol{y}_{i}\)和\({\boldsymbol{s}_{i}}\)是Kalman预测得到的均值和协方差。
\(d^{(1)}(i, j)=\left(\boldsymbol{d}_{j}-\boldsymbol{y}_{i}\right)^{\mathrm{T}} \boldsymbol{S}_{i}^{-1}\left(\boldsymbol{d}_{j}-\boldsymbol{y}_{i}\right)\)
\(b_{i, j}^{(1)}=\mathbb{1}\left[d^{(1)}(i, j) \leq t^{(1)}\right]\)
2.3.2 基于外观特征的关联
计算第\(j\)个检测目标和第\(i\)个track的外观距离:这里使用的特征(人体ReID特征)都是经过归一化的,计算track最近的100个特征来和检测特征的距离,选择其中的最小距离值。
\(d^{(2)}(i, j)=\min \left\{1-\boldsymbol{r}_{j}{ }^{\mathrm{T}} \boldsymbol{r}_{k}^{(i)} \mid \boldsymbol{r}_{k}^{(i)} \in \mathcal{R}_{i}\right\}\)
\(b_{i, j}^{(2)}=\mathbb{1}\left[d^{(2)}(i, j) \leq t^{(2)}\right]\)
2.3.3 结合运动信息和外观特征
\(c_{i, j}=\lambda d^{(1)}(i, j)+(1-\lambda) d^{(2)}(i, j)\)
\(b_{i, j}=\prod_{m=1}^{2} b_{i, j}^{(m)}\)
2.3.3 Matching Cascade
核心想法就是让age更小的track优先进行匹配。age = the number of frames since last successful measurement association. (只要track关联上了detection,age就reset为0)如果某个被遮挡的物体,它被遮挡的帧数小于\(A_{max}\)(大于\(A_{max}\)该track就要被销毁了),当它重新出现时,会优先(相比于失联更久的track)为它匹配检测结果。
如果不区分优先级,所有的tracks一起进来用匈牙利算法匹配,会出现什么问题呢?答案是如果有两个tracks竞争地匹配同一个检测结果,马氏距离倾向于不确定性较大(遮挡时间较长)的track。
参考机器学习笔记-距离度量与相似度(二)马氏距离,用下面这张图来说明。虽然点A距分布1的中心为4,距分布2的中心为6,从欧式距离上看,应该选择分布1对应的track。但是A点在分布2的\(3\sigma\)内,在分布1的\(3\sigma\)外,从概率上看,应该选择分布2对应的track。在马氏距离下,我们倾向于选择分布2对应的track,这意味着当我们的bbox面临两个track,如果一个track被遮挡了更久,我们的分配算法会偏向将检测结果分配给它。但是这一偏向并不合理,可能会导致跟踪轨迹的碎片化和不稳定性。
后面还会继续关注一些多目标跟踪(MOT)算法。