写在前面:
“how to train your deep multi-object tracker”是论文“DeepMOT-A Differentiable Framework for Training Multiple Object Trackers”的改进版本,前者比后者多了一些实验。
主要工作:
提出了一个端对端的多目标跟踪方法的训练框架,能够针对多目标跟踪的评估指标进行训练。
主要贡献:
- 提出了直接受启发于标准多目标跟踪评估测量MOTA和MOTP的新的损失函数用于端对端的训练深度多目标跟踪器。
- 提出了一个新的网络模块–深度匈牙利网络,学习以一种可微的方式将预测的跟踪与真实目标进行匹配。
- 通过使用本文提出的训练框架训练最近提出的Tracker1证明了提出的损失函数和可微匹配模块的益处。证明了对于baseline方法的提升以及在MOTchallenge 基准上建立了一个新的sort结果。
主要模块
深度匈牙利网络
网络结构
如果所示,深度匈牙利网络由两个连续的Bi-RNN构成,但是代码中的流程与图示流程有所差异。
计算流程
输入尺寸为 N ∗ M N*M N∗M的距离矩阵 D D D,进行一个逐行的flatten,得到尺寸为 M × N M\times N M×N的一维向量。将flatten后的向量输入到第一个Bi-RNN中得到尺寸为 M × N ∗ 2 h M\times N* 2h M×N∗2h的张量,其中 h h h为Bi-RNN的中间层数量。将张量reshape为 M ∗ N ∗ 2 h M*N*2h M∗N∗2h,再进行逐列的flatten,得到尺寸为 N × M ∗ 2 h N\times M*2h N×M∗2h的张量作为第二个Bi-RNN的输入,得到尺寸为 N × M ∗ 2 h N\times M*2h N×M∗2h的输出张量。将得到的张量输入到三个FC层中得到尺寸为 N × M N\times M N×M的输出向量,然后reshape成尺寸为 N ∗ M N*M N∗M的软分配矩阵。
输入距离矩阵
训练时,计算检测位置与gt目标位置之间的距离矩阵。利用IoU计算距离矩阵时,如果两个边界框没有交集,距离1-IoU始终为常数1,来自损失的梯度始终为0,没有信息被反向传播。因此,本文利用欧几里得中心点距离和Jaccard 距离的平均作为距离:
d
n
m
=
f
(
x
n
,
y
m
)
+
J
(
x
n
,
y
m
)
2
d_{nm}=\frac{f(x^n, y^m)+J(x^n, y^m)}{2}
dnm=2f(xn,ym)+J(xn,ym)
其中:
f
(
x
n
,
y
m
)
=
∣
∣
c
(
x
n
)
−
c
(
y
m
)
∣
∣
2
H
2
+
W
2
f(x^n, y^m)=\frac{||c(x^n)-c(y^m)||_2}{\sqrt{H^2+W^2}}
f(xn,ym)=H2+W2∣∣c(xn)−c(ym)∣∣2
J
(
x
n
,
y
m
)
=
1
−
I
o
U
(
x
n
,
y
m
)
J(x^n, y^m)=1-IoU(x^n, y^m)
J(xn,ym)=1−IoU(xn,ym)
DHN训练方法
利用训练集里的检测位置和gt目标位置计算距离矩阵
D
D
D输入到DHN,得到软分配矩阵
A
~
\widetilde A
A
,利用匈牙利算法对距离矩阵进行二元分配得到软分配矩阵的标签
A
∗
A^*
A∗,利用focal_loss将DHN的训练作为了一个二分类任务进行。
损失收敛后,DHN的权重参数被固定,用来训练跟踪方法。
可微的 M O T A ‾ \overline {MOTA} MOTA和 M O T P ‾ \overline {MOTP} MOTP以及损失 L o s s Loss Loss计算
多目标跟踪的标准评估指标MOTA和MOTP计算如下:
M
O
T
A
=
1
−
Σ
t
(
F
N
t
+
F
P
t
+
I
D
S
t
)
Σ
t
M
t
MOTA = 1 - \frac{\Sigma_t(FN_t+FP_t+IDS_t)}{\Sigma_t M_t}
MOTA=1−ΣtMtΣt(FNt+FPt+IDSt)
M
O
T
P
=
Σ
t
Σ
n
,
m
d
t
n
m
a
t
n
m
∗
Σ
t
∣
T
P
t
∣
MOTP = \frac{\Sigma_t\Sigma_{n,m}d_{tnm}a_{tnm}^*}{\Sigma_t|TP_t|}
MOTP=Σt∣TPt∣ΣtΣn,mdtnmatnm∗
其中
F
N
t
FN_t
FNt表示t时刻的漏警数量,
F
P
t
FP_t
FPt表示t时刻的虚警数量,
I
D
S
t
IDS_t
IDSt表示t时刻的身份转换数量,
T
P
t
TP_t
TPt表示正确匹配的数量。
因此想要计算可微的
M
O
T
A
‾
\overline {MOTA}
MOTA和
M
O
T
P
‾
\overline {MOTP}
MOTP就需要计算可微的
T
P
‾
\overline {TP}
TP、
F
N
‾
\overline {FN}
FN、
F
P
‾
\overline {FP}
FP、
I
D
S
‾
\overline {IDS}
IDS。因此本文利用深度匈牙利网络提出了以下的计算方法:
如图所示,对于将距离矩阵
D
D
D输入深度匈牙利网络计算出的软分配矩阵
A
~
\widetilde A
A
:
- 计算 F N ‾ \overline{FN} FN:用 δ \delta δ填充一行,然后执行逐列的softmax得到 C c C^c Cc,填充行的值相加得到 F N ‾ \overline {FN} FN。由于每一行对应一个跟踪,添加的行相当于标记为丢失的“跟踪”,填充的 δ \delta δ相当于丢失“跟踪”与gt目标的IoU值,如果软分配矩阵同一列的值小于该值,则逐列的softmax之后,丢失“跟踪”行的值更接近于1,表示该列gt目标匹配失败,增加了一个 F N FN FN,因此丢失“跟踪”行值的累加和能够反应 F N FN FN的值。
- 计算 F P ‾ \overline{FP} FP:用 δ \delta δ填充一列,然后执行逐行的softmax得到 C r C^r Cr,填充列的值相加得到 F P ‾ \overline{FP} FP。由于每一列对应一个gt目标,添加的列相当于标记为丢失的"目标",填充的 δ \delta δ相当于丢失“目标”与跟踪的IoU值,如果软分配矩阵同一行的值小于该值,则逐行的softmax之后,丢失“目标”列的值更接近于1,表示该行跟踪匹配失败,增加了一个 F P FP FP,因此丢失“目标”列值的累加和能够反应 F P FP FP的值。
- 计算 I D S ‾ \overline {IDS} IDS:保存之前帧的二元分配矩阵 B − 1 T P B^{TP}_{-1} B−1TP以及 C c C^c Cc去掉填充行后的软分配矩阵 C 1 : N , 1 : M c C^c_{1:N,1:M} C1:N,1:Mc,利用 B − 1 T P B^{TP}_{-1} B−1TP的补码矩阵 B ‾ − 1 T P \overline{B}^{TP}_{-1} B−1TP与软分配矩阵 C 1 : N , 1 : M c C^c_{1:N,1:M} C1:N,1:Mc的乘积计算 I D S ‾ \overline {IDS} IDS: I D S ‾ = ∣ ∣ C 1 : N , 1 : M c ⊙ B ‾ − 1 T P ∣ ∣ 1 \overline {IDS}=||C^c_{1:N,1:M}\odot \overline{B}_{-1}^{TP}||_1 IDS=∣∣C1:N,1:Mc⊙B−1TP∣∣1如果前一帧的gt目标数量和当前帧的gt目标数量不同,则需要对 B ‾ − 1 T P \overline{B}^{TP}_{-1} B−1TP在当前的帧中新出现的目标用与 C 1 : N , 1 : M c C^c_{1:N,1:M} C1:N,1:Mc中相同的值进行pad。如果前一帧的跟踪数量和当前帧的跟踪数量不同,则需要对两帧里互相不存在的跟踪所在行的值用0进行pad(不能像gt目标一样用另一帧值进行复制pad,因为对于之前帧不存在当前帧的同一目标匹配上的跟踪的情况,复制pad会导致IDS为0,实际上是为1)。
- 则 M O T A ‾ \overline {MOTA} MOTA计算如下: M O T A ‾ = 1 − F N ‾ + F P ‾ + γ I D S ‾ M \overline {MOTA}=1- \frac{\overline{FN}+\overline{FP}+\gamma \overline{IDS}}{M} MOTA=1−MFN+FP+γIDS其中 γ \gamma γ控制了分配给 I D S ‾ \overline{IDS} IDS的惩罚, M M M为gt目标的数量。
- M O T P ‾ \overline {MOTP} MOTP计算如下: M O T P ‾ = 1 − ∣ ∣ D ⊙ B T P ∣ ∣ 1 ∣ ∣ B T P ∣ ∣ 0 \overline {MOTP}=1-\frac{||D\odot B^{TP}||_1}{||B^{TP}||_0} MOTP=1−∣∣BTP∣∣0∣∣D⊙BTP∣∣1其中 B T P B^{TP} BTP是利用 C 1 : N , 1 : M c C^c_{1:N, 1:M} C1:N,1:Mc阈值化后得到的当前帧的二元分配矩阵。
- 利用得到的 M O T A ‾ \overline {MOTA} MOTA和 M O T P ‾ \overline {MOTP} MOTP计算损失函数: L d e e p m o t = ( 1 − M O T A ‾ ) + λ ( 1 − M O T P ‾ ) L_{deepmot}=(1-\overline {MOTA})+\lambda(1-\overline {MOTP}) Ldeepmot=(1−MOTA)+λ(1−MOTP)其中 λ \lambda λ是一个损失平衡因子。
训练过程
- 利用gt目标边界框初始化跟踪。
- 利用跟踪方法预测上一帧的跟踪在当前帧的边界框。
- 利用预测边界框与当前帧的gt边界框计算距离矩阵。
- 将距离矩阵输入到DHN中得到软分配矩阵。
- 利用软分配矩阵计算 M O T A ‾ \overline{MOTA} MOTA和 M O T P ‾ \overline{MOTP} MOTP。
- 计算 L d e e p m o t L_{deepmot} Ldeepmot损失并反向传播更新跟踪器的权重参数。
实验
如图所示,在使用了Deepmot训练框架对跟踪器进行训练之后都能一定程度上提升跟踪方法的性能。