📝论文下载地址
🔨代码下载地址
[GitHub]
👨🎓论文作者
📦模型讲解
[背景介绍]
视频跟踪可以划分为单目标跟踪和多目标跟踪两个部分。单目标跟踪中比较有名的方法就是孪生网络,孪生网络的关键是在搜索图像中能不能匹配到单个目标的位置。多目标跟踪网络比较有名的是使用目标检测模型为backbone,使用关联匹配的模型,对连续帧进行目标的匹配,多目标跟踪网络的关键是对两帧之间对应目标的关联。
[论文解读]
在通过检测进行跟踪的过程中,MOT由两个阶段组成:在每个帧进行目标检测;并在跨帧的每个检测结果分配ID也就是进行关联。分配ID的常见做法通常是根据tracklet和检测结果之间的关联。在本节中,作者首先通过目标检测的跟踪方法对提出的框架进行总体架构描述,然后再扩展各小节中的细节。
作者提出了一个新的框架,可以通过tracklet在线搜索使用margin损失直接优化tracklet得分。该框架由迭代搜索、学习、排名和修剪过程组成,如下图所示。 获得模型后,采用在线匈牙利算法和近似在线算法-多重假设跟踪进行推断,以全面了解其有效性。最后,逐帧运行此分配过程,并随时间产生一组目标轨迹。
[评分网络]
T
i
T_i
Ti表示目标
i
i
i在视频中的轨迹,它由目标检测补丁
D
i
D_i
Di组成:
T
i
=
{
b
i
t
}
t
=
t
0
t
0
+
D
i
T_i = \{b^t_i\}^{t0+Di}_{t=t0}
Ti={bit}t=t0t0+Di
意思应该是
t
0
t0
t0时刻和之后时刻目标检测的结果中
i
i
i的boundingbox的结果
D
i
D_i
Di组合成目标
i
i
i的轨迹。
给定在时间
t
t
t已经获得目标
i
i
i的轨迹为
T
i
t
T^t_i
Tit,之后的检测结果
{
b
1
t
+
1
,
b
2
t
+
1
,
.
.
.
,
b
i
t
+
1
,
.
.
.
,
b
j
t
+
1
}
\{b^{t+1}_1,b^{t+1}_2,...,b^{t+1}_i,...,b^{t+1}_j\}
{b1t+1,b2t+1,...,bit+1,...,bjt+1}表示在
t
+
1
t+1
t+1帧检测到
j
j
j个目标,这些目标中会包含在
t
+
1
t+1
t+1帧的目标
i
i
i。
作者提出了一个基于tracklet搜索的对延长tracklet进行一致性评分的方法。也就是说在之前
t
t
t帧目标
i
i
i的tracklet
T
i
t
T^t_i
Tit的基础上会加上
t
+
1
t+1
t+1帧的结果,组成一个新的tracklet
(
T
i
t
,
b
j
t
+
1
)
(T^t_i,b^{t+1}_j)
(Tit,bjt+1),这个公式好像有点问题,而且在后面很多公式上标下标随意变换。我认为应该是
T
~
i
t
+
1
=
(
T
i
t
,
b
n
t
+
1
)
\tilde T^{t+1}_i=(T^t_i,b^{t+1}_n)
T~it+1=(Tit,bnt+1)
n
∈
{
1
,
2
,
.
.
.
,
i
,
.
.
.
,
j
}
n\in\{1,2,...,i,...,j\}
n∈{1,2,...,i,...,j}
其中
T
~
i
t
+
1
\tilde T^{t+1}_i
T~it+1代表在
t
+
1
t+1
t+1帧目标
i
i
i的假设轨迹,在
t
+
1
t+1
t+1帧中检测结果
n
n
n就是目标
i
i
i的情况下。
作者的目标是找到一个评分函数,以促进训练和推理阶段之间的一致性。 假设给出了用深层网络实现的评分函数为
f
s
(
T
)
f_s(T)
fs(T),通过对所有的
T
~
i
t
+
1
\tilde T^{t+1}_i
T~it+1进行评分,选取最高的作为结果,也就是:
T
^
i
t
+
1
=
a
r
g
m
a
x
T
~
i
t
+
1
{
f
s
(
T
~
i
t
+
1
)
}
\hat T^{t+1}_i=argmax_{\tilde T^{t+1}_i}\{f_s(\tilde T^{t+1}_i) \}
T^it+1=argmaxT~it+1{fs(T~it+1)}其中
T
^
i
t
+
1
\hat T^{t+1}_i
T^it+1代表在
t
+
1
t+1
t+1帧目标
i
i
i的最终预测轨迹。
[评分网络损失函数]
对于多目标跟踪过程中的一个目标来说,例如这个目标是
i
i
i,在
t
t
t帧的轨迹Groundtruth是
T
i
t
T^t_i
Tit:
T
i
t
=
(
T
i
t
−
1
,
b
i
t
)
T^t_i=(T^{t-1}_i,b^t_i)
Tit=(Tit−1,bit)也就是代表在
t
t
t帧的视频跟踪目标有
i
i
i个。
多目标跟踪网络在第
t
t
t帧有
j
j
j个目标检测结果,而要跟踪的某一个目标
i
i
i包含在目标检测的结果中,那么可以通过下式得到
t
t
t帧目标
i
i
i的预测轨迹
T
^
i
+
n
t
\hat T^t_{i+n}
T^i+nt组成候选轨迹
T
^
i
t
\hat\mathcal T^{t}_i
T^it:
T
^
i
t
=
{
T
^
i
+
1
t
,
T
^
i
+
2
t
,
.
.
.
,
T
^
i
+
j
t
}
\hat\mathcal T^{t}_i=\{\hat T^t_{i+1},\hat T^t_{i+2},...,\hat T^t_{i+j}\}
T^it={T^i+1t,T^i+2t,...,T^i+jt}
T
^
i
+
n
t
=
(
T
^
i
t
−
1
,
b
n
t
)
\hat T^t_{i+n}=(\hat T^{t-1}_i,b^t_n)
T^i+nt=(T^it−1,bnt)
n
∈
{
1
,
2
,
.
.
.
,
i
,
.
.
.
,
j
}
n\in\{1,2,...,i,...,j\}
n∈{1,2,...,i,...,j}
其中下标
i
+
n
i+n
i+n表示
t
−
1
t-1
t−1帧的目标
i
i
i和第
t
t
t帧检测的目标
n
n
n的组合,那么轨迹中与Groundtruth
T
i
t
T^t_i
Tit最相似的是:
T
^
i
+
i
t
=
(
T
^
i
t
−
1
,
b
i
t
)
\hat T^t_{i+i}=(\hat T^{t-1}_i,b^t_i)
T^i+it=(T^it−1,bit)
那么
T
^
i
t
/
T
^
i
+
i
t
\hat\mathcal T^{t}_i/ \hat T^t_{i+i}
T^it/T^i+it表示在候选轨迹
T
^
i
t
\hat\mathcal T^{t}_i
T^it中剔除得分最高的
T
^
i
+
i
t
\hat T^t_{i+i}
T^i+it,那么剩下的就是非目标
i
i
i的预测轨迹,可能是其他跟踪目标也可能是误检目标,单对于目标
i
i
i来说都是错的,所以作者要抑制这些得分定义了margin损失
(
L
m
a
r
g
i
n
)
i
t
(L_{margin})^t_i
(Lmargin)it,表示
t
t
t帧目标
i
i
i的margin损失
L
m
a
r
g
i
n
L_{margin}
Lmargin:
(
L
m
a
r
g
i
n
)
i
t
=
∑
T
^
i
+
n
t
∈
T
^
i
t
/
T
^
i
+
i
t
m
a
x
(
0
,
S
i
g
m
o
i
d
(
f
s
(
T
^
i
+
n
t
)
)
−
S
i
g
m
o
i
d
(
f
s
(
T
i
t
)
)
+
α
)
(L_{margin})^t_i=\sum_{{\hat T^t_{i+n}\in {{\hat{\mathcal T}^t_i}/{\hat T^t_{i+i}}}}}max(0,Sigmoid(f_s({\hat T^t_{i+n}}))-Sigmoid(f_s(T^t_i))+α)
(Lmargin)it=T^i+nt∈T^it/T^i+it∑max(0,Sigmoid(fs(T^i+nt))−Sigmoid(fs(Tit))+α)
n
∈
{
1
,
2
,
.
.
,
i
−
1
,
i
+
1
,
.
.
.
,
j
}
n\in \{1,2,..,i-1,i+1,...,j\}
n∈{1,2,..,i−1,i+1,...,j}
如果第
t
t
t帧目标检测出
s
s
s个目标,跟踪目标总共有
j
j
j个,那么
L
m
a
r
g
i
n
L_{margin}
Lmargin需要计算
j
j
j次。
上面的margin损失试图从候选中区分真实轨迹,而不能量化候选之间的差异。 具有较低身ID切换的候选轨迹应具有较高的传播保留率。但是,IDS是不可区分的指标,无法直接优化。 可以采用成对排名损失并在连续函数中对不可微度量进行编码。
(
L
r
a
n
k
)
t
=
∑
T
^
i
+
i
t
,
T
^
j
+
j
t
∈
T
^
t
S
i
g
m
o
i
d
(
γ
×
(
f
s
(
T
^
i
+
i
t
)
−
f
s
(
T
^
j
+
j
t
)
)
)
(L_{rank})^t=\sum_{\hat T^t_{i+i},{\hat T^t_{j+j}\in \hat \mathcal T^t}}Sigmoid(γ×(f_s(\hat T^t_{i+i})-f_s(\hat T^t_{j+j})))
(Lrank)t=T^i+it,T^j+jt∈T^t∑Sigmoid(γ×(fs(T^i+it)−fs(T^j+jt)))
{
γ
=
1
if
IDS
(
T
^
i
+
i
t
)
>
IDS
(
T
^
j
+
j
t
)
γ
=
−
1
if
IDS
(
T
^
i
+
i
t
)
<
IDS
(
T
^
j
+
j
t
)
\left\{\begin{array}{lr} \gamma=1 & \text { if } \operatorname{IDS}\left(\hat T^t_{i+i}\right)>\operatorname{IDS}\left(\hat T^t_{j+j}\right) \\ \gamma=-1 & \text { if } \operatorname{IDS}\left(\hat T^t_{i+i}\right)<\operatorname{IDS}\left(\hat T^t_{j+j}\right) \end{array}\right.
⎩⎨⎧γ=1γ=−1 if IDS(T^i+it)>IDS(T^j+jt) if IDS(T^i+it)<IDS(T^j+jt)
那么最后的总损失:
L
t
=
L
m
a
r
g
i
n
t
+
L
r
a
n
k
t
L^t=L_{margin}^t+L_{rank}^t
Lt=Lmargint+Lrankt
[SBTO算法]
作者提出了一个基于送搜索的tracklet优化算法(Search-Based Tracklet Optimizing),算法的步骤:
①对于一个特定的跟踪对象
i
i
i,第
t
t
t帧时,在很多候选轨迹中选取了最高的
K
K
K个轨迹,
T
^
i
t
=
{
T
^
i
+
1
t
,
T
^
i
+
2
t
,
.
.
.
,
T
^
i
+
K
t
}
\hat \mathcal T_i^t=\{\hat T^t_{i+1},\hat T^t_{i+2},...,\hat T^t_{i+K}\}
T^it={T^i+1t,T^i+2t,...,T^i+Kt}。为了方便,先写成
T
^
i
t
=
{
T
^
1
t
,
T
^
2
t
,
.
.
.
,
T
^
K
t
}
\hat \mathcal T_i^t=\{\hat T^t_{1},\hat T^t_{2},...,\hat T^t_{K}\}
T^it={T^1t,T^2t,...,T^Kt}
②在第
t
+
1
t+1
t+1帧时,通过目标检测算法检测到
C
C
C个物体,那么将
T
^
i
t
\hat \mathcal T_i^t
T^it中所有的tracklet再加上1帧的结果就可以组成
T
^
i
t
+
1
\hat \mathcal T_i^{t+1}
T^it+1,
t
t
t帧的tracklet共有
K
K
K种,
t
+
1
t+1
t+1帧的检测结果有
C
C
C种,那么
T
^
i
t
+
1
\hat \mathcal T_i^{t+1}
T^it+1种会包含
K
×
C
K×C
K×C种,即:
T
^
i
t
+
1
=
{
T
^
1
+
1
t
,
T
^
1
+
2
t
,
.
.
.
,
T
^
1
+
C
t
,
.
.
.
,
T
^
K
+
1
t
,
T
^
K
+
2
t
,
.
.
.
,
T
^
K
+
C
t
}
\hat \mathcal T_i^{t+1}=\{\hat T^t_{1+1},\hat T^t_{1+2},...,\hat T^t_{1+C},...,\hat T^t_{K+1},\hat T^t_{K+2},...,\hat T^t_{K+C}\}
T^it+1={T^1+1t,T^1+2t,...,T^1+Ct,...,T^K+1t,T^K+2t,...,T^K+Ct}
③通过
f
s
(
.
)
f_s(.)
fs(.)对
T
^
i
t
+
1
\hat \mathcal T_i^{t+1}
T^it+1中的tracklet进行评分,分数降序排列。
④排列完成后,选取排列前
K
K
K的tracklet更新成为第
t
+
1
t+1
t+1的
T
^
i
t
+
1
\hat \mathcal T_i^{t+1}
T^it+1,相当于从原先
K
×
C
K×C
K×C个tracklet剪枝到
K
K
K个tracklet,可以表示为:
T
^
i
t
+
1
=
{
T
^
1
t
+
1
,
T
^
2
t
+
1
,
.
.
.
,
T
^
K
t
+
1
}
\hat \mathcal T_i^{t+1}=\{\hat T^{t+1}_{1},\hat T^{t+1}_{2},...,\hat T^{t+1}_{K}\}
T^it+1={T^1t+1,T^2t+1,...,T^Kt+1}
同样的步骤可以继续得到
T
^
i
t
+
2
、
T
^
i
t
+
3
.
.
.
\hat \mathcal T_i^{t+2}、\hat \mathcal T_i^{t+3}...
T^it+2、T^it+3...。
⑤计算损失:
L
t
o
t
a
l
=
∑
t
=
1
N
−
1
L
t
+
1
L_{total}=\sum^{N-1}_{t=1}L_{t+1}
Ltotal=t=1∑N−1Lt+1
注意以上的算法时训练的算法,训练的过程中会提供Groundtruth,保证评分网络对Groundtruth的评分尽量为1,而
T
^
i
t
\hat \mathcal T_i^t
T^it中评分最高的
K
K
K个tracklet作者认为全都是错的,要通过训练优化损失,抑制评分最高的
K
K
K个tracklet,这样就能保证正确的tracklet评分高,错误的tracklet评分低。就像下图所示:
下面是作者展示的算法流程,本文符号与作者算法的符号不太一样,仅供参考。
[评分网络的结构]
下面作者介绍了评分网络的结构,但是介绍的不是很多,使用的是LSTM的结构。下图右侧就是上面说的SBTO的流程,左侧是评分网络的流程。
每一帧的截取目标送入卷积网络生成
φ
φ
φ,
φ
φ
φ是一个一维向量,然后生成隐藏状态
h
h
h,
h
h
h都是由上一帧的隐藏状态和当前帧的
φ
φ
φ生成:
h
t
+
1
=
f
(
h
t
,
φ
t
+
1
)
h_{t+1}=f(h_t,φ_{t+1})
ht+1=f(ht,φt+1)
之后作者介绍不太清楚,可能可能可能是这样。实线表示
t
t
t帧的时候对所有
0
−
t
0-t
0−t帧的隐藏状态进行加权求和得到实心蓝色的部分,当
t
+
1
t+1
t+1帧的时候,所有
0
−
t
+
1
0-t+1
0−t+1帧的隐藏状态加权求和(空心蓝色部分)会替代或者组合实心蓝色的部分,然后和当前的隐藏状态同时输入全连接层输出评分。
本人理解和作者的思想可能有偏差,待代码开源后进行更改!!