annotate metrics_computation.m @ 1:3ea8ed09af0f tip

additional clarifications
author Dimitrios Giannoulis
date Wed, 13 Mar 2013 11:57:24 +0000
parents 22b10c5b72e8
children
rev   line source
Dimitrios@0 1 % Metrics computations
Dimitrios@0 2 % This script assumes the existence of folders "results_<annotator>" ,
Dimitrios@0 3 % that the system outputs are text files saved in folders
Dimitrios@0 4 % "Outputs_<annotator>" and their names are of the form:
Dimitrios@0 5 % 'Outputs_(bdm/sid)/XX/scriptXX<...>.txt
Dimitrios@0 6 % where <...> is: _Bases_X-XX_thres_XXXX_filt_X
Dimitrios@0 7
Dimitrios@0 8 clear all
Dimitrios@0 9
Dimitrios@0 10 % PARAMETERS
Dimitrios@0 11 ANOT_FLAG = 1; % possible values: 1 or 2
Dimitrios@0 12
Dimitrios@0 13 % INITIALIZATIONS
Dimitrios@0 14
Dimitrios@0 15 %Annotations
Dimitrios@0 16 Annotators = {'_bdm', '_sid'};
Dimitrios@0 17
Dimitrios@0 18 % Path to GT annotations
Dimitrios@0 19 anotpath = ['Development_Set/annotation' num2str(ANOT_FLAG) '/Processed/'];
Dimitrios@0 20
Dimitrios@0 21 % Collect all output
Dimitrios@0 22 AllOutputs = dir(['Outputs' Annotators{ANOT_FLAG} '/01/*txt']);
Dimitrios@0 23
Dimitrios@0 24 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Dimitrios@0 25
Dimitrios@0 26 % Results
Dimitrios@0 27 results = cell(length(AllOutputs),3);
Dimitrios@0 28
Dimitrios@0 29 for i = 1 : length(AllOutputs)
Dimitrios@0 30 outputFile = ['Outputs' Annotators{ANOT_FLAG} '/01/' AllOutputs(i).name];
Dimitrios@0 31 GTFile = [anotpath AllOutputs(i).name(1:8) Annotators{ANOT_FLAG} '.txt'];
Dimitrios@0 32 % Compute a metric (choose from the 3 below
Dimitrios@0 33 [resultsEB] = eventDetectionMetrics_eventBased(outputFile,GTFile);
Dimitrios@0 34 [resultsCWEB] = eventDetectionMetrics_classWiseEventBased(outputFile,GTFile);
Dimitrios@0 35 [resultsFB] = eventDetectionMetrics_frameBased(outputFile,GTFile);
Dimitrios@0 36 resultname = ['results_' AllOutputs(i).name(1:end-4)];
Dimitrios@0 37 results{i,1} = resultsEB;
Dimitrios@0 38 results{i,1}.eval = 'EB';
Dimitrios@0 39 results{i,2} = resultsCWEB;
Dimitrios@0 40 results{i,2}.eval = 'CWEB';
Dimitrios@0 41 results{i,3} = resultsFB;
Dimitrios@0 42 results{i,3}.eval = 'FB';
Dimitrios@0 43 results{i,1}.name = resultname;
Dimitrios@0 44 results{i,2}.name = resultname;
Dimitrios@0 45 results{i,3}.name = resultname;
Dimitrios@0 46 end
Dimitrios@0 47 save(['results' Annotators{ANOT_FLAG} '/results01.mat'], 'results');
Dimitrios@0 48 clear results
Dimitrios@0 49 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Dimitrios@0 50 % Collect all output
Dimitrios@0 51 AllOutputs = dir(['Outputs' Annotators{ANOT_FLAG} '/02/*txt']);
Dimitrios@0 52
Dimitrios@0 53 % Results
Dimitrios@0 54 results = cell(length(AllOutputs),3);
Dimitrios@0 55
Dimitrios@0 56 for i = 1 : length(AllOutputs)
Dimitrios@0 57 outputFile = ['Outputs' Annotators{ANOT_FLAG} '/02/' AllOutputs(i).name];
Dimitrios@0 58 GTFile = [anotpath AllOutputs(i).name(1:8) Annotators{ANOT_FLAG} '.txt'];
Dimitrios@0 59 % Compute a metric (choose from the 3 below
Dimitrios@0 60 [resultsEB] = eventDetectionMetrics_eventBased(outputFile,GTFile);
Dimitrios@0 61 [resultsCWEB] = eventDetectionMetrics_classWiseEventBased(outputFile,GTFile);
Dimitrios@0 62 [resultsFB] = eventDetectionMetrics_frameBased(outputFile,GTFile);
Dimitrios@0 63 resultname = ['results_' AllOutputs(i).name(1:end-4)];
Dimitrios@0 64 results{i,1} = resultsEB;
Dimitrios@0 65 results{i,1}.eval = 'EB';
Dimitrios@0 66 results{i,2} = resultsCWEB;
Dimitrios@0 67 results{i,2}.eval = 'CWEB';
Dimitrios@0 68 results{i,3} = resultsFB;
Dimitrios@0 69 results{i,3}.eval = 'FB';
Dimitrios@0 70 results{i,1}.name = resultname;
Dimitrios@0 71 results{i,2}.name = resultname;
Dimitrios@0 72 results{i,3}.name = resultname;
Dimitrios@0 73 end
Dimitrios@0 74 save(['results' Annotators{ANOT_FLAG} '/results02.mat'], 'results');
Dimitrios@0 75 clear results
Dimitrios@0 76 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Dimitrios@0 77 % Collect all output
Dimitrios@0 78 AllOutputs = dir(['Outputs' Annotators{ANOT_FLAG} '/03/*txt']);
Dimitrios@0 79
Dimitrios@0 80 % Results
Dimitrios@0 81 results = cell(length(AllOutputs),3);
Dimitrios@0 82
Dimitrios@0 83 for i = 1 : length(AllOutputs)
Dimitrios@0 84 outputFile = ['Outputs' Annotators{ANOT_FLAG} '/03/' AllOutputs(i).name];
Dimitrios@0 85 GTFile = [anotpath AllOutputs(i).name(1:8) Annotators{ANOT_FLAG} '.txt'];
Dimitrios@0 86 % Compute a metric (choose from the 3 below
Dimitrios@0 87 [resultsEB] = eventDetectionMetrics_eventBased(outputFile,GTFile);
Dimitrios@0 88 [resultsCWEB] = eventDetectionMetrics_classWiseEventBased(outputFile,GTFile);
Dimitrios@0 89 [resultsFB] = eventDetectionMetrics_frameBased(outputFile,GTFile);
Dimitrios@0 90 resultname = ['results_' AllOutputs(i).name(1:end-4)];
Dimitrios@0 91 results{i,1} = resultsEB;
Dimitrios@0 92 results{i,1}.eval = 'EB';
Dimitrios@0 93 results{i,2} = resultsCWEB;
Dimitrios@0 94 results{i,2}.eval = 'CWEB';
Dimitrios@0 95 results{i,3} = resultsFB;
Dimitrios@0 96 results{i,3}.eval = 'FB';
Dimitrios@0 97 results{i,1}.name = resultname;
Dimitrios@0 98 results{i,2}.name = resultname;
Dimitrios@0 99 results{i,3}.name = resultname;
Dimitrios@0 100 end
Dimitrios@0 101 save(['results' Annotators{ANOT_FLAG} '/results03.mat'], 'results');
Dimitrios@0 102 clear results
Dimitrios@0 103 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Dimitrios@0 104 % Load all results
Dimitrios@0 105 res = cell(1);
Dimitrios@0 106 load(['results' Annotators{ANOT_FLAG} '/results01.mat'])
Dimitrios@0 107 r1 = results;
Dimitrios@0 108 load(['results' Annotators{ANOT_FLAG} '/results02.mat'])
Dimitrios@0 109 r2 = results;
Dimitrios@0 110 load(['results' Annotators{ANOT_FLAG} '/results03.mat'])
Dimitrios@0 111 r3 = results;
Dimitrios@0 112
Dimitrios@1 113 % Calculate mean F-measure values for all development set audio files:
Dimitrios@0 114 Fmeasure_EB = []; Fmeasure_CWEB = []; Fmeasure_FB = [];
Dimitrios@0 115 for i=1:size(results,1)
Dimitrios@0 116 Fmeasure_EB(i)=(r1{i,1}.F+r2{i,1}.F+r3{i,1}.F)/3;
Dimitrios@0 117 Fmeasure_CWEB(i)=(r1{i,2}.F+r2{i,2}.F+r3{i,2}.F)/3;
Dimitrios@0 118 Fmeasure_FB(i)=(r1{i,3}.F+r2{i,3}.F+r3{i,3}.F)/3;
Dimitrios@0 119 end
Dimitrios@0 120
Dimitrios@1 121 % Choose the combination of system parameters that maximizes each metric
Dimitrios@0 122 [valEB, posEB] = max(Fmeasure_EB);
Dimitrios@0 123 [valCWEB, posCWEB] = max(Fmeasure_CWEB);
Dimitrios@0 124 [valFB, posFB] = max(Fmeasure_FB);
Dimitrios@0 125
Dimitrios@1 126 % Collect the names of the system versions that produced the maximum F-measure
Dimitrios@1 127 % for each metric
Dimitrios@0 128 res = {results{posEB,1}.name; valEB; results{posCWEB,2}.name; valCWEB ...
Dimitrios@0 129 ;results{posFB,3}.name; valFB};
Dimitrios@0 130
Dimitrios@0 131 % THE FOLLOWING COMPUTES ALL THE METRICS FOR EACH EVAL CASE AND THE OPTIMAL
Dimitrios@0 132 % PARAMETERS
Dimitrios@1 133 % Event Based 'EB'
Dimitrios@0 134 all_res_EB = {(r1{posEB,1}.Rec+r2{posEB,1}.Rec+r3{posEB,1}.Rec)/3;
Dimitrios@0 135 (r1{posEB,1}.Pre+r2{posEB,1}.Pre+r3{posEB,1}.Pre)/3;
Dimitrios@0 136 (r1{posEB,1}.F+r2{posEB,1}.F+r3{posEB,1}.F)/3;
Dimitrios@0 137 (r1{posEB,1}.AEER+r2{posEB,1}.AEER+r3{posEB,1}.AEER)/3;
Dimitrios@0 138 (r1{posEB,1}.RecOff+r2{posEB,1}.RecOff+r3{posEB,1}.RecOff)/3;
Dimitrios@0 139 (r1{posEB,1}.PreOff+r2{posEB,1}.PreOff+r3{posEB,1}.PreOff)/3;
Dimitrios@0 140 (r1{posEB,1}.FOff+r2{posEB,1}.FOff+r3{posEB,1}.FOff)/3;
Dimitrios@0 141 (r1{posEB,1}.AEEROff+r2{posEB,1}.AEEROff+r3{posEB,1}.AEEROff)/3};
Dimitrios@1 142 % Class-wise Event Based 'CWEB'
Dimitrios@0 143 all_res_CWEB = {(r1{posCWEB,2}.Rec+r2{posCWEB,2}.Rec+r3{posCWEB,2}.Rec)/3;
Dimitrios@0 144 (r1{posCWEB,2}.Pre+r2{posCWEB,2}.Pre+r3{posCWEB,2}.Pre)/3;
Dimitrios@0 145 (r1{posCWEB,2}.F+r2{posCWEB,2}.F+r3{posCWEB,2}.F)/3;
Dimitrios@0 146 (r1{posCWEB,2}.AEER+r2{posCWEB,2}.AEER+r3{posCWEB,2}.AEER)/3;
Dimitrios@0 147 (r1{posCWEB,2}.RecOff+r2{posCWEB,2}.RecOff+r3{posCWEB,2}.RecOff)/3;
Dimitrios@0 148 (r1{posCWEB,2}.PreOff+r2{posCWEB,2}.PreOff+r3{posCWEB,2}.PreOff)/3;
Dimitrios@0 149 (r1{posCWEB,2}.FOff+r2{posCWEB,2}.FOff+r3{posCWEB,2}.FOff)/3;
Dimitrios@0 150 (r1{posCWEB,2}.AEEROff+r2{posCWEB,2}.AEEROff+r3{posCWEB,2}.AEEROff)/3};
Dimitrios@1 151 % Frame Based 'FB'
Dimitrios@0 152 all_res_FB = {(r1{posFB,3}.Rec+r2{posFB,3}.Rec+r3{posFB,3}.Rec)/3;
Dimitrios@0 153 (r1{posFB,3}.Pre+r2{posFB,3}.Pre+r3{posFB,3}.Pre)/3;
Dimitrios@0 154 (r1{posFB,3}.F+r2{posFB,3}.F+r3{posFB,3}.F)/3;
Dimitrios@0 155 (r1{posFB,3}.AEER+r2{posFB,3}.AEER+r3{posFB,3}.AEER)/3;
Dimitrios@1 156 '-';
Dimitrios@1 157 '-';
Dimitrios@1 158 '-';
Dimitrios@1 159 '-';};
Dimitrios@1 160
Dimitrios@1 161 COMP_METRICS = [{'Rec';'Pre';'F';'AEER';'RecOff';'PreOff';'FOff';'AEEROff'},all_res_EB, all_res_CWEB, all_res_FB];
Dimitrios@1 162
Dimitrios@1 163 disp('Computed metrics for the Event Based (EB) [column 2],')
Dimitrios@1 164 disp('the Class-wise Event Based (CWEB) [column 3],')
Dimitrios@1 165 disp('and the Frame Based (FB) [column 4]')
Dimitrios@1 166 disp(COMP_METRICS)
Dimitrios@1 167
Dimitrios@1 168 % system version names
Dimitrios@1 169 % disp(res)