Dimitrios@0
|
1 function [results] = eventDetectionMetrics_eventBased(outputFile,GTFile)
|
Dimitrios@0
|
2
|
Dimitrios@0
|
3 % Load event list from output and ground-truth
|
Dimitrios@0
|
4 [onset,offset,classNames] = loadEventsList(outputFile);
|
Dimitrios@0
|
5 [onsetGT,offsetGT,classNamesGT] = loadEventsList(GTFile);
|
Dimitrios@0
|
6
|
Dimitrios@0
|
7
|
Dimitrios@0
|
8 % Total number of detected and reference events
|
Dimitrios@0
|
9 Ntot = length(onset);
|
Dimitrios@0
|
10 Nref = length(onsetGT);
|
Dimitrios@0
|
11
|
Dimitrios@0
|
12
|
Dimitrios@0
|
13 % Number of correctly transcribed events, onset within a +/-100 ms range
|
Dimitrios@0
|
14 Ncorr = 0;
|
Dimitrios@0
|
15 NcorrOff = 0;
|
Dimitrios@0
|
16 for j=1:length(onsetGT)
|
Dimitrios@0
|
17 for i=1:length(onset)
|
Dimitrios@0
|
18
|
Dimitrios@0
|
19 if( strcmp(classNames{i},classNamesGT{j}) && (abs(onsetGT(j)-onset(i))<=0.1) )
|
Dimitrios@0
|
20 Ncorr = Ncorr+1;
|
Dimitrios@0
|
21
|
Dimitrios@0
|
22 % If offset within a +/-100 ms range or within 50% of ground-truth event's duration
|
Dimitrios@0
|
23 if abs(offsetGT(j) - offset(i)) <= max(0.1, 0.5 * (offsetGT(j) - onsetGT(j)))
|
Dimitrios@0
|
24 NcorrOff = NcorrOff +1;
|
Dimitrios@0
|
25 end;
|
Dimitrios@0
|
26
|
Dimitrios@0
|
27 break; % In order to not evaluate duplicates
|
Dimitrios@0
|
28
|
Dimitrios@0
|
29 end;
|
Dimitrios@0
|
30 end;
|
Dimitrios@0
|
31
|
Dimitrios@0
|
32 end;
|
Dimitrios@0
|
33
|
Dimitrios@0
|
34
|
Dimitrios@0
|
35 % Compute onset-only event-based metrics
|
Dimitrios@0
|
36 Nfp = Ntot-Ncorr;
|
Dimitrios@0
|
37 Nfn = Nref-Ncorr;
|
Dimitrios@0
|
38 Nsubs = min(Nfp,Nfn);
|
Dimitrios@0
|
39 results.Rec = Ncorr/(Nref+eps);
|
Dimitrios@0
|
40 results.Pre = Ncorr/(Ntot+eps);
|
Dimitrios@0
|
41 results.F = 2*((results.Pre*results.Rec)/(results.Pre+results.Rec+eps));
|
Dimitrios@0
|
42 results.AEER= (Nfn+Nfp+Nsubs)/(Nref+eps);
|
Dimitrios@0
|
43
|
Dimitrios@0
|
44
|
Dimitrios@0
|
45 % Compute onset-offset event-based metrics
|
Dimitrios@0
|
46 NfpOff = Ntot-NcorrOff;
|
Dimitrios@0
|
47 NfnOff = Nref-NcorrOff;
|
Dimitrios@0
|
48 NsubsOff = min(NfpOff,NfnOff);
|
Dimitrios@0
|
49 results.RecOff = NcorrOff/(Nref+eps);
|
Dimitrios@0
|
50 results.PreOff = NcorrOff/(Ntot+eps);
|
Dimitrios@0
|
51 results.FOff = 2*((results.PreOff*results.RecOff)/(results.PreOff+results.RecOff+eps));
|
Dimitrios@0
|
52 results.AEEROff= (NfnOff+NfpOff+NsubsOff)/(Nref+eps); |