ref: 677b267365aa78b0ce8fa63f0939dbc41ef97ca7
parent: dbc03518695210674796a4a1c69f67ee3a288968
author: Paul Brossier <piem@altern.org>
date: Fri Feb 17 11:06:54 EST 2006
move bench-onset in bench dir move bench-onset in bench dir
--- a/python/bench-onset
+++ /dev/null
@@ -1,160 +1,0 @@
-#! /usr/bin/python
-
-from aubio.bench.node import *
-from aubio.tasks import *
-
-class benchonset(bench):
-
- def dir_eval(self):
- self.P = 100*float(self.expc-self.missed-self.merged)/(self.expc-self.missed-self.merged + self.bad+self.doubled)
- self.R = 100*float(self.expc-self.missed-self.merged)/(self.expc-self.missed-self.merged + self.missed+self.merged)
- if self.R < 0: self.R = 0
- self.F = 2* self.P*self.R / (self.P+self.R)
-
- self.values = [self.params.onsetmode,
- "%2.3f" % self.params.threshold,
- self.orig,
- self.expc,
- self.missed,
- self.merged,
- self.bad,
- self.doubled,
- (self.orig-self.missed-self.merged),
- "%2.3f" % (100*float(self.orig-self.missed-self.merged)/(self.orig)),
- "%2.3f" % (100*float(self.bad+self.doubled)/(self.orig)),
- "%2.3f" % (100*float(self.orig-self.missed)/(self.orig)),
- "%2.3f" % (100*float(self.bad)/(self.orig)),
- "%2.3f" % self.P,
- "%2.3f" % self.R,
- "%2.3f" % self.F ]
-
- def file_exec(self,input,output):
- filetask = self.task(input,params=self.params)
- computed_data = filetask.compute_all()
- results = filetask.eval(computed_data)
- self.orig += filetask.orig
- self.missed += filetask.missed
- self.merged += filetask.merged
- self.expc += filetask.expc
- self.bad += filetask.bad
- self.doubled += filetask.doubled
-
-
- def run_bench(self,modes=['dual'],thresholds=[0.5]):
- self.modes = modes
- self.thresholds = thresholds
-
- self.pretty_print(self.titles)
- for mode in self.modes:
- self.params.onsetmode = mode
- for threshold in self.thresholds:
- self.params.threshold = threshold
- self.dir_exec()
- self.dir_eval()
- self.pretty_print(self.values)
-
- def auto_learn(self,modes=['dual'],thresholds=[0.1,1.5]):
- """ simple dichotomia like algorithm to optimise threshold """
- self.modes = modes
- self.pretty_print(self.titles)
- for mode in self.modes:
- steps = 10
- lesst = thresholds[0]
- topt = thresholds[1]
- self.params.onsetmode = mode
-
- self.params.threshold = topt
- self.dir_exec()
- self.dir_eval()
- self.pretty_print(self.values)
- topF = self.F
-
- self.params.threshold = lesst
- self.dir_exec()
- self.dir_eval()
- self.pretty_print(self.values)
- lessF = self.F
-
- for i in range(steps):
- self.params.threshold = ( lesst + topt ) * .5
- self.dir_exec()
- self.dir_eval()
- self.pretty_print(self.values)
- if self.F == 100.0 or self.F == topF:
- print "assuming we converged, stopping"
- break
- #elif abs(self.F - topF) < 0.01 :
- # print "done converging"
- # break
- if topF < self.F:
- #lessF = topF
- #lesst = topt
- topF = self.F
- topt = self.params.threshold
- elif lessF < self.F:
- lessF = self.F
- lesst = self.params.threshold
- if topt == lesst:
- lesst /= 2.
-
- def auto_learn2(self,modes=['dual'],thresholds=[0.1,1.0]):
- """ simple dichotomia like algorithm to optimise threshold """
- self.modes = modes
- self.pretty_print(self.titles)
- for mode in self.modes:
- steps = 10
- step = thresholds[1]
- curt = thresholds[0]
- self.params.onsetmode = mode
-
- self.params.threshold = curt
- self.dir_exec()
- self.dir_eval()
- self.pretty_print(self.values)
- curexp = self.expc
-
- for i in range(steps):
- if curexp < self.orig:
- #print "we found at most less onsets than annotated"
- self.params.threshold -= step
- step /= 2
- elif curexp > self.orig:
- #print "we found more onsets than annotated"
- self.params.threshold += step
- step /= 2
- self.dir_exec()
- self.dir_eval()
- curexp = self.expc
- self.pretty_print(self.values)
- if self.orig == 100.0 or self.orig == self.expc:
- print "assuming we converged, stopping"
- break
-
-if __name__ == "__main__":
- import sys
- if len(sys.argv) > 1: datapath = sys.argv[1]
- else: print "ERR: a path is required"; sys.exit(1)
- modes = ['complex', 'energy', 'phase', 'specdiff', 'kl', 'mkl', 'dual']
- #modes = [ 'complex' ]
- thresholds = [ 0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5]
- #thresholds = [1.5]
-
- #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
- respath = '/var/tmp/DB-testings'
-
- benchonset = benchonset(datapath,respath,checkres=True,checkanno=True)
- benchonset.params = taskparams()
- benchonset.task = taskonset
-
- benchonset.titles = [ 'mode', 'thres', 'orig', 'expc', 'missd', 'mergd',
- 'bad', 'doubl', 'corrt', 'GD', 'FP', 'GD-merged', 'FP-pruned',
- 'prec', 'recl', 'dist' ]
- benchonset.formats = ["%12s" , "| %6s", "| %6s", "| %6s", "| %6s", "| %6s",
- "| %6s", "| %6s", "| %6s", "| %8s", "| %8s", "| %8s", "| %8s",
- "| %6s", "| %6s", "| %6s"]
-
- try:
- benchonset.auto_learn2(modes=modes)
- #benchonset.run_bench(modes=modes)
- except KeyboardInterrupt:
- sys.exit(1)
--- /dev/null
+++ b/python/test/bench/onset/bench-onset
@@ -1,0 +1,160 @@
+#! /usr/bin/python
+
+from aubio.bench.node import *
+from aubio.tasks import *
+
+class benchonset(bench):
+
+ def dir_eval(self):
+ self.P = 100*float(self.expc-self.missed-self.merged)/(self.expc-self.missed-self.merged + self.bad+self.doubled)
+ self.R = 100*float(self.expc-self.missed-self.merged)/(self.expc-self.missed-self.merged + self.missed+self.merged)
+ if self.R < 0: self.R = 0
+ self.F = 2* self.P*self.R / (self.P+self.R)
+
+ self.values = [self.params.onsetmode,
+ "%2.3f" % self.params.threshold,
+ self.orig,
+ self.expc,
+ self.missed,
+ self.merged,
+ self.bad,
+ self.doubled,
+ (self.orig-self.missed-self.merged),
+ "%2.3f" % (100*float(self.orig-self.missed-self.merged)/(self.orig)),
+ "%2.3f" % (100*float(self.bad+self.doubled)/(self.orig)),
+ "%2.3f" % (100*float(self.orig-self.missed)/(self.orig)),
+ "%2.3f" % (100*float(self.bad)/(self.orig)),
+ "%2.3f" % self.P,
+ "%2.3f" % self.R,
+ "%2.3f" % self.F ]
+
+ def file_exec(self,input,output):
+ filetask = self.task(input,params=self.params)
+ computed_data = filetask.compute_all()
+ results = filetask.eval(computed_data)
+ self.orig += filetask.orig
+ self.missed += filetask.missed
+ self.merged += filetask.merged
+ self.expc += filetask.expc
+ self.bad += filetask.bad
+ self.doubled += filetask.doubled
+
+
+ def run_bench(self,modes=['dual'],thresholds=[0.5]):
+ self.modes = modes
+ self.thresholds = thresholds
+
+ self.pretty_print(self.titles)
+ for mode in self.modes:
+ self.params.onsetmode = mode
+ for threshold in self.thresholds:
+ self.params.threshold = threshold
+ self.dir_exec()
+ self.dir_eval()
+ self.pretty_print(self.values)
+
+ def auto_learn(self,modes=['dual'],thresholds=[0.1,1.5]):
+ """ simple dichotomia like algorithm to optimise threshold """
+ self.modes = modes
+ self.pretty_print(self.titles)
+ for mode in self.modes:
+ steps = 10
+ lesst = thresholds[0]
+ topt = thresholds[1]
+ self.params.onsetmode = mode
+
+ self.params.threshold = topt
+ self.dir_exec()
+ self.dir_eval()
+ self.pretty_print(self.values)
+ topF = self.F
+
+ self.params.threshold = lesst
+ self.dir_exec()
+ self.dir_eval()
+ self.pretty_print(self.values)
+ lessF = self.F
+
+ for i in range(steps):
+ self.params.threshold = ( lesst + topt ) * .5
+ self.dir_exec()
+ self.dir_eval()
+ self.pretty_print(self.values)
+ if self.F == 100.0 or self.F == topF:
+ print "assuming we converged, stopping"
+ break
+ #elif abs(self.F - topF) < 0.01 :
+ # print "done converging"
+ # break
+ if topF < self.F:
+ #lessF = topF
+ #lesst = topt
+ topF = self.F
+ topt = self.params.threshold
+ elif lessF < self.F:
+ lessF = self.F
+ lesst = self.params.threshold
+ if topt == lesst:
+ lesst /= 2.
+
+ def auto_learn2(self,modes=['dual'],thresholds=[0.1,1.0]):
+ """ simple dichotomia like algorithm to optimise threshold """
+ self.modes = modes
+ self.pretty_print(self.titles)
+ for mode in self.modes:
+ steps = 10
+ step = thresholds[1]
+ curt = thresholds[0]
+ self.params.onsetmode = mode
+
+ self.params.threshold = curt
+ self.dir_exec()
+ self.dir_eval()
+ self.pretty_print(self.values)
+ curexp = self.expc
+
+ for i in range(steps):
+ if curexp < self.orig:
+ #print "we found at most less onsets than annotated"
+ self.params.threshold -= step
+ step /= 2
+ elif curexp > self.orig:
+ #print "we found more onsets than annotated"
+ self.params.threshold += step
+ step /= 2
+ self.dir_exec()
+ self.dir_eval()
+ curexp = self.expc
+ self.pretty_print(self.values)
+ if self.orig == 100.0 or self.orig == self.expc:
+ print "assuming we converged, stopping"
+ break
+
+if __name__ == "__main__":
+ import sys
+ if len(sys.argv) > 1: datapath = sys.argv[1]
+ else: print "ERR: a path is required"; sys.exit(1)
+ modes = ['complex', 'energy', 'phase', 'specdiff', 'kl', 'mkl', 'dual']
+ #modes = [ 'complex' ]
+ thresholds = [ 0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5]
+ #thresholds = [1.5]
+
+ #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
+ respath = '/var/tmp/DB-testings'
+
+ benchonset = benchonset(datapath,respath,checkres=True,checkanno=True)
+ benchonset.params = taskparams()
+ benchonset.task = taskonset
+
+ benchonset.titles = [ 'mode', 'thres', 'orig', 'expc', 'missd', 'mergd',
+ 'bad', 'doubl', 'corrt', 'GD', 'FP', 'GD-merged', 'FP-pruned',
+ 'prec', 'recl', 'dist' ]
+ benchonset.formats = ["%12s" , "| %6s", "| %6s", "| %6s", "| %6s", "| %6s",
+ "| %6s", "| %6s", "| %6s", "| %8s", "| %8s", "| %8s", "| %8s",
+ "| %6s", "| %6s", "| %6s"]
+
+ try:
+ benchonset.auto_learn2(modes=modes)
+ #benchonset.run_bench(modes=modes)
+ except KeyboardInterrupt:
+ sys.exit(1)