annotate sceneClassificationMetrics_eval.m @ 2:def2b3fa1450 tip master

corrected README
author Gerard Roma <gerard.roma@upf.edu>
date Mon, 04 Nov 2013 10:46:05 +0000
parents 96b1b8697b60
children
rev   line source
gerard@1 1 % from https://soundsoftware.ac.uk/projects/aasp-d-case-metrics
gerard@1 2
gerard@1 3 function [confusionMat, AccFolds, Acc, Std] = sceneClassificationMetrics_eval(numfolds, foldsGTlist, foldstestlist)
gerard@1 4
gerard@1 5 % Function takes as input a number of folds (numfolds), a text file
gerard@1 6 % containing a list of filenames with the ground truth per fold (foldsGTlist),
gerard@1 7 % and a text file containing a list of filenames with the classification
gerard@1 8 % output (foldstestlist)
gerard@1 9 %
gerard@1 10 % e.g. [confusionMat, AccFolds, Acc, Std] = sceneClassificationMetrics_eval(5, 'foldGTlist.txt', 'foldtestlist.txt');
gerard@1 11
gerard@1 12
gerard@1 13 % Initialize
gerard@1 14 classList = {'bus','busystreet','office','openairmarket','park','quietstreet','restaurant','supermarket','tube','tubestation'};
gerard@1 15 confusionMat = zeros(10,10);
gerard@1 16 AccFolds = zeros(1,numfolds);
gerard@1 17
gerard@1 18
gerard@1 19 % For each fold
gerard@1 20 fid1 = fopen(foldsGTlist,'r+');
gerard@1 21 fid2 = fopen(foldstestlist,'r+');
gerard@1 22 for i=1:numfolds
gerard@1 23
gerard@1 24 % Load classification output and ground truth
gerard@1 25 tline1 = fgetl(fid1);
gerard@1 26 [fileIDGT,classIDGT] = loadClassificationOutput(tline1);
gerard@1 27 tline2 = fgetl(fid2);
gerard@1 28 [fileID,classID] = loadClassificationOutput(tline2);
gerard@1 29
gerard@1 30 % Compute confusion matrix per fold
gerard@1 31 confusionMatTemp = zeros(10,10);
gerard@1 32 for j=1:length(classIDGT)
gerard@1 33 pos = strmatch(fileIDGT{j}, fileID, 'exact');
gerard@1 34 posClassGT = strmatch(classIDGT{j}, classList, 'exact');
gerard@1 35 posClass = strmatch(classID{pos}, classList, 'exact');
gerard@1 36 confusionMatTemp(posClassGT,posClass) = confusionMatTemp(posClassGT,posClass) + 1;
gerard@1 37 end
gerard@1 38
gerard@1 39 % Compute accuracy per fold
gerard@1 40 AccFolds(i) = sum(diag(confusionMatTemp))/sum(sum(confusionMatTemp));
gerard@1 41 confusionMat = confusionMat + confusionMatTemp;
gerard@1 42
gerard@1 43 end
gerard@1 44 fclose(fid1);
gerard@1 45 fclose(fid2);
gerard@1 46
gerard@1 47
gerard@1 48 % Compute global accuracy and std
gerard@1 49 Acc = mean(AccFolds);
gerard@1 50 Std = std(AccFolds);