OnlineObject Tracking:A Benchmark (转)

来源:互联网 发布:mac电脑程序强制退出 编辑:程序博客网 时间:2024/06/06 17:25

OnlineObject Tracking:A Benchmark (转)

用我自己的算法在benchmark上跑的步骤和遇到的问题:

步骤:

下载完benchmark后会看到在文件中包含4.m文件,main_running.mperfPlot.mgenPerfMat.mdrawResultBB.m

 

把自己的算法放到benchmark的文件夹trackers

打开main_running.m文件,在1416行 分别打开configSeqs.m文件和configTrackers.m文件。configSeqs.m写的是放图片集的名称和位置,需要根据自己图片序列集存放的位置进行修改,名称也需要注意一下,例如:原名称是david_c可是我的数据集的名称是david,我的路径是D:\data_seq\David\img\,多了一个img,因为img中放的是图片。

 

configTrackers.m文件中放的是所有的算法,trackers1这个结构体中添加上你的代码的名字,比如:struct('name','KCFDP','namePaper','KCFDP'),...

 

最重要的一步就是需要写一个将自己算法的输入输出对接到benchmark中的脚本run_tracker.m文件,打开其他算法时会发现每个算法中都会有run_tracker.m文件,例如run_CT.m  run_CSK.m

这步很简单,参照其它算法 例如:run_CT.m对比CT.m文件 看到第一行的输入和最后一行的输出进行了统一,

function results=run_CT(seq, res_path, bSaveImage)

 

results.res=res;

results.type='rect';

results.fps=(seq.len-1)/duration;

disp(['fps: ' num2str(results.fps)])

 

输入:Seq代表着输入的图片,要将算法中输入的图片用Seq来代替

输出:res代表跟踪位置type 类型

 

做完上述三步后,运行main_running.m函数。对于mainrunning函数是主函数,这个函数的作用是1能够将视频分割成20段,以验证TRE。(2)若是SRE,则可以在空间改变初始位置,一共12

运行main_running.m函数,得到的结果是在文件夹results中的results_SRE_CVPR13results_TRE_CVPR13

如果想画各种精度曲线的话,就可以运行perfPlot.m文件,这个函数调用genPerMat函数得到需要的精度数据以及错误率(DP,OP),然后放到perfMat\overall\文件中,画出来的图保存在figs\overall\文件夹下。运行perfPlot.m会调用生成的结果results_SRE_CVPR13results_TRE_CVPR13,以此画出结果

画各种tracker算法在图像上的效果(bounding boxes),可以调用drawResultBB.m函数,就可以实现


问题  1

1  在调用main.mTRESRE时,因为会生成相应的.mat数据文件,如果跑完以后发现自己算法生成的.mat文件有问题,那么要把该文件删除,待找到错误原因后,重新生成相应的.mat文件。因为程序中写的是如果已经存在了.mat文件,例如已经存在car4_STC.mat文件,即使该文件中的数据有错误,但是重新跑时会默认该文件中的数据写完,不会重新写入数据

问题  2

 benchmark中 一共有三个指标OPETRESRE,当前论文中需要列放的只是OPE结果图,所以在画曲线图时只需要跑OPE即可,步骤:

1程序中的代码表示在:main_running.m中的20

evalType='OPE';

(2)然后调用perfPlot.m精度曲线图,因为只需要得到OPE结果图,所以在perfPlot.m103行修改为

evalTypeSet = 'OPE';

 

140行:

for j=1:length(evalTypeSet)

end 

 需要注释掉;因为只跑OPE所以不用循环了

142行修改为:

     evalType = evalTypeSet;%SRE, TRE, OPE

 

(3)做完上述(1)(2)后 调用perfPlot.m画出来的曲线图只有成功率图,而并没有精确度图

这时需要做的是:

105行修改为:

rankingType = 'threshold';(如果参数是源程序中的‘AUC’的话  跑出来的图是只有成功率图(success)而没有精度图(precision))

修改完后 再跑一遍perfPlot.m,此时得到的图像既有success又有precision

问题 3

在跑完perfplot.m后,如果生成的曲线图不正确或者不理想,想要重新画曲线图,此时需要把文件夹../perfMat/overall下的所有.mat文件删除,原因和问题1中的一样

问题 4

我在跑TRE时,查看我的算法生成的.mat文件,发现有些数据并没有写进去,本来每个.mat文件中有20组数据,可是得到的结果中有的数据是空的,例如:


这个错误的原因我没有找到,但是并不影响后面的工作。因为我想要的只是OPE结果,而每个.mat文件中的第一列数据就是OPE的数据,而我跑出来的结果没有缺失第一列数据的所以并没有影响。(我猜测是跟踪框出边界了)

问题 5

1在大部分论文中附上的跟踪结果图都是只有56个算法的结果,而调用完drawResultBB.m得到的结果图中有好多算法的结果,很混乱(因为太多了),怎么办?

这时就需要人为的去标定 限定56种算法去画图,具体步骤:

drawResultBB.m文件的15行后面加上:

 

trks = configTrcakers;

Aaa = [1 2 3 4 (选中的算法的编号)........]

trks = trks(Aaa );

这样的话程序只会跑Aaa中的几个算法。

同样的方法适用于选择想要的序列去跑(但是这种做法有点学术造假的嫌疑)

2得到的曲线图,在benchmark中默认的是前10名算法的结果,如果在和所有的算法跑时你的算法并没有进到前10名,怎么办?

这个问题最好的解决方法是继续优化算法,在理论程序上下功夫,以达到算法效果提高的目的。但是,有个小技巧(也有作弊的嫌疑),就是和(1)的解决方法一样,选择几个菜的算法,数目固定在10个,这样的话你的算法肯定在前10名里边!!!!

问题 6

文章中把数据集分为了11类,包括(illumination variationlow resolution等),但是可能你的算法可能并不具备所有方面的能力,例如:out of view 超出视野 你的算法并不具有再检测的能力,这样造成在做综合测评时(perfplot.m),会影响整体成绩,所以可以不测试这项(这样做不算作弊,这个可以直接在论文中明说)

具体操作:

继续用'out of view'来做例子

perfplot.m文件的第9行:

 

attName={'illumination variation'   'out-of-plane rotation' 'scale variation'   'occlusion' 'deformation'   'motion blur'   'fast motion'   'in-plane rotation' 'out of view'   'background clutter' 'low resolution'};

这个顺序是固定的,而'out of view'是倒数第三个

该项删掉:

attName={'illumination variation'   'out-of-plane rotation' 'scale variation'   'occlusion' 'deformation'   'motion blur'   'fast motion'   'in-plane rotation'  'background clutter' 'low resolution'};

文件夹../anno/att下的一系列txt文件,11中属性分类的标志,顺序是按照attName中的顺序

例如:basketball.txt文件中的是1,1,0,1,1,0,0,0,0,1,0

数字是1的说明basketball是属于该类的,比如说basketball属于光照变化、平面外旋转、遮挡、变形、背景复杂5项。按照attName的顺序对号入座即可

 

接着1中的操作,因为'out of view'是倒数第三个,那么需要把att下的每一个txt文件中的倒数第三个数字删掉

例如:

Basketball.txt就变成 1,1,0,1,1,0,0,0,1,0

按照12操作完后,再跑perfplot.m,会发现得到的一系列图中没有'out of view'的图了




原创粉丝点击