gerard@1: % from https://soundsoftware.ac.uk/projects/aasp-d-case-metrics gerard@1: gerard@1: function [confusionMat, AccFolds, Acc, Std] = sceneClassificationMetrics_eval(numfolds, foldsGTlist, foldstestlist) gerard@1: gerard@1: % Function takes as input a number of folds (numfolds), a text file gerard@1: % containing a list of filenames with the ground truth per fold (foldsGTlist), gerard@1: % and a text file containing a list of filenames with the classification gerard@1: % output (foldstestlist) gerard@1: % gerard@1: % e.g. [confusionMat, AccFolds, Acc, Std] = sceneClassificationMetrics_eval(5, 'foldGTlist.txt', 'foldtestlist.txt'); gerard@1: gerard@1: gerard@1: % Initialize gerard@1: classList = {'bus','busystreet','office','openairmarket','park','quietstreet','restaurant','supermarket','tube','tubestation'}; gerard@1: confusionMat = zeros(10,10); gerard@1: AccFolds = zeros(1,numfolds); gerard@1: gerard@1: gerard@1: % For each fold gerard@1: fid1 = fopen(foldsGTlist,'r+'); gerard@1: fid2 = fopen(foldstestlist,'r+'); gerard@1: for i=1:numfolds gerard@1: gerard@1: % Load classification output and ground truth gerard@1: tline1 = fgetl(fid1); gerard@1: [fileIDGT,classIDGT] = loadClassificationOutput(tline1); gerard@1: tline2 = fgetl(fid2); gerard@1: [fileID,classID] = loadClassificationOutput(tline2); gerard@1: gerard@1: % Compute confusion matrix per fold gerard@1: confusionMatTemp = zeros(10,10); gerard@1: for j=1:length(classIDGT) gerard@1: pos = strmatch(fileIDGT{j}, fileID, 'exact'); gerard@1: posClassGT = strmatch(classIDGT{j}, classList, 'exact'); gerard@1: posClass = strmatch(classID{pos}, classList, 'exact'); gerard@1: confusionMatTemp(posClassGT,posClass) = confusionMatTemp(posClassGT,posClass) + 1; gerard@1: end gerard@1: gerard@1: % Compute accuracy per fold gerard@1: AccFolds(i) = sum(diag(confusionMatTemp))/sum(sum(confusionMatTemp)); gerard@1: confusionMat = confusionMat + confusionMatTemp; gerard@1: gerard@1: end gerard@1: fclose(fid1); gerard@1: fclose(fid2); gerard@1: gerard@1: gerard@1: % Compute global accuracy and std gerard@1: Acc = mean(AccFolds); gerard@1: Std = std(AccFolds);