【多目标跟踪MOT学习笔记】字节跳动ByteTrack论文研究(一):BYTE策略

文章目录

  • 前言
  • 一、是什么ByteTrack?
  • 二、BYTE
    • 1.BYTE method 概览
    • 2. First Association(关联1)
    • 3. Second Association(关联2)
    • 4. Post-Processing(后处理)
      • 4.1 T_re-remain
      • 4.2 D_remain
  • 总结


前言

  最近在研究Tracking-by-Detection的目标跟踪策略,想优化SOT的跟踪性能,恰好搜到了字节的这篇文章,所以进行了研究,本文简略介绍论文中所提到的BYTE策略。


一、是什么ByteTrack?

  什么…是快乐星球?(手动狗头)
  ByteTrack是字节跳动与2021年10月份公开的一个全新的MOT算法,原论文是《ByteTrack: Multi-Object Tracking by Associating Every Detection Box》目前收录于arXiv,还未发表。
  ByteTrak的MOTA和FPS都实现了较好的性能,要优于现有的大多数MOT算法。
【多目标跟踪MOT学习笔记】字节跳动ByteTrack论文研究(一):BYTE策略_第1张图片
  个人觉得,本文的核心就是BYTE,不过BYTE的策略真的是十分简单易懂,而且原论文中也只有一个伪代码作为参考,所以我对该策略进行了总结。

二、BYTE

1.BYTE method 概览

  由于原论文里面只有几张图片和一个伪代码,我根据自己对原论文的BYTE算法理解绘制了BYTE的流程框图,如下图所示。
【多目标跟踪MOT学习笔记】字节跳动ByteTrack论文研究(一):BYTE策略_第2张图片
  先前的MOT算法一般在完成当前帧的目标检测后只会保留置信度比较大的检测框用于进行目标跟踪,比如图中置信度为0.9和0.8的目标框。而在BYTE中,作者保留了所有的检测框(图中的所有四个黄色的检测框)并且通过阈值将它们分成了两份,先后与上一帧的检测框(绿框、红框和蓝框)进行关联。
  在跟踪过程中,由于遮挡、运动模糊和尺度变换等因素,我们仅仅凭借高置信度的检测框无法完美地实现所有目标的MOT,比如上图中关联1的输出,原先红框的对象被遗漏了,而关联2则较好地解决了这个问题,利用低置信度的检测框,既完成了红框目标的匹配,也滤除了背景误检的框(置信度为0.1的黄框)。

2. First Association(关联1)

  完成Object Detection以后,对检测框的拆分较为容易理解,下面详细介绍一下BYTE提出的association策略。
  对于关联1,我们可以将其理解为目前MOT主流的跟踪策略。下面展示了可视化的关联思路。
【多目标跟踪MOT学习笔记】字节跳动ByteTrack论文研究(一):BYTE策略_第3张图片
  假设上图表示的是当前帧的关联策略,那么该操作的输入分别是前一帧的所有跟踪框的信息的卡尔曼滤波预测结果和当前帧的检测网络检测得到的置信度高于阈值的检测框,即上图中的粉红色的框框取的部分。(为了方便画图,我将KF操作包括在了关联1里面)
  后续操作便是经典的IoU匹配和匈牙利算法寻优,得到当前帧的跟踪结果。关联1结束以后,为得到匹配的跟踪框和检测框将保留(图中的D_remain和T_remain),用于后续操作。
  作者还提出,BYTE的关联1操作具有灵活性并可用于其他MOT算法,比如用在DeepSort里,就可以将Re-ID特征提取结果加入到关联1中,如上图所示。

3. Second Association(关联2)

  关联2的输入分别为第置信度的检测框(如下图红框所示),以及关联2的其中一个输出结果T_remain,其操作事实上仅仅只使用了IoU匹配,最后输出匹配上的跟踪框tracks T和仍然没有匹配上的检测框T_re-remain。
【多目标跟踪MOT学习笔记】字节跳动ByteTrack论文研究(一):BYTE策略_第4张图片
  作者表示,对于低置信度的检测框,由于目标往往处于严重遮挡和严重运动模糊的状态,所以外观相似度特征(比如ReID)非常不可靠,而相比较而言IoU匹配是更佳的选择,鉴于此,在关联2中,作者仅仅只使用了IoU,而并未引入外观相似度。
  对于关联1,我们可以将其理解为目前MOT主流的跟踪策略。下面展示了可视化的关联思路。

4. Post-Processing(后处理)

  以上已经介绍了BYTE的主题思路,确实是简单易懂,但是还没完事,想必各位巨佬都已经注意到了我们还有两个数据没有处理,分别是关联1的输出D_remain和关联2的输出T_re-remain。这里作者给出了处理方案。

4.1 T_re-remain

  事实上,对于长时的目标跟踪,我们对跟踪框的ID进行保存是很有必要的(比如目标10在第100帧消失后,又在第120帧重新出现),所以对于关联2操作以后未得到匹配的跟踪框T_re-remain(即消失的目标),作者将其放入了T_lost中。
  T_lost中的跟踪框会在保留特定帧以后进行删除(比如30帧),而在这30帧里面,T_lost将仍然放到tracks T里面进行下一帧的跟踪预测,只是对于当前帧的跟踪结果,T_lost的boxes和ID并不会显示在图中(说白了就是表面上看不出来,实际上还是在使用这些未匹配上的框,如果这些框一直匹配不上就扔了,也不亏,要是重新匹配上了就血赚~)。

4.2 D_remain

  关联1输出的D_remain直接用于生成新的跟踪框,表示有新目标出现。因为本身D_remain中的检测框都拥有较高的置信度,如果其中的目标框的置信度高于设定阈值且连续两帧都被检测到的话,就生成新的跟踪框。


总结

  后续看一下ByteTrack算法,再试试能不能把官方例程跑通。其实是想把BYTE机制用到SOT里的,不过看官方源码上手的应该快一些~
  官方源码传送门:https://github.com/ifzhang/ByteTrack

你可能感兴趣的:(pytorch,MOT,多目标跟踪,目标跟踪,学习,计算机视觉,人工智能,神经网络)