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}
q?tri?和
q
 ̄
d
e
t
i
\overline q_{det}^{i}
q?deti?和新生对象。我们还收集了被跟踪对象
q
 ̄
t
r
i
?
1
\overline q_{tr}^{i-1}
q?tri?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
?(q?tri?+q?tri?1?)?(q?tri?+q?tri?1?)T?)?q?tri? 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?)=λcls?Lcls?+λl1?Ll1?+λgiou?Lgiou? Experiment
|