多目标跟踪评价指标

多目标跟踪性能指标

为了更好理解这些性能指标,我们想象一下,理想的多目标跟踪有哪些特性。首先,它能找全所有出现的目标。并且每个目标的位置要尽可能精确(注意目标的外形轮廓、运动方向、以及运动速度并不考虑)。其次,随着时间变化,它能保持目标轨迹的一致性。也就是说,在整个序列中为每个目标所分配的轨迹ID是唯一的,不变的(即使目标临时发生了某些状况,例如遮挡等)。由此我们可以得出下列性能指标的标准。
(性能指标考察目标的数量,位置以及轨迹)

  • 性能指标应该能评估跟踪算法预测目标确切位置的精确度。
  • 性能指标还应该能评估跟踪算法跟踪目标随时间产生的轨迹的一致性能力。也就是说,正确跟踪目标的轨迹,每个目标只生成一个轨迹。

此外,我们还期望指标具有一些其他性质:

  • 自由参数少、阈值可调整等等,尽可能的使得评估直截了当,且使得结果具有可比性。
  • 清晰易懂,符合人类直觉,特别是当过程中产生各种类型各种错误时。
  • 足够笼统,可以比较大多数跟踪算法(2D、3D跟踪算法,目标是矩心的或者目标是区域的,等等)
  • 性能指标的数量少,但是又富有表现力。例如,许多系统正在被评估的大型评估中所使用的性能指标。

基于上述标准,对跟踪算法的评估,我们提出一个系统而又客观的步骤。假设对于每帧 t t t,有可见目标集 { o 1 , … , o n } \{o_1,…,o_n\} { o1,,on},目标跟踪算法给出一个预测集 { h 1 , … , h m } \{h_1,…,h_m\} { h1,,hm}。评估过程包含以下步骤:
对于每帧:

  • 预测值 h j h_j hj和目标值 o i o_i oi之间建立最优的对应;
  • 对于所找到的每个对应,计算预测与目标位置的误差;
  • 合计其他错误:
    • 计算所有未给出预测而漏掉的目标;
    • 计算预测给出但实际没有的误检目标;
    • 计算与前一帧相比目标跟踪发生错误匹配的目标。这种情况很有可能发生,例如,当两个或者多个目标彼此交错而过的时候,或者当某个目标有一个轨迹ID后,因为某些因素丢失跟踪,重新出现后被赋予新的轨迹ID。
      《多目标跟踪评价指标》
      图1:预测和目标之间的映射图。最简单的情况,只要对每帧t,将其离的最近的预测和目标匹配起来就够了。

然后,跟踪性能可以直观的用两个数字表示:“跟踪精度”表示目标位置估计的精确度;“跟踪准确度”表示跟踪时所犯的诸如误检、漏检、错误匹配、无法恢复跟踪等错误的数量。后面章节将详细解释如何度量。

1 建立目标和跟踪预测的对应关系

如上所述,评估多目标跟踪性能的第一步是,找到每帧中由跟踪算法得出的目标预测序列 { h 1 , … , h m } \{h_1,…,h_m\} { h1,,hm}与真实目标序列 { o 1 , … , o n } \{o_1,…,o_n\} { o1,,on}的连续映射。如图1所示。显然,我们可以将离的最近的目标和预测匹配为一对,而将剩余的目标看成漏检,多余的预测看成误检。但是,有些重要的问题需要考虑进来,这使得对应过程变得不那么简单了。

1.1 有效的对应

首先,如果目标 o i o_i oi与预测 h j h_j hj的距离 d i , j d_{i,j} di,j超过某个阈值 T T T,则这他们就不应该被对应起来。有一个概念上的界线,超过这个界线,我们就不能说是位置上的误差,而应该说跟踪丢失了目标,并且误跟踪了其他的东西了。
如图2(a)所示。对于目标区域跟踪(也就是说,跟踪算法可以估计目标的大小或它们所占面积)距离可以用目标和预测的重叠来代替,例如IOU(目标和预测相交面积与目标和预测相并面积的比值),而且阈值 T T T也可以设置为零。对于矩心目标的跟踪可以简单用欧式距离。在图像2D坐标或真实世界的3D坐标中,目标中心和预测之间的阈值可以是,以像素或厘米为单位的目标的平均宽度。 T T T的最佳设置取决于应用程序的任务、所涉及的目标大小、所使用的距离度量方式。接下来,我们说一个对应是有效的是指, d i , j &lt; T d_{i,j}&lt;T di,j<T.
《多目标跟踪评价指标》
图2:最佳对应和错误度量图。(a) 当 o 1 o_1 o1 h 1 h_1 h1的距离超过 T T T时,就不能匹配为一个对应。视 o 1 o_1 o1为漏检, h 1 h_1 h1为误检。(b) 匹配错误轨迹。这里, h 2 h_2 h2开始映射的是 o 2 o_2 o2,几个帧过后 o 1 , o 2 o_1,o_2 o1,o2交错而过, h 2 h_2 h2跟踪错误的目标。接着当 o 3 o_3 o3交错的时候,再次发生了错误。(c)使用最频繁的目标-预测作为基准的映射来判定对应关系,那么情况1中 o 1 o_1 o1 h 2 h_2 h2是映射关系,情况2中也是 o 1 o_1 o1 h 2 h_2 h2是映射关系,那么情况1中错误的有2帧,情况2中错误的有4帧。然而两种情况都只发生了一次同类型的错误而已。(d) 正确的跟踪重新初始化。在 t t t帧时, o 1 o_1 o1 h 1 h_1 h1跟踪。在 t + 1 t+1 t+1帧时,丢失跟踪。在 t + 2 t+2 t+2帧时,有两个有效跟踪,基于在 t + 1 t+1 t+1帧之前的映射关系可以推断 h 1 h_1 h1 h 2 h_2 h2哪个与 o 1 o_1 o1更保持对应关系一些。

