前言
-
背景:
DeepSort
是基于Sort
目标跟踪进行的改进,它引入深度学习模型,在实时目标跟踪过程中,提取目标的外观特征进行最近邻近匹配。 -
目的:改善有遮挡情况下的目标追踪效果;同时,也减少了目标ID跳变的问题。
-
核心思想:使用递归的卡尔曼滤波和逐帧的匈牙利数据关联。
多目标跟踪主要流程
- 给定视频原始帧。
- 运行目标检测器如
Faster R-CNN、SSD、YOLO系列
等进行检测,获取目标检测框。 - 将所有目标框中对应的目标抠出来,进行特征提取(包括表观特征或者运动特征)。
- 进行相似度计算,计算前后两帧目标之间的匹配程度(前后属于同一个目标的之间的距离比较小,不同目标的距离比较大)
- 数据关联,为每个对象分配目标的ID。
因此绝大多数MOT算法无外乎就这四个步骤:
- ①检测
- ②特征提取、运动预测
- ③相似度计算
- ④数据关联。
其中影响最大的部分在于检测,检测结果的好坏对于最后指标的影响是最大的。
DeepSort
DeepSort
中最大的特点是加入外观信息,借用了ReID
领域模型来提取特征,减少了ID switch
的次数。整体流程图如下:
从上图可以看出,DeepSORT
算法在SORT
算法的基础上增加了级联匹配(Matching Cascade)
+新轨迹的确认(confirmed)
。总体流程为:
- 卡尔曼滤波器预测轨迹
Tracks
- 使用匈牙利算法将预测得到的轨迹
Tracks
和当前帧中的detections
进行匹配(级联匹配和IOU匹配) - 卡尔曼滤波更新
其中上图中的级联匹配展开如下:
上图非常清晰地解释了如何进行级联匹配,上图由虚线划分为两部分:
- 上半部分中计算相似度矩阵的方法使用到了外观模型(ReID)和运动模型(马氏距离)来计算相似度,得到代价矩阵,另外一个则是门控矩阵,用于限制代价矩阵中过大的值。
- 下半部分中是是级联匹配的数据关联步骤,匹配过程是一个循环(max age个迭代,默认为70),也就是从missing age=0到missing age=70的轨迹和Detections进行匹配。也就是说,对于没有丢失过的轨迹赋予优先匹配的权利,而丢失的最久的轨迹最后匹配。通过这部分处理,可以重新将被遮挡目标找回,降低被遮挡然后再出现的目标发生的ID Switch次数。
将Detection和Track进行匹配,所以出现几种情况:
- Detection和Track匹配,也就是Matched Tracks。普通连续跟踪的目标都属于这种情况,前后两帧都有目标,能够匹配上。
- Detection没有找到匹配的Track,也就是Unmatched Detections。图像中突然出现新的目标的时候,Detection无法在之前的Track找到匹配的目标。
- Track没有找到匹配的Detection,也就是Unmatched Tracks。连续追踪的目标超出图像区域,Track无法与当前任意一个Detection匹配。
- 以上没有涉及一种特殊的情况,就是两个目标遮挡的情况。刚刚被遮挡的目标的Track也无法匹配Detection,目标暂时从图像中消失。之后被遮挡目标再次出现的时候,应该尽量让被遮挡目标分配的ID不发生变动,减少ID Switch出现的次数,这就需要用到级联匹配了。
总结
DeepSort是基于Sort目标跟踪进行的改进,它引入深度学习模型,在实时目标跟踪过程中,提取目标的外观特征进行最近邻近匹配。其可以达到实时跟踪效果,可被应用于工业开发。