PatchTrack: Multiple Object Tracking Using Frame Patches

PatchTrack

论文标题:PatchTrack: Multiple Object Tracking Using Frame Patches

论文地址:https://arXiv:2201.00080v1

论文源码:https://motchallenge.net/method/MOT=4725&chl=10.

Introduction

​ 物体运动和物体外观是多物体跟踪(MOT)应用中常用的信息,既用于逐检测方法中关联跨帧的检测,也用于联合检测和跟踪方法中的直接跟踪预测。然而,这两种类型的信息不仅通常被单独考虑,而且不能直接优化当前兴趣框架的视觉信息的使用。在本文中,提出了一种基于patch跟踪系统,一种基于Transformer的联合检测和跟踪系统,它使用当前感兴趣帧的patch来预测轨迹。使用卡尔曼滤波器从前一帧中预测当前帧中现有轨迹的位置。从预测的边界框中裁剪出来的patch将被发送到Transformer decoder,以推断新的轨迹。该方法利用物体运动和物体外观信息,更关注新轨迹更可能出现的位置。

​ PatchTrack在最近的MOT基准上的有效性,包括MOT16(MOTA73.71%,IDF1 65.77%)和MOT17(MOTA73.59%,IDF1 65.23%)。

在这里插入图片描述

该方法是第一个使用current frame of interest的patch来同时推断物体的运动和外观信息的方法。我们希望它能为MOT系统的设计提供一个新的视角。

Method

Architecture

PatchTrack是一个基于Transformer的JDT范式的框架。

​ 该框架的Transformer encoder采用了一个连续的帧对的CNN特征。Transformer decoder将query作为输入和输出边界框。**patch处理四种Track类型的查询:Object query、track query、patch query和patch-track query。**根据query的来源,预测的边界框可能对应于与现有跟踪id相关联的轨迹或需要分配新的跟踪id的检测。

在这里插入图片描述

Object tracking initialization

​ 初始化第一帧 f 1 f_1 f1的通过检测产生object query,其中每个预测检测可以任意分配给一个唯一的跟踪ID以形成跟踪。帧 f 1 f_1 f1被送入到CNN backbone中产生这一帧的特征图。通过堆叠特征图,并输入到encoder中。由于没有现有的轨道来形成非对象查询,encoder只将object query作为输入并产生embedding。每个检测都被分配给一个唯一的跟踪ID以形成轨迹。这些embedding也被用作下一帧的track query。

Track propagation

​ 从第一帧产生轨迹开始, k > 1 k>1 k>1的帧始终维护这一组轨迹集合 T k − 1 T_{k-1} Tk1。使用运动模型推断这些轨迹并传播到 f k f_{k} fk帧上。

​ 运动模型使用卡尔曼滤波器来预测轨迹集合并产生预估轨迹集合 T ^ k \hat T_{k} T^k。但是如果在帧 f k f_k fk中直接使用这些预估轨迹集合会有以下的问题:

  1. 预测轨迹集合 T ^ k \hat T_{k} T^k是和上一帧 f k − 1 f_{k-1} fk1帧中被检测到的目标一一对应。
  2. 其次,虽然卡尔曼滤波器和其他运动模型在许多情况下显示出了的有效性,但它们预测的边界框在定位对象方面还不够准确。
    在这里插入图片描述

Patch generation and object tracking

​ 为了解决上述问题,作者从UP-DETR中获得灵感,其中预先训练其decoder,使用相应的CNN特征来检测随机图像补丁的位置。**PatchTrack将帧 f k f_k fk中的patch作为额外的视觉信息进行训练。**从帧 f k − 1 f_{k-1} fk1中通过卡尔曼滤波产生的帧 f k f_{k} fk预测框的patch信息,结合帧 f k − 1 f_{k-1} fk1和帧 f k f_{k} fk的特征图进行训练。

​ 对于每个候选轨道 t ^ ∈ T ^ k \hat t \in \hat T_{k} t^T^k,使用它的边界框对帧进行裁剪,并将得到的patch输入到CNN backbone,得到相应的patch特征。使用一个全连接(FC)层,然后使用全局平均池(GAP)来处理所有的patch特征。每一个patch query根据相同的track id添加到 track query里,从而形成patch-track query。patch-track query和初始化的object query一起输入到decoder中处理。

​ 每一个patch-track query的输出embedding都可以细化对应的候选跟踪框的位置,可以对应对象离开 f k f_{k} fk的背景。**另一方面,从非背景检测的object query中解码的embedding定位了进入帧 f k f_{k} fk的新对象,这些对象被分配了新的跟踪id以形成新的轨道。**所有在 f k f_{k} fk中提供跟踪的嵌入都是对 f k + 1 f_{k+1} fk+1的跟踪查询。

Track re-birth

​ 为了从对 f k f_{k} fk的track query中获得对帧 f k + 1 f_{k+1} fk+1的track query,添加了与新检测对应的嵌入,并删除了与背景类对应的track query。这种机制的一个问题是,它对远程跟踪不健壮:如果一个对象没有被成功检测到,它只能在再次被检测到时被分配给一个新的跟踪ID,从而导致轨迹碎片化。

​ 为了解决这个问题,采用了来自TrackFormer的跟踪重新识别策略,并将这些最初删除的patch-track query存储到一个非活动的查询集中。该集合中的query包含在patch-track query的列表中,并以最多P个连续帧发送到decoder。如果在此过程中可以将object query为非背景边界框,那么这些query将用其原始的跟踪id重新激活,否则它们将被删除。

Set prediction loss

​ PatchTrack使用帧对 f k − 1 f_{k-1} fk1 f k f_{k} fk,涉及两个步骤。第一步是对 f k − 1 f_{k-1} fk1执行对象检测,以便初始化针对稍后处理 f k f_{k} fk的track query。第二步是使用先前生成的track query对 f k f_{k} fk执行对象跟踪。由于第二步涉及检测新对象,这与第一步相同,以及跟踪现有对象与track query相关的跟踪id,使用两个集合预测损失,一个用于检测新对象,另一个用于跟踪 f k − 1 f_{k-1} fk1中存在的对象。

定义 T k − 1 T_{k-1} Tk1 T k T_{k} Tk为两个帧的轨迹集,如果发现新目标就对比两个集合中的轨迹。使用DETR的匹配来估计预测损失:

在这里插入图片描述

这里的 L d e t c l s \mathcal {L}_{det_cls} Ldetcls是预测类别和GT的focal loss, L d e t L 1 \mathcal {L}_{det_L1} LdetL1 L d e t I O U \mathcal {L}_{det_IOU} LdetIOU是L1损失和IOU损失。

从解码object query生成的预测与GT t ∈ T k / T k − 1 t∈T_{k}/T_{k-1} tTk/Tk1进行比较。

同样,目标跟踪集预测损失如下:

在这里插入图片描述

其中, L t r k c l s , L t r k L 1 \mathcal {L}_{trk_cls},\mathcal {L}_{trk_L1} Ltrkcls,LtrkL1 L t r k I O U \mathcal {L}_{trk_IOU} LtrkIOU是在解码patch-track query产生的预测和GT t ∈ T k ∩ T k − 1 t∈T_{k}∩T_{k-1} tTkTk1之间计算的,因此 L t r k \mathcal {L}_{trk} Ltrk处理 f k − 1 f_{k-1} fk1中的跟踪对象,并预测它们在 f k f_{k} fk中的新位置。

最终的损失函数是简单的目标检测集预测损失和目标跟踪集预测损失的和: L d e t + L t r k \mathcal {L}_{det}+\mathcal {L}_{trk} Ldet+Ltrk

Experiments

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值