Dimitrios@0
|
1 function [] = training_variant(ANOT_FLAG, save_flag)
|
Dimitrios@0
|
2 % Training Algorithm (Variant) for the Event Detection Task
|
Dimitrios@0
|
3 % Learn one basis per recording for each a Class from Training Set
|
Dimitrios@0
|
4 % Instead of Collating all recordings of a specific Class from Training Set
|
Dimitrios@0
|
5 %
|
Dimitrios@0
|
6
|
Dimitrios@0
|
7
|
Dimitrios@0
|
8 % PARAMETERS:
|
Dimitrios@0
|
9 %
|
Dimitrios@0
|
10 % numBases
|
Dimitrios@0
|
11 % (fixed) to 20individual: 1 basis per recorded training sample
|
Dimitrios@0
|
12 %
|
Dimitrios@0
|
13 % ANOT_FLAG
|
Dimitrios@0
|
14 % Choose Annotation: 1 or 2
|
Dimitrios@0
|
15 % save_flag
|
Dimitrios@0
|
16 % Flag for saving the output Dictionary
|
Dimitrios@0
|
17 % 1: ON, 0: OFF
|
Dimitrios@0
|
18
|
Dimitrios@0
|
19 % PARAMETER DEFAULTS:
|
Dimitrios@0
|
20 %
|
Dimitrios@0
|
21 if ~exist('save_flag','var') || isempty(save_flag), save_flag = 1; end
|
Dimitrios@0
|
22 if ~exist('ANOT_FLAG','var') || isempty(ANOT_FLAG), ANOT_FLAG = 1; end
|
Dimitrios@0
|
23
|
Dimitrios@0
|
24 % INITIALISATIONS
|
Dimitrios@0
|
25
|
Dimitrios@0
|
26 if isempty(find([1, 2] == ANOT_FLAG))
|
Dimitrios@0
|
27 error('ANNOT_FLAG can be either 1 or 2 (depending on chosen annotation')
|
Dimitrios@0
|
28 end
|
Dimitrios@0
|
29
|
Dimitrios@0
|
30 %Annotations
|
Dimitrios@0
|
31 Annotators = {'_bdm', '_sid'};
|
Dimitrios@0
|
32
|
Dimitrios@0
|
33 % addpath('Training_Set\');
|
Dimitrios@0
|
34 % datapath = './singlesounds_stereo';
|
Dimitrios@0
|
35 datapath = 'Training_Set/singlesounds_stereo';
|
Dimitrios@0
|
36 anotpath = ['Training_Set/Annotation' num2str(ANOT_FLAG) '/'];
|
Dimitrios@0
|
37
|
Dimitrios@0
|
38 % List of all the Audio files:
|
Dimitrios@0
|
39 AudioList = dir([datapath '/*wav']);
|
Dimitrios@0
|
40
|
Dimitrios@0
|
41 % Get the sampling frequency from the 1st recorded sample
|
Dimitrios@0
|
42 [~,Fs] = wavread([datapath '/' AudioList(1).name]);
|
Dimitrios@0
|
43
|
Dimitrios@0
|
44 Classes = {'alert','clearthroat','cough','doorslam','drawer','keyboard','keyes',...
|
Dimitrios@0
|
45 'knock','laughter','mouse','pageturn','pendrop','phone','printer',...
|
Dimitrios@0
|
46 'speech','switch'};
|
Dimitrios@0
|
47
|
Dimitrios@0
|
48 % LEARNING
|
Dimitrios@0
|
49 % Learn Bases for every Class
|
Dimitrios@0
|
50
|
Dimitrios@0
|
51 % Initialise Dictionary
|
Dimitrios@0
|
52 Dict = [];
|
Dimitrios@0
|
53
|
Dimitrios@0
|
54
|
Dimitrios@0
|
55 % Loading signals for each of the 16 classes
|
Dimitrios@0
|
56 for i = 1 : 16
|
Dimitrios@0
|
57
|
Dimitrios@0
|
58 % Take all 20 train instances for each class
|
Dimitrios@0
|
59 for k = 1 : 20
|
Dimitrios@0
|
60 % Find path to annotation
|
Dimitrios@0
|
61 AnotPath = [AudioList((i-1)*20+k).name(1:end-4) Annotators{ANOT_FLAG} '.txt'];
|
Dimitrios@0
|
62 AudioPath = [AudioList((i-1)*20+k).name];
|
Dimitrios@0
|
63 % Read The annotation from the text file:
|
Dimitrios@0
|
64 % beg: beggining sample
|
Dimitrios@0
|
65 % fin: ending sample
|
Dimitrios@0
|
66 [beg,fin] = textread(['./Training_Set/Annotation' num2str(ANOT_FLAG) '/' AnotPath],'%f%f');
|
Dimitrios@0
|
67 % Read the audio for the Event, making sure no overflow occurs
|
Dimitrios@0
|
68 [x] = wavread([datapath '/' AudioPath]);
|
Dimitrios@0
|
69 Max_sample = length(x);
|
Dimitrios@0
|
70 [xnow,fs] = wavread([datapath '/' AudioPath] ,[max(round(beg*Fs),1) min(round(fin*Fs),Max_sample)]);
|
Dimitrios@0
|
71 xnow = sum(xnow,2)/2;
|
Dimitrios@0
|
72 if fs ~= Fs
|
Dimitrios@0
|
73 error('The sampling frequrncy is not the sam for all recordings!');
|
Dimitrios@0
|
74 end
|
Dimitrios@0
|
75 % Normalize individual segments to avoid over-energetic transients
|
Dimitrios@0
|
76 % in the audio streams per class.
|
Dimitrios@0
|
77 xnow = xnow./std(xnow);
|
Dimitrios@0
|
78 [i k]
|
Dimitrios@0
|
79 [intCQT] = computeCQT(xnow);
|
Dimitrios@0
|
80 cqt_rep = intCQT(:,round(1:7.1128:size(intCQT,2)));
|
Dimitrios@0
|
81
|
Dimitrios@0
|
82 [W,H,errs,vout] = nmf_beta(cqt_rep,1,'beta',1);
|
Dimitrios@0
|
83 Dict = [Dict W];
|
Dimitrios@0
|
84 end
|
Dimitrios@0
|
85 end
|
Dimitrios@0
|
86 % CLear Uneeded variables
|
Dimitrios@0
|
87 clear x xnow;
|
Dimitrios@0
|
88
|
Dimitrios@0
|
89
|
Dimitrios@0
|
90 %eval(sprintf('Dict_%d=Dict;',numBases));
|
Dimitrios@0
|
91 if save_flag == 1
|
Dimitrios@0
|
92 savefile = ['Dictionaries' Annotators{ANOT_FLAG} '/Dict20individual.mat'];
|
Dimitrios@0
|
93 save(savefile,'Dict');
|
Dimitrios@0
|
94 end
|
Dimitrios@0
|
95
|
Dimitrios@0
|
96 % Clear Unneeded variables
|
Dimitrios@0
|
97 clear xin intCQT cqt_rep;
|
Dimitrios@0
|
98
|