现在比较流行的跟踪Benckmark有OTB、VOT、KITTI-tracking,之前的算法测试都进行在OTB(Visual Tracker Benckmark)上,考虑到现在VOT的流行程度不亚于OTB,并且VOT每一年都会有更新。VOT16并没有更新图像数据,而是更新了标注的方法。这篇博客主要介绍VOT的评价方法,会结合实验数据介绍官方SDK的代码。

VOT概述:

VOT13、VOT14、VOT15、VOT16,每一次都有很大变化,VOT13只有16组序列,而当时OTB-50刚刚出来,所以VOT13没多大影响力,VOT14比VOT13增加样本集至25组,并且重新标注了样本,选取多边形区域进行标注,能反映出OTB反映不了的问题,这才收到大家的关注,不过大家当时还是看OTB多一些。VOT15扩充样本集至60组,并开设了tir热成像跟踪子系列,其评价方法也有改变,VOT15开始火起来了。到VOT16,没有对样本集做修改,只是使用了自动标注样本的方法对样本重新标注,VOT已经成了跟踪领域顶会必须拿出的指标了。

现在做跟踪必须要拿VOT中的评价标准说明问题,它与OTB比起来更加好用,更能反映问题,所以这篇博客将对VOT中的评价指标进行详细的介绍。我们首先对图像跟踪的评价标准做全面的介绍:

图像评价标准的选取:

VOT最终选取了精度和鲁棒性两个指标,因为在图像跟踪的若干评价标准中,这二者的相关性最弱。

中心误差:Center Error

中心误差标准值考虑目标中心位置的误差,该方法具有明显的缺点,就是无法衡量目标尺度变化的影响。另外,目标中心的意义有时候不是很明确(如下图)。

区域重叠:Region Overlap

区域的重叠率是使用重叠面积的比例进行衡量的

$$\phi = \frac{R_t^G \bigcap R_t^T}{R_t^G \bigcup R_t^T}$$

在区域重叠指标上,我们一般使用有效帧的重叠率做平均。除此之外,我们还可以使用重叠率阈值以上帧的比例作为标准:

跟踪长度:Tracking Length

这一指标是基于中心位置误差的,从跟踪开始到中心像素误差下降到阈值以下的(帧数)长度定义为跟踪长度。

失败率:Failure Rate

在视频跟踪处理的一段序列中,当重叠率低于阈值\(\tau\)时,则判定为跟踪失败,并重新初始化目标框,在这段视频中,跟踪失败的次数以及跟踪失败的位置\(f_i\)可以被记录下来,则失败率\(\mathcal{F}_\tau\)可以被表示为:

该公式的意义非常明确,每一段的跟踪长度越短,则失败率越大,最后一帧的失败将不会带来影响。

混合测量:Hybrid Measures

定义了几种混合各种参数的指标,Combined Tracking Performance Score (CoTPS)。在博客最后给出的参考文献中,对这一指标的计算方法进行了改进:

$$CoTPS=(1-\lambda)(1-\hat{\phi}+\lambda_0^2)$$

其中\(\hat{\phi}\)表示跟踪成功帧的平均重叠率,\(\lambda_0\)是失败帧占得比例,这样就将跟踪精度和成功失败率结合起来了,这个分数越高越好。

效果图:Performance Plot

常用的效果图有area-under-the-curve (AUC)曲线,该曲线和ROC曲线表达的含义差不多,也就是OTB中成功率图的表示方法。

小结

前面介绍了几种基本的评价方法,很多评价方法都是根据上面几种基本的评价方法计算得到,这个可以参考文末给出的参考文献。那么问题来着,这些评价指标中,哪些评价指标是有效的呢?

评价指标的效果评估

这一部分主要是介绍评估哪些标准可以更好的用来评估跟踪算法,我们才会推荐使用这些指标来衡量跟踪算法的性能。下面图中给出了几种指标可视化示意图,其中能反映出许多问题,也就是说标准选取的重要性。

参与评估的标准

于是我们分析如下16种视频跟踪算法评价标准的相关性,并最终给出一个合适的评价标准,使得跟踪算法的效果可以被更有效的评估。具体细节参考最后给出的参考文献。

评价标准的相关性分析

使用上述16个标准,对样本集中的所有指标的数值,计算协方差矩阵,协方差矩阵就代表了评价标准的相关性。下图是协方差矩阵的可视化:

1 是三种中心误差评价方法

2 包含了平均重叠率,正确跟踪帧的百分比等标准

根据相关性分析,相关性最小的两个指标是失败率和失败后重新初始化的重叠率。后面将对这一对指标进行分析。

准确率与鲁棒性:Accuracy vs. Robustness

这就是VOT中使用的标准了,A_R pair,AR曲线、AR图、AR排序图等等,说的就是这两个指标。

A:重叠率,就是跟踪成功状态下的平均重叠率

R:鲁棒性,按照如下公式计算

鲁棒性数值\(R_S=e^{-SM}\),其中\(M\)是平均失败次数,\(M=\frac{F_0}{N}\),\(N\)是序列的长度,\(F_0\)是失败总次数。

