S o r t & Deep S o r t 多目标跟踪

一、 Sort (IPIL 2016): SIMPLE ONLINE AND REALTIME TRACKING

在跟踪之前,对所有目标已经完成检测,实现了特征建模过程。

  1. 第一帧进来时,以检测到的目标初始化并创建新的跟踪器,标注id。
  2. 后面帧进来时,先到卡尔曼滤波器中得到由前面帧box产生的状态预测和协方差预测。求跟踪器所有目标状态预测与本帧检测的box的IOU,通过匈牙利指派算法得到IOU最大的唯一匹配(数据关联部分),再去掉匹配值小于iou_threshold的匹配对。
  3. 用本帧中匹配到的目标检测box去更新卡尔曼跟踪器,计算卡尔曼增益、状态更新和协方差更新,并将状态更新值输出,作为本帧的跟踪box。对于本帧中没有匹配到的目标重新初始化跟踪器。

其中,卡尔曼跟踪器联合了历史跟踪记录,调节历史box与本帧box的残差,更好的匹配跟踪id。

多目标跟踪被视为数据关联问题,在视频帧序列中进行跨检测结果的关联,为了解决数据相关的问题,跟踪器使用了多种方法对运动过程和运动目标的外观特征进行建模!
作者为了遵循Occam’s Razor,作者在进行目标跟踪时没有使用任何被跟踪目标的外观特征,而仅仅使用了检测框的位置和大小进行目标的运动估计和数据关联,也没有进行任何的重识别的算法,所以当目标跟丢时,就找不回来,只能通过检测去重新更新ID,这就不符合跟踪算法的常理了,需要改进,当然这篇文章主要就是追求速度!而不是过多的关注与检测错误的鲁棒性!

预测模型

S o r t & Deep S o r t 多目标跟踪
其中u和v分别代表目标的中心横纵坐标,s和r表示目标的BBox的尺寸大小和比例,注意长宽比应该为一个常量。因此后面三个量表示预测的下一帧,当检测与目标关联时,检测到的边界框用于更新目标状态,其中通过卡尔曼方法对速度分量进行了优化求解。如果没有检测与目标关联,则只需使用线性速度模型。

数据关联

作者使用匈牙利指派算法进行数据关联,使用的cost矩阵为原有目标在当前帧中的预测位置和当前帧目标检测框之间的IOU。当然小于指定IOU阈值的指派结果是无效的。作者发现使用IOU能够解决目标的短时被遮挡问题。这是因为目标被遮挡时,检测到了遮挡物,没有检测到原有目标,假设把遮挡物和原有目标进行了关联。那么在遮挡结束后,因为在相近大小的目标IOU往往较大,因此很快就可以恢复正确的关联。这是建立在遮挡物面积大于目标的基础上的

目标丢失的问题

如果连续 TlostT_{lost}帧没有实现已追踪目标预测位置和检测框的IOU匹配,则认为目标消失。实验中设置 Tlost=1T_{lost}=1 ,原因有二,一是匀速运动假设不合理,二是作者主要关注短时目标追踪。另外,尽早删除已丢失的目标有助于提升追踪效率。但是,问题就出现了,这样的话目标的ID一定会频繁的切换,这样就会造成跟踪计数的不准确!

作者使用了Faster RCNN来进行模型的检测,并使用Kalman滤波预测状态,基于检测框位置和IOU的匈牙利算法,使得算法有很高的效率,但是这么频繁的ID切换,在实际应用中就失去了跟踪的价值了!

二、Deep SORT(ICIP2017): Simple Online and Realtime Tracking with a Deep Association Metric

SORT算法使用简单的卡尔曼滤波处理逐帧数据的关联性以及使用匈牙利算法进行关联度量,这种简单的算法在高帧速率下获得了良好的性能。但由于SORT忽略了被检测物体的表面特征,因此只有在物体状态估计不确定性较低是才会准确,在Deep SORT中,我们使用更加可靠的度量来代替关联度量,并使用CNN网络在大规模行人数据集进行训练,并提取特征,已增加网络对遗失和障碍的鲁棒性。

追踪模块和状态估计

S o r t & Deep S o r t 多目标跟踪
分别表示bounding box中心的位置、纵横比、高度、以及在图像坐标中对应的速度信息。然后使用一个kalman滤波器预测更新轨迹,该卡尔曼滤波器采用匀速模型和线性观测模型。其观测变量为 (u,v,r,h)

分配问题

在位置度量上,使用Mahalanobis distance距离,对框的距离进行计算,如下所示:
S o r t & Deep S o r t 多目标跟踪

表示第j个detection和第i条轨迹之间的运动匹配度,其中 SiS_i 是轨迹由kalman滤波器预测得到的在当前时刻观测空间的协方差矩阵, yiy_i 是轨迹在当前时刻的预测观测量, djd_j 时第j个detection的状态 (u,v,r,h)(u,v,r,h) 考虑到运动的连续性,可以通过该马氏距离对detections进行筛选,文中使用卡方分布的0.95分位点作为阈值 t(1)=0.4877t^{(1)} =0.4877,

在外观度量上,使用的是cosine distance,如下所示:
当目标运动不确定性较低时,马氏距离是一个很好的关联度量,但在实际中,如相机运动时会造成马氏距离大量不能匹配,也就会使这个度量失效,因此,我们整合第二个度量标准,对每一个BBox检测框 djd_j 我们计算一个表面特征描述子 rj,rj=1r_j,\left| {r_j} \right|=1 , 我们会创建一个gallery用来存放最新的 Lk=100L_k=100 个轨迹的描述子,即 Rk={rk(i)}k=1LkR_k=\left\{ {r_k^{(i)}} \right\}_{k=1}^{L_k} ,然后我们使用第i个轨迹和第j个轨迹的最小余弦距离作为第二个衡量尺度!
S o r t & Deep S o r t 多目标跟踪

最后加权,通过加权的方式对这两个距离进行相加:
S o r t & Deep S o r t 多目标跟踪
总之,距离度量对于短期的预测和匹配效果很好,而表观信息对于长时间丢失的轨迹而言,匹配度度量的比较有效。超参数的选择要看具体的数据集,比如文中说对于相机运动幅度较大的数据集,直接不考虑运动匹配程度。

匹配级联

S o r t & Deep S o r t 多目标跟踪

深度表观描述子

预训练的网络时一个在大规模ReID数据集上训练得到的,这个ReID数据集包含1261个人的1100000幅图像,使得学到的特征很适合行人跟踪。
然后使用该预训练网络作为基础网络,构建wide ResNet,用来提取bounding box的表观特征。该网络在Nvidia GeForce GTX 1050 mobile GPU下提取出32个bounding boxes大约花费30ms,可以满足实时性要求。
S o r t & Deep S o r t 多目标跟踪

总的来说,效果还是很明显的,使用CNN提取的特征进行匹配,大大减少了SORT中的ID switches, 经作者实验证明减少了大约45%, 在高速率视频流中也达到了很好的水准!

代码讲解可参考 :https://blog.csdn.net/sgfmby1994/article/details/98517210