1.2 随时间变化,跟踪保持一致性

其次,为了评估跟踪算法标记目标一致性的能力。例如图2(b)所示,这里一条轨迹被错误的分配给了3个不同的目标。匹配错误发生在两个目标接近时,跟踪算法错误的交换了他们的追踪ID。这种匹配错误也可能发生在跟踪算法丢失跟踪然后再恢复跟踪时,赋予之前的丢失跟踪一个新ID。
有一种方法可度量这种错误,假定每一个目标 o i o_i oi和预测 h j h_j hj有一个最佳映射 ( o i , h j ) (o_i,h_j) (oi,hj),例如基于 o i o_i oi最初的对应,或者整个序列中最频繁的对应 ( o i , h j ) (o_i,h_j) (oi,hj),如果对应违反了这种映射将被视为错误。
不过在有些情形下,这种度量将变得不直观。例如图2(c).两种情况都只发生了一次交换,但是交换发生的时间帧不同却大大影响了最终错误的度量。(例如,如果基于最初的对应的话,情况1错误的对应有7帧,情况2错误的对应有5帧)

这就是接下来我们要采取其他方法的原因:当目标-预测映射发生变化的时候,只计数当时发生变化的那一次。并认为其他部分是正确的。尤其是在跟踪多个目标且经常发生错误匹配时,这种度量方式更直观,更有表现力。为了检测什么时候发生了错误匹配,需要构建一个目标-预测的映射列表。
M t = { ( o i , h j ) } M_t=\{(o_i,h_j)\} Mt={ (oi,hj)} t t t帧时候的一个映射集,且 M 0 = { ∙ } M_0=\{\bullet\} M0={ }则,如果在 t + 1 t+1 t+1帧时一个新的对应发生在 o i , h k o_i,h_k oi,hk上,这与映射 ( o i , h j ) (o_i,h_j) (oi,hj)冲突,那么就说在 M t + 1 M_{t+1} Mt+1时发生了一次错误匹配, ( o i , h k ) (o_i,h_k) (oi,hk)替代了 ( o i , h j ) (o_i,h_j) (oi,hj).

当存在多个有效可选对应时,这样构造的映射列表 M t M_t Mt能帮助在目标和预测之间建立最佳的对应。
图2(d)展示了这种情况。当不清楚哪个预测与目标 o i o_i oi匹配的时候,优先考虑 h o h_o ho其中 ( o i , h o ) ∈ M t (o_i,h_o )\in M_t (oi,ho)Mt.因为这很可能是正确的轨迹。其他的预测被认为是误检,因为跟踪算法可能输出 o i o_i oi的几个预测值,或者因为与 o i o_i oi交错而过,本跟踪其他目标的跟踪,却跟踪到 o i o_i oi上了。

1.3 映射过程

