annotate scene_classification/sceneClassificationMetrics_eval.m @ 10:507300d2ed66 tip

merge
author Dan Stowell <dan.stowell@elec.qmul.ac.uk>
date Thu, 10 Oct 2013 09:18:47 +0100
parents dcaf371d33e3
children
rev   line source
emmanouil@0 1 function [confusionMat, AccFolds, Acc, Std] = sceneClassificationMetrics_eval(numfolds, foldsGTlist, foldstestlist)
emmanouil@0 2
emmanouil@0 3 % Function takes as input a number of folds (numfolds), a text file
emmanouil@0 4 % containing a list of filenames with the ground truth per fold (foldsGTlist),
emmanouil@0 5 % and a text file containing a list of filenames with the classification
emmanouil@0 6 % output (foldstestlist)
emmanouil@0 7 %
emmanouil@0 8 % e.g. [confusionMat, AccFolds, Acc, Std] = sceneClassificationMetrics_eval(5, 'foldGTlist.txt', 'foldtestlist.txt');
emmanouil@0 9
emmanouil@0 10
emmanouil@0 11 % Initialize
emmanouil@0 12 classList = {'bus','busystreet','office','openairmarket','park','quietstreet','restaurant','supermarket','tube','tubestation'};
emmanouil@0 13 confusionMat = zeros(10,10);
emmanouil@0 14 AccFolds = zeros(1,numfolds);
emmanouil@0 15
emmanouil@0 16 % For each fold
dan@2 17 fid1 = fopen(foldsGTlist,'r');
dan@2 18 fid2 = fopen(foldstestlist,'r');
emmanouil@0 19 for i=1:numfolds
emmanouil@0 20
emmanouil@0 21 % Load classification output and ground truth
emmanouil@0 22 tline1 = fgetl(fid1);
emmanouil@0 23 [fileIDGT,classIDGT] = loadClassificationOutput(tline1);
emmanouil@0 24 tline2 = fgetl(fid2);
emmanouil@0 25 [fileID,classID] = loadClassificationOutput(tline2);
emmanouil@0 26
emmanouil@0 27 % Compute confusion matrix per fold
emmanouil@0 28 confusionMatTemp = zeros(10,10);
emmanouil@0 29 for j=1:length(classIDGT)
emmanouil@0 30 pos = strmatch(fileIDGT{j}, fileID, 'exact');
emmanouil@0 31 posClassGT = strmatch(classIDGT{j}, classList, 'exact');
emmanouil@0 32 posClass = strmatch(classID{pos}, classList, 'exact');
emmanouil@0 33 confusionMatTemp(posClassGT,posClass) = confusionMatTemp(posClassGT,posClass) + 1;
emmanouil@0 34 end
emmanouil@0 35
emmanouil@0 36 % Compute accuracy per fold
emmanouil@0 37 AccFolds(i) = sum(diag(confusionMatTemp))/sum(sum(confusionMatTemp));
emmanouil@0 38 confusionMat = confusionMat + confusionMatTemp;
emmanouil@0 39
emmanouil@0 40 end
emmanouil@0 41 fclose(fid1);
emmanouil@0 42 fclose(fid2);
emmanouil@0 43
emmanouil@0 44
emmanouil@0 45 % Compute global accuracy and std
emmanouil@0 46 Acc = mean(AccFolds);
emmanouil@0 47 Std = std(AccFolds);