This commit is contained in:
tomasz 2020-07-29 18:46:58 +02:00
parent 6394fd3e09
commit 8f5e076149
4 changed files with 651118 additions and 20 deletions

View File

@ -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:

651066
our_scripts/out_logs_new.txt Normal file

File diff suppressed because one or more lines are too long

View File

@ -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)

View File

@ -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