在阐明了我们构建目标-预测对应设计的策略背景,我们将过程总结如下:
M 0 = { ∙ } M_0 = \{\bullet\} M0={ }.对所有每一帧 t t t,考虑如下:

  • M t − 1 M_{t-1} Mt1中,每对经核实任然有效的映射 ( o i , h j ) (o_i,h_j) (oi,hj)。在 t t t帧时,如果目标 o i o_i oi依然可见,且跟踪预测 h j h_j hj依然存在,且他们的距离小于阈值 T T T,则 o i , h j o_i,h_j oi,hj t t t帧可构建为对应关系。

  • 对于没有构建对应关系的目标,试着去找一个与之匹配的预测。只容许一对一的匹配,且距离不超过 T T T。匹配的方式应该使得目标-预测距离误差总值最小。如果在 M t M_t Mt ( o i , h k ) (o_i,h_k) (oi,hk)代替了 M t − 1 M_{t-1} Mt1中的 ( o i , h j ) (o_i,h_j) (oi,hj),对应 ( o i , h k ) (o_i,h_k) (oi,hk) M t − 1 M_{t-1} Mt1对应 ( o i , h j ) (o_i,h_j) (oi,hj)不一致.则将此计算为一个错误匹配,设 m m e t mme_t mmet t t t帧错误匹配的数量。

  • 经过前面两步,就知道了当前时间帧的一组完整的匹配集。设 c t c_t ct t t t帧时刻所有匹配对的数量。对于每对匹配,计算目标 o i o_i oi与其对应预测的距离 d t i d_t^i dti.

  • 所有剩余预测被认为是误检,同样的,所有剩余目标被认为是漏检。设 f p t fp_t fpt m t m_t mt分别代表t帧的误检和漏检数量。设 g t g_t gt t t t帧出现的目标数量。

  • 下一帧时,从开始步骤重复过程。注意,由于初始帧映射集 M 0 M_0 M0设置为空,因此所有对应都是初始化的,且没有错误匹配发生。

如此,在目标和跟踪预测之间定义了一个连续的映射,且所有跟踪错误也计算完了。

2 性能指标

基于上述匹配策略,可以定义两个非常直观的指标。

  • 多目标跟踪精度(MOTP):
    M O T P = ∑ i , t d t i ∑ t c t MOTP=\frac{\sum_{i,t}d_t^i}{\sum_tc_t} MOTP=tcti,tdti
    所有帧中匹配的目标-预测对的总位置估计误差,与匹配对数的比值。它衡量了跟踪估计目标位置精确度的能力,但不衡量跟踪的识别目标结构能力,以及保持跟踪一致性能力等。
  • 多目标跟踪准确度(MOTA):
    M O T A = 1 − ∑ t ( m t + f p t + m m e t ) ∑ t g t MOTA=1-\frac{\sum_t(m_t+fp_t+mme_t)}{\sum_tg_t} MOTA=1tgtt(mt+fpt+mmet)
    其中 m t , f p t m_t,fp_t mt,fpt m m e t mme_t mmet分别是 t t t帧时漏检、误检和错误匹配的数量。MOTA可以分为3个部分:
    m ‾ = ∑ t m t ∑ t g t , \overline{m}=\frac{\sum_tm_t}{\sum_tg_t}, m=tgttmt
    序列中漏检率,计算的是基于所有帧中总目标数的占比。
    f p ‾ = ∑ t f p t ∑ t g t , \overline{fp}=\frac{\sum_tfp_t}{\sum_tg_t}, fp=tgttfpt
    误检率。
    m m e ‾ = ∑ t m m e t ∑ t g t , \overline{mme}=\frac{\sum_tmme_t}{\sum_tg_t}, mme=tgttmmet
    错误匹配率。
    将这三种不同错误比率合计起来就是总错误率 E t o t E_{tot} Etot,而 1 − E t o t 1-E_{tot} 1Etot是跟踪准确率的结果。MOTA计算跟踪在所有帧中所有目标的误检,漏检和错误匹配。非常直观的给出了衡量跟踪识别目标和保持一致性的能力,且与估计目标位置精确度无关。

备注:对于MOTP和MOTA,在计算最终均值或者比率之前,先汇总所有帧中的错误很重要。如果先计算每帧的错误率,然后再合计求平均,那么结果可能违反直观意义。如图3所示。虽然序列中的大多数目标都漏检了,但是如果先求每帧的错误率,再求平均,那么任然只有50%的漏检率。但是先分别合计所有帧中所有漏检和目标数,然后再求平均,则漏检率有80%,这更符合直观意义。

《多目标跟踪评价指标》
图3 计算错误率。假设有一个长度为8帧的序列。从第一帧到第四帧有 o 1 , o 2 , o 3 , o 4 o_1,o_2,o_3,o_4 o1,o2,o3,o4四个可见的目标,但是都没有被跟踪识别出来。从第五帧到第八帧只有一个 o 4 o_4 o4目标,不过被 h 1 h_1 h1跟踪识别出来了。对于第一帧到第四帧来说目标百分之百的被漏检了,漏检率就是100%。而第五帧到第八帧都没有漏检,漏检率为0%。那么平均漏检率就为(100%*4+0%*4)/8=50%.但是换一种算法,所有帧出现的总目标个数有20个,漏检个数有16个,则漏检率为16/20=80%,显然后一种算法的结果更符合直观意义一些。

    原文作者:阿巫兮兮
    原文地址: https://blog.csdn.net/m0_37163827/article/details/85865271
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