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