配置OTB2013数据集

一、前言

打算用 OTB2013 和 OTB2015 看一下跟踪器的结果,需要配置 一下环境。
因为看到很多论文中都是同时使用了 OTB2013 和 OTB2015 评估跟踪器的性能,因此我也想同时使用两个。然而,在配置环境开始之前我就碰到了重重壁垒,OTB100(OTB2015)我是本来就下载好了的,而 OTB2013 我却怎么也打不开官方的链接,包括Object Tracking Benchmark工具。因此,记录一下自己的配置过程。

二、基础知识

先搬运一下大佬的基础知识部分,分清 OTB50,OTB100,OTB2013,OTB2015:

TB50:
TB50是指OTB数据集官网上的前49个视频序列,50个测试场景,其中有一个视频序列Skating2具有两个测试场景。
在这里插入图片描述

TB100:
TB100是指OTB数据集官网上所有视频序列,一共98个视频,100个测试场景,其中有一个视频序列Skating2和Jogging具有两个测试场景。
在这里插入图片描述

OTB2013:
OTB2013是指作者2013年投CVPR时所使用的数据集,一共有50个视频序列,51个测试场景,其中有一个视频序列Jogging中具有两个测试场景。当我们下载最原始的tracker_benchmark_v1.0,里面默认的就是OTB2013.

注意:OTB2013的视频序列只有一部分来自于TB50,即是说OTB2013和TB50是交叉关系。

OTB2015:
OTB2015是指作者2015年投PAMI所公布的数据集,与TB100完全相同。

当测试更少视频序列时,OTB2013更具代表性,很少有论文单独跑TB50视频序列,都是使用OTB2013来测试自己的算法。一些论文中TB50指的其实是OTB2013。

我还看到有些博主说 OTB50 就是 OTB2013,OTB2015 包含 OTB2013,这个我没有做考证,我在别人的百度网盘下载下来的 OTB2013 也只有49个视频序列。

三、配置过程

(一)代码及依赖库的下载

  1. 下载Object Tracking Benchmark工具:tracker_benchmark_v1.0.zip

下载地址:Visual Tracker Benchmark
贴一下大佬展示的图:
在这里插入图片描述
这个链接我打不开,还是放上大佬分享的百度云链接:
benchmark codebase:
链接:https://pan.baidu.com/s/1l6LSQbdm-px6RDgc4ol4AA 密码:cx5o

解压 tracker_benchmark_v1.0,简单介绍一下文件内容:
(1). anno文件:主要存储的是数据集的 bounding box。 目前打开为 52 个文件,后续需要可以添加。默认下载下来的只有 OTB50 中视频序列的标注数据,要想测试 OTB100 就需要找到 OTB100 的标注数据将 anno 文件夹进行替换。很显然,没有标注好的数据就不能测试得到算法的跟踪精度及成功率。
(2). figs文件:存储的是一些实验跑出的图片,准确度图、成功率图等。运行了 perfPlot.m 文件画完图之后,生成的图片就会存在这个文件夹里。
(3). initOmit文件:包含由于遮挡或目标超出视野而被省略的用于跟踪初始化的帧的注释的目录。
(4). perfMat文件:存储最终用于画图的 mat 文件。运行 perfPlot.m 画图文件之后生成的记录文件,所以当你新增或者更改了需要画图的算法时,最好把这个文件夹里 overall 里的所有文件删除,否则可能会画出之前保存的图片而不进行新图的绘制。
(5). results文件:存储的每个 trackers 的跟踪结果的 mat 文件和 perfMat 不一样,这个是相对于 bounding box 的跟踪框数据。
(6). rstEval文件:包含了很多用于计算跟踪性能或者画出结果的脚本的目录。
(7). tmp文件:用来存放临时结果或者日志文件。
(8). trackers文件:里面包含各种你需要对比的跟踪算法;要简单了解可以看 trackers.txt 文件 (注意:你必须把你需要测试的算法的代码放在这个文件夹里,并写好接口文件(run_算法名.m))
(9). util文件:里面包含各种重要的函数和脚本。(其中,需要更改的函数有两个,configSeqs.m 文件,这个文件是设置需要在哪些视频序列上进行测试。configTrackers.m 文件,这个文件是设置需要测试哪些跟踪算法。)

