MOTIP
Multiple Object Tracking as ID Prediction[1]
作者是来自南大、上海AI Lab和中国移动的Ruopeng Gao、Yijun Zhang和Limin Wang。论文引用[1]:Gao, Ruopeng et al. “Multiple Object Tracking as ID Prediction.” ArXiv abs/2403.16848 (2024): n. pag.
Time
- 2024.Mar
Key Words
- end-to-end in-context ID prediction
总结
- 在多目标跟踪中,tracking-by-detection方法经历了很多测试,将这个过程分为检测和关联阶段,利用鲁棒的单帧检测器,通过人工设计的启发式算法和代理任务,将目标关联视为一个后处理步骤。然而,启发式方法的本质是阻止了对端到端训练数据的利用,导致当面临复杂或者新的场景的时候,增加的人为的修改。在本文中,将目标关联任务视为一个端到端的in-context ID预测问题,提出了一个baseline称之为MOTIP。特别地,当考虑将对应的IDs作为in-context prompts时,将target embeddings嵌入到历史轨迹信息中,然后直接预测当前帧的目标的ID labels。MOTIP能够直接从训练数据中学习tracking capabilities,将其从繁重的人工算法中解放出来。
MOT旨在定位每一帧中感兴趣目标的位置,然后再整个视频序列中分配它们对应的id。作为一个基础的视觉任务,用在了很多下游任务上。再MOT的发展历史上,tracking-by-detection范式成为了一个shining star,基于这个问题定义,它们自然地将这个过程分成两个子任务:目标检测和关联,用单帧的检测器来检测当前帧中的所有目标,然后用后处理算法将历史轨迹和这些detections进行关联,实现在线tracking。启发式的方法被用来作为ID分配的最优解。它们主要依赖于运动信息,利用卡尔曼滤波器用于线性运动估计和计算IoU cost matrix,一些方法也引入了Re-ID特征,用余弦相似度用于相似度计算,尽管这些方法实现了很好的结果,它们过分第依赖于手工设计和人工的先验假设仍然是一个让人担忧的问题。例如,卡尔曼滤波器依赖于线性运动假设,它努力在复杂的运动模式中准确地适应目标轨迹。类似地,基于linearly separable features的假设,当面对不可区分的外观的时候,余弦相似度也不可靠。因此,在面对复杂或者新的场景的时候,tracking-by-detection方法总是需要通过人工分析,更新启发式的方法,这个做法可能导致日益膨胀和复杂的代码库。
现在,很多研究将DETR扩展到MOT中,tracked objects表示为queries,逐帧地进行propagate,用来回归目标的位置。通过端到端的过程,这些方法能够直接从训练数据中学习必要的tracking策略,使得它们能够在复杂场景中获得优势,尽管实现了很好的性能,它们仍然在一些方面不是很完美。例如tracking-by-query范式使得在训练阶段进行逐帧的处理,类似于神经网络运作的方式,这个本质阻止了长期的训练,导致训练和推理之间的差异,最终限制了模型的性能。另外,同时处理检测和跟踪queries可能导致冲突和相互抑制,导致综合性能下降。
这篇文章引入了一个全新的视角,通过将MOT视为一个端到端的ID预测任务。特别地,给定所有跟踪目标的历史轨迹,模型需要检测当前帧中所有目标,直接预测它们的ID labels。实际上,作者倾向于利用DETR作为检测器,因为它直接提供了每个目标的embeddings,使得不需要考虑特征提取方法例如RoI,pooling等,就能够构建历史轨迹。为了表示不同tracked targets的ID,构建了一个可学习的ID 词典。基于此,将目标的embeddings和它对应的ID embeddings进行concate,得到历史的轨迹信息。用一个直接的transformer decoder架构用作ID 预测器,将当前帧的物体作为输入,基于历史信息直接预测它们的ID labels。
一方面,相比于tracking-by-detection方法,作者的方法绕过了代理任务和启发式算法,简化了跟踪管道,并使得能够从特定场景中端到端地利用跟踪能力。另一方面,检测器和ID预测器是高度并行的,消除了tracking-by-query方法中的串行处理。另外,没有在单个module中同时处理检测和关联也避免了冲突。
Tracking-By-Detection:是MOT中用的最广的范式,很多方法采用了启发式算法,将当前帧的检测结果和历史轨迹关联起来,然后逐帧地实现在线MOT,因为传统MOT主要关注于行人跟踪,行人展示出了相对简单地运动模式,一个自然的方式是估计它们的运动用于目标关联。例如SORT和ByteTrack通过利用卡尔曼滤波用于线性运动估计,实现了很好的效果。然而,这个线性运动假设无法捕捉无序的轨迹,OC-SORT进一步更新了这个算法,使得它能够适应突然的终止和而非线性的运动,提高了性能。一些方法尝试引入目标外观相似度用于测量。Deep-SORT和DeepOCSORT引入了额外的Re-ID模块,来得到Re-ID特征,相比之下,像FairMOT,JDE,用同一个框架用于检测和特征提取。另外,BoT-SORT通过估计相机位移,纠正了运动估计的结果;TrackFlow通过深度信息增强了模型。由于线性运动假设不完美的本质,Hybrid-SORT最近引入了基于目标高度和检测置信度的状态估计,增强了跟踪的能力,特别是在DanceTrack中,尽管修补启发式算法仍然能取得比较好的结果,它还是会将代码库弄的臃肿,然而,手动制作代理任务和依赖于先验假设在特定场景中学不到优化的策略,导致当面对没有考虑过的场景的时候,需要很大的努力调整参数和算法。
Tracking-by-Query:受最近DETR的启发的一个跟踪算法,将detect queries扩展到MOT任务,用track queries来表示tracked target,通过视频序列进行传播。TransTrack构建了一个Siamese Transformer decoder用于检测和跟踪。TrackFormer和MOTR利用相同的Transformer decoder通过同时处理detect和track queries来同时处理检测和跟踪。MQT采用了多个queries来表示一个tracked object,更多地关注未知类别的跟踪。MeMOT构建了一个巨大的记忆库来存储目标历史信息。MeMOTR用了一个长期的记忆注入机制,一个简单有效的方式来提高跟踪性能,然而,最近的研究突出了新的方法和tracked object之间的冲突对于tracking-by-query范式仍然是一个严重的问题。CO-MOT和MOTRv3尝试平衡两者in supervision,能够缓解这个矛盾。
这篇文章中,作者将MOT视为一个ID Prediction的问题,称之为MOTIP。MOT作为一个ID预测问题。MOT旨在产生通过每个identity k,逐帧产生有顺序的bboxes。这个暗示了,对于每帧的在线处理,它努力将检测到的物体和之前的轨迹相匹配。将这些历史轨迹表示为一个轨迹集合。\(\mathcal{T} = {\mathcal{T}^1,\mathcal{T}^2,...,\mathcal{T}^K}\)。每个 \(\mathcal{T}^k = (\tau^k_1,\tau^k_2,...,\tau^k_T)\)表示第k个识别到的目标的完整的轨迹。\(\tau^k_t\) 表示在时刻t的tracklet context 信息。实际中, \(\tau^k_t\) 的组成依赖于每个不同的方法。例如有的方法总是利用位置、速度和加速度来描述每个tracklet,也有一些ReID的方法引入了目标特征用于外观匹配。 之前,给定历史轨迹 \({\mathcal{T}_{1"t-1}}\),tracking-by-detection的方法通过代理任务计算cost matrix。然而tracking-by-query的方法通过传播track queries,继承ID信息。本文中,引入了新的角度,将MOT视为ID预测问题。特别地,给定当前帧 \(I_t\) 的检测结果 \(\mathcal{D}_t\),基于历史轨迹,直接预测它们的ID,表示如下: \[\mathrm{ID}(O_t)=\theta(\mathcal{T}_{1:t-1},\mathcal{D}_t),\]
\(\mathcal{T}_{1:t-1}\) 表示第t帧之前的轨迹。\(\theta\) 是一个端到端的 可学习的module,有一个简单的分类头。不需要任何人工的代理任务,通过分类任务直接预测ID。
MOTIP架构:整个的MOTIP架构很简单,包含3个主要部分:一个DETR检测器检测目标和提取它们的嵌入;一个可学习的ID词典,将不同的identities表示为C维的embeddings;一个ID decoder预测新检测的目标的ID。
DETR检测器:用DETR作为图像检测器;输入原始图像 \(I_t\),CNN backbone和Transformer encoder提取和增强图像特征。接下来,decoder从N个可学习的detect queries中产生输出的embeddings。它们通过bbox和cls head被编码成bboxes和分类的置信度。用一个置信度阈值 \(\tau_{det}\) 来过滤掉negative detections,保留 \(M_t\) 个active targets。用DETR进一步简化了方法,使得能够利用解码的embeddings \(O_{t}=\{o_{t}^{1},o_{t}^{2},\cdots,o_{t}^{M_{t}}\}\) 来表示对应的目标,不许哟啊考虑层次化或者RoI 技巧,用于特征提取和融合。
可学习的ID 词典:一个直白的方式是用one-hot label表示 ID,然而,一方面,离散的值不利于神经网络的学习;另一方面,one-hot形式不太实际,当将模型扩展到有大量目标的场景的时候,导致维度很大。因此,创建一个ID词典 \(\mathcal{I}\),包含 \(K+1\) 个可学习的words来表示这些identities,如下: \[\mathcal{I}=\{i^1,i^2,\cdots,i^K,i^{spec}\}.\] 每个word i 是一个可学习的C维embedding。具体地,前K个words \({i^1,i^2,...,i^K}\) 是 常规的tokens,表示对应的identities。最后一个word \(i^{spec}\) 是一个特殊的token,用于表示当前帧中检测到的、没有任何ID的新的目标。实际中,K的值比单帧中目标的平均数量大得多,依赖于不同的数据集。
层次化的轨迹:MOT方法通常基于它们的要求,用了多种contexts来表示层次化的轨迹,例如位置、运动、Re-ID特征;像很多基于Transformer的方法,直接利用从decoding detect queries得到的输出embeddings表示tracked targets。实际上,target embedding e 是通过一个简单的FFN结构从输出embedding o 推导出来的。因为embedding e 不包含identity信息,引入对应的ID embedding,来完成tracklet context: \[{\tau}^{k_t} = concat(e^{k}_t,i^k)\] \({\tau}^{k}_t\) 是时刻t的、identity 为k的tracklet object的tracklet context。\(e^k_t\) 是它的目标embedding。因此,每个tracklet context 是一个2D维的vector,可以被拼接成历史轨迹 $ = (,_{t-1}{k},{t}^{k},{t+1}{k},) $。在实验中,只保留最近T帧的轨迹。
ID Decoder:为了处理不同长度的输入,利用一个带有相对时序位置编码的6层transformer decoder作为ID 预测器,将轨迹和detections作为输入,将identity field引入到detection中,形成2C维的token: \[d^m_t = concat(o^m_t,i^{spec})\]
\(o^m_t\) 是 当前帧中第m个active DETR 输出embedding,\(i^{spec}\) 是ID词典中特殊的token,表示ID是未知的,然后,将这些detection tokens \(\mathcal{D}=\{d_{t}^{1},d_{t}^{2},\cdots,d_{t}^{M_{t}}\}\) 输入到ID decoder中作为Q,轨迹tokens \(\mathcal{T}_{t-T:t-1}\) 视为K和V。基于此,历史轨迹中的ID tokens作为一种in-context prompt,将特定的身份信息传播到对应的检测。之后,解码的 \(\widehat{d_{t}^{m}}\) 通过一个线性projection 网络,变换为ID概率。因此,将ID 分配的步骤转换成一个 K+1的分类任务,可以通过交叉熵损失,端到端的监督。
训练:对每个训练iteration,采样一个video clip,包含 \(T+1\) 帧。这个模型在每个时刻t预测IDs,除了第一帧。为了遵循在线跟踪协议,在训练期间用一个因果注意力掩码,来确保只有之前帧是可见的。对于提出的ID 预测器,采用直接的交叉熵。因为每一帧种的目标的数量不一样,通过取所有目标的平均来计算最后的 id loss。 \[\mathcal{L}_{id}=\frac{-\sum_{t=2}^{T+1}\sum_{m=1}^{M_t}\sum_{k=1}^{K+1}y_m^k\log(p_m^k)}{\sum_{t=2}^{T+1}M_t}, \\ y_{m}^{k}=\left\{\begin{array} {ll}1 & \mathrm{gt} \ id \ \mathrm{of} \ m^{th} \ \mathrm{object~is} \ k, \\ 0 & \mathrm{else}, \end{array}\right.\]
\(T+1\) 表示一个training clip中的帧数,在第t帧中有 \(M_t\) ground-truth 目标。根据每个目标的identity ground truth, \(y^k_m\) 是一个indicator 函数。在实际中,同时端到端的训练目标检测器和ID预测器,因此,利用整个的loss函数 \(\mathcal{L}\) 来监督两部分:
\[\mathcal{L}=\lambda_{cls}\mathcal{L}_{cls}+\lambda_{L1}\mathcal{L}_{L1}+\lambda_{giou}\mathcal{L}_{giou}+\lambda_{id}\mathcal{L}_{id},\]
\(\mathcal{L}_{cls}\) 是focal loss,\(\mathcal{L}_{1}\) 和 \(\mathcal{L}_{giou}\) 表示 L1 loss和 generalized IoU loss。\(\lambda\) 是对应的权重。
推理:在视频序列的第一帧,检测到的目标的置信度大于 \(\tau_{new}\) 为记为新的目标,然后分配唯一的身份。在每个时刻t,首先用阈值 \(\tau_{det}\) 过滤掉来自DETR的结果,之后,这些active detections 和来自最近 T帧的历史轨迹 \(\mathcal{T}_{t-T:t-1}\) 送到ID decoder中,预测对应的ID。在这些ID预测中,只有超过特定阈值的 \(\tau_{id}\) 会被采用,任何检测置信度大于 \(\tau_{new}\) 的目标,但没有分配任何跟踪ID的会被考虑为一个新的目标,给一个新的id。另外,一旦长视频中的id的数量超过了K,ID词典中的tokens \(\mathcal{I}\) 将会被重复利用。
训练中的轨迹增强:多个目标轨迹重视面临挑战性的情况,例如遮挡、模糊等。这些挑战导致推理期间的ID分配错误,损害历史轨迹的可靠性。然而,在训练期间这些情况不会出现因为所有的ID是来自ground truth用bipartite matching得到的,类似于DETR,因此,在训练和推理之间有差异,可能降低跟踪性能。为了缓解这个问题,在训练期间引入了两个轨迹增强的技巧。首先,在同一帧中交换两个历史目标的ID;第二,以 \(\lambda_{drop}\) 的概率随机扔掉给定轨迹中的 l个连续的tokens,l 是一个从均匀分布中采样得到的随机长度。这两个方法能够模拟训练期间的目标遮挡和ID failures,因此增强了模型的robustness。
\(Fig.1^{[1]}\)
Tracking-by-detection范式总是利用代理任务来计算cost matrix用于ID
matching。Tracking-by-query方法用track
queries来表示跟踪的目标,然后逐帧传播,作者的方法直接预测当前detections的ID
label。
\(Fig.2^{[1]}\)
这里有三个主要的组件:一个可学习的ID
词典,表示不同的identities,一个DETR detector检测感兴趣的目标和一个ID
decoder预测当前帧中目标的ID,将object embeddings和它们对应的ID
embeddins结合起来,形成历史轨迹,因此,ID field被视为一个in-context
prompt,ID decoder预测每个新检测的ID。