MOTR
论文标题:MOTR: End-to-End Multiple-Object Tracking with TRansformer
论文地址:http://arxiv.org/abs/2105.03247
论文源码:https://github.com/megvii-model/MOTR
收录入CVPR2021
Introduction
这篇论文中,作者提出了MOTR,一个真正的完全端到端的跟踪框架。MOTR能够学习建模目标的长程时间变化,它隐式地进行时间关联,并避免了以前的显式启发式策略。基于Transformer和DETR,MOTR引入了track query这个概念,一个track query负责建模一个目标的整个轨迹,它可以在帧间传输并更新从而无缝完成目标检测和跟踪任务。时间聚合网络(temporal aggregation network,TAN)配合多帧训练被用来建模长程时间关系。实验结果表明MOTR达到了SOTA效果。
Motivation
DETR提出用于端到端目标检测。它将目标检测定义为一个集合预测问题。如图所示1(a),object query作为对象的解耦表示,被输入到变压器解码器,并与图像特征交互以更新其表示。进一步采用二分匹配,实现了对象查询与GT之间的一对一分配,消除了NMS等后处理。与目标检测不同,MOT可以作为一个序列预测问题进行重新分级 。
每个序列对应于一个物体的轨迹。从技术上讲,在DETR中扩展了object query来跟踪预测对象序列的查询。track query可作为对象跟踪的隐藏状态。轨迹查询的表示在decoder中进行更新,并用于以迭代的方式预测目标的轨迹(见图1©)。具体来说,跟踪查询是通过自注意和通过多帧特性进行的交叉注意来更新的。更新后的跟踪查询将进一步用于预测边界框。一个轨迹查询的所有预测都会自然地形成一个对象的轨迹。
本文工作:
- 提出了一个完全端到端的MOT框架,基于DETR的MOTR。MOTR可以一种联合的方式隐式地学习外观和位置的方差。
- 将MOT定义为一个序列预测集的问题。为了解决该问题,将track query扩展为迭代更新和预测的隐藏状态。
- TALA用于跟踪查询和对象之间的一对一分配。引入了一种处理新生轨迹和死亡轨迹的进出机制。
Methodology
Detect Query and Track Query
当将DETR框架从对象检测调整到MOT时,出现了两个主要问题:
1)如何通过一个track query跟踪一个对象;
2)如何自适应地跟踪对象,因为每一帧都可能引入新生的和死亡的轨迹。
在本文中,扩展了来自object query的track query。track query可以作为隐藏状态来执行迭代跟踪预测。track query集在初始帧
T
1
T_1
T1处为空。DETR中的固定长度object query用于检测新的检测对象。分配给新生对象的object query将被更新并合并到下一帧的track query集中。track query集具有自适应长度,并进行动态更新。分配给消失的轨迹将从的track query集中删除。
Tracklet-Aware Label Assignment
在DETR中,可以将一个object query分配给图像中的任何一个对象,因为标签分配是通过在所有object query和gt之间执行二分匹配来确定的。而在MOTR中,检测查询仅用于检测新生对象,并track query预测这些跟踪对象。在这里,我们引入了具有跟踪感知功能的标签分配(TALA)来实现这一目标。
一般来说,TALA由两种策略组成。对于object query,将DETR中的分配策略修改为新对象,其中在object query和新生对象的gt之间进行二分匹配。对于track query,设计了一个目标一致的分配策略。track query被排除在二部匹配之外,并遵循之前帧的相同分配。将
T
i
T_{i}
Ti帧的预测和GT分别表示为
Y
i
=
Y
t
r
i
,
Y
d
e
t
i
Y_i={Y_{tr}^{i},Y_{det}^{i}}
Yi=Ytri,Ydeti和
Y
^
i
=
{
Y
^
t
r
i
,
Y
^
d
e
t
i
}
\hat Y_i=\lbrace{\hat Y_{tr}^{i},\hat Y_{det}^{i}}\rbrace
Y^i={Y^tri,Y^deti}。这是
Y
t
r
i
,
Y
d
e
t
i
Y_{tr}^{i},Y_{det}^{i}
Ytri,Ydeti是track query和object query的预测。
Y
^
t
r
i
,
Y
^
d
e
t
i
\hat Y_{tr}^{i},\hat Y_{det}^{i}
Y^tri,Y^deti是对应的gt。object query和object query的预测和gt之间的标签分配结果可以写为
ω
i
=
ω
t
r
i
,
ω
d
e
t
i
ω_i={ω_{tr}^{i},ω_{det}^{i}}
ωi=ωtri,ωdeti,并且可以表述为:
这里,
N
N
N是视频序列的长度,
L
\mathcal {L}
L是DETR中定义的成对匹配代价。在初始帧
T
1
T_{1}
T1中,
w
t
r
1
w_{tr}^{1}
wtr1是空的,因为之前没有跟踪任何对象,而
w
d
e
t
i
w_{det}^{i}
wdeti是由
Y
^
d
e
t
i
\hat Y_{det}^{i}
Y^deti和
Y
d
e
t
i
Y_{det}^{i}
Ydeti之间的二部匹配确定的。在任何帧
2
≤
i
≤
N
2≤i≤N
2≤i≤N中,
w
i
w_{i}
wi仍然由二分匹配决定。
w
t
r
i
w_{tr}^{i}
wtri是通过合并
w
t
r
i
−
1
w_{tr}^{i-1}
wtri−1和
w
d
e
t
i
−
1
w_{det}^{i-1}
wdeti−1来生成的。这意味着对被跟踪的对象遵循相同的帧
T
i
−
2
T_{i-2}
Ti−2的分配。而对于
T
i
−
1
T_{i-1}
Ti−1帧中的新生对象,我们将相应的object query合并到
T
i
T_{i}
Ti的track query集中。
MOTR Architecture
MOTR的整体结构如上图所示,视频序列首先会送入CNN(ResNet50)中,随后进入Deformable DETR的编码器提取基本特征 f = { f 0 , f 1 , … , f N } f=\left\{f_{0}, f_{1}, \ldots, f_{N}\right\} f={f0,f1,…,fN},这里的 f 1 f_1 f1 表示第 T 0 T_0 T0帧的特征。对第 T 0 T_0 T0帧而言,特征 f 1 f_1 f1和empty query set q d q_d qd被输入到decoder网络中定位所有初始化目标并生成原始的track query set q o t 1 q_{ot}^1 qot1。 q o t 1 q^1_{ot} qot1通过QIM模块生成了下一帧的track query输入 q t 2 q^2_t qt2。所以从上图可以看出来,整个模型迭代式地处理每一帧 T i ( i ∈ [ 1 , N ] ) T_i(i\in[1, N]) Ti(i∈[1,N]),QIM根据上一帧地输出产生的 q t i q^i_t qti 会和empty query set q d q_d qd级联到一起,级联后的query set q d q_d qd回合特征 f i f_{i} fi一起送入decoder中直接产生当前帧的预测结果,并且更新query set q o t i + 1 q_{ot}^{i+1} qoti+1 将其送入到下一帧。
Query Interaction Module
Object Entrance and Exit: 目标进出机制,每个track query表示一个完整轨迹,然而,一些目标可能在中间某一帧出现或者消失,因此MOTR需要输出一些边界框$ \left{b o x_{i}, \ldots, b o x_{j}\right} 假 定 目 标 在 假定目标在 假定目标在T_i 帧 出 现 但 在 帧出现但在 帧出现但在T_j$帧消失。
在训练时,track query的学习可以通过二分图匹配的GT来监督。但是,在推理时,使用跟踪得分预测来决定一个轨迹的出现和消失。对
T
i
T_i
Ti帧而言,track query set
q
t
i
q^i_t
qti通过QIM从
T
i
−
1
T_{i-1}
Ti−1帧生成,然后和empty query set
q
d
q_d
qd级联到一起,级联的结果继而输入到decoder并产生原始的包含跟踪得分的track query set
q
o
t
i
q_{ot}^i
qoti,
q
o
t
i
q_{ot}^i
qoti随机被分割为两个query set,
q
o
t
i
=
{
q
t
r
i
,
q
d
e
t
i
}
q_{ot}^{i}=\lbrace q_{tr}^{i},q_{det}^{i} \rbrace
qoti={qtri,qdeti},其中
q
d
e
t
i
q_{det}^{i}
qdeti包含新对象,
q
t
r
i
q_{tr}^{i}
qtri中包含跟踪的轨迹和消失的轨迹。一个轨迹的死亡时根据
Y
^
i
\hat Y_i
Y^i和
w
t
r
i
w_{tr}^{i}
wtri匹配得出。
对于推理过程,使用预测
Y
i
Y_{i}
Yi的分类score来确定一个轨迹何时出现和消失。对于新生对象,保留
q
d
e
t
i
q_{det}^{i}
qdeti中的分类分数高于入口阈值
τ
e
n
\tau_{en}
τen的track query,同时删除其余的query。
这里的query interaction module相比第一版做了修改,第一版只采用了interfer中的置信度分类。
Temporal Aggregation Network
引入了时间聚合网络(TAN)来增强时间关系,并为被跟踪的对象提供上下文先验。TAN的输入是过滤track query
q
‾
t
r
i
\overline q_{tr}^{i}
qtri和
q
‾
d
e
t
i
\overline q_{det}^{i}
qdeti和新生对象。我们还收集了被跟踪对象
q
‾
t
r
i
−
1
\overline q_{tr}^{i-1}
qtri−1的跟踪query,以进行时间聚合。生成的查询作为查询和关键元素输入到多头注意(MHA)模块,以生成注意力权重。
q
t
r
i
q_{tr}^{i}
qtri作为MHA的值元素,通过点积进行更新:
t
g
t
=
σ
s
(
(
q
‾
t
r
i
+
q
‾
t
r
i
−
1
)
⋅
(
q
‾
t
r
i
+
q
‾
t
r
i
−
1
)
T
d
)
⋅
q
‾
t
r
i
tgt = \sigma_{s}(\frac {(\overline q_{tr}^{i}+\overline q_{tr}^{i-1})\cdot(\overline q_{tr}^{i}+\overline q_{tr}^{i-1})^{T}}{\sqrt {d}})\cdot\overline q_{tr}^{i}
tgt=σs(d(qtri+qtri−1)⋅(qtri+qtri−1)T)⋅qtri
Collective Average Loss
集体平均损失(CAL)收集多个预测
Y
=
{
Y
i
}
i
=
1
N
Y=\lbrace Y_{i} \rbrace_{i=1}^{N}
Y={Yi}i=1N,而不是逐计算损失。然后用
Y
^
=
{
Y
^
i
}
i
=
1
N
\hat Y=\lbrace \hat Y_{i} \rbrace_{i=1}^{N}
Y^={Y^i}i=1N计算整个视频序列内的损失,匹配结果为
w
=
{
w
i
}
i
=
1
N
w=\lbrace w_{i}\rbrace _{i=1}^{N}
w={wi}i=1N。CAL是整个视频序列的总体损失,按对象数进行归一化:
L
o
(
Y
∣
w
,
Y
^
)
=
∑
i
=
1
N
(
L
(
Y
t
r
i
∣
w
t
r
i
,
Y
^
t
r
i
)
+
L
(
Y
d
e
t
i
∣
w
d
e
t
i
,
Y
^
d
e
t
i
)
)
∑
n
=
1
N
(
V
i
)
\mathcal {L}_{o}(Y|_{w},\hat Y)=\frac {\sum_{i=1}^{N}(\mathcal {L}(Y_{tr}^{i}|_{{w_{tr}^{i}}},\hat Y_{tr}^{i})+\mathcal {L}(Y_{det}^{i}|_{{w}_{det}^{i}},\hat Y_{det}^{i}))}{\sum_{n=1}^{N}(V_{i})}
Lo(Y∣w,Y^)=∑n=1N(Vi)∑i=1N(L(Ytri∣wtri,Y^tri)+L(Ydeti∣wdeti,Y^deti))
其中,
V
i
=
V
t
r
i
+
V
d
e
t
i
V_i=V^i_{tr}+V^i_{det}
Vi=Vtri+Vdeti表示
T
i
T_{i}
Ti帧下GT的总数。
V
t
r
i
V_{tr}^{i}
Vtri和
V
d
e
t
i
V_{det}^{i}
Vdeti分别为
T
i
T_{i}
Ti帧下跟踪对象和新生对象的数量。L为单帧损耗,与DETR中的检测损耗相似。单帧损耗L可表述为:
L
(
Y
i
∣
w
i
,
Y
^
i
)
=
λ
c
l
s
L
c
l
s
+
λ
l
1
L
l
1
+
λ
g
i
o
u
L
g
i
o
u
\mathcal {L}(Y_{i}|_{{w_{i}}},\hat Y_{i})=\lambda_{cls}\mathcal {L}_{cls}+\lambda_{l1}\mathcal {L}_{l1}+\lambda_{giou}\mathcal{L}_{giou}
L(Yi∣wi,Y^i)=λclsLcls+λl1Ll1+λgiouLgiou
Experiment