Update
This commit is contained in:
		
							parent
							
								
									6394fd3e09
								
							
						
					
					
						commit
						8f5e076149
					
				|  | @ -1,12 +1,11 @@ | ||||||
| bayes: | bayes: | ||||||
|   iterations: 2 |   iterations: 10 | ||||||
| train: | train: | ||||||
|   epochs: |   epochs: | ||||||
|     type: discrete |     type: discrete | ||||||
|     values: [10] |     values: [30] | ||||||
|   batch-size: |   batch-size: | ||||||
|     type: discrete |     type: discrete | ||||||
|     #values: [128] |  | ||||||
|     min: 1 |     min: 1 | ||||||
|     max: 5 |     max: 5 | ||||||
|     step: 1 |     step: 1 | ||||||
|  | @ -18,12 +17,12 @@ train: | ||||||
|   img-size-start: |   img-size-start: | ||||||
|     type: discrete |     type: discrete | ||||||
|     min: 512 |     min: 512 | ||||||
|     max: 576 |     max: 1088 | ||||||
|     step: 64 |     step: 64 | ||||||
|   img-size-end: |   img-size-end: | ||||||
|     type: discrete |     type: discrete | ||||||
|     min: 512 |     min: 512 | ||||||
|     max: 576 |     max: 1088 | ||||||
|     step: 64 |     step: 64 | ||||||
|   rect: |   rect: | ||||||
|     type: discrete |     type: discrete | ||||||
|  | @ -122,16 +121,16 @@ detect: | ||||||
|   test-img-size: |   test-img-size: | ||||||
|     type: discrete |     type: discrete | ||||||
|     min: 512 |     min: 512 | ||||||
|     max: 576 |     max: 1088 | ||||||
|     step: 64 |     step: 64 | ||||||
|   conf-thres: |   conf-thres: | ||||||
|     type: continuous |     type: continuous | ||||||
|     min: 0.0 |     min: 0.3 | ||||||
|     max: 1.0 |     max: 0.6 | ||||||
|   iou-thres: |   iou-thres: | ||||||
|     type: continuous |     type: continuous | ||||||
|     min: 0.0 |     min: 0.3 | ||||||
|     max: 1.0 |     max: 0.6 | ||||||
|   classes: |   classes: | ||||||
|   agnostic-nms: |   agnostic-nms: | ||||||
|   augment: |   augment: | ||||||
|  |  | ||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -8,7 +8,8 @@ import traceback | ||||||
| import GPyOpt | import GPyOpt | ||||||
| from config_bayes import Configuration | from config_bayes import Configuration | ||||||
| 
 | 
 | ||||||
| from utils import call_subprocess, get_values_from_conff_matrix | from utils import call_subprocess, get_values_from_conff_matrix, load_previous_bayes_experiments | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| dir_path = os.path.dirname(os.path.realpath(__file__)) | dir_path = os.path.dirname(os.path.realpath(__file__)) | ||||||
| PROJECT_ROOT = os.path.join(dir_path, '..') | PROJECT_ROOT = os.path.join(dir_path, '..') | ||||||
|  | @ -19,7 +20,6 @@ config = Configuration(bayes_config_yaml) | ||||||
| date_string = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S') | date_string = datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S') | ||||||
| bayes_params_file = open(os.path.join(PROJECT_ROOT, config.experiments.dir, f"{date_string}_bayes_params.txt"), 'a+') | bayes_params_file = open(os.path.join(PROJECT_ROOT, config.experiments.dir, f"{date_string}_bayes_params.txt"), 'a+') | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| def call_training_script(gaussian_hyps): | def call_training_script(gaussian_hyps): | ||||||
|     cmd = 'python -u train.py' |     cmd = 'python -u train.py' | ||||||
|     cmd += ' --epochs ' + gaussian_hyps['epochs'].__str__() |     cmd += ' --epochs ' + gaussian_hyps['epochs'].__str__() | ||||||
|  | @ -149,7 +149,7 @@ def yolov3(x): | ||||||
|         y_dict = get_values_from_conff_matrix(conf_matrix_path) |         y_dict = get_values_from_conff_matrix(conf_matrix_path) | ||||||
| 
 | 
 | ||||||
