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也应该用复数。而文章有的地方是复数有的地方不是。
可以看出,目标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)。
\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。