source: python/test/bench/onset/bench-onset @ a7880d9

feature/autosinkfeature/cnnfeature/cnn_orgfeature/constantqfeature/crepefeature/crepe_orgfeature/pitchshiftfeature/pydocstringsfeature/timestretchfix/ffmpeg5pitchshiftsamplertimestretchyinfft+
Last change on this file since a7880d9 was 83c6734, checked in by Paul Brossier <piem@altern.org>, 19 years ago

added bench-window, bench-delay, benchonset
added bench-window, bench-delay, benchonset

  • Property mode set to 100755
File size: 3.7 KB
Line 
1#! /usr/bin/python
2
3from aubio.tasks import *
4
5from benchonset import mmean, stdev, benchonset
6
7class mybenchonset(benchonset):
8
9        def run_bench(self,modes=['dual'],thresholds=[0.5]):
10                from os.path import dirname,basename
11                self.thresholds = thresholds
12                self.pretty_titles()
13                d,e,f = [],[],[]
14                for mode in modes:
15                        self.vlist = []
16                        self.params.onsetmode = mode
17                        for threshold in self.thresholds:
18                                self.params.threshold = threshold
19                                self.dir_exec()
20                                self.dir_eval()
21                                self.pretty_print()
22                                #print self.v
23                                self.vlist.append(self.v)
24                        self.plotroc(d)
25                        self.plotfmeas(e)
26                        self.plotpr(f)
27                        #print vlist
28                #self.plotplotroc(d)
29                #self.plotplotfmeas(e)
30                #self.plotplotpr(f)
31                outplot = basename(self.datadir)
32                for ext in ("png","svg","ps"):
33                        self.plotplotroc(d,outplot=outplot,extension=ext)
34                        self.plotplotfmeas(e,outplot=outplot,extension=ext)
35                        self.plotplotpr(f,outplot=outplot,extension=ext)
36
37
38        def auto_learn(self,modes=['dual'],thresholds=[0.1,1.5]):
39                """ simple dichotomia like algorithm to optimise threshold """
40                self.modes = modes
41                self.pretty_titles()
42                for mode in self.modes:
43                        steps = 11
44                        lesst = thresholds[0]
45                        topt = thresholds[1]
46                        self.params.onsetmode = mode
47
48                        self.params.threshold = topt
49                        self.dir_exec()
50                        self.dir_eval()
51                        self.pretty_print()
52                        topF = self.F
53
54                        self.params.threshold = lesst
55                        self.dir_exec()
56                        self.dir_eval()
57                        self.pretty_print()
58                        lessF = self.F
59
60                        for i in range(steps):
61                                self.params.localmin = True
62                                self.params.delay = 1.
63                                self.dir_exec()
64                                self.dir_eval()
65                                self.params.threshold = ( lesst + topt ) * .5
66                                self.dir_exec()
67                                self.dir_eval()
68                                self.pretty_print()
69                                if self.F == 100.0 or self.F == topF:
70                                        print "assuming we converged, stopping"
71                                        break
72                                #elif abs(self.F - topF) < 0.01 :
73                                #       print "done converging"
74                                #       break
75                                if topF < self.F:
76                                        #lessF = topF
77                                        #lesst = topt
78                                        topF = self.F
79                                        topt = self.params.threshold
80                                elif lessF < self.F:
81                                        lessF = self.F
82                                        lesst = self.params.threshold
83                                if topt == lesst:
84                                        lesst /= 2.
85
86        def auto_learn2(self,modes=['dual'],thresholds=[0.00001,1.0]):
87                """ simple dichotomia like algorithm to optimise threshold """
88                self.modes = modes
89                self.pretty_titles([])
90                for mode in self.modes:
91                        steps = 10
92                        step = 0.4
93                        self.params.onsetmode = mode
94                        self.params.threshold = thresholds[0]
95                        cur = 0
96
97                        for i in range(steps):
98                                self.dir_exec()
99                                self.dir_eval()
100                                self.pretty_print()
101                                new = self.P
102                                if self.R == 0.0:
103                                        #print "Found maximum, highering"
104                                        step /= 2.
105                                        self.params.threshold -= step
106                                elif new == 100.0:
107                                        #print "Found maximum, highering"
108                                        step *= .99
109                                        self.params.threshold += step
110                                elif cur > new:
111                                        #print "lower"
112                                        step /= 2.
113                                        self.params.threshold -= step
114                                elif cur < new:
115                                        #print "higher"
116                                        step *= .99
117                                        self.params.threshold += step
118                                else:
119                                        print "Assuming we converged"
120                                        break
121                                cur = new
122
123
124if __name__ == "__main__":
125        import sys
126        if len(sys.argv) > 1: datapath = sys.argv[1]
127        else: print "ERR: a path is required"; sys.exit(1)
128        modes = ['complex', 'energy', 'phase', 'hfc', 'specdiff', 'kl', 'mkl', 'dual']
129        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]
130        #modes = [ 'hfc' ]
131        #thresholds = [0.1, 1.5]
132
133        #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
134        respath = '/var/tmp/DB-testings'
135
136        benchonset = mybenchonset(datapath,respath,checkres=True,checkanno=True)
137        benchonset.params = taskparams()
138        benchonset.task = taskonset
139        benchonset.valuesdict = {}
140
141        try:
142                #benchonset.auto_learn2(modes=modes)
143                benchonset.run_bench(modes=modes,thresholds=thresholds)
144        except KeyboardInterrupt:
145                sys.exit(1)
Note: See TracBrowser for help on using the repository browser.