这里参数\(S\)是手工选择的参数,意义就是预期可以连续跟踪$lates S$帧

A-R图结果:A-R plots

 

VOT中使用的评价标准

EAO

Expect Average Overlap Rate,是用来评价性能的。

处理使用A-R plot,还有一种是A-R Ranks plot,就是下面右边的那张图。

于是这就是我们最终在VOT相关的Paper上看到的图了。

EFO

Equivalent Filter Operations,EFO是用来评价性能的,因为性能的比较常常因为计算机性能不同而不够直观,EFO评价标准考虑到了这一点,使用600×600的图像,做30*30窗口的滤波,来得到机器的性能。然后使用跟踪算法处理每帧图像的评价时间除以以上滤波操作的时间,得到了一个归一化的性能参数,就是EFO,是VOT14提出的标准,一直沿用到现在。

EAO与EFO就构成了VOT16的跟踪算法评价标准。

测试自己的Tracker

本来打算另开一篇博客写的,评论区有人问了,那就暂时参见评论区的链接吧

 

30 对 “目标跟踪VOT2016 BenchMark评价标准介绍”的想法;

  1. 能不能請問一下,如果自己有一個tracker要用vot做測試的話,具體應該怎麼操作呢

  2. 不好意思,我照着官网的步骤,遇到了几个问题。如果您了解的话能否给予解答
    1. 在integrating tracker中,我不太确定 tracker_command 这个路径是设定为什么。 以及后面的 parameter 和 tracker_linkpath。能否就官方example中的 C++例子做个示范。

    2. 使用这个toolkit是否需要自行下载trax,我在测试 integration,即运行 run_test 时,显示testing trax protocol…之后matlab就崩溃了,所以不太确定问题出在哪里。

    若您有时间帮忙看一下,不胜感激!

    1. 1. 是你tracker所在的绝对路径,后面参数表每个版本都有改动
      2 .需要下载trax

  3. 我现在想用vot跑samf算法,看了官网使用教程的介绍,对于接口函数的编写还不太明白,虽然有ncc函数的模板,但是自己编写还是有些困难,请问您有有关相关滤波算法相应的接口函数吗?能否给我发一份代码,参考一下呢?真的非常需要这方面的帮助。

  4. 在vot上跑算法时,一直出现错误‘Tracker has not passed the TraX support test.’可是trax工具包已经在vot文件夹里面了(下载vot2016时自动下载的),出现这个错误的原因是因为我的接口函数编写不对吗?

        1. 如果是python的tracker,tracker_command = generate_python_command 里面第一个参数是py脚本名字,不带后缀.py, 第二个参数是路径。
          例如说tracker_command = generate_python_command(‘python_static’, {‘/home/toolkit-5.0.1-linux64/tracker/examples/python/’});

      1. 如果是python的tracker,tracker_command = generate_python_command 里面第一个参数是py脚本名字,不带后缀.py, 第二个参数是路径。
        例如说tracker_command = generate_python_command(‘python_static’, {‘/home/toolkit-5.0.1-linux64/tracker/examples/python/’});

  5. 我用python版本的MDNet,vot-toolkit按照教程配置会出现Tracker execution interrupted: Unable to establish connection.
    TraX support not detected,一直解决不了,请问大家有遇到类似的情况吗,请教一下是怎么解决?看了大家之前的讨论,我的tracker_command应该是没有配错。或者大家有用过CF框架,Matlab写的,配置好的,我能否请教一下?欢迎qq交流 648885261

  6. 您好,请问使用run-analysis.m生成结果报告时会出现错误,貌似是官方工具包中没有给出无监督的代码,请问您是怎么解决的呢?

  7. 你好,我在测试NCC的时候,加载[sequences, experiments] = workspace_load();这一句时一直有错误,错误使用 read_trajectory
    Unable to open file for reading.

    出错 create_sequence (line 49)
    sequence.groundtruth =
    read_trajectory(fullfile(sequence.directory,
    sequence.file));,不知道为什么不能使用这个混合编译文件?求大神解释

    1. 你好,这个问题你怎么解决的呢?现在我也困到这里啦,谢谢指教啊!

  8. 错误使用 tracker_load (line 127)
    Tracker has not passed the TraX
    support test.
    我也出现了这个问题,大神可以统一回答下吗?

    1. 请问您可以在VOT上成功运行自己的算法了吗,我在跑示例NCC算法时,run_test运行时,会出现
      Tracker execution interrupted: Unable to establish connection.
      错误使用 traxclient
      Unable to establish connection.

      出错 tracker_run (line 77)
      data = traxclient(tracker.command, callback, …

      出错 workspace_test (line 53)
      tracker_run(tracker, @callback, data);

      出错 run_test (line 10)
      workspace_test(tracker, sequences);
      不知道如何解决

        1. 大神,快教教我这个问题怎么解决呀,急急急,感激不尽!

      1. 您好,我也遇到了相同的问题,请问您是怎么解决的呢?谢谢!

发表评论

电子邮件地址不会被公开。 必填项已用*标注