VOT2015 Benchmark简易教程

来源:互联网 发布:izeeyu是什么软件 编辑:程序博客网 时间:2024/06/10 01:25

Visual Object Tracking Benchmark使用总结

一·简单介绍

  Visual Object Tracking是一个认可度比较高的评估单目标跟踪算法的标准,与OTB的主要不同是OTB只会给定第一帧然后让tracker去跟,中间有失败后不会重新reset。而VOT在tracker中间过程跟丢后会重新初始化参数让算法接着跟。VOT里面的主要有两个方面的图像评估标准:准确性和鲁棒性,因为两者的相关性最小。准确性是用average overlap作为衡量标准。什么是average overlap呢?如下图,简单说就是 groundtruth与predicted 区域的重叠部分与两者并起来的面积相除得到的结果。可以参见:vot2016benchmark标准介绍。而鲁棒性则是由跟踪过程中失败的次数来决定的。



二·使用教程

  对于VOT来说,并没有OTB那么好调试,因为中间牵涉到了一个trax protocol。而且 网上资料比较少,官网的教程也不是很详细。在编译和融合这两步中可能出现很多问题。下面我给大家分享自己的调试经验。
  首先,虽然整个流程官网的正个流程没有说明很多隐含的可能发生的错误,但是我们还是要把整个tutorials过一遍,明白大致的过程该怎样走。 然后下载一个最新版的vot toolkit。
  第二步就是搭建一个自己的vot-workspace;下载完后,就在MATLAB中运行toolkit_ path 函数,目的是检查整体的toolkit路径是否有问题,这一步一般都没问题。然后就在自己的vot-toolkit-master文件夹中新建一个vot-workspace文件夹。在workspace文件中找到 workspace_create 函数打开, 然后把MATLAB的当前目录调整到vot-workspace文件夹中,目的是在这个文件夹中建工作环境 。 这个时候再运行track_ create函数 在benchmark的代码文件tracker_benchmark_v1.0中想了解整个框架,先读README.txt文件,你会发现会出来一些数据集让你选择。刚开始最好选择test,等你把程序完全调通了再选择对应的完整的数据集。还要输入自己tracker名字,最后选择程序语言。这个设置的过程可以参考官网教程 ,这个操作过程如下图。
配置环境
上图中的bacf是我为自己的tracker函数取的名字。对应用的MATLAB语言。得到的结果,会在vot-workspace下生成几个函数,如下图,而且这个过程中在vot-toolkit-master文件下会生成一个native文件,这个文件就是对应的trax portocol的一些编译内容。


这里写图片描述

  第三步就是开始着手自己的tracker算法与VOT融合了;整个融合的过程只用修改两样东西,第一是刚刚生成出来的tracker_bacf函数,第二就是修改vot-toolkit-master\tracker\examples\matlab路径下的ncc函数,把自己的算法融合进来。其中ncc函数就是一个简单的融合函数,可能你会发现在n路径下还有一个vot的函数,这个函数是融合的关键,也可以理解为接口。刚开始不建议直接融合自己的算法。先把ncc函数跑通,融合成功再融合自己的算法。下面回到tracker_bacf函数中,先以ncc为例进行讲解:
1.编辑tracker_bacf函数将所要执行的算法告诉vot,各个语句的意义,如下图,按自己的实际情况编辑就可以。
这里写图片描述
2.编辑完后,运行run_test函数,还是在vot-workspace文件夹下会产生几个新的文件夹,其中sequences文件夹下就会产生三个test序列和一个list.txt文件。而在命令行的截图中我们可以看到“TraX support detected.”表明已经融合一半,快要成功了。

这里写图片描述
这里写图片描述

3.接下来,命令行会让你从三个序列中选择一个序列,就随便选一个,回车,发现如下图的结果。我们可以发现鼠标在图片上移动时会变成十字形,这个时候在图片上随便一处单击鼠标,你会发现会跳到第二帧,并开始跟踪了,再单击鼠标跟到第三帧,再在图片上单击……
这里写图片描述
这里写图片描述
  到这里可以说ncc融合成功通过了,恭喜你只完成了四分之一的工作,还有四分之三等着你。因为融合你自己的算法才是最头疼的,为什么呢?因为这个地方没办法打断点调试,对,就是这么惨!
   第四步,下面开始真正的融合。大致过程和上面ncc差不多但是关键就在于你的融合函数了。接下来剖析下ncc函数中几个关键变量,然后有利于大家去融合自己的算法。为了方便截图,我把那些注释全删了。
这里写图片描述
看上图,第三句中得到的三个量中handle不用管,image是要跟踪序列的图片所在的路径,region就是第一帧图片中对应目标的groundtruth,和图片区域2中的region意义不同。对于区域1的语句的作用是读入下一帧图片的位置信息给image,如果跟踪完了就break,不用frame自增1。而区域2中的region是我们执行完算法得到的一个变量,意义是我们算法跟踪的结果,也就是算法认为的目标区域。handle.report就传回我们的唯一变量region。这里的ncc_update就相当于跟踪算法。其中region如果对应是rectangle就是四个值,前两个是目标的中心坐标,后两个是目标区域长宽大小。
总结下算法融合要做的就是我知道了第一帧的路径image和groundtruth对应region,我也知道如何获取下一帧图片,然后要做的就是把自己的算法融进去最后返回算法得到的region回去就ok了。

  最后总结下可能遇到的错误以集一些技巧:
错误 一:在连接的过程中会出现Tracker execution interrupted: Unable to establish connection.
这个时候就要检查vot文件了,就是在你自己算法的文件夹下必须有vot文件才可以连接成功。我们刚才在做ncc实验时,也是路径下有两个函数的。你可以尝试把vot函数拿去,再执行run_test函数看有什么后果。
错误二:Tracker execution interrupted: Did not receive response.
这个错误的时候你就要检查自己的算法过程中的某一步是否出错了。最重要的是检查自己最后返回的变量region是不是double型变量。敲黑板划重点了。一定要检查,我自己是吃过亏的。如果类型没问题,那就只能看你自己的算法了。但是问题来了打断点没用,只能利用函数语句调喽。推荐用dlmread函数把自己不放心的变量写在一个txt文件中这样一个个推敲调试。还有注意vot里面的groundtruth是八坐标,如果是长方形框,要从八个坐标中提取自己想要的pos和target_sz。

如果你的算法可以测试成功,那就接着运行run_experiments函数生成结果,在运行run_analysis函数进行分析。测试成功就顶下吧,打字理思路也挺累的,谢谢!虽然排版有点丑。。。。

原创粉丝点击