tracker_benchmark_v1.0配置过程中出现的问题及解决方案

毕业设计是CV方向的,一直在调试tracker_benchmark_v1.0的代码,遇到了很多的问题,本篇博客记录我遇到的问题和解决的办法,也许还有错误的地方,欢迎大家一起讨论研究~

一、介绍和注意事项
我用的环境是MATLAB2019b
首先是到Visual Tracker Benchmark官网下载压缩包

解压得到文件后会有十五个项目,这里我对几个重要的项目进行介绍

项目名称存储的内容或功能
figsoverall文件夹下存储perfPlot.m运行得到的图像,每次运行结果会得到24张图片,其中12张准确率图12张成功率图,12张图片中1张是全局对比图11张是11种挑战属性下对比图
perfMatoverall文件夹下存储perfPlot.m运行得到的图像对应的.mat文件,一般有两个
results存储的是main_running.m运行生成的.mat文件
tmpimgs文件夹下存储的是drawResultBB.m运行得到的实时跟踪图
trackers一共23个项目,其中VIVID_Tracker中包含5种跟踪算法
util存储的是一些重要的.m文件
drawResultBB.m用于绘制实时跟踪图
main_running.m用于生成.mat文件
perfPlot.m用于绘制准确率和成功率对比曲线

注意
1.11种挑战属性

挑战属性缩写挑战属性含义
IV光照变化
SV尺度变化
OCC遮挡
DEF形变
MB运动模糊
FM快速运动
IPR平面内旋转
OPR平面外旋转
OV离开视野
BC相似背景
LR低分辨率

2.我有一个习惯就是每次运行不同跟踪算法的perfPlot.m之前,我都会删除figs\overall和perfMat\overall下的所有文件

3.我们需要手动在results文件夹下创建一个results_OPE_CVPR13文件,存放OPE标准下生成的.mat文件

4.我们需要手动在tmp文件夹下创建OPE.txt和SRE.txt,用于存储OPE标准下或SRE标准下运行程序生成的日志

5.util文件夹下我们主要修改configSeqs.m和congfiTrackers.m

运行的流程主要是main_running.m生成.mat文件,drawResultBB.m生成实时跟踪图,perfPlot.m生成对比曲线图。

二、configSeqs.m配置
1.到Visual Tracker Benchmark官网下载OTB数据集所有视频序列,包括OTB50和OTB100(依次点击每个图片)
如果你觉得费劲
OTB50网盘链接,提取码:2gvh
OTB100网盘链接,提取码:cqiw

2.修改configSeqs.m视频路径
按照下述方法修改,主要就是把视频路径更改一下然后在后面加上\img
如果你觉得费劲
修改好的configSeqs.m网盘链接,提取码:59jv
(视频是在OTB50还是OTB100我已经对应好了,你只需要修改前面的路径,也就是C:\Users\86139\Desktop\这块内容)

seqVTD={struct('name','singer1','path','C:\Users\86139\Desktop\otb100\Singer1\img\','startFrame',1,'endFrame',351,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','soccer','path','C:\Users\86139\Desktop\otb50\Soccer\img\','startFrame',1,'endFrame',392,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','matrix','path','C:\Users\86139\Desktop\otb50\Matrix\img\','startFrame',1,'endFrame',100,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','ironman','path','C:\Users\86139\Desktop\otb50\Ironman\img\','startFrame',1,'endFrame',166,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','deer','path','C:\Users\86139\Desktop\otb50\Deer\img\','startFrame',1,'endFrame',71,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','skating1','path','C:\Users\86139\Desktop\otb50\Skating1\img\','startFrame',1,'endFrame',400,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','shaking','path','C:\Users\86139\Desktop\otb50\Shaking\img\','startFrame',1,'endFrame',365,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
    struct('name','singer2','path','C:\Users\86139\Desktop\otb50\Singer2\img\','startFrame',1,'endFrame',366,'nz',4,'ext','jpg','init_rect', [0,0,0,0])};

三、configTrackers.m配置
1.其中包含三个部分trackersVIVID、trackers1、trackersEXE,我是注释了三个部分(ctrl+r),然后自己写了一个模块trackersTEST,测试CXT和CSK跟踪算法(你有什么需求可以更改对应的代码),对应的代码如下

function trackers=configTrackers

trackersTEST={struct('name','CSK','namePaper','CSK'),...
    struct('name','CXT','namePaper','CXT')};

trackers = [trackersTEST];

2.至于trackerVIVID中包含的MS、PD、RS、TM、VR5种跟踪算法,我一直没有调试出来,调试运行到每个run_XXX.m文件中报错

函数或变量tkMeanShift_Init未定义
函数或变量tkMeanShift_Next未定义
函数或变量tkPeakDifference_Init未定义
函数或变量tkPeakDifference_Next未定义
函数或变量tkRatioShift_Init未定义
函数或变量tkRatioShift_Next未定义
函数或变量tkTemplateMatch_Init未定义
函数或变量tkTemplateMatch_Next未定义
函数或变量tkVarianceRatio_Init未定义
函数或变量tkVarianceRatio_Next未定义

其中每个函数都有对应的dll文件,我一开始怀疑自己的MATLAB版本过高,无法解析动态dll库,以致函数无法识别,但是我尝试了很多版本的MATLAB以后发现还是不行,如果有解决这个问题的同学,欢迎一起交流讨论(最后我是放弃了这五个跟踪算法,还有很多跟踪算法在调试的过程中出现问题,我也是直接选择了放弃,我主要利用这个数据集进行自己算法和KCF等一些算法的比较,所以这些算法没有调试出来也没有太大的影响)

注意
1.像视频序列Jogging里面有两个groundtruth_rect.txt,对于这种视频序列,我们把其一分为二,分成Jogging-1和Jogging-2两个视频序列(其中的img文件夹是一样的,这种情况是因为视频序列中由两个跟踪目标,每一个.txt文件对应其中一个目标的pos和target_sz)

四、main_running.m配置
1.我建议把MATLAB的当前文件夹改成tracker_benchmark_v1.0,这样所有的addPath都不会报错,否则需要更改为绝对路径
在这里插入图片描述
2.下载vlfeat工具,修改代码第八行(对应好自己的路径和vlfeat的版本)

addpath(('C:\Users\86139\Desktop\vlfeat-0.9.21\toolbox'));

3.把代码第20行更改为OPE,数据集一共有三种评价标准OPE、SRE、TRE,其中OPE需要运行1次,SRE需要运行12次,TRE需要运行20次(其中TRE第1次结果为OPE)。我建议选择OPE评价标准,因为只需要运行一次,而且能满足你的绝大部分需求。此外,有的跟踪算法光是OPE一个视频就要跑很久,如果是SRE或者TRE的话,没几天下不来。

evalType='OPE'; %'OPE','SRE','TRE'

运行之后的结果图
在这里插入图片描述


一共是102个项目,一个跟踪算法有51个项目
在这里插入图片描述

注意
1.如果需要调试代码的话,建议在第136和第144行设置两个断点,如果调试到第140行的时候直接跳转到end,说明当前文件不在tracker_benchmark_v1.0目录下,极大可能是进入到了trackers下的某个算法文件夹中,需要手动返回上一级目录;第136行运行结束后进入到相应算法的run_XXX.m,我一般习惯再在run_XXX.m中设置断点进行调试,最好在run_XXX.m最后一部分显示fps(一般在计算fps的下一行添加,如果原文件有显示的话就不必了,如果能显示出fps的话,基本上这个算法是没问题的,如果调试后迟迟没显示fps,就是太慢了)

disp(fps);

2.如果显示empty all表示错误运行,生成empty all的原因是已经存在了对应算法的.mat文件,所以代码在第105行进入到了checkResult.m,在load相应的.mat的文件时发现为空,说明生成了错误的.mat文件,需要手动删除results_OPE_CVPR13目录下的所有.mat文件(这里说明,如果已经生成了.mat文件且没有错误的情况下,再次运行main_running.m不会生成新的.mat文件,如果有需求则需要删除原来的所有.mat文件)

3.如果在调试的过程中能够显示跟踪算法的fps但是一直显示error的话,建议把第157~163行注释掉

五、drawResultBB.m配置
我们把results_OPE_CVPR13中的结果,也就是102个项目复制到results_SRE_CVPR13和results_TRE_CVPR13中(在results_SRE_CVPR13和results_TRE_CVPR13已经存在各个算法的.mat文件,由于我这次举得例子是CXT和CSK算法的对比,所以选择替换,还是根据自己的需求进行更改)

运行drawResultBB.m,在tmp\imgs文件夹下可以看到每个视频序列中每一帧的实时跟踪图,由于我是进行了两种算法的对比,所以有两种框线
在这里插入图片描述
在这里插入图片描述

六、perfPlot.m配置
1.代码的第49~59行是生成曲线图的形状配置,可以是直线、虚线、点等形状,原代码

plotDrawStyle10={   struct('color',[1,0,0],'lineStyle','-'),...
    struct('color',[0,1,0],'lineStyle','--'),...
    struct('color',[0,0,1],'lineStyle',':'),...
    struct('color',[0,0,0],'lineStyle','-'),...%    struct('color',[1,1,0],'lineStyle','-'),...%yellow
    struct('color',[1,0,1],'lineStyle','--'),...%pink
    struct('color',[0,1,1],'lineStyle',':'),...
    struct('color',[0.5,0.5,0.5],'lineStyle','-'),...%gray-25%
    struct('color',[136,0,21]/255,'lineStyle','--'),...%dark red
    struct('color',[255,127,39]/255,'lineStyle',':'),...%orange
    struct('color',[0,162,232]/255,'lineStyle','-'),...%Turquoise
    };

由于我喜欢直线,所以我都改成了直线图(看自己的需求)

plotDrawStyle10={   struct('color',[1,0,0],'lineStyle','-'),...
    struct('color',[0,1,0],'lineStyle','-'),...
    struct('color',[0,0,1],'lineStyle','-'),...
    struct('color',[0,0,0],'lineStyle','-'),...%    struct('color',[1,1,0],'lineStyle','-'),...%yellow
    struct('color',[1,0,1],'lineStyle','-'),...%pink
    struct('color',[0,1,1],'lineStyle','-'),...
    struct('color',[0.5,0.5,0.5],'lineStyle','-'),...%gray-25%
    struct('color',[136,0,21]/255,'lineStyle','-'),...%dark red
    struct('color',[255,127,39]/255,'lineStyle','-'),...%orange
    struct('color',[0,162,232]/255,'lineStyle','-'),...%Turquoise
    };

2.由于我们主要测试OPE评价标准下跟踪算法的性能,所以我们将原代码第103行和第142行改为

103:
evalTypeSet = 'OPE';
142:
evalType = evalTypeSet;%SRE, TRE, OPE

3.为了得到准确率图和成功率图,我们将第105行修改为

rankingType = 'threshold';

在figs\overall文件夹下生成了24张图片,12张准确率图12张成功率图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
全部的流程大概就是这样,如果大家有什么疑问或者本篇博客有什么错误,欢迎大家到下方评论,我有时间一定会及时解答

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值