首个完全基于端到端 Transformer 的多目标追踪模型,21年5月上传到arxiv上。
\space
1. Abstract
摘要大概由两部分组成,一是过去启发式算法的缺陷,二是MOTR的基本思路。
他说MOT问题的关键在于时序上的建模。过去的空间和外观相似度的这种启发式算法虽然简单,但是缺乏学习时域上的变化。
MOTR的基本思路是利用一个叫 “track query” 的东西,每个track query对一个object的整个track建模,它以逐帧的方式去传输和更新,并以无缝的方式迭代预测。 这样,MOTR就隐式地进行时序上的数据关联,并避免用显式的启发式算法。
(By the way,这种为单个object分配一个东西的算法并非首个,记得一个类似的工作:Ren et al.
L. Ren,J. Lu,Z. Wang,Q. Tian,J. Zhou, Collaborative deep reinforcement learning for multi-object tracking, in: ECCV
利用强化学习进行多目标跟踪,算法由两部分组成:预测网络和决策网络。决策网络中,为每个target创建一个agent,这些agent组成一个协作系统(collaborative system),其并不是孤立的,而是和环境相互作用,最大化共享效用函数(shared utility function)。之后每个agent通过一定的算法来决定当前采取何种行动)
\space
关于track query和object track的一对一分配问题,提出了轨迹感知的标签分配方法(Tracklet-aware label assignment)。
为了增强长时序的学习,提出了时间聚集网络和集体平均损失(Temporal aggregation network and collective average loss)
这些概念要看后文的解释,在这里还是一头雾水。
\space
2. Introduction
Introduction部分主要介绍了MOTR的大体思路。
在一开始还是又强调了一下MOTR是第一个端对端的,不用显式方式(例如IOU)进行数据关联的,能同时学习外观和位置变化的算法。
由于MOTR是基于DETR的,因此简单介绍了一下DETR的思路。
-
DETR把detection视作set(集合) prediction的问题。充当解耦合的object的代表,叫做object
query(和本文的track query有相似之处),与feature相结合。作为Transformer Decoder的输入。它用二部匹配实现object query和ground truth的一一匹配,而没用那些后处理,例如NMS(前面提到post-process无法使模型成为端到端的结构)
\space
接下来文章提到,MOT和机器翻译有相似之处,MOT也可以看作是序列预测的问题。 而上文提到的DETR是集合预测的问题。
-
将MOT也视作sequence预测的问题,每个sequence对应一个object的轨迹。因此他们拓展DETR中object query的功能,叫做track query。如前所述,每个track query应该负责一个object的预测。
根据Transformer模型,track queries(注意,复数的track queries可以认为是track query的集合)就是作为一个hidden state,参与迭代运算。具体地,track query的更新不仅依赖于自注意力,而且还有和多帧特征的cross-attention。
更新的track query会进一步用于预测bounding box。一个object的轨迹就是track query的更新的序列。
上面这句话非常关键,原文是:
The updated track queries are further used to predict the bounding boxes.All predictions of one track query naturally form the track of one object.
\space
接下来,说到将MOT视作sequence预测的两个主要问题:
1.如何保证一个track query跟踪一个object,应该就是一一对应的问题。
- 为此引入了TALA(轨迹感知的标签分配方法),每个track query的预测都在同一个ID的边界框序列的监督之下。
2.如何处理新进入的和离开的object。
- 他做了一个track query的集合,new born的就加入,dead的就移除。这样就可以避免用IoU这种显式的关联方法。
\space
在下文中,作者用了一个递进词"Moreover",但好像没有明显的递进关系…后面作者逐一解释了CAL(集体平均损失)和TAN(时间聚合网络)的作用:
他说在track query的迭代更新的过程中,实际上就可以学习外观和位置特征的时序变化。为了加强这个长时间学习,提出了CAL(集体平均损失)和TAN(时间聚合网络)。
MOTR整体参数的更新都依据全局的loss。TAN通过多头注意力机制提供了track query从历史状态中来合计历史信息的捷径。(但并没有说track query为什么要合计历史信息…)
\space
\space
3.Related work
Related work里没有太大的信息量,主要介绍了Transformer结构的发展史,MOT的发展史和seq2seq模型的大致运作方式。
\space
\space
4.Method
这部分首先又说了一下DETR的大致流程,然后说Track query和Detect query(就是DETR里object query,为了区分故换称呼)的关系,然后介绍了为了解决第一个problem而提出的TALA,之后介绍了整个MOTR的架构,之后介绍了MOTR架构里的Query Interaction Module和训练时用的损失函数Collective Average Loss。
(我感觉这部分的逻辑有点乱…所以就不按书写顺序记了,尽力按我理解的逻辑顺序记。)
顺序:
- 总体工作流程
- QIM工作流程和TALA是什么
- CAL是什么
\space
直接看MOTR的框图:
\space
4.1 总体工作流程:
为了方便,暂且不把训练过程和测试过程加以区分。
假设video一共有N帧,每一帧用 T 1 , . . . , T N T_1,...,T_N T1,...,TN表示。
第一帧来了的时候:
1.用一定结构的CNN(例如ResNet50)和DETR里的Encoder提取出该帧的特征
f
1
f_1
f1。
并且用DETR产生检测结果,叫做detect query,记作 q d q_d qd.
特别注意: 将DETR的模式修改为仅探测new-born的目标。也就是 q d q_d qd仅包含本帧新出现的目标。
2.将特征 f 1 f_1 f1和detect query q d \quad q_d qd输入到Decoder里,产生原始的轨迹查询(original track queries) q o t 1 q_{ot}^1 qot1.
3. q o t 1 q_{ot}^1 qot1经过查询交互模块(Query Interaction Module,QIM)之后才能变成track queries q t q_t qt.由于下一步要预测第二帧,所以 q o t 1 q_{ot}^1 qot1经过QIM之后产生的track queries 记作 q t 2 q_t^2 qt2.
4. q o t 1 q_{ot}^1 qot1被用来生成最终的预测 Y 1 Y_1 Y1,我理解的是 Y 1 Y_1 Y1就包含了这一帧里的所有应该有的信息。
\space
第一帧的工作流程说完了,普适地,对于第 i i i帧 T i T_i Ti:
1.用一定结构的CNN和DETR里的Encoder提取出该帧的特征 f i f_i fi。
2.接收 T i − 1 T_{i-1} Ti−1帧SIM的输出 q t i q_t^i qti,并且和detect query q d q_d qd进行拼接,输入到Decoder里,产生原始track queries q o t i q_{ot}^i qoti,这个 q o t i q_{ot}^i qoti会被输入到SIM里,产生为下一帧服务的 q t i + 1 q_t^{i+1} qti+1.
3. q o t 1 q_{ot}^1 qot1被用来生成最终的预测 Y i Y_i Yi
4.跑完 N N N帧以后,最终生成的预测集合 { Y 1 , . . . , Y N } \{Y_1,...,Y_N\} {Y1,...,YN}。在训练过程中,我们知道Ground truth { T 1 ^ , . . . , T N ^ } \{\hat{T_1},...,\hat{T_N}\} {T1^,...,TN^},利用集合平均损失(Collective Average Loss)进行优化。
\space
非常重要的逻辑关系:
我的理解是,DETR中的object query,也就是在这里被称为的detect query,里面包含了这一帧detection的目标的信息。
track query,如前文所述,每一个track query负责跟踪一个目标的轨迹。这就是说,每个track query记录了一个帧中一个object的运动的信息。那么一个帧中track query的集合,也就是track queries(注意!是复数) q t i q_t^i qti,代表了第 i i i帧中被追踪的目标的信息。由于有新产生和消失的目标,因此 q t i q_t^i qti的长度应该是变化的。
因此,我觉得detect query q d q_d qd也应该用复数。而文章有的地方是复数有的地方不是。
\space
OK,那就发现QIM是整个框图里很重要的部分,它接受Decoder的输出,并将其转化为我们要的track queries。
\space
4.2 QIM和TALA
4.2.1 QIM整体工作流程
为了便于举例子,假设如下的情形:
可以看出,目标1和2在第一帧中就已经存在,目标3在第 i i i帧进入,目标2在第 j j j帧退出。
那么如果我们考虑第 i i i帧,那么这一帧发生了两个事情:目标3的进入和目标2的退出。
QIM的框图如下图所示:
\space
接续前面的例子,当处在第
i
i
i帧的时候,上一帧传来的
q
t
i
q_t^i
qti里面有目标1和2的信息,detect query
q
d
q_d
qd为空。
这里有个疑问: 目标3已在第i帧出现,detect query q d q_d qd里面为何没有目标3的信息。有人解读说 q d q_d qd实际上是空查询,为了应对可能出现的新目标。这样的确会让框图解释起来更加合理,但通篇论文我没有找到是空查询的暗示。
然后 q t i q_t^i qti和 q d q_d qd以及提取出的第i帧特征 f i f_i fi(里面应该有目标3的信息)被输入进Decoder,输出original track queries q o t i q_{ot}^i qoti.
经过Decoder生成的original track query q o t i q_{ot}^i qoti被分成两个集合,一个是 q t r q_{tr} qtr,一个是 q d e t q_{det} qdet(注意和前面 q t , q d q_t,q_d qt,qd符号的差别)。其中 q d e t q_{det} qdet包含新产生的objects, q t r q_{tr} qtr包含被追踪的和离场的objects。
在这个例子里, q t r q_{tr} qtr包含目标1,2。 q d e t q_{det} qdet是空的。
\space
下面按照训练阶段和测试阶段分别说明工作方式。
训练阶段:
在训练阶段,将 q t r i q_{tr}^i qtri和 q d e t i q_{det}^i qdeti对Ground Truth Y i ^ \hat{Y_i} Yi^和matching result ω t r i \omega_{tr}^i ωtri(匹配结果,我的理解就是目标ID序列)进行双边匹配从而进行训练。
看图可以得出,由于目标2退出,我们希望训练之后track queries应该剔除目标2,detect query应该出现目标3.因此经过双边匹配后的结果,我们用字母上面加overline表示,就应该是:
q
‾
t
r
i
\overline{q}_{tr}^i
qtri包含目标1,
q
‾
d
e
t
i
\overline{q}_{det}^i
qdeti包含目标3.
那么
ω
d
e
t
i
\omega_{det}^i
ωdeti和
ω
t
r
i
\omega_{tr}^i
ωtri是怎么得到的呢?这就是TALA(轨迹感知的标签分配)的作用。
\space
简单说,TALA就是将标签序列和预测结果一一对应的一个方法。和前文一样,DETR只考虑new-born的目标。假设预测和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}=\{\hat{Y_{tr}^i},\hat{Y_{det}^i}\}
Yi^={Ytri^,Ydeti^}.标签分配的结果记为
ω
i
=
{
ω
t
r
i
,
ω
d
e
t
i
}
\omega_{i}=\{\omega_{tr}^i,\omega_{det}^i\}
ωi={ωtri,ωdeti}.
则按照下式进行标签分配结果的计算:
其中 L L L就是DETR中计算匹配cost的函数, Ω i \Omega_i Ωi论文里没说,我认为应该是label排列组合的全体(当然,应该只考虑了new-born)。
这个公式里第一个公式的意思就是:按照DETR里的算法计算出对应的detect的标签顺序。第二个式子就是对于追踪对象,每一帧按照前一帧的追踪对象和检测标签取并集(第一帧设为空)。
就是下面这个图:
一个疑问: 只能检测new-born的对象,但是退出机制呢?TALA是如何管理消失目标的标签的?
\space
之后
q
‾
t
r
i
\overline{q}_{tr}^i
qtri和
q
‾
d
e
t
i
\overline{q}_{det}^i
qdeti经过TAN产生
q
t
r
i
+
1
q_{tr}^{i+1}
qtri+1,TAN的结构后文再说。
\space
测试阶段:
在测试阶段,用分类的score(我的理解就是置信度)来决定一个track的出现和消失。具体地,对于new-born对象,大于阈值 τ e n \tau_{en} τen的就留下。对于消失对象,若连续 M M M帧都低于阈值 τ e x \tau_{ex} τex,就删除。
一个疑问: 阈值是超参数还是训练出来的?
解答:应该是自定义的。参见Table(3) e.
就是用如下两个公式表示:
q ‾ d e t i = { q k ∈ q d e t i ∣ s k > τ e n } \overline{q}_{det}^i = \{{q_k \in q_{det}^i | s_k > \tau_{en}\}} qdeti={qk∈qdeti∣sk>τen}
其中
s
k
i
s_k^i
ski表示第
i
i
i帧第
k
k
k个track query的score。
之后跟训练阶段相同, q ‾ t r i \overline{q}_{tr}^i qtri和 q ‾ d e t i \overline{q}_{det}^i qdeti经过TAN产生 q t r i + 1 q_{tr}^{i+1} qtri+1。
一个理解:训练的时候实际上就是利用TALA产生的结果,和模型算出的结果进行匹配。推理(测试)的时候Decoder会根据frame特征和之前的输入学习到特征,然后产生 q o t q_{ot} qot。用 q o t q_{ot} qot预测的时候就会有置信度,比如这个例子里,就应包含了目标2退出和目标3进入的信息,因此根据置信度和阈值,QIM就能产生出新的sequence,来更新现有的追踪的目标。
所以,QIM相当于一个桥梁, 其将上一帧的信息传递给下一帧,这也许就是长时学习的要义所在。
\space
4.2.2 TAN
TAN实际上比较简单,主要由多头注意力机制block(MHA)、Add&Norm层、前馈神经网络构成。其接受的输入不仅是前文所述 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来更好的学习时序信息。
q ‾ t r i − 1 \overline{q}_{tr}^{i-1} qtri−1和 q ‾ t r i \overline{q}_{tr}^{i} qtri进行相加,当做MHA的 Q Q Q和 K K K,本帧的 q ‾ t r i \overline{q}_{tr}^i qtri作为 V V V.
结构如下:
\space
对于Add&norm层, q ‾ t r i \overline{q}_{tr}^{i} qtri作为残差连接到Add&Norm层,并且按下式更新。这个式子计算出的tgt再被输入到前馈神经网络里。
(这个式子就是Transformer原论文里的
A
=
σ
(
Q
K
T
d
)
V
A=\sigma(\frac{QK^T}{\sqrt d})V
A=σ(dQKT)V,叫做Scaled Dot-Product Attention)
tgt经过网络后的结果和这一帧的检测估计 q ‾ d e t i \overline{q}_{det}^i qdeti相连,得到QIM的输出 q t i + 1 q_t^{i+1} qti+1.
至此,QIM的流程就完成了。
\space
4.3 CAL是什么
在整个MOTR进行训练的过程中,要衡量整个Predictions和GTs的loss,就是Collective Average Loss。
为什么要整体计算loss呢,文章说,对于传统的训练方式,例如在相邻两帧之间进行训练,无法生成长范围的目标的运动样本,我的理解就是无法学习长时间时域上的变化。所以在训练的时候,是把整个video剪辑作为输入。
CAL的计算公式:
其中
L
L
L和DETR中计算单帧的Loss相似:
其中 L c l s L_{cls} Lcls是focal loss, L l 1 L_{l_1} Ll1是L1 loss, L g i o u L_{giou} Lgiou是广义IOU loss。
CAL是根据整个video计算的。Collective意为整个集合,应该就是指整个video的Prediction和Ground Truth一次性计算。Average指的是公式里分母的目标的数目总和。因此叫做Collective Average Loss。
\space
\space
5.Experiments
实验中的CNN选用ResNet50,并利用裁剪旋转等进行数据增强。
此外,在训练阶段, 为了产生更多的new-born目标,随机抹除一些track queries,这个概率记为 p p r o p p_{prop} pprop。为了模拟消失的目标,随机插入一些False positive(本来有,没检测到)的track queries。
网络用COCO数据集进行预训练,优化器选择AdamW。在MOT16和17数据集上进行训练,结果如下表:
\space
可以看出,MOT16数据集上大多数指标都取得了比传统的CNN based方法更好的结果,在MOT17数据集上也不错,但是略逊于TransTrack,which也是一个端到端的基于Transformer的。
所以基于Transformer的整体性能确实比传统CNN based的要好一些。
作者后续证明了TAN和CAL的作用很大,还有进入和退出阈值 τ e n , τ e x \tau_{en},\tau_{ex} τen,τex对结果的影响并不大。
\space
感想和总结:
读这篇文章确实花了一些力气,就是很想吐槽,感觉逻辑性有点差,而且原文中也有一些错误(也可能是我太菜了)
Transformer最开始用于机器翻译中。因为在NLP任务中一个句子有天然的时序先后关系,这里用Transformer实际上是把追踪对象的集合作为了input sequence,在时序上还是迭代运算。而帧和帧之间依靠QIM进行连接,因此可以学习时序上的变化,这也是这个模型的精髓所在。