|
|
@ -818,11 +818,11 @@ def kmean_anchors(path='./data/coco128.yaml', n=9, img_size=640, thr=4.0, gen=10
|
|
|
|
return print_results(k)
|
|
|
|
return print_results(k)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def print_mutation(hyp, results, bucket=''):
|
|
|
|
def print_mutation(hyp, results, yaml_file='hyp_evolved.yaml', bucket=''):
|
|
|
|
# Print mutation results to evolve.txt (for use with train.py --evolve)
|
|
|
|
# Print mutation results to evolve.txt (for use with train.py --evolve)
|
|
|
|
a = '%10s' * len(hyp) % tuple(hyp.keys()) # hyperparam keys
|
|
|
|
a = '%10s' * len(hyp) % tuple(hyp.keys()) # hyperparam keys
|
|
|
|
b = '%10.3g' * len(hyp) % tuple(hyp.values()) # hyperparam values
|
|
|
|
b = '%10.3g' * len(hyp) % tuple(hyp.values()) # hyperparam values
|
|
|
|
c = '%10.4g' * len(results) % results # results (P, R, mAP, F1, test_loss)
|
|
|
|
c = '%10.4g' * len(results) % results # results (P, R, mAP@0.5, mAP@0.5:0.95, val_losses x 3)
|
|
|
|
print('\n%s\n%s\nEvolved fitness: %s\n' % (a, b, c))
|
|
|
|
print('\n%s\n%s\nEvolved fitness: %s\n' % (a, b, c))
|
|
|
|
|
|
|
|
|
|
|
|
if bucket:
|
|
|
|
if bucket:
|
|
|
@ -831,11 +831,19 @@ def print_mutation(hyp, results, bucket=''):
|
|
|
|
with open('evolve.txt', 'a') as f: # append result
|
|
|
|
with open('evolve.txt', 'a') as f: # append result
|
|
|
|
f.write(c + b + '\n')
|
|
|
|
f.write(c + b + '\n')
|
|
|
|
x = np.unique(np.loadtxt('evolve.txt', ndmin=2), axis=0) # load unique rows
|
|
|
|
x = np.unique(np.loadtxt('evolve.txt', ndmin=2), axis=0) # load unique rows
|
|
|
|
np.savetxt('evolve.txt', x[np.argsort(-fitness(x))], '%10.3g') # save sort by fitness
|
|
|
|
x = x[np.argsort(-fitness(x))] # sort
|
|
|
|
|
|
|
|
np.savetxt('evolve.txt', x, '%10.3g') # save sort by fitness
|
|
|
|
|
|
|
|
|
|
|
|
if bucket:
|
|
|
|
if bucket:
|
|
|
|
os.system('gsutil cp evolve.txt gs://%s' % bucket) # upload evolve.txt
|
|
|
|
os.system('gsutil cp evolve.txt gs://%s' % bucket) # upload evolve.txt
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Save yaml
|
|
|
|
|
|
|
|
for i, k in enumerate(hyp.keys()):
|
|
|
|
|
|
|
|
hyp[k] = float(x[0, i + 7])
|
|
|
|
|
|
|
|
with open(yaml_file, 'w') as f:
|
|
|
|
|
|
|
|
f.write('# Hyperparameter Evolution Results\n# Generations: %g\n# Metrics: ' % len(x) + c + '\n\n')
|
|
|
|
|
|
|
|
yaml.dump(hyp, f, sort_keys=False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def apply_classifier(x, model, img, im0):
|
|
|
|
def apply_classifier(x, model, img, im0):
|
|
|
|
# applies a second stage classifier to yolo outputs
|
|
|
|
# applies a second stage classifier to yolo outputs
|
|
|
@ -1146,23 +1154,26 @@ def plot_labels(labels, save_dir=''):
|
|
|
|
plt.close()
|
|
|
|
plt.close()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def plot_evolution_results(hyp): # from utils.utils import *; plot_evolution_results(hyp)
|
|
|
|
def plot_evolution_results(yaml_file='hyp_evolved.yaml'): # from utils.utils import *; plot_evolution_results()
|
|
|
|
# Plot hyperparameter evolution results in evolve.txt
|
|
|
|
# Plot hyperparameter evolution results in evolve.txt
|
|
|
|
|
|
|
|
with open(yaml_file) as f:
|
|
|
|
|
|
|
|
hyp = yaml.load(f, Loader=yaml.FullLoader)
|
|
|
|
x = np.loadtxt('evolve.txt', ndmin=2)
|
|
|
|
x = np.loadtxt('evolve.txt', ndmin=2)
|
|
|
|
f = fitness(x)
|
|
|
|
f = fitness(x)
|
|
|
|
# weights = (f - f.min()) ** 2 # for weighted results
|
|
|
|
# weights = (f - f.min()) ** 2 # for weighted results
|
|
|
|
plt.figure(figsize=(12, 10), tight_layout=True)
|
|
|
|
plt.figure(figsize=(14, 10), tight_layout=True)
|
|
|
|
matplotlib.rc('font', **{'size': 8})
|
|
|
|
matplotlib.rc('font', **{'size': 8})
|
|
|
|
for i, (k, v) in enumerate(hyp.items()):
|
|
|
|
for i, (k, v) in enumerate(hyp.items()):
|
|
|
|
y = x[:, i + 7]
|
|
|
|
y = x[:, i + 7]
|
|
|
|
# mu = (y * weights).sum() / weights.sum() # best weighted result
|
|
|
|
# mu = (y * weights).sum() / weights.sum() # best weighted result
|
|
|
|
mu = y[f.argmax()] # best single result
|
|
|
|
mu = y[f.argmax()] # best single result
|
|
|
|
plt.subplot(4, 5, i + 1)
|
|
|
|
plt.subplot(4, 6, i + 1)
|
|
|
|
plt.plot(mu, f.max(), 'o', markersize=10)
|
|
|
|
plt.plot(mu, f.max(), 'o', markersize=10)
|
|
|
|
plt.plot(y, f, '.')
|
|
|
|
plt.plot(y, f, '.')
|
|
|
|
plt.title('%s = %.3g' % (k, mu), fontdict={'size': 9}) # limit to 40 characters
|
|
|
|
plt.title('%s = %.3g' % (k, mu), fontdict={'size': 9}) # limit to 40 characters
|
|
|
|
print('%15s: %.3g' % (k, mu))
|
|
|
|
print('%15s: %.3g' % (k, mu))
|
|
|
|
plt.savefig('evolve.png', dpi=200)
|
|
|
|
plt.savefig('evolve.png', dpi=200)
|
|
|
|
|
|
|
|
print('\nPlot saved as evolve.png')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def plot_results_overlay(start=0, stop=0): # from utils.utils import *; plot_results_overlay()
|
|
|
|
def plot_results_overlay(start=0, stop=0): # from utils.utils import *; plot_results_overlay()
|
|
|
|