Dimitrios@0: function [results] = eventDetectionMetrics_frameBased(outputFile,GTFile) Dimitrios@0: Dimitrios@0: % Load event list from output and ground-truth Dimitrios@0: [onset,offset,classNames] = loadEventsList(outputFile); Dimitrios@0: [onsetGT,offsetGT,classNamesGT] = loadEventsList(GTFile); Dimitrios@0: Dimitrios@0: Dimitrios@0: % Convert event list into frame-based representation (10msec resolution) Dimitrios@0: [eventRoll] = convertEventListToEventRoll(onset,offset,classNames); Dimitrios@0: [eventRollGT] = convertEventListToEventRoll(onsetGT,offsetGT,classNamesGT); Dimitrios@0: Dimitrios@0: Dimitrios@0: % Fix durations of eventRolls Dimitrios@0: if (size(eventRollGT,1) > size(eventRoll,1)) eventRoll = [eventRoll; zeros(size(eventRollGT,1)-size(eventRoll,1),16)]; end; Dimitrios@0: if (size(eventRoll,1) > size(eventRollGT,1)) eventRollGT = [eventRollGT; zeros(size(eventRoll,1)-size(eventRollGT,1),16)]; end; Dimitrios@0: Dimitrios@0: Dimitrios@0: % Compute frame-based metrics Dimitrios@0: Nref = sum(sum(eventRollGT)); Dimitrios@0: Ntot = sum(sum(eventRoll)); Dimitrios@0: Ntp = sum(sum(eventRoll+eventRollGT > 1)); Dimitrios@0: Nfp = sum(sum(eventRoll-eventRollGT > 0)); Dimitrios@0: Nfn = sum(sum(eventRollGT-eventRoll > 0)); Dimitrios@0: Nsubs = min(Nfp,Nfn); Dimitrios@0: Dimitrios@0: Dimitrios@0: results.Rec = Ntp/(Nref+eps); Dimitrios@0: results.Pre = Ntp/(Ntot+eps); Dimitrios@0: results.F = 2*((results.Pre*results.Rec)/(results.Pre+results.Rec+eps)); Dimitrios@0: results.AEER = (Nfn+Nfp+Nsubs)/(Nref+eps);