(10). drawResultBB.m 用于画每个帧上不同跟踪器的边界框的主函数。将选择的所有算法的跟踪结果框(bounding_box)显示在同一张图片上的文件,运行这个文件首先需要把自己的算法在数据库上跑一遍,也就是要有 results 文件夹里要有算法跟踪结果文件。
(11). genPerfMat.m 被调用生成图的值。
(12). main_running.m 是用来在测试集上跑跟踪代码的,跑出的结果存在 results 文件夹中;
(13). perfPlot.m 用来把测试结果画出图来,就是 benchmark 网上的图的效果

  1. 下载数据集

OTB50百度云下载地址:
链接:https://pan.baidu.com/s/18hu3FOqz3UEVDMWvfgq5dw 密码:ju4e

OTB100百度云下载地址:
链接:https://pan.baidu.com/s/1TC6BF9erhDCENGYElfS3sw 密码:9x8q

注:tracker_benchmark_v1.0初始用的是虽然是OTB50的数据集,但是程序中拓展了一些OTB100的图像序列,所以,我们下载数据集时,应该用OTB100的数据集,否则会有一些图像序列无法找到。

  1. 下载vlfeat工具包

下载地址:VLFeat - Home
终于有一个链接是能打开的了
在这里插入图片描述
VLFeat 开源库实现计算机视觉算法专业图像的理解和局部特征提取和匹配。它是用 C 编写的,以提高效率和兼容性,并带有 MATLAB 的接口,以易于使用。
为什么要下载呢?因为 OTB 用到了 vlfeat 的一些东西。

注意:需要用管理员身份解压 vlfeat 。

(二)运行测试代码

  1. 打开main_running.m,更改vlfeat工具包所在路径,将20行改为 evalType=‘OPE’; %‘OPE’,‘SRE’,‘TRE’(我们只测试OPE)
    在这里插入图片描述

  2. 打开util目录下的configSeqs.m,更改读取图像序列路径
    在这里插入图片描述
    参考大佬给出的修改后的代码,包含OTB2013,TB50,OTB2015和TB100:

function seqs=configSeqs
 
