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);
|