多目标跟踪的关键挑战在于轨迹上目标的时序建模,而现有的TBD方法大多采用简单的启发式策略,如空间和外观相似度。尽管这些方法具有通用性,但它们过于简单,不足以对复杂的变化进行建模,例如通过遮挡进行跟踪。 本质上,现有方法缺乏时间建模的能力。 这篇论文中,作者提出了MOTR,这是一个真正的完全端到端的跟踪框架。MOTR能够学习建模目标的长程时间变化,它隐式地进行时间关联,并避免了以前的显式启发式策略。基于Transformer和DETR,MOTR引入了track query这个概念,一个track query负责建模一个目标的整个轨迹,它可以在帧间传输并更新从而无缝完成目标检测和跟踪任务。时间聚合网络(temporal aggregation network,TAN)配合多帧训练被用来建模长程时间关系。实验结果表明MOTR达到了SOTA效果。
多目标跟踪是在视频序列的每一帧中定位所有的目标并确定它们的移动轨迹的一个任务。多目标跟踪是极具挑战的一个任务,因为每帧中的目标都可能因为环境的变化而被遮挡,而且跟踪器要想进行长期跟踪或者低帧率的跟踪是比较困难的。这些复杂多样的跟踪场景为MOT方法的设计带来了诸多挑战。
现有的多目标跟踪方法基本上都遵循tracking-by-detection(TBD)范式,它将轨迹的生成分为两个步骤:目标定位和时序关联。对目标定位而言,使用检测器逐帧检测目标即可。而对于时序关联,现有的方法要么使用空间相似性(即基于IoU关联)要么使用外观相似性(即基于ReID关联)。对于基于IoU的方法,计算两帧检测框的两两之间的IoU矩阵,若两个目标之间的IoU高于某个阈值则赋予同一个ID,如下图的(a)所示。基于ReID的方法思路类似,两帧之间目标两两计算特征相似度,具有最高相似度的两个目标赋予同一个ID,不过,单独训练一个检测器和ReID模型代价太大,最近的主流思路是一个模型联合训练检测和ReID分支,这类方法称为JDT(joint detection and tracking)方法,如下图(b)所示。
上述的时序关联方法都是启发式的,并且是相当简单的,因此它们难以建模长时间的物体复杂的空间和外观变化。本质上看,其不具备对时间变化建模的能力,这和深度学习“端到端学习”的理念是不一致的。这些方法也许大多数情况下工作正常,但是对于一些挑战性的场景缺乏鲁棒性,这些场景下IoU和外观是不可信的,而这些复杂场景才是MOT任务的关键。因此,作者为了解决这个问题,构建了一个不需要任何数据关联处理的端到端跟踪框架。
同时本算法是基于DETR算法的,所以先简单介绍下DETR算法:
如下图中的a所示,object queries作为object 代表,会和通过cnn以及encoder得到的image feature一起送入transfomer的decoder(cross attention)中,得到每一个object的bbox,cls等。这样object query就和GT中的object构成了一个bipartite matching问题,直接得到最终结果,而不需要后处理(NMS)
而MOTR则基于DETR算法,将object query扩展成track query。原因很明显,MOT任务是sequence prediction。所以我们将object prediction扩展成sequence prediction就可以了。其中sequence也就是我们常说的object trajectory,最终显式表示为一些列的bbox。
我们再回过头看上图(b),当我们用track query表示track trajectory时,我们将track query和从当前帧得到的feature同时送入decoder中,track query作为隐藏层,影响着所有的跟踪结果,同时track query也会随着视频一帧帧的迭代,作为下一帧的track query。一个object如果和一个track query匹配上,则在其生命周期内,则其bbox结果都可以通过其track query解析出的的bbox,cls等表示。
当然为了实现上诉算法,我们还有两个难点:
第一点很好解决,用同一个id的bbox去进行监督就好了。当然这里作者提出了个高大上的名字:tracklet-aware label assignment(TALA)。第二个实际用其他算法都有用到的一个query memory(track memory)就可以解决了。这里作者也起了高大上的名字:entrance and exit mechanism。当然具体细节我们后续再详说。
除了上诉方法,作者为了增强模型的时间建模能力,还使用了CAL(collective average loss) 和 TAN(temporal aggregation network)。先简单解释下:
CAL:训练的时候,使用video sequence作为输入,然后综合每一帧的loss,根据GT求个标准化结果,用来作为最终的loss,来backward。
TAN:在track query输入到下一帧之前,会经过一个transformer的attention机制网络,起名temporal aggregation network,这个网络的输入还有历史的track queries,这样输出的new track query不就包含了过去的信息么。所以有了时间聚合的作用。
都是常见的介绍,有需要可以看下原论文,主要讲了transformer在CV领域的应用,MOT现状以及iterative sequence prediction。
主要讲了DETR算法用的object queries。熟悉DETR的已经了解了。简单概括:
object queries会和image feature一起送入decoder,得到最终的cls,bbox等。同时用了bipartite matching匹配了object querie和gt。
主要讲解了如何从detect query 扩展到track query。如上图所示,我们输入decoder的track query是有一部分的empty queries的,这些empty queries就承担了detect query的作用,用来生成新目标,也就是newborn。同时前一帧的detect queries 会作为下一帧的track queries。然后,和DETR不同的是,这里边track query的数量是不定的,会随着物体消亡而删除,是一个动态值。
文中有两个公式出现,但公式的实际意义不大,象征意义更多,我就不抄录了,感兴趣的可以自己去看下原文。
简单讲下这个高大上的名词的内容。DETR中,没一帧的query和GT都是二分匹配的assignment。但本算法中,会存在newborn object以及继承上一帧的track object。所以这里就分两部分去做assignment。
首先newborn object。用上文提到的track queries 中的empty queries作为DETR中的detect queries,与GT中的newborn object做bipartite matching。作为一个匹配结果。
然后track object。直接上一帧的track matching 和 newborn matching的并集作为匹配结果就可以了。
最后多说一句,为什么这样不会出问题,因为我们的backbone是transformer,attention机制呀,刚好能抑制检测的用来代表跟踪。
如上图所示,结构还蛮清晰的。论文不翻译了,我说下我的理解吧。训练的时候,是一个video sequence送入网络,对单帧来说,图像会先经过一个cnn(什么backbone都ok)网络,进行特真的提取融合,之后送入transformer的encoder得到最终要使用的feature,这一步在图中就是Enc表示的内容。接下来分两种情况,第一种,对第一帧来说,送入empty queries和空集的track queries和上诉的feature进行cross attention,也就是decoder得到要输入下一帧的track queries和prediction(也就是当帧结果)。第二种,对连续帧来说,送入empty queries和上一帧处理过的track queries,以及feature进行cross attention,得到最终结果。上边的empty queries在inference时,都是训练好的哦,就和DETR的object query一样。
这里边还要简单说下,从上一帧得到的track query还要经过一个叫QIM的网络,这个网络用来聚合历史帧的信息,后续还会详细讲。
在上面的叙述中,QIM负责接受上一帧的track query输出并生成当前帧的track query输入,在这一节将具体阐述Query Interaction Module(QIM)。QIM主要包括目标进出机制(object entrance and exit mechanism)和时间聚合网络(temporal aggregation network)。
Object Entrance and Exit: 首先来看目标进出机制,我们知道,每个track query表示一个完整轨迹, 然而,一些目标可能在中间某一帧出现或者消失,因此MOTR需要输出一些边界框 { b o x i , … , b o x j } \left \{ box_i,\dots,box_j \right \} {boxi,…,boxj}假定目标在 T i T_i Ti帧出现但在 T j T_j Tj帧消失。
MOTR是如何处理目标进出的情况呢?在训练时,track query的学习可以通过二分图匹配的GT来监督。但是,在推理时,使用跟踪得分预测来决定一个轨迹的出现和消失。来看下图,这是QIM的结构图,对 T i T_i Ti帧而言,track query set q t i q_t^i qti通过QIM从 T i − 1 T_{i-1} Ti−1帧生成,然后和empty query set q e q_e qe级联到一起,级联的结果继而输入到decoder并产生原始的包含跟踪得分的track query set q o t i q_{ot}^i qoti。 q o t i q_{ot}^i qoti随机被分割为两个query set,即 q e n i q_{en}^i qeni和 q c e i q_{ce}^i qcei,对目标的进入, q e n i q_{en}^i qeni中的query如果跟踪得分大于进入阈值 τ e n \tau_{en} τen则被保留,其余的被移除。对目标的退出, q c e i q_{ce}^i qcei的query如果跟踪得分连续M帧低于退出阈值 τ e x \tau_{ex} τex,将被移除,剩下的query则被保留。
如图四所示,TAN就是用来融合历史信息进入到当前帧的track query。简单来说上一帧的track query和当前帧的track query会作为key和query送入到的muti-head self-attention(MHA)中,然后当前帧的track query作为value进行操作,之后接一个FFN(约等于FC-layer),最后得到下一帧要用的track query。
首先是和其他SOTA的比较,MOTR确实取得了相当不错的效果,相比此前基于Transformer的方法也有了不小的提高。
也进行了一些模块的消融实验,如下。
有什么问题和不足,欢迎指正交流~