ByteTrack多目标跟踪

你猜为啥要叫ByteTrack?

ByteTrack多目标跟踪

ByteTrack是由华中科技大学Yifu Zhang等人提出的一种多目标跟踪方案。其它目标跟踪方法往往会直接丢弃置信度较低的目标,而ByteTrack则另辟蹊径将这些目标利用了起来。你可以在这里找到原文:

ByteTrack: Multi-Object Tracking by Associating Every Detection Box
Multi-object tracking (MOT) aims at estimating bounding boxes and identitiesof objects in videos. Most methods obtain identities by associating detectionboxes whose scores are higher than a threshold. The objects with low detectionscores, e.g. occluded objects, are simply thrown away, which bring…

同时作者开放了源代码:

GitHub - ifzhang/ByteTrack: ByteTrack: Multi-Object Tracking by Associating Every Detection Box
ByteTrack: Multi-Object Tracking by Associating Every Detection Box - GitHub - ifzhang/ByteTrack: ByteTrack: Multi-Object Tracking by Associating Every Detection Box

这篇文章是对其核心内容的摘抄。


多目标跟踪中的目标检测

目标检测与目标跟踪相辅相成。一些方法使用如卡尔曼滤波来预测跟踪物体后续位置并与实际检测结果融合来提升效果;另一些使用先前已跟踪物体来增强后续帧图像中的特征表述;近期一些方案使用了Transformer以充分利用其在帧间关联信息的能力。大部分的多目标跟踪方法在获取物体检测结果后,会丢弃置信度小于一定阈值的结果。这些结果往往包含过多的背景图像,这对跟踪器来说是不利的。但是ByteTrack依旧保留了这些目标,并尝试利用它们。

数据关联

数据关联是多目标跟踪的核心。它首先计算跟踪对象与检测结果之间的相似程度,然后按照相似度将它们关联。

相似度度量

位置、运动以及外观均是关联的有效线索。SORT使用卡尔曼滤波预测跟踪对象在下一帧的新位置,然后计算与检测框的IoU作为相似度。基于位置与运动的相似度方法在短周期匹配是准确的。对于长周期匹配来说,物体的外观则是一项更加可靠的选项。例如DeepSORT引入独立的Re-ID模型来提取目标的外观特征。这种将检测与Re-ID联合起来的方法变得愈发流行。

匹配策略

相似度计算之后便是目标匹配。一般通过匈牙利算法或者贪心算法。SORT通过单次匹配来实现。DeepSORT提出了一种级联匹配策略,首先将检测结果与最近的跟踪对象匹配,然后再与丢失对象匹配。MOTDT首先按照外观相似度匹配,然后再使用IoU相似度处理未匹配的跟踪对象。QuasiDense通过双向softmax操作将外观相似度转换为概率分布,然后使用最近邻搜索完成匹配。注意力机制则可以直接在帧之间传递物体信息并且隐式地实现匹配。

所有的这些方法都在聚焦于如何设计更好的匹配方法。但是ByteTrack作者认为检测结果决定了数据关联的上限,因此专注于在匹配过程中关注全部不同分值的检测结果。

BYTE策略

BYTE保留了全部检测结果,并将它们分为高分值组与低分值组。首先将跟分值组与跟踪对象相关联。此时由于画面模糊、抖动等原因会有一部分跟踪对象没有被关联。然后再将低分值检测结果与未匹配的跟踪对象相关联来保留低分值检测结果并过滤背景。

BYTE策略包含一个物体检测器、一个卡尔曼滤波器,以及三个阈值:检测阈值T_high、T_low与跟踪阈值E。输入为视频中的每一帧图像,输出为物体的坐标以及唯一性ID。实际运行时,对于每一帧图像将检测器输出的物体按照阈值分组。大于T_high的归入高分值组;介于T_high与T_low之间的归入低分值组。同时使用卡尔曼滤波器预测已跟踪物体的下一个位置。

第一次数据匹配涉及检测结果的高分值组与全部跟踪对象。基于IoU计算相似度,再使用匈牙利算法完成匹配。此时未匹配的检测结果与跟踪结果依然予以保留。

第二次数据匹配涉及检测结果的低分值组与上一步剩余的跟踪对象。完成匹配后,保留未匹配的跟踪对象,并丢弃仍未匹配的检测结果。在这一步需要优先使用IoU作为匹配依据。毕竟低分值对象的外观多发生劣化。

在匹配完成后,未被成功匹配的跟踪对象将会被移除。不过实际中,第二次数据匹配也失败的跟踪对象会被暂存,直到足够久仍未获得匹配,才会被丢弃。

最后一步则是跟踪新出现物体。这些物体来自未被匹配的高分值检测结果。对于每一个检测结果,如果他的分值高于E且在连续两帧中出现,则将其纳入跟踪对象集合中。

实验设计与分析

实验中,检测结果高分阈值为0.6,低分阈值为0.1,跟踪阈值为0.7。匹配阶段的IoU阈值为0.2。丢失物体的暂存周期为30帧。检测器使用了YOLOX,并使用COCO数据集预训练。图像输入尺寸为1440*800。数据增强包括Mosaic与Mixup。使用8块Nvidia Tesla V100训练,batch size为48。优化器为SGD,weight decay为5e10-4,monmentum为0.9。初始学习率10e-3,第一个epoch作为warmup。推演时使用单块GPU。

在各个数据集下的表现这里省略。从性能来看,当输入为512*928时,检测器的运行耗时为17.9 ms,数据关联时间为4.0 ms。

小结

物体跟踪几乎是视频分析项目绕不过去的技术课题。前段时间在项目中遇到一个静止物体跟踪问题。最后是基于物体位置线索、跨帧画面IoU匹配并结合足够的安全冗余实现了一个极其轻量的跟踪算法。而对于运动物体来说,目前看来卡尔曼滤波是一个稳妥的选择。注意部分跟踪方案里的Re-ID技术,它不仅可以用于视频物体跟踪,还可以用作后续的相似物体检索召回中。只不过,功能的增加往往以性能下降为代价。实际的产品中,必然要根据目标应用场景去做适配与取舍。对于开发人员来说,明晓其背后的原理,可以优选方案,少走弯路。