系列文章目录
文章目录
前言
简单讲一下《MOTR: End-to-End Multiple-Object Tracking with Transformer》这篇文章的理解。
论文:https://arxiv.org/abs/2105.03247
代码:https://github.com/megvii-model/MOTR
一、主要思想
大家应该都熟悉目标检测器DETR,DETR通过将一些
object query
经过Decoder来进行预测,得到一些output query
。
MOTR在DETR的基础上更进一步,(如下图所示)将T1
时刻得到的output query
重新经过Decoder的预测,得到T2
时刻的更新的updated object query
。
二、整体架构
首先需要明确一下下图中的一些符号:
- Enc:编码器Encoder;
- Dec:解码器Decoder;
- q d q_d qd:Detect Query,类似于输入到DETR里的Decoder的query,数量是固定的,假设有n个query;
- q t r N q_{tr}^N qtrN:Track Query,上一个时刻通过QIM模块得到的query;
- QIM:Query Interaction Module。用来对当前时刻的预测输出的Query进行过滤,再将这些Query输出给下一个时刻,作为Track Query。
整体过程:
- T 1 T_1 T1时刻,图片经过Encoder和Decoder,同时输入固定长度的Detect Query进行检测,此时Track Query是一个空的Set,得到输出 Y 1 Y_1 Y1;
- 将 T 1 T_1 T1时刻得到的所有预测的Query经过一个QIM模块进行提取;
- 将提取后的Query送给下一个 T 2 T_2 T2时刻,作为该时刻的Track Query;
- 同时, T 2 T_2 T2时刻也有一个固定长度的Detect Query输入;
- 一直进行下去,直到片段停止。
二、细节
1.Detect Query和Track Query
两种Query分别是:(下图右图)
- Detect Query:每一个时刻都有固定数量n个object query输入,跟DETR的query输入一样;
- Track Query: T n T_n Tn时刻的Track Query是 T n − 1 T_{n-1} Tn−1时刻上一个Decoder预测得到的query(QIM模块输出的query),数量是会变化的。而且第一个时刻 T 0 T_0 T0为
空的set
。
2.Tracklet-Aware Label Assignment(TALA)
这一块简单理解,类似于目标检测里的样本分配,也就是来解决让哪个query来预测哪个Ground Truth的问题。
首先,要明确一下,我们得到的Query包括两种:
- 固定长度的
Detect Query
,用于检测新出现(new born)的目标;- 可变长度的
Track Query
,用于继续检测上一帧已经存在的目标。因此,两种Query在分配的过程中,不能混为一谈。而DETR的分配策略会将这两种所有的object query分配给所有的目标Target,没有指向性。所以这里提出了Tracklet-Aware Label Assignment(TALA),如下图的公式,将固定长度的
Detect Query
分配给new born物体。
下图的公式说明的是,当前时刻的Track Query是上一最近的时刻的Detect Query与Track Query的并集。
3. QIM模块
流程应该是这样的吧:
- 当前时刻的输入有上一个时刻输出的Track Query,与当前时刻设置的Detect Query;
- 将上面这两种Query经过Decoder后,得到预测的Query;(需要注意,这些预测后的Output Query知道是哪种Query##Detect Query/Track Query##转变而来的)
- 其中Output Track Query会额外经过一个TAN模块;
- 最后,将过滤后还剩下的所有Query作为下一个时刻的Track Query输入。
总结
以上只是MOTR的大致理解,内容比较简略,如有错误还请指出。