OTB2013平台跑OTB2015的results遇到的问题
OTB2013平台的代码以及2013/2015的数据结果results可以在Visual Tracker Benchmark下载。
说明:我目前所做的工作是用OTB2013平台跑完2013的results后想再跑一下2015的results,看得到的图跟跑2013的results一不一样,当然,跑2015results的tracker和sequences跟2013是一样的(也就是OTB2013平台上面默认的)
一、OTB2013和OTB2015results数据格式的区别(即results目录下的mat文件)
results中的字段有所区别,但是影响你用perfPlot.m画图的主要是“图片序列长度字段” 和 ‘type’两个字段
1、 2013中表示seqs长度的字段名是‘len’,2015中是‘seq_len’。所以为了兼容2015数据格式,代码需要做如下修改:
注意:划圈的是修改的地方,我这里修改的是/rstEval目录下的calcSeqErrRobust.m文件! 很需要注意的一个问题是calcSeqErrRobust.m这个文件在/rstEval和/util目录下都有一份,基本一样,暂时没搞清楚为啥这样搞。 默认执行的是/util目录下的,因为在perfPlot.m画图主程序的开始部分有addpath('./util'); 只加入了/util目录,所以默认执行/util目录下的calcSeqErrRobust.m。 我在perfPlot.m也加入了addpath('./rstEval');因为后面/rstEval目录下的一些函数还会用到。所以为了保险起见,上面的修改可以在两个目录下的calcSeqErrRobust.m做一样的修改,保持一致。 这个一致也适用下面所说的对calcSeqErrRobust.m文件的修改。
2、‘type’字段的区别
results中的type字段除了‘rect’类型2013和2015处理一样之外,有其他的一些不一样,直接跑会导致某些受影响的算法跑不出应有的结果。 经过一番研究,我找到的一些2013/2015的tracker以及type类型的区别说明如下:
2013‘type字段’数据格式 | 对应的 2015‘type字段’数据格式 | 涉及到的算法 |
ivtAff | affine_ivt | IVT, ASLA, SCM |
L1Aff |
affine_L1 | L1APG, MTT |
SIMILARITY | similarity | ORIA |
说明:上表中的每一行对应的都是同一种数据类型,只是起的名字不一样,所以需要在代码中增加兼容性。
吐槽:个人觉得这样类型名字前后不一致对于数据和代码的可维护性都不太友好,对于学习者来说更难受,不知道作者是怎么想的。
代码需要修改的点:(提示:如前所说,最好将两个目录下的calcSeqErrRobust.m都做修改)
表中前两行需要修改的是----
第三行也是一样,接着上面的代码,先修改case那里,如下:
但是,比较特殊的是,如果进入这个case的话,会执行warp_p = parameters_to_projective_matrix(results.type,results.res(i,:));也就是说这个函数把type传进去了,所以进入这个函数还要接着修改。
进入这个函数,发现它在/rstEval目录下,所以记得前面说的这个目录也要addpath加进路径。
修改这一句就好了。
3、OTB2013seqs中的Jogging,对应的results中文件名是Jogging-1_xxx.mat和Jogging-2_xxx.mat; 但是2015中的文件名是Jogging.1_xxx.mat和Jogging.2_xxx.mat; 为了与configseqs中的seqs name以及anno中的文件名保持一致,建议将2015中的文件名中的 '.' 改成 '-'
至此,修改了这些地方,基本就能在OTB2013平台上面跑2015的results了。
二、其他无关紧要的点
OTB2013平台代码中configSeqs中的数据seqs的name是首字母小写。
OTB2013results中的seqs的name也是首字母小写。
OTB2013平台中的configTracker中的tracker的name有些也跟results中的大小写不一致。
OTB2015results中的seqs的name却是首字母大写。
可能是我matlab刚开始学,不知道读取文件时,matlab对文件名的大小写不敏感。
三、OTB2013跑的结果展示
这里只展示OPE总的结果,不分Attributes展示结果。
原代码默认的是不生成AUC情况下的errorPlot图,我这里修改了之后可以生成AUC情况下的error测试结果。
设定以下的变量参数:evalTypeSet设定为OPE,rankingType设定为AUC或者threshold(这里的threshold源代码中少了一个字母l,不要直接复制粘贴),,,然后默认是只展示效果最好的10个tracker。
以上代码位于perfPlot.m中
AUC---------------------------------------------------------------------------------------------------------------------------------------------
threshold---------------------------------------------------------------------------------------------------------------------------------------------