Showing the changes to python (2 of 2 files). Show all
Unified · Split
| @@ -143,20 +143,62 @@ class bench: · 142 unmodified lines | |||
| 143 | print "Creating results directory" | 143 | print "Creating results directory" |
| 144 | act_on_results(mkdir,self.datadir,self.resdir,filter='d') | 144 | act_on_results(mkdir,self.datadir,self.resdir,filter='d') |
| 145 | 145 | ||
| 146 | def pretty_print(self,values,sep='|'): | 146 | def pretty_print(self,sep='|'): |
| 147 | for i in range(len(values)): | 147 | for i in self.printnames: |
| 148 | print self.formats[i] % values[i], sep, | 148 | print self.formats[i] % self.v[i], sep, |
| 149 | |||
| 150 | |||
| 151 | def pretty_titles(self,sep='|'): | ||
| 152 | for i in self.printnames: | ||
| 153 | print self.formats[i] % i, sep, | ||
| 149 | 154 | ||
| 150 | 155 | ||
| 151 | def dir_exec(self): | 156 | def dir_exec(self): |
| 152 | """ run file_exec on every input file """ | 157 | """ run file_exec on every input file """ |
| 153 | pass | 158 | self.l , self.labs = [], [] |
| 159 | self.v = {} | ||
| 160 | for i in self.valuenames: | ||
| 161 | self.v[i] = [] | ||
| 162 | for i in self.valuelists: | ||
| 163 | self.v[i] = [] | ||
| 164 | act_on_files(self.file_exec,self.sndlist,self.reslist, \ | ||
| 165 | suffix='',filter=sndfile_filter) | ||
| 154 | 166 | ||
| 155 | def dir_eval(self): | 167 | def dir_eval(self): |
| 156 | pass | 168 | pass |
| 157 | 169 | ||
| 158 | def file_exec(self): | 170 | def file_gettruth(self,input): |
| 159 | pass | 171 | """ get ground truth filenames """ |
| 172 | from os.path import isfile | ||
| 173 | ftrulist = [] | ||
| 174 | # search for match as filetask.input,".txt" | ||
| 175 | ftru = '.'.join(input.split('.')[:-1]) | ||
| 176 | ftru = '.'.join((ftru,'txt')) | ||
| 177 | if isfile(ftru): | ||
| 178 | ftrulist.append(ftru) | ||
| 179 | else: | ||
| 180 | # search for matches for filetask.input in the list of results | ||
| 181 | for i in range(len(self.reslist)): | ||
| 182 | check = '.'.join(self.reslist[i].split('.')[:-1]) | ||
| 183 | check = '_'.join(check.split('_')[:-1]) | ||
| 184 | if check == '.'.join(input.split('.')[:-1]): | ||
| 185 | ftrulist.append(self.reslist[i]) | ||
| 186 | return ftrulist | ||
| 187 | |||
| 188 | def file_exec(self,input,output): | ||
| 189 | """ create filetask, extract data, evaluate """ | ||
| 190 | filetask = self.task(input,params=self.params) | ||
| 191 | computed_data = filetask.compute_all() | ||
| 192 | ftrulist = self.file_gettruth(filetask.input) | ||
| 193 | for i in ftrulist: | ||
| 194 | filetask.eval(computed_data,i,mode='rocloc',vmode='') | ||
| 195 | """ append filetask.v to self.v """ | ||
| 196 | for i in self.valuenames: | ||
| 197 | self.v[i].append(filetask.v[i]) | ||
| 198 | for j in self.valuelists: | ||
| 199 | if filetask.v[j]: | ||
| 200 | for i in range(len(filetask.v[j])): | ||
| 201 | self.v[j].append(filetask.v[j][i]) | ||
| 160 | 202 | ||
| 161 | def file_eval(self): | 203 | def file_eval(self): |
| 162 | pass | 204 | pass |
| @@ -19,89 +19,38 @@ def stdev(l): · 18 unmodified lines | |||
| 19 | 19 | ||
| 20 | class benchonset(bench): | 20 | class benchonset(bench): |
| 21 | 21 | ||
| 22 | """ list of values to store per file """ | ||
| 22 | valuenames = ['orig','missed','Tm','expc','bad','Td'] | 23 | valuenames = ['orig','missed','Tm','expc','bad','Td'] |
| 24 | """ list of lists to store per file """ | ||
| 23 | valuelists = ['l','labs'] | 25 | valuelists = ['l','labs'] |
| 24 | printnames = [ 'mode', 'thres', 'dist', 'prec', 'recl', 'Ttrue', 'Tfp', 'Tfn', 'Tm', 'Td', | 26 | """ list of values to print per dir """ |
| 25 | 'aTtrue', 'aTfp', 'aTfn', 'aTm', 'aTd', 'mean', 'smean', 'amean', 'samean'] | 27 | printnames = [ 'mode', 'thres', 'dist', 'prec', 'recl', |
| 26 | 28 | 'Ttrue', 'Tfp', 'Tfn', 'Tm', 'Td', | |
| 27 | formats = {'mode': "%12s" , | 29 | 'aTtrue', 'aTfp', 'aTfn', 'aTm', 'aTd', |
| 28 | 'thres': "%5.4s", | 30 | 'mean', 'smean', 'amean', 'samean'] |
| 29 | 'dist': "%5.4s", | 31 | |
| 30 | 'prec': "%5.4s", | 32 | """ per dir """ |
| 31 | 'recl': "%5.4s", | 33 | formats = {'mode': "%12s" , 'thres': "%5.4s", |
| 32 | 34 | 'dist': "%5.4s", 'prec': "%5.4s", 'recl': "%5.4s", | |
| 33 | 'Ttrue': "%5.4s", | 35 | 'Ttrue': "%5.4s", 'Tfp': "%5.4s", 'Tfn': "%5.4s", |
| 34 | 'Tfp': "%5.4s", | 36 | 'Tm': "%5.4s", 'Td': "%5.4s", |
| 35 | 'Tfn': "%5.4s", | 37 | 'aTtrue':"%5.4s", 'aTfp': "%5.4s", 'aTfn': "%5.4s", |
| 36 | 'Tm': "%5.4s", | 38 | 'aTm': "%5.4s", 'aTd': "%5.4s", |
| 37 | 'Td': "%5.4s", | 39 | 'mean': "%5.40s", 'smean': "%5.40s", |
| 38 | 40 | 'amean': "%5.40s", 'samean': "%5.40s"} | |
| 39 | 'aTtrue':"%5.4s", | ||
| 40 | 'aTfp': "%5.4s", | ||
| 41 | 'aTfn': "%5.4s", | ||
| 42 | 'aTm': "%5.4s", | ||
| 43 | 'aTd': "%5.4s", | ||
| 44 | |||
| 45 | 'mean': "%5.40s", | ||
| 46 | 'smean': "%5.40s", | ||
| 47 | 'amean': "%5.40s", | ||
| 48 | 'samean': "%5.40s"} | ||
| 49 | |||
| 50 | def file_gettruth(self,input): | ||
| 51 | from os.path import isfile | ||
| 52 | ftrulist = [] | ||
| 53 | # search for match as filetask.input,".txt" | ||
| 54 | ftru = '.'.join(input.split('.')[:-1]) | ||
| 55 | ftru = '.'.join((ftru,'txt')) | ||
| 56 | if isfile(ftru): | ||
| 57 | ftrulist.append(ftru) | ||
| 58 | else: | ||
| 59 | # search for matches for filetask.input in the list of results | ||
| 60 | for i in range(len(self.reslist)): | ||
| 61 | check = '.'.join(self.reslist[i].split('.')[:-1]) | ||
| 62 | check = '_'.join(check.split('_')[:-1]) | ||
| 63 | if check == '.'.join(input.split('.')[:-1]): | ||
| 64 | ftrulist.append(self.reslist[i]) | ||
| 65 | return ftrulist | ||
| 66 | |||
| 67 | def file_exec(self,input,output): | ||
| 68 | filetask = self.task(input,params=self.params) | ||
| 69 | computed_data = filetask.compute_all() | ||
| 70 | ftrulist = self.file_gettruth(filetask.input) | ||
| 71 | for i in ftrulist: | ||
| 72 | #print i | ||
| 73 | filetask.eval(computed_data,i,mode='rocloc',vmode='') | ||
| 74 | for i in self.valuenames: | ||
| 75 | self.v[i] += filetask.v[i] | ||
| 76 | for i in filetask.v['l']: | ||
| 77 | self.v['l'].append(i) | ||
| 78 | for i in filetask.v['labs']: | ||
| 79 | self.v['labs'].append(i) | ||
| 80 | |||
| 81 | def dir_exec(self): | ||
| 82 | """ run file_exec on every input file """ | ||
| 83 | self.l , self.labs = [], [] | ||
| 84 | self.v = {} | ||
| 85 | for i in self.valuenames: | ||
| 86 | self.v[i] = 0. | ||
| 87 | for i in self.valuelists: | ||
| 88 | self.v[i] = [] | ||
| 89 | self.v['thres'] = self.params.threshold | ||
| 90 | act_on_files(self.file_exec,self.sndlist,self.reslist, \ | ||
| 91 | suffix='',filter=sndfile_filter) | ||
| 92 | 41 | ||
| 93 | def dir_eval(self): | 42 | def dir_eval(self): |
| 94 | totaltrue = self.v['expc']-self.v['bad']-self.v['Td'] | 43 | """ evaluate statistical data over the directory """ |
| 95 | totalfp = self.v['bad']+self.v['Td'] | 44 | totaltrue = sum(self.v['expc'])-sum(self.v['bad'])-sum(self.v['Td']) |
| 96 | totalfn = self.v['missed']+self.v['Tm'] | 45 | totalfp = sum(self.v['bad'])+sum(self.v['Td']) |
| 46 | totalfn = sum(self.v['missed'])+sum(self.v['Tm']) | ||
| 97 | self.P = 100*float(totaltrue)/max(totaltrue + totalfp,1) | 47 | self.P = 100*float(totaltrue)/max(totaltrue + totalfp,1) |
| 98 | self.R = 100*float(totaltrue)/max(totaltrue + totalfn,1) | 48 | self.R = 100*float(totaltrue)/max(totaltrue + totalfn,1) |
| 99 | if self.R < 0: self.R = 0 | 49 | if self.R < 0: self.R = 0 |
| 100 | self.F = 2.* self.P*self.R / max(float(self.P+self.R),1) | 50 | self.F = 2.* self.P*self.R / max(float(self.P+self.R),1) |
| 101 | |||
| 102 | N = float(len(self.reslist)) | 51 | N = float(len(self.reslist)) |
| 103 | |||
| 104 | self.v['mode'] = self.params.onsetmode | 52 | self.v['mode'] = self.params.onsetmode |
| 53 | self.v['thres'] = self.params.threshold | ||
| 105 | self.v['thres'] = "%2.3f" % self.params.threshold | 54 | self.v['thres'] = "%2.3f" % self.params.threshold |
| 106 | self.v['dist'] = "%2.3f" % self.F | 55 | self.v['dist'] = "%2.3f" % self.F |
| 107 | self.v['prec'] = "%2.3f" % self.P | 56 | self.v['prec'] = "%2.3f" % self.P |
| @@ -112,8 +61,8 @@ class benchonset(bench): · 4 unmodified lines | |||
| 112 | self.v['aTtrue'] = totaltrue/N | 61 | self.v['aTtrue'] = totaltrue/N |
| 113 | self.v['aTfp'] = totalfp/N | 62 | self.v['aTfp'] = totalfp/N |
| 114 | self.v['aTfn'] = totalfn/N | 63 | self.v['aTfn'] = totalfn/N |
| 115 | self.v['aTm'] = self.v['Tm']/N | 64 | self.v['aTm'] = sum(self.v['Tm'])/N |
| 116 | self.v['aTd'] = self.v['Td']/N | 65 | self.v['aTd'] = sum(self.v['Td'])/N |
| 117 | self.v['mean'] = mmean(self.v['l']) | 66 | self.v['mean'] = mmean(self.v['l']) |
| 118 | self.v['smean'] = stdev(self.v['l']) | 67 | self.v['smean'] = stdev(self.v['l']) |
| 119 | self.v['amean'] = mmean(self.v['labs']) | 68 | self.v['amean'] = mmean(self.v['labs']) |
| @@ -122,7 +71,6 @@ class benchonset(bench): · 2 unmodified lines | |||
| 122 | def run_bench(self,modes=['dual'],thresholds=[0.5]): | 71 | def run_bench(self,modes=['dual'],thresholds=[0.5]): |
| 123 | self.modes = modes | 72 | self.modes = modes |
| 124 | self.thresholds = thresholds | 73 | self.thresholds = thresholds |
| 125 | |||
| 126 | self.pretty_titles() | 74 | self.pretty_titles() |
| 127 | for mode in self.modes: | 75 | for mode in self.modes: |
| 128 | self.params.onsetmode = mode | 76 | self.params.onsetmode = mode |
| @@ -133,22 +81,12 @@ class benchonset(bench): · 4 unmodified lines | |||
| 133 | self.pretty_print() | 81 | self.pretty_print() |
| 134 | #print self.v | 82 | #print self.v |
| 135 | 83 | ||
| 136 | def pretty_print(self,sep='|'): | ||
| 137 | for i in self.printnames: | ||
| 138 | print self.formats[i] % self.v[i], sep, | ||
| 139 | |||
| 140 | |||
| 141 | def pretty_titles(self,sep='|'): | ||
| 142 | for i in self.printnames: | ||
| 143 | print self.formats[i] % i, sep, | ||
| 144 | |||
| 145 | |||
| 146 | def auto_learn(self,modes=['dual'],thresholds=[0.1,1.5]): | 84 | def auto_learn(self,modes=['dual'],thresholds=[0.1,1.5]): |
| 147 | """ simple dichotomia like algorithm to optimise threshold """ | 85 | """ simple dichotomia like algorithm to optimise threshold """ |
| 148 | self.modes = modes | 86 | self.modes = modes |
| 149 | self.pretty_titles() | 87 | self.pretty_titles() |
| 150 | for mode in self.modes: | 88 | for mode in self.modes: |
| 151 | steps = 10 | 89 | steps = 11 |
| 152 | lesst = thresholds[0] | 90 | lesst = thresholds[0] |
| 153 | topt = thresholds[1] | 91 | topt = thresholds[1] |
| 154 | self.params.onsetmode = mode | 92 | self.params.onsetmode = mode |
| @@ -230,7 +168,7 @@ if __name__ == "__main__": · 75 unmodified lines | |||
| 230 | if len(sys.argv) > 1: datapath = sys.argv[1] | 168 | if len(sys.argv) > 1: datapath = sys.argv[1] |
| 231 | else: print "ERR: a path is required"; sys.exit(1) | 169 | else: print "ERR: a path is required"; sys.exit(1) |
| 232 | modes = ['complex', 'energy', 'phase', 'specdiff', 'kl', 'mkl', 'dual'] | 170 | modes = ['complex', 'energy', 'phase', 'specdiff', 'kl', 'mkl', 'dual'] |
| 233 | #modes = [ 'phase' ] | 171 | #modes = [ 'mkl' ] |
| 234 | thresholds = [ 0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2] | 172 | thresholds = [ 0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2] |
| 235 | #thresholds = [1.5] | 173 | #thresholds = [1.5] |
| 236 | 174 | ||
| @@ -242,7 +180,6 @@ if __name__ == "__main__": · 5 unmodified lines | |||
| 242 | benchonset.task = taskonset | 180 | benchonset.task = taskonset |
| 243 | benchonset.valuesdict = {} | 181 | benchonset.valuesdict = {} |
| 244 | 182 | ||
| 245 | |||
| 246 | try: | 183 | try: |
| 247 | #benchonset.auto_learn2(modes=modes) | 184 | #benchonset.auto_learn2(modes=modes) |
| 248 | benchonset.run_bench(modes=modes,thresholds=thresholds) | 185 | benchonset.run_bench(modes=modes,thresholds=thresholds) |