seqVTD={struct('name','soccer','path','E:\Datasets\OTB100\soccer\img\','startFrame',1,'endFrame',392,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','matrix','path','E:\Datasets\OTB100\matrix\img\','startFrame',1,'endFrame',100,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','ironman','path','E:\Datasets\OTB100\ironman\img\','startFrame',1,'endFrame',166,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','deer','path','E:\Datasets\OTB100\deer\img\','startFrame',1,'endFrame',71,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','skating1','path','E:\Datasets\OTB100\skating1\img\','startFrame',1,'endFrame',400,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','shaking','path','E:\Datasets\OTB100\shaking\img\','startFrame',1,'endFrame',365,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','singer1','path','E:\Datasets\OTB100\singer1\img\','startFrame',1,'endFrame',351,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','singer2','path','E:\Datasets\OTB100\singer2\img\','startFrame',1,'endFrame',366,'nz',4,'ext','jpg','init_rect', [0,0,0,0])};
 
seqIVT={struct('name','carDark','path','E:\Datasets\OTB100\carDark\img\','startFrame',1,'endFrame',393,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','car4','path','E:\Datasets\OTB100\car4\img\','startFrame',1,'endFrame',659,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','david2','path','E:\Datasets\OTB100\david2\img\','startFrame',1,'endFrame',537,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...    
    struct('name','sylvester','path','E:\Datasets\OTB100\sylvester\img\','startFrame',1,'endFrame',1345,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','trellis','path','E:\Datasets\OTB100\trellis\img\','startFrame',1,'endFrame',569,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','fish','path','E:\Datasets\OTB100\fish\img\','startFrame',1,'endFrame',476,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','mhyang','path','E:\Datasets\OTB100\mhyang\img\','startFrame',1,'endFrame',1490,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','david','path','E:\Datasets\OTB100\david\img\','startFrame',300,'endFrame',770,'nz',4,'ext','jpg','init_rect', [0,0,0,0])};
 
seqOther={struct('name','coke','path','E:\Datasets\OTB100\coke\img\','startFrame',1,'endFrame',291,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','bolt','path','E:\Datasets\OTB100\bolt\img\','startFrame',1,'endFrame',350,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','boy','path','E:\Datasets\OTB100\boy\img\','startFrame',1,'endFrame',602,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','dudek','path','E:\Datasets\OTB100\dudek\img\','startFrame',1,'endFrame',1145,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','crossing','path','E:\Datasets\OTB100\crossing\img\','startFrame',1,'endFrame',120,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','couple','path','E:\Datasets\OTB100\couple\img\','startFrame',1,'endFrame',140,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','football1','path','E:\Datasets\OTB100\football1\img\','startFrame',1,'endFrame',74,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','jogging-1','path','E:\Datasets\OTB100\jogging\img\','startFrame',1,'endFrame',307,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','jogging-2','path','E:\Datasets\OTB100\jogging\img\','startFrame',1,'endFrame',307,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','doll','path','E:\Datasets\OTB100\doll\img\','startFrame',1,'endFrame',3872,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','girl','path','E:\Datasets\OTB100\girl\img\','startFrame',1,'endFrame',500,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','walking2','path','E:\Datasets\OTB100\walking2\img\','startFrame',1,'endFrame',500,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','walking','path','E:\Datasets\OTB100\walking\img\','startFrame',1,'endFrame',412,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','fleetface','path','E:\Datasets\OTB100\fleetface\img\','startFrame',1,'endFrame',707,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','freeman1','path','E:\Datasets\OTB100\freeman1\img\','startFrame',1,'endFrame',326,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','freeman3','path','E:\Datasets\OTB100\freeman3\img\','startFrame',1,'endFrame',460,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','freeman4','path','E:\Datasets\OTB100\freeman4\img\','startFrame',1,'endFrame',283,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','david3','path','E:\Datasets\OTB100\david3\img\','startFrame',1,'endFrame',252,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','jumping','path','E:\Datasets\OTB100\jumping\img\','startFrame',1,'endFrame',313,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','carScale','path','E:\Datasets\OTB100\carScale\img\','startFrame',1,'endFrame',252,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','skiing','path','E:\Datasets\OTB100\skiing\img\','startFrame',1,'endFrame',81,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','dog1','path','E:\Datasets\OTB100\dog1\img\','startFrame',1,'endFrame',1350,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','suv','path','E:\Datasets\OTB100\suv\img\','startFrame',1,'endFrame',945,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','motorRolling','path','E:\Datasets\OTB100\motorRolling\img\','startFrame',1,'endFrame',164,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','mountainBike','path','E:\Datasets\OTB100\mountainBike\img\','startFrame',1,'endFrame',228,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),... 
    struct('name','lemming','path','E:\Datasets\OTB100\lemming\img\','startFrame',1,'endFrame',1336,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','liquor','path','E:\Datasets\OTB100\liquor\img\','startFrame',1,'endFrame',1741,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','woman','path','E:\Datasets\OTB100\woman\img\','startFrame',1,'endFrame',597,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','faceocc1','path','E:\Datasets\OTB100\faceocc1\img\','startFrame',1,'endFrame',892,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','faceocc2','path','E:\Datasets\OTB100\faceocc2\img\','startFrame',1,'endFrame',812,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','basketball','path','E:\Datasets\OTB100\basketball\img\','startFrame',1,'endFrame',725,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','football','path','E:\Datasets\OTB100\football\img\','startFrame',1,'endFrame',362,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','subway','path','E:\Datasets\OTB100\subway\img\','startFrame',1,'endFrame',175,'nz',4,'ext','jpg','init_rect', [0 0 0 0]),...    
    struct('name','tiger1','path','E:\Datasets\OTB100\tiger1\img\','startFrame',1,'endFrame',354,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','tiger2','path','E:\Datasets\OTB100\tiger2\img\','startFrame',1,'endFrame',365,'nz',4,'ext','jpg','init_rect', [0,0,0,0])};
 
seqOTB49_100={struct('name','Biker','path','E:\Datasets\OTB100\Biker\img\','startFrame',1,'endFrame',142,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Bird1','path','E:\Datasets\OTB100\Bird1\img\','startFrame',1,'endFrame',408,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Bird2','path','E:\Datasets\OTB100\Bird2\img\','startFrame',1,'endFrame',99,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','BlurBody','path','E:\Datasets\OTB100\BlurBody\img\','startFrame',1,'endFrame',334,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','BlurCar1','path','E:\Datasets\OTB100\BlurCar1\img\','startFrame',247,'endFrame',988,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','BlurCar2','path','E:\Datasets\OTB100\BlurCar2\img\','startFrame',1,'endFrame',585,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','BlurCar3','path','E:\Datasets\OTB100\BlurCar3\img\','startFrame',3,'endFrame',359,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','BlurCar4','path','E:\Datasets\OTB100\BlurCar4\img\','startFrame',18,'endFrame',397,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','BlurFace','path','E:\Datasets\OTB100\BlurFace\img\','startFrame',1,'endFrame',493,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','BlurOwl','path','E:\Datasets\OTB100\BlurOwl\img\','startFrame',1,'endFrame',631,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Board','path','E:\Datasets\OTB100\Board\img\','startFrame',1,'endFrame',698,'nz',5,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Bolt2','path','E:\Datasets\OTB100\Bolt2\img\','startFrame',1,'endFrame',293,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Box','path','E:\Datasets\OTB100\Box\img\','startFrame',1,'endFrame',1161,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Car1','path','E:\Datasets\OTB100\Car1\img\','startFrame',1,'endFrame',1020,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Car2','path','E:\Datasets\OTB100\Car2\img\','startFrame',1,'endFrame',913,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Car24','path','E:\Datasets\OTB100\Car24\img\','startFrame',1,'endFrame',3059,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','ClifBar','path','E:\Datasets\OTB100\ClifBar\img\','startFrame',1,'endFrame',472,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Coupon','path','E:\Datasets\OTB100\Coupon\img\','startFrame',1,'endFrame',327,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Crowds','path','E:\Datasets\OTB100\Crowds\img\','startFrame',1,'endFrame',347,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Dancer','path','E:\Datasets\OTB100\Dancer\img\','startFrame',1,'endFrame',225,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Dancer2','path','E:\Datasets\OTB100\Dancer2\img\','startFrame',1,'endFrame',150,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...   
    struct('name','Diving','path','E:\Datasets\OTB100\Diving\img\','startFrame',1,'endFrame',215,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Dog','path','E:\Datasets\OTB100\Dog\img\','startFrame',1,'endFrame',127,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','DragonBaby','path','E:\Datasets\OTB100\DragonBaby\img\','startFrame',1,'endFrame',113,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Girl2','path','E:\Datasets\OTB100\Girl2\img\','startFrame',1,'endFrame',1500,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Gym','path','E:\Datasets\OTB100\Gym\img\','startFrame',1,'endFrame',767,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Human2','path','E:\Datasets\OTB100\Human2\img\','startFrame',1,'endFrame',1128,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Human3','path','E:\Datasets\OTB100\Human3\img\','startFrame',1,'endFrame',1698,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Human4','path','E:\Datasets\OTB100\Human4\img\','startFrame',1,'endFrame',667,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Human5','path','E:\Datasets\OTB100\Human5\img\','startFrame',1,'endFrame',713,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Human6','path','E:\Datasets\OTB100\Human6\img\','startFrame',1,'endFrame',792,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Human7','path','E:\Datasets\OTB100\Human7\img\','startFrame',1,'endFrame',250,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Human8','path','E:\Datasets\OTB100\Human8\img\','startFrame',1,'endFrame',128,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Human9','path','E:\Datasets\OTB100\Human9\img\','startFrame',1,'endFrame',305,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Jump','path','E:\Datasets\OTB100\Jump\img\','startFrame',1,'endFrame',122,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','KiteSurf','path','E:\Datasets\OTB100\KiteSurf\img\','startFrame',1,'endFrame',84,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Man','path','E:\Datasets\OTB100\Man\img\','startFrame',1,'endFrame',134,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Panda','path','E:\Datasets\OTB100\Panda\img\','startFrame',1,'endFrame',1000,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','RedTeam','path','E:\Datasets\OTB100\RedTeam\img\','startFrame',1,'endFrame',1918,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Rubik','path','E:\Datasets\OTB100\Rubik\img\','startFrame',1,'endFrame',1997,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Skater','path','E:\Datasets\OTB100\Skater\img\','startFrame',1,'endFrame',160,'nz',4,'ext','jpg','init_rect', [0,0,0,0])...
    struct('name','Skater2','path','E:\Datasets\OTB100\Skater2\img\','startFrame',1,'endFrame',435,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Skating2-1','path','E:\Datasets\OTB100\Skating2\img\','startFrame',1,'endFrame',473,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Skating2-2','path','E:\Datasets\OTB100\Skating2\img\','startFrame',1,'endFrame',473,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Surfer','path','E:\Datasets\OTB100\Surfer\img\','startFrame',1,'endFrame',376,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Toy','path','E:\Datasets\OTB100\Toy\img\','startFrame',1,'endFrame',271,'nz',4,'ext','jpg','init_rect',[0,0,0,0])...
    struct('name','Trans','path','E:\Datasets\OTB100\Trans\img\','startFrame',1,'endFrame',124,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Twinnings','path','E:\Datasets\OTB100\Twinnings\img\','startFrame',1,'endFrame',472,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Vase','path','E:\Datasets\OTB100\Vase\img\','startFrame',1,'endFrame',271,'nz',4,'ext','jpg','init_rect', [0,0,0,0])};
 
seqOTB50={struct('name','basketball','path','E:\Datasets\OTB100\basketball\img\','startFrame',1,'endFrame',725,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Biker','path','E:\Datasets\OTB100\Biker\img\','startFrame',1,'endFrame',142,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Bird1','path','E:\Datasets\OTB100\Bird1\img\','startFrame',1,'endFrame',408,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','BlurBody','path','E:\Datasets\OTB100\BlurBody\img\','startFrame',1,'endFrame',334,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','BlurCar2','path','E:\Datasets\OTB100\BlurCar2\img\','startFrame',1,'endFrame',585,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','BlurFace','path','E:\Datasets\OTB100\BlurFace\img\','startFrame',1,'endFrame',493,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','BlurOwl','path','E:\Datasets\OTB100\BlurOwl\img\','startFrame',1,'endFrame',631,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','bolt','path','E:\Datasets\OTB100\bolt\img\','startFrame',1,'endFrame',350,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Box','path','E:\Datasets\OTB100\Box\img\','startFrame',1,'endFrame',1161,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Car1','path','E:\Datasets\OTB100\Car1\img\','startFrame',1,'endFrame',1020,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','car4','path','E:\Datasets\OTB100\car4\img\','startFrame',1,'endFrame',659,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','carDark','path','E:\Datasets\OTB100\carDark\img\','startFrame',1,'endFrame',393,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','carScale','path','E:\Datasets\OTB100\carScale\img\','startFrame',1,'endFrame',252,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','ClifBar','path','E:\Datasets\OTB100\ClifBar\img\','startFrame',1,'endFrame',472,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','couple','path','E:\Datasets\OTB100\couple\img\','startFrame',1,'endFrame',140,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Crowds','path','E:\Datasets\OTB100\Crowds\img\','startFrame',1,'endFrame',347,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','david','path','E:\Datasets\OTB100\david\img\','startFrame',300,'endFrame',770,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','deer','path','E:\Datasets\OTB100\deer\img\','startFrame',1,'endFrame',71,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Diving','path','E:\Datasets\OTB100\Diving\img\','startFrame',1,'endFrame',215,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','DragonBaby','path','E:\Datasets\OTB100\DragonBaby\img\','startFrame',1,'endFrame',113,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','dudek','path','E:\Datasets\OTB100\dudek\img\','startFrame',1,'endFrame',1145,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','football','path','E:\Datasets\OTB100\football\img\','startFrame',1,'endFrame',362,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','freeman4','path','E:\Datasets\OTB100\freeman4\img\','startFrame',1,'endFrame',283,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','girl','path','E:\Datasets\OTB100\girl\img\','startFrame',1,'endFrame',500,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Human3','path','E:\Datasets\OTB100\Human3\img\','startFrame',1,'endFrame',1698,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Human4','path','E:\Datasets\OTB100\Human4\img\','startFrame',1,'endFrame',667,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Human6','path','E:\Datasets\OTB100\Human6\img\','startFrame',1,'endFrame',792,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Human9','path','E:\Datasets\OTB100\Human9\img\','startFrame',1,'endFrame',305,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','ironman','path','E:\Datasets\OTB100\ironman\img\','startFrame',1,'endFrame',166,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Jump','path','E:\Datasets\OTB100\Jump\img\img\img\','startFrame',1,'endFrame',122,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','jumping','path','E:\Datasets\OTB100\jumping\img\','startFrame',1,'endFrame',313,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','liquor','path','E:\Datasets\OTB100\liquor\img\','startFrame',1,'endFrame',1741,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','matrix','path','E:\Datasets\OTB100\matrix\img\','startFrame',1,'endFrame',100,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','motorRolling','path','E:\Datasets\OTB100\motorRolling\img\','startFrame',1,'endFrame',164,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Panda','path','E:\Datasets\OTB100\Panda\img\','startFrame',1,'endFrame',1000,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','RedTeam','path','E:\Datasets\OTB100\RedTeam\img\','startFrame',1,'endFrame',1918,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','shaking','path','E:\Datasets\OTB100\shaking\img\','startFrame',1,'endFrame',365,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','singer2','path','E:\Datasets\OTB100\singer2\img\','startFrame',1,'endFrame',366,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','skating1','path','E:\Datasets\OTB100\skating1\img\','startFrame',1,'endFrame',400,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Skating2-1','path','E:\Datasets\OTB100\Skating2\img\','startFrame',1,'endFrame',473,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Skating2-2','path','E:\Datasets\OTB100\Skating2\img\','startFrame',1,'endFrame',473,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','skiing','path','E:\Datasets\OTB100\skiing\img\','startFrame',1,'endFrame',81,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','soccer','path','E:\Datasets\OTB100\soccer\img\','startFrame',1,'endFrame',392,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','Surfer','path','E:\Datasets\OTB100\Surfer\img\','startFrame',1,'endFrame',376,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','sylvester','path','E:\Datasets\OTB100\sylvester\img\','startFrame',1,'endFrame',1345,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','tiger2','path','E:\Datasets\OTB100\tiger2\img\','startFrame',1,'endFrame',365,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','trellis','path','E:\Datasets\OTB100\trellis\img\','startFrame',1,'endFrame',569,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','walking2','path','E:\Datasets\OTB100\walking2\img\','startFrame',1,'endFrame',500,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','walking','path','E:\Datasets\OTB100\walking\img\','startFrame',1,'endFrame',412,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','woman','path','E:\Datasets\OTB100\woman\img\','startFrame',1,'endFrame',597,'nz',4,'ext','jpg','init_rect', [0,0,0,0])};
 
% seqs=[seqIVT,seqVTD,seqOther]; %OTB-2013
seqs=[seqIVT,seqVTD,seqOther,seqOTB49_100];   %OTB100
% seqs = seqOTB50;   %OTB50

注意:数据集所在路径可以通过 “Ctrl+F” 选择替换

  1. 打开 util 目录下的 configTrackers.m,更改测试目标跟踪算法
function trackers=configTrackers

trackersNew = {struct('name','XXX','namePaper','XXX')};
trackers = trackersNew;

% trackersVIVID={struct('name','VR','namePaper','VR-V'),...%gray-25%
%     struct('name','TM','namePaper','TM-V'),...%dark red
%     struct('name','RS','namePaper','RS-V'),...%orange
%     struct('name','PD','namePaper','PD-V'),...%Turquoise
%     struct('name','MS','namePaper','MS-V')%purple
% };
% 
% trackers1={   struct('name','CT','namePaper','CT'),...
%     struct('name','TLD','namePaper','TLD'),...    
%     struct('name','IVT','namePaper','IVT'),...
%     struct('name','DFT','namePaper','DFT'),...%yellow
%     struct('name','ASLA','namePaper','ASLA'),...
%     struct('name','L1APG','namePaper','L1APG'),...    
%     struct('name','ORIA','namePaper','ORIA'),...
%     struct('name','MTT','namePaper','MTT'),...
%     struct('name','CSK','namePaper','CSK'),...
%     struct('name','SCM','namePaper','SCM'),...
%     struct('name','LOT','namePaper','LOT')};
% 
% trackersEXE={ struct('name','CPF','namePaper','CPF'),...
%     struct('name','Struck','namePaper','Struck'),...
%     struct('name','MIL','namePaper','MIL'),...
%     struct('name','OAB','namePaper','OAB'),...
%     struct('name','SBT','namePaper','SemiT'),...
%     struct('name','BSBT','namePaper','BSBT'),...
%     struct('name','Frag','namePaper','Frag'),...
%     struct('name','KMS','namePaper','KMS'),...
%     struct('name','SMS','namePaper','SMS'),...
%     struct('name','LSK','namePaper','LSK'),...
%     struct('name','VTS','namePaper','VTS'),...
%     struct('name','VTD','namePaper','VTD'),...
%     struct('name','CXT','namePaper','CXT')};
% 
% trackers = [trackersVIVID,trackers1,trackersEXE];

  1. 在 trackers 路径下新建 XXX 文件夹,并且将算法代码放入文件夹中
  2. 运行 main_running.m,最终结果保存在 results\results_OPE_CVPR13 目录下
  3. 在这里做一下说明,跟踪代码run_XXX.m参考以下格式:
function results=run_XXX(seq, video_path, bSaveImage)
 
%获取图像序列
s_frames = seq.s_frames;
 
%存放每一帧目标框的位置
rect_position = zeros(numel(s_frames), 4);
 
%循环处理每一帧图像
for frame = 1:numel(s_frames),
	%load image
	im = imread(s_frames{frame});
	if size(im,3) > 1,
		im = rgb2gray(im);
	end
    %你的跟踪代码
 
end
 
%返回的跟踪结果
results.type = 'rect';
results.res = rect_position;%each row is a rectangle
results.fps = fps;
  1. 运行过程中出现的问题:
    在这里插入图片描述
    放上大佬替换后的 anno:
    链接:https://pan.baidu.com/s/1h2ocSA8jHIAnozZh4jARcg
    提取码:nmfi
    其他的一些小错误诸如数据集的名称不匹配啊之类的,依次改好就可以了。

(三)画Precision和Success曲线

  1. 将results\results_OPE_CVPR13中生成跟踪结果mat文件拷贝到results\results_SRE_CVPR13和results\results_TRE_CVPR13文件夹中

  2. 打开perfPlot.m

(1). 更改103行为:

evalTypeSet = ‘OPE’;

注:不要加中括号写成evalTypeSet = {‘OPE’},否则会报错。

(2).更改105行为:

rankingType = ‘threshold’;%AUC, threshod

注:不要直接复制105行后面的threshod,因为作者粗心写错了,中间少了一个“l”。

(3).更改140行为:

for j=1:1

(4).更改142行为:

evalType = evalTypeSet;%SRE, TRE, OPE

  1. 运行perfPlot.m,得到12张Precision和12张Success图,结果保存在tracker_benchmark_v1.0\figs\overall目录中

注:如果更新算法得到新的跟踪结果mat文件,在plot之前,请务必先删除 tracker_benchmark_v1.0\perfMat\overall目录下的所有.mat文件,否则数据将不会更新。

  1. 多个算法对比
    更改util\configTrackers.m为:
function trackers=configTrackers
trackersNew={
    struct('name','SMS','namePaper','SMS'),...
    struct('name','CT','namePaper','CT'),...
    struct('name','TLD','namePaper','TLD'),...
    struct('name','CSK','namePaper','CSK'),...
    struct('name','BACF','namePaper','BACF')};
trackers = trackersNew;

运行perfPlot.m

(四)画跟踪效果图

  1. 运行drawResultBB.m,跟踪结果保存在tracker_benchmark_v1.0\tmp\imgs目录中
    在这里插入图片描述
  2. 更改 util\configTrackers.m可以添加对比算法,更改util\configSeqs.m可以控制需要画图的图像序列
  3. 去除保存边框
    原始代码保存的图像如上图所示,存在厚厚的边框,不利于论文排版
    更改drawResultBB.m的116行为:
        set(gca, 'Units', 'pixels');
        q = get(gca, 'position');
        q(1) = 0;  %设置左边距离值为零
        q(2) = 0;  %设置下边距离值为零
        set(gca, 'position', q);
        [m, n, flag]=size(img);
        imwrite(frame2im(getframe(gcf,[0,0,q(3),q(4)])), [pathSave  num2str(i) '.png']);
        %imwrite(frame2im(getframe(gcf)), [pathSave  num2str(i) '.png']);

再次运行drawResultBB.m,得到保存图像:
在这里插入图片描述
这里作者原来给出的代码如下所示:

q=get(gca,'position');
q(1)=0;%设置左边距离值为零
q(2)=0;%设置右边距离值为零
set(gca,'position',q);
[m,n,flag]=size(img);
imwrite(frame2im(getframe(gcf,[0,0,n,m])), [pathSave  num2str(i) '.png']);
%imwrite(frame2im(getframe(gcf)), [pathSave  num2str(i) '.png']);

但我运行出来的结果如下图所示:
在这里插入图片描述
还是带着边框。具体的关于 gca 和 gcf 的相关属性请看这位大佬这位大佬的帖子。
按照大老远来给出的代码,最开始我获得的 q 属性如下图所示:
在这里插入图片描述
units 属性为 normalized,是在图像中的相对位置和大小?position 中的前两项对应的是左下角的相对位置,(0,0)对应左下角,(1,1)对应右上角?置 0 后图像会平移至左下角显示,后两项是图片相对坐标的长宽?按理说大佬给出的原代码应该没有问题?我将 units 属性改为 ‘pixels’ 之后,gca 的属性如下图所示:
在这里插入图片描述
这样得到的 position 就是在坐标中的像素数。问题就出在这里。这里 gca 得到的图片大小为213.3333160 大小,而 gcf 和 size(img) 得到的图片大小却为250360
在这里插入图片描述
所以 getframe(gcf,[0,0,n,m]) 得到的图片还是带边框的。这里不知道有没有大佬来讲解一下原因。
我将代码改为 getframe(gcf,[0,0,q(3),q(4)]) 之后,保存的图片就不带边框了。

(五)多个代码对比

更改util\configTrackers.m为:

function trackers=configTrackers
trackersNew={
    struct('name','SMS','namePaper','SMS'),...
    struct('name','CT','namePaper','CT'),...
    struct('name','TLD','namePaper','TLD'),...
    struct('name','CSK','namePaper','CSK'),...
    struct('name','BACF','namePaper','BACF')};
trackers = trackersNew;

运行perfPlot.m
在这里插入图片描述

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值