|         # tutaj wzór na wyliczanie funkcji  |         # tutaj wzór na wyliczanie funkcji  | ||||||
|         y_val = 1 - ((y_dict['match'] * 10 - y_dict['false positives'] * 3) / y_dict['mistakes']) |         y_val = 1 - (y_dict['match'] * 10 - y_dict['false positives'] * 3 - y_dict['mistakes']) / y_dict['all labels'] | ||||||
| 
 | 
 | ||||||
|         # zapisywanie do pliku zadeklarowanego globalnie |         # zapisywanie do pliku zadeklarowanego globalnie | ||||||
|         line = "\t".join([bayes_hyps.__str__(), str(y_val)]) |         line = "\t".join([bayes_hyps.__str__(), str(y_val)]) | ||||||
|  | @ -168,14 +168,9 @@ def yolov3(x): | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     bounds = config.get_bayes_bounds() |     bounds = config.get_bayes_bounds() | ||||||
| 
 | 
 | ||||||
|     # for b in bounds: |  | ||||||
|     #   print(b) |  | ||||||
| 
 |  | ||||||
|     # tutaj będzie wczytywanie z poprzednich eksperymentów plik bayes_params |  | ||||||
|     X = None |  | ||||||
|     Y = None |  | ||||||
| 
 |  | ||||||
|     os.chdir(PROJECT_ROOT)  # change to project root directory |     os.chdir(PROJECT_ROOT)  # change to project root directory | ||||||
|  |     # wczytywanie z poprzednich eksperymentów plik bayes_params | ||||||
|  |     X, Y =  load_previous_bayes_experiments(config.experiments.dir) | ||||||
| 
 | 
 | ||||||
|     bayes_optimizer = GPyOpt.methods.BayesianOptimization(f=yolov3, domain=bounds, X=X, Y=Y, verbosity=True, |     bayes_optimizer = GPyOpt.methods.BayesianOptimization(f=yolov3, domain=bounds, X=X, Y=Y, verbosity=True, | ||||||
|                                                           initial_design_numdata=2) |                                                           initial_design_numdata=2) | ||||||
|  |  | ||||||
|  | @ -1,5 +1,9 @@ | ||||||
|  | import ast | ||||||
| import io | import io | ||||||
|  | import os | ||||||
| import subprocess | import subprocess | ||||||
|  | import numpy as np | ||||||
|  | from glob import glob | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def call_subprocess(cmd): | def call_subprocess(cmd): | ||||||
|  | @ -53,3 +57,37 @@ def get_bayes_params_as_dict(x): | ||||||
|         'conf-thres': float(x[:, 26]), |         'conf-thres': float(x[:, 26]), | ||||||
|         'iou-thres': float(x[:, 27]) |         'iou-thres': float(x[:, 27]) | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def load_previous_bayes_experiments(experiments_dir): | ||||||
|  |     paths = list(glob(os.path.join(experiments_dir, '*bayes_params.txt'))) | ||||||
|  |     y_values = [] | ||||||
|  |     x_values = [] | ||||||
|  | 
 | ||||||
|  |     for p in paths: | ||||||
|  |         file = open(p, 'r') | ||||||
|  |         lines = file.readlines() | ||||||
|  |         for line in lines: | ||||||
|  |             try: | ||||||
|  |                 dict_str, y_val = line.split('\t') | ||||||
|  |                 bayes_dict = ast.literal_eval(dict_str) | ||||||
|  |                 bayes_values = dict_to_numpy(bayes_dict) | ||||||
|  |                 x_values.append(bayes_values) | ||||||
|  |                 y_values.append(float(y_val)) | ||||||
|  |             except: | ||||||
|  |                 raise Exception(f"Cannot parse line {line} from file {p}") | ||||||
|  |     return np.array(x_values), np.array(y_values).reshape((len(y_values), 1)) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def dict_to_numpy(d): | ||||||
|  |     x = [] | ||||||
|  |     for key, value in d.items(): | ||||||
|  |         if type(value) == bool: | ||||||
|  |             x.append(int(value)) | ||||||
|  |         elif key == 'img-size': | ||||||
|  |             start_img_size, end_img_size = value.split(" ") | ||||||
|  |             x.append(int(start_img_size)) | ||||||
|  |             x.append(int(end_img_size)) | ||||||
|  |         else: | ||||||
|  |             x.append(float(value)) | ||||||
|  |     return x | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue