python画图点会掉,MATLAB点会涨,具体什么原因,我也不知道!!!
最近也是在画图,搞了很久。翻了很多博客,才弄好。哈哈,在很多博客留下了身影,太多人私聊问我怎么画的,就简单写个教程。
先说:MATLAB画图,不需要添加我们python写的算法!!!!!
pysot画图,可以参考这篇。十分详细。
https://blog.csdn.net/weixin_42495721/article/details/110855071
大家看完了大神的博客,若是卡在安装宏包哪里,在调跳回来看这里。
1.补充一点大神的手动安装宏包,打开MiKTeX Console,在下面黄色的地方搜索缺少的宏包,可能要安装好几个包。
2.要是安装完之后如果报了…try的错误,把下面的文件删除重新运行就可以了。 再说一点,不需要每次重启电脑!!!
这里使用的工具就是OTB官方发布的Visual Tracker Benchmark v1.0码源了,下载链接如下:
http://cvlab.hanyang.ac.kr/tracker_benchmark/index.html
进入网站之后点击tracker_benchmark_v1.0.zip(229MB)这个下载。
下载之后点击打开,里面文件的部署是这样的。说明一下荧光笔的标注,是我后续添加的代码,直接下载的代码是没有这两个m文件的。
简单说一下每个文件的作用:
1.util文件:里面包含各种重要的函数。
2.trackers文件:里面包含各种你需要对比的跟踪算法;要简单了解可以trackers.txt文件 。
3.tmp文件:用来存放临时结果或者日志文件的目录。
4.rstEval文件: 包含了很多用于计算跟踪性能或者画出结果的脚本的目录; 5.results文件:存储的每个trackers的跟踪结果的mat文件和perfMat不一样,这个是相对于bounding box的跟踪框数据。
6.perfMat文件:存储最终用于画图的mat文件。
7 initOmit文件 包含由于遮挡或目标超出视野而被省略的用于跟踪初始化的帧的注释 的目录。
8.figs文件:存储的是一些实验跑出的图片,就是各种属性的准确度或者成功率图。
9.anno文件:主要存储的是数据集的bounding box。
10 main_running文件:是用来在测试集上跑跟踪代码的,跑出的结果存在results文件夹中。
11.perfPlot.m用来把测试结果画出图来,就是benchmark网上的图的效果
12.drawResultBB.m用于画每个帧上不同跟踪器的边界框的主函数。
13.hcc文件是txt文件,转化mat文件
好了,简单说完了。说来说去,大家想知道都只有一件事,python运行的跟踪结果怎么在MATLAB上画对比图。直接来干货:
1.大家打开查阅一下anno这个文件夹相信大家下载打开之后,里面的文件名首字母大小写并非一致,这时为了后续的方便处理,大家可以统一下:统一为全小写,或者全大写。注意:有些文件名中间也有大小之分,例如:FaceOcc2.txt。同时,att里面的文件夹的命名也要注意。
**2.打开results这个文件夹
如果大家不需要用官方给的那个CVPR13的文件夹就删掉吧,避免混乱。删掉之后重新创建一个文件“results_OPE_Ours”,在这个文件夹里面放各种跟踪器的原始结果(格式是.mat文件),名字大小写要和anno里面对应上,同时要加上算法的名字。 如下图
3.打开util这个文件夹configSeqs.m这个文件。这个文件是读取数据集。读取的格式如下:
struct('name','Matrix','path','D:\A_graduate_student\code\Siamese-fc\tools\OTB100\Matrix\img\','startFrame',1,'endFrame',100,'nz',4,'ext','jpg','init_rect', [0,0,0,0]),...
注意:
1.name后面的“命名“”要和anno这个文件夹的名字对应上。
2.大家可以看下面那行代码,有四个块构成了OTB100数据集所有的图像内容,不要想的放到一起,会报索引超出的错误。因为每个块的索引应该是不能超过50的。
seqs=[seqIVT,seqVTD,seqOther,seqOTB49_100]; %OTB100
3.记得"img"后面的斜杠,不然是读取不到的。
最后放一个总图:
3.同样是的utils文件夹,这次打开configTrackers.m文件。
4.打开genPerfMat.m这个文件:
这个改动就很少了,只需要改动一个地方。大家在文件里找到switch…这里的代码,改为如下就可以了。说白了:就是这个代码读到我们创建的结果文件。
switch evalType
case 'OPE'
rpAll=['.\results\results_OPE_Ours\'];
%case {'TRE', 'OPE'}
%rpAll=['.\results\results_TRE_CVPR13\'];
end
5.打开perfPlot.m文件
这个要改动地方如下:
1.找到evalTypeSet = {‘SRE’, ‘TRE’, ‘OPE’};因为我们只有一个OPE,所以改为:
evalTypeSet = 'OPE';
2.找到rankingType = ‘AUC’,因为这个只能画一种图。我们要改为:
rankingType = 'threshold';
3.因为我们只用OPE,所以找到 evalType = evalTypeSet{j};%SRE, TRE, OPE改为:
evalType = evalTypeSet;
好了,到了这样我们就可以点击运行perfPlot.m就可以出图了。
*注意:
*这里要说几个坑
1.configTrackers.m这里的算法个数,要和我们创建的results_OPE_Ours里面的算法个数一样,不然会出参数的错误。
2.每次运行完,要是报错了。一定要记得perfMat文件夹里面的overall文件夹里面的删除掉再运行。如下:
6.最后我们还需要,在图中生成标注框
就是这个文件的作用了,drawResultBB.m。这里我们改个路径就可以了:
点击运行,就可以了。结果是:
好了,到这样就结束了。
最后放一段,跟踪结果txt文件转mat文件的MATLAB代码。代码来源
https://blog.csdn.net/laizi_laizi/article/details/104622760
clear all;clc;
root = 'D:\A_graduate_student\code\pysot-toolkit-master\result\OTB100\SRDCF\';
dst = 'D:\A_graduate_student\code\tracker_benchmark_v1.0\tracker_benchmark_v1.0\SRDCF\';
if ~exist(dst, 'dir')
mkdir(dst);
end
% 下面这几句是为了获取一个目录下的txt文件名列表
fileFolder = fullfile(root);
dirOutput = dir(fullfile(fileFolder, '*.txt'));
fileNames={dirOutput.name}; % 1*100 cell
numFile = length(fileNames);
for idxFile = 1:numFile
path = [root fileNames{idxFile}];
res = load(path);
[seq_l, xywh] = size(res);
results{1}.res = res;
results{1}.type = 'rect';
results{1}.len = seq_l;
seq_name = fileNames{idxFile}(1:end-4);
sprintf(['now trans ' seq_name ' from txt to mat'])
% 将需要的结构体结果写成mat格式
save([dst seq_name '_SRDCF.mat'], 'results');
end