Advertisement

how to train your deep multi-object tracker 论文简单解读

阅读量:

写在前面:

“how to train your deep multi-object tracker”是论文“DeepMOT-A Differentiable Framework for Training Multiple Object Trackers”的改进版本,前者比后者多了一些实验。

主要工作:

提出了一个端对端的多目标跟踪方法的训练框架,能够针对多目标跟踪的评估指标进行训练。

主要贡献:

  1. 提出了直接受启发于标准多目标跟踪评估测量MOTA和MOTP的新的损失函数用于端对端的训练深度多目标跟踪器。
  2. 提出了一个新的网络模块–深度匈牙利网络,学习以一种可微的方式将预测的跟踪与真实目标进行匹配。
  3. 通过使用本文提出的训练框架训练最近提出的Tracker1证明了提出的损失函数和可微匹配模块的益处。证明了对于baseline方法的提升以及在MOTchallenge 基准上建立了一个新的sort结果。

主要模块

深度匈牙利网络

深度匈牙利网络

网络结构

如果所示,深度匈牙利网络由两个连续的Bi-RNN构成,但是代码中的流程与图示流程有所差异。

计算流程

输入尺寸为N*M的距离矩阵D,进行一个逐行的flatten,得到尺寸为M\times N的一维向量。将flatten后的向量输入到第一个Bi-RNN中得到尺寸为M\times N* 2h的张量,其中h为Bi-RNN的中间层数量。将张量reshape为M*N*2h,再进行逐列的flatten,得到尺寸为N\times M*2h的张量作为第二个Bi-RNN的输入,得到尺寸为N\times M*2h的输出张量。将得到的张量输入到三个FC层中得到尺寸为N\times M的输出向量,然后reshape成尺寸为N*M的软分配矩阵。

输入距离矩阵

训练时,计算检测位置与gt目标位置之间的距离矩阵。利用IoU计算距离矩阵时,如果两个边界框没有交集,距离1-IoU始终为常数1,来自损失的梯度始终为0,没有信息被反向传播。因此,本文利用欧几里得中心点距离和Jaccard 距离的平均作为距离:
d_{nm}=\frac{f(x^n, y^m)+J(x^n, y^m)}{2}
其中:
f(x^n, y^m)=\frac{||c(x^n)-c(y^m)||_2}{\sqrt{H^2+W^2}}
J(x^n, y^m)=1-IoU(x^n, y^m)

DHN训练方法

利用训练集里的检测位置和gt目标位置计算距离矩阵D输入到DHN,得到软分配矩阵\widetilde A,利用匈牙利算法对距离矩阵进行二元分配得到软分配矩阵的标签A^*,利用focal_loss将DHN的训练作为了一个二分类任务进行。
损失收敛后,DHN的权重参数被固定,用来训练跟踪方法。

可微的\overline {MOTA}\overline {MOTP}以及损失Loss计算

多目标跟踪的标准评估指标MOTA和MOTP计算如下:
MOTA = 1 - \frac{\Sigma_t(FN_t+FP_t+IDS_t)}{\Sigma_t M_t}
MOTP = \frac{\Sigma_t\Sigma_{n,m}d_{tnm}a_{tnm}^*}{\Sigma_t|TP_t|}
其中FN_t表示t时刻的漏警数量,FP_t表示t时刻的虚警数量,IDS_t表示t时刻的身份转换数量,TP_t表示正确匹配的数量。
因此想要计算可微的\overline {MOTA}\overline {MOTP}就需要计算可微的\overline {TP}\overline {FN}\overline {FP}\overline {IDS}。因此本文利用深度匈牙利网络提出了以下的计算方法:
利用深度匈牙利网络计算FN,FP以及IDS的方法
如图所示,对于将距离矩阵D输入深度匈牙利网络计算出的软分配矩阵\widetilde A

  1. 计算\overline{FN}:用\delta填充一行,然后执行逐列的softmax得到C^c,填充行的值相加得到\overline {FN}。由于每一行对应一个跟踪,添加的行相当于标记为丢失的“跟踪”,填充的\delta相当于丢失“跟踪”与gt目标的IoU值,如果软分配矩阵同一列的值小于该值,则逐列的softmax之后,丢失“跟踪”行的值更接近于1,表示该列gt目标匹配失败,增加了一个FN,因此丢失“跟踪”行值的累加和能够反应FN的值。
  2. 计算\overline{FP}:用\delta填充一列,然后执行逐行的softmax得到C^r,填充列的值相加得到\overline{FP}。由于每一列对应一个gt目标,添加的列相当于标记为丢失的"目标",填充的\delta相当于丢失“目标”与跟踪的IoU值,如果软分配矩阵同一行的值小于该值,则逐行的softmax之后,丢失“目标”列的值更接近于1,表示该行跟踪匹配失败,增加了一个FP,因此丢失“目标”列值的累加和能够反应FP的值。
  3. 计算\overline {IDS}:保存之前帧的二元分配矩阵B^{TP}_{-1}以及C^c去掉填充行后的软分配矩阵C^c_{1:N,1:M},利用B^{TP}_{-1}的补码矩阵\overline{B}^{TP}_{-1}与软分配矩阵C^c_{1:N,1:M}的乘积计算\overline {IDS}\overline {IDS}=||C^c_{1:N,1:M}\odot \overline{B}_{-1}^{TP}||_1如果前一帧的gt目标数量和当前帧的gt目标数量不同,则需要对\overline{B}^{TP}_{-1}在当前的帧中新出现的目标用与C^c_{1:N,1:M}中相同的值进行pad。如果前一帧的跟踪数量和当前帧的跟踪数量不同,则需要对两帧里互相不存在的跟踪所在行的值用0进行pad(不能像gt目标一样用另一帧值进行复制pad,因为对于之前帧不存在当前帧的同一目标匹配上的跟踪的情况,复制pad会导致IDS为0,实际上是为1 )。
  4. \overline {MOTA}计算如下:\overline {MOTA}=1- \frac{\overline{FN}+\overline{FP}+\gamma \overline{IDS}}{M}其中\gamma控制了分配给\overline{IDS}的惩罚,M为gt目标的数量。
  5. \overline {MOTP}计算如下:\overline {MOTP}=1-\frac{||D\odot B^{TP}||_1}{||B^{TP}||_0}其中B^{TP}是利用C^c_{1:N, 1:M}阈值化后得到的当前帧的二元分配矩阵。
  6. 利用得到的\overline {MOTA}\overline {MOTP}计算损失函数:L_{deepmot}=(1-\overline {MOTA})+\lambda(1-\overline {MOTP})其中\lambda是一个损失平衡因子。

训练过程

  1. 利用gt目标边界框初始化跟踪。
  2. 利用跟踪方法预测上一帧的跟踪在当前帧的边界框。
  3. 利用预测边界框与当前帧的gt边界框计算距离矩阵。
  4. 将距离矩阵输入到DHN中得到软分配矩阵。
  5. 利用软分配矩阵计算\overline{MOTA}\overline{MOTP}
  6. 计算L_{deepmot}损失并反向传播更新跟踪器的权重参数。

实验

MOT16和MOT17数据集上的实验结果
MOT15实验结果
如图所示,在使用了Deepmot训练框架对跟踪器进行训练之后都能一定程度上提升跟踪方法的性能。


  1. Tracking without bells and whistles.paper. ↩︎

全部评论 (0)

还没有任何评论哟~