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) |