在OTB工具箱中将以下文件复制替换
这里是genperfMat.m
function genPerfMat(seqs, trackers, evalType, nameTrkAll, perfMatPath)
pathAnno = './anno/';
numTrk = length(trackers);
thresholdSetOverlap = 0:0.05:1;
thresholdSetError = 0:50;
switch evalType
case 'SRE'
rpAll=['.\results\results_SRE\'];
case {'TRE'}
rpAll=['.\results\results_TRE\'];
case {'OPE'}
rpAll=['.\results\results_OPE_CVPR13\'];
end
for idxSeq=1:length(seqs)
s = seqs{idxSeq};
s.len = s.endFrame - s.startFrame + 1;
s.s_frames = cell(s.len,1);
nz = strcat('%0',num2str(s.nz),'d'); %number of zeros in the name of image
for i=1:s.len
image_no = s.startFrame + (i-1);
id = sprintf(nz,image_no);
s.s_frames{i} = strcat(s.path,id,'.',s.ext);
end
rect_anno = dlmread([pathAnno s.name '.txt']);
numSeg = 20;
[subSeqs, subAnno]=splitSeqTRE(s,numSeg,rect_anno);
nameAll=[];
for idxTrk=1:numTrk
t = trackers{idxTrk};
% load([rpAll s.name '_' t.name '.mat'], 'results','coverage','errCenter');
load([rpAll s.name '_' t.name '.mat'])
disp([s.name ' ' t.name]);
aveCoverageAll=[];
aveErrCenterAll=[];
errCvgAccAvgAll = 0;
errCntAccAvgAll = 0;
errCoverageAll = 0;
errCenterAll = 0;
lenALL = 0;
switch evalType
case 'SRE'
idxNum = length(results);
anno=subAnno{1};
case 'TRE'
idxNum = length(results);
case 'OPE'
idxNum = 1;
anno=subAnno{1};
end
successNumOverlap = zeros(idxNum,length(thresholdSetOverlap));
successNumErr = zeros(idxNum,length(thresholdSetError));
for idx = 1:idxNum
res = results{idx};
if strcmp(evalType, 'TRE')
anno=subAnno{idx};
end
len = size(anno,1);
if isempty(res.res)
break;
end
if ~isfield(res,'type')&&isfield(res,'transformType')
res.type = res.transformType;
res.res = res.res';
end
[aveCoverage, aveErrCenter, errCoverage, errCenter] = calcSeqErrRobust(res, anno);
for tIdx=1:length(thresholdSetOverlap)
successNumOverlap(idx,tIdx) = sum(errCoverage >thresholdSetOverlap(tIdx));
end
for tIdx=1:length(thresholdSetError)
successNumErr(idx,tIdx) = sum(errCenter <= thresholdSetError(tIdx));
end
%%%
fpsTrk(idx) = res.fps;
lenALL = lenALL + len;
end
if strcmp(evalType, 'OPE')
aveSuccessRatePlot(idxTrk, idxSeq,:) = successNumOverlap/(lenALL+eps);
aveSuccessRatePlotErr(idxTrk, idxSeq,:) = successNumErr/(lenALL+eps);
%%%
aveFps(idxTrk, idxSeq) = fpsTrk;
else
aveSuccessRatePlot(idxTrk, idxSeq,:) = sum(successNumOverlap)/(lenALL+eps);
aveSuccessRatePlotErr(idxTrk, idxSeq,:) = sum(successNumErr)/(lenALL+eps);
%%%
aveFps(idxTrk, idxSeq) = fpsTrk/idxNum;
end
end
end
%
dataName1=[perfMatPath 'aveSuccessRatePlot_' num2str(numTrk) 'alg_overlap_' evalType '.mat'];
save(dataName1,'aveSuccessRatePlot','nameTrkAll');
dataName2=[perfMatPath 'aveSuccessRatePlot_' num2str(numTrk) 'alg_error_' evalType '.mat'];
aveSuccessRatePlot = aveSuccessRatePlotErr;
save(dataName2,'aveSuccessRatePlot','nameTrkAll');
dataName3=[perfMatPath 'aveFps_' num2str(numTrk) 'alg_' evalType '.mat'];
save(dataName3,'aveFps','nameTrkAll');
这里是perfPlot.m
clear
close all;
clc
addpath('./util');
attPath = '.\anno\att\'; % The folder that contains the annotation files for sequence attributes
% 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'};
%
% attFigName={'illumination_variations' 'out-of-plane_rotation' 'scale_variations' 'occlusions' 'deformation' 'blur' 'abrupt_motion' 'in-plane_rotation' 'out-of-view' 'background_clutter' 'low_resolution'};
%UAV123
attName={'Scale Variation' 'Aspect Ratio Change' 'Low Resolution' 'Fast Motion' 'Full Occlusion' 'Partial Occlusion' 'Out-of-View' 'Background Clutter' 'Illumination Variation' 'Viewpoint Change' 'Camera Motion' 'Similar Object'};
attFigName={'SV' 'ARC' 'LR' 'FM' 'FOC' 'POC' 'OV' 'BC' 'IV' 'VC' 'CM' 'SOB'};
plotDrawStyleAll={ 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
struct('color',[163,73,164]/255,'lineStyle','-'),...%purple %%%%%%%%%%%%%%%%%%%%
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
struct('color',[163,73,164]/255,'lineStyle','--'),...%purple %%%%%%%%%%%%%%%%%%%
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
struct('color',[163,73,164]/255,'lineStyle','-.'),...%purple
};
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
};
seqs=configSeqs;
trackers=configTrackers;
% seqs = seqs(1:10);
% trackers = trackers(1:10);
numSeq=length(seqs);
numTrk=length(trackers);
nameTrkAll=cell(numTrk,1);
for idxTrk=1:numTrk
t = trackers{idxTrk};
nameTrkAll{idxTrk}=t.namePaper;
end
nameSeqAll=cell(numSeq,1);
numAllSeq=zeros(numSeq,1);
att=[];
for idxSeq=1:numSeq
s = seqs{idxSeq};
nameSeqAll{idxSeq}=s.name;
s.len = s.endFrame - s.startFrame + 1;
numAllSeq(idxSeq) = s.len;
att(idxSeq,:)=load([attPath s.name '.txt']);
end
attNum = size(att,2);
figPath = '.\figs\overall\';
perfMatPath = '.\perfMat\overall\';
if ~exist(figPath,'dir')
mkdir(figPath);
end
metricTypeSet = {'error', 'overlap'};
evalTypeSet = {'OPE', 'TRE', 'SRE'};
rankingType = 'AUC';%AUC->success, threshold->precision
rankNum = 14;%number of plots to show
if rankNum == 10
plotDrawStyle=plotDrawStyle10;
else
plotDrawStyle=plotDrawStyleAll;
end
thresholdSetOverlap = 0:0.05:1;
thresholdSetError = 0:50;
for i=1:length(metricTypeSet)
metricType = metricTypeSet{i};%error,overlap
switch metricType
case 'overlap'
thresholdSet = thresholdSetOverlap;
rankIdx = 11;
xLabelName = 'Overlap threshold';
yLabelName = 'Success rate';
case 'error'
thresholdSet = thresholdSetError;
rankIdx = 21;
xLabelName = 'Location error threshold';
yLabelName = 'Precision rate';
end
if strcmp(metricType,'error')&strcmp(rankingType,'AUC')
continue;
end
tNum = length(thresholdSet);
for j=1:length(evalTypeSet)
evalType = evalTypeSet{j};%SRE, TRE, OPE
plotType = [metricType '_' evalType];
switch metricType
case 'overlap'
titleName = ['Success plots of ' evalType];
case 'error'
titleName = ['Precision plots of ' evalType];
end
dataName = [perfMatPath 'aveSuccessRatePlot_' num2str(numTrk) 'alg_' plotType '.mat'];
%%%
dataNameFps = [perfMatPath 'aveFps_' num2str(numTrk) 'alg_' evalType '.mat'];
% If the performance Mat file, dataName, does not exist, it will call
% genPerfMat to generate the file.
if ~exist(dataName)
genPerfMat(seqs, trackers, evalType, nameTrkAll, perfMatPath);
end
load(dataName);
%%%
load(dataNameFps);
numTrk = size(aveSuccessRatePlot,1);
if rankNum > numTrk | rankNum <0
rankNum = numTrk;
end
figName= [figPath 'quality_plot_' plotType '_' rankingType];
idxSeqSet = 1:length(seqs);
% draw and save the overall performance plot
plotDrawSave(numTrk,plotDrawStyle,aveSuccessRatePlot,aveFps,idxSeqSet,rankNum,rankingType,rankIdx,nameTrkAll,thresholdSet,titleName, xLabelName,yLabelName,figName,metricType);
% draw and save the performance plot for each attribute
attTrld = 0;
for attIdx=1:attNum
idxSeqSet=find(att(:,attIdx)>attTrld);
if length(idxSeqSet) < 2
continue;
end
disp([attName{attIdx} ' ' num2str(length(idxSeqSet))])
figName=[figPath attFigName{attIdx} '_' plotType '_' rankingType];
titleName = ['Plots of ' evalType ': ' attName{attIdx} ' (' num2str(length(idxSeqSet)) ')'];
switch metricType
case 'overlap'
titleName = ['Success plots of ' evalType ' - ' attName{attIdx} ' (' num2str(length(idxSeqSet)) ')'];
case 'error'
titleName = ['Precision plots of ' evalType ' - ' attName{attIdx} ' (' num2str(length(idxSeqSet)) ')'];
end
plotDrawSave(numTrk,plotDrawStyle,aveSuccessRatePlot,aveFps,idxSeqSet,rankNum,rankingType,rankIdx,nameTrkAll,thresholdSet,titleName, xLabelName,yLabelName,figName,metricType);
end
end
end
这里是plotDrawSave.m
function plotDrawSave(numTrk,plotDrawStyle,aveSuccessRatePlot,aveFps,idxSeqSet,rankNum,rankingType,rankIdx,nameTrkAll,thresholdSet,titleName,xLabelName,yLabelName,figName,metricType)
aveSuccessRate11=[];
scrsz = get(0,'ScreenSize');
for idxTrk=1:numTrk
%each row is the sr plot of one sequence
tmp=aveSuccessRatePlot(idxTrk, idxSeqSet,:);
aa=reshape(tmp,[length(idxSeqSet),size(aveSuccessRatePlot,3)]);
aa=aa(sum(aa,2)>eps,:);
bb=mean(aa);
switch rankingType
case 'AUC'
perf(idxTrk) = mean(bb);
case 'threshold'
perf(idxTrk) = bb(rankIdx);
end
end
[tmp,indexSort]=sort(perf,'descend');
i=1;
AUC=[];
fontSize = 16;
fontSizeLegend = 10;
figure1 = figure;
axes1 = axes('Parent',figure1,'FontSize',14);
%%%
fpsTrk = mean(aveFps,2);
for idxTrk=indexSort(1:rankNum)
tmp=aveSuccessRatePlot(idxTrk,idxSeqSet,:);
aa=reshape(tmp,[length(idxSeqSet),size(aveSuccessRatePlot,3)]);
aa=aa(sum(aa,2)>eps,:);
bb=mean(aa);
switch rankingType
case 'AUC'
score = mean(bb);
tmp=sprintf('%.3f', score);
case 'threshold'
score = bb(rankIdx);
tmp=sprintf('%.3f', score);
end
%%%
fps = sprintf('%.2f', fpsTrk(idxTrk));
tmpName{i} = [nameTrkAll{idxTrk} ' [' tmp ']-' fps 'fps'];
% tmpName{i} = [nameTrkAll{idxTrk} ' [' tmp ']'];
h(i) = plot(thresholdSet,bb,'color',plotDrawStyle{i}.color, 'lineStyle', plotDrawStyle{i}.lineStyle,'lineWidth', 4,'Parent',axes1);
hold on
i=i+1;
end
legend1=legend(tmpName,'Interpreter', 'none','fontsize',fontSizeLegend);
title(titleName,'fontsize',fontSize);
xlabel(xLabelName,'fontsize',fontSize);
ylabel(yLabelName,'fontsize',fontSize);
% legend1=legend(tmpName(1:round(length(tmpName)/2)),'Interpreter', 'none','fontsize',fontSizeLegend,'Location','NorthWest');
% legend2=legend(tmpName(round(length(tmpName)/2)+1:end),'Interpreter', 'none','fontsize',fontSizeLegend,'Location','SouthEast');
%for too many
%plots--------------------------------------------------------------
% switch metricType
% case 'error'
% ah1 = gca;
% % legend1=legend(ah1,h(1:round(length(tmpName)/2)),tmpName(1:round(length(tmpName)/2)),'Interpreter', 'none','fontsize',fontSizeLegend,'Location','NorthWest');
% legend1=legend(ah1,h(1:5),tmpName(1:5),'Interpreter', 'none','fontsize',fontSizeLegend,'Location','NorthWest');
%
% title(titleName,'fontsize',fontSize);
% xlabel(xLabelName,'fontsize',fontSize);
% ylabel(yLabelName,'fontsize',fontSize);
%
% ah2=axes('position',get(gca,'position'), 'visible','off');
% legend2=legend(ah2,h(6:end),tmpName(6:end),'Interpreter', 'none','fontsize',fontSizeLegend,'Location','SouthEast');
% case 'overlap'
% ah1 = gca;
% legend1=legend(ah1,h(1:5),tmpName(1:5),'Interpreter', 'none','fontsize',fontSizeLegend,'Location','NorthEast');
% title(titleName,'fontsize',fontSize);
% xlabel(xLabelName,'fontsize',fontSize);
% ylabel(yLabelName,'fontsize',fontSize);
%
% ah2=axes('position',get(gca,'position'), 'visible','off');
% legend2=legend(ah2,h(6:end),tmpName(6:end),'Interpreter', 'none','fontsize',fontSizeLegend,'Location','SouthWest');
% end
% switch metricType
% case 'error'
% ah1 = gca;
% % legend1=legend(ah1,h(1:round(length(tmpName)/2)),tmpName(1:round(length(tmpName)/2)),'Interpreter', 'none','fontsize',fontSizeLegend,'Location','NorthWest');
% % legend1=legend(ah1,h(1:round(length(tmpName)/2)),tmpName(1:round(length(tmpName)/2)),'Interpreter', 'none','fontsize',fontSizeLegend,'Position',[0.55 0.1 0.1 0.4]);
%
% legend1=legend(ah1,h,tmpName,'Interpreter', 'none','fontsize',fontSizeLegend,'Location','SouthEast');
% title(titleName,'fontsize',fontSize);
% xlabel(xLabelName,'fontsize',fontSize);
% ylabel(yLabelName,'fontsize',fontSize);
%
% % ah2=axes('position',get(gca,'position'), 'visible','off');
% % legend2=legend(ah2,h(round(length(tmpName)/2)+1:end),tmpName(round(length(tmpName)/2)+1:end),'Interpreter', 'none','fontsize',fontSizeLegend,'Location','SouthEast');
% case 'overlap'
% ah1 = gca;
% % legend1=legend(ah1,h(1:round(length(tmpName)/2)),tmpName(1:round(length(tmpName)/2)),'Interpreter', 'none','fontsize',fontSizeLegend,'Location','NorthEast');
% legend1=legend(ah1,h,tmpName,'Interpreter', 'none','fontsize',fontSizeLegend,'Location','SouthWest');
% title(titleName,'fontsize',fontSize);
% xlabel(xLabelName,'fontsize',fontSize);
% ylabel(yLabelName,'fontsize',fontSize);
%
% % ah2=axes('position',get(gca,'position'), 'visible','off');
% % legend2=legend(ah2,h(round(length(tmpName)/2)+1:end),tmpName(round(length(tmpName)/2)+1:end),'Interpreter', 'none','fontsize',fontSizeLegend,'Location','SouthWest');
% end
%
% axes('fontsize',14);
% set(legend1,'FontSize',fontSizeLegend);
% set(legend2,'FontSize',fontSizeLegend);
% set(legend1,'Interpreter','none',...
% 'Position',[0.800694444444435 0.117313517441224 0.0984375 0.521055753262159],...
% 'FontSize',fontSizeLegend);
hold off
saveas(gcf,figName,'png');
end