| import os |
| import shutil |
| import matplotlib.pyplot as plt |
| import numpy as np |
|
|
|
|
| move_best_results_here = False |
|
|
| record = ['dataset', 'ckpt', 'Emax', 'Smeasure', 'Fmax', 'MAE', 'Emean', 'Fmean'] |
| measurement = 'Emax' |
| score_idx = record.index(measurement) |
|
|
| with open('output/details/result.txt', 'r') as f: |
| res = f.read() |
|
|
| res = res.replace('||', '').replace('(', '').replace(')', '') |
|
|
| score = [] |
| for r in res.splitlines(): |
| ds = r.split() |
| s = ds[:2] |
| for idx_d, d in enumerate(ds[2:]): |
| if idx_d % 2 == 0: |
| s.append(float(d)) |
| score.append(s) |
|
|
| ss = sorted(score, key=lambda x: (x[record.index('dataset')], x[record.index('Emax')], x[record.index('Smeasure')], x[record.index('Fmax')], x[record.index('ckpt')]), reverse=True) |
| ss_ar = np.array(ss) |
| np.savetxt('score_sorted.txt', ss_ar, fmt='%s') |
| ckpt_coca = ss_ar[ss_ar[:, 0] == 'CoCA'][0][1] |
| ckpt_cosod = ss_ar[ss_ar[:, 0] == 'CoSOD3k'][0][1] |
| ckpt_cosal = ss_ar[ss_ar[:, 0] == 'CoSal2015'][0][1] |
|
|
| best_coca_scores = ss_ar[ss_ar[:, 1] == ckpt_coca] |
| best_cosod_scores = ss_ar[ss_ar[:, 1] == ckpt_cosod] |
| best_cosal_scores = ss_ar[ss_ar[:, 1] == ckpt_cosal] |
| print('Best (models may be different):') |
| print('CoCA:\n', best_coca_scores) |
| print('CoSOD3k:\n', best_cosod_scores) |
| print('CoSal2015:\n', best_cosal_scores) |
|
|
| |
| if measurement == 'Emax': |
| gco_scores = {'CoCA': 0.760, 'CoSOD3k': 0.860, 'CoSal2015': 0.887} |
| gco_scores_Smeasure = {'CoCA': 0.673, 'CoSOD3k': 0.802, 'CoSal2015': 0.845} |
| elif measurement == 'Smeasure': |
| gco_scores = {'CoCA': 0.673, 'CoSOD3k': 0.802, 'CoSal2015': 0.845} |
| elif measurement == 'Fmax': |
| gco_scores = {'CoCA': 0.544, 'CoSOD3k': 0.777, 'CoSal2015': 0.847} |
| elif measurement == 'Emean': |
| gco_scores = {'CoCA': 0.1, 'CoSOD3k': 0.1, 'CoSal2015': 0.1} |
| elif measurement == 'Fmean': |
| gco_scores = {'CoCA': 0.1, 'CoSOD3k': 0.1, 'CoSal2015': 0.1} |
| ckpts = list(set(ss_ar[:, 1].squeeze().tolist())) |
| improvements_mean = [] |
| improvements_lst = [] |
| improvements_mean_Smeasure = [] |
| improvements_lst_Smeasure = [] |
| for ckpt in ckpts: |
| scores = ss_ar[ss_ar[:, 1] == ckpt] |
| if scores.shape[0] != len(gco_scores): |
| improvements_mean.append(-1) |
| improvements_lst.append([-1, -1, 1]) |
| improvements_mean_Smeasure.append(-1) |
| improvements_lst_Smeasure.append([-1, -1, 1]) |
| continue |
| score_coca = float(scores[scores[:, 0] == 'CoCA'][0][score_idx]) |
| score_cosod = float(scores[scores[:, 0] == 'CoSOD3k'][0][score_idx]) |
| score_cosal = float(scores[scores[:, 0] == 'CoSal2015'][0][score_idx]) |
| improvements = [ |
| (score_coca - gco_scores['CoCA']) / gco_scores['CoCA'], |
| (score_cosod - gco_scores['CoSOD3k']) / gco_scores['CoSOD3k'], |
| (score_cosal - gco_scores['CoSal2015']) / gco_scores['CoSal2015'] |
| ] |
| improvement_mean = np.mean(improvements) |
| improvements_mean.append(improvement_mean) |
| improvements_lst.append(improvements) |
|
|
| |
| score_coca = float(scores[scores[:, 0] == 'CoCA'][0][record.index('Smeasure')]) |
| score_cosod = float(scores[scores[:, 0] == 'CoSOD3k'][0][record.index('Smeasure')]) |
| score_cosal = float(scores[scores[:, 0] == 'CoSal2015'][0][record.index('Smeasure')]) |
| improvements_Smeasure = [ |
| (score_coca - gco_scores_Smeasure['CoCA']) / gco_scores_Smeasure['CoCA'], |
| (score_cosod - gco_scores_Smeasure['CoSOD3k']) / gco_scores_Smeasure['CoSOD3k'], |
| (score_cosal - gco_scores_Smeasure['CoSal2015']) / gco_scores_Smeasure['CoSal2015'] |
| ] |
| improvement_mean_Smeasure = np.mean(improvements_Smeasure) |
| improvements_mean_Smeasure.append(improvement_mean_Smeasure) |
| improvements_lst_Smeasure.append(improvements_Smeasure) |
| best_measurement = 'Emax' |
| if best_measurement == 'Emax': |
| best_improvement_index = np.argsort(improvements_mean).tolist()[-1] |
| best_ckpt = ckpts[best_improvement_index] |
| best_improvement_mean = improvements_mean[best_improvement_index] |
| best_improvements = improvements_lst[best_improvement_index] |
|
|
| best_improvement_mean_Smeasure = improvements_mean_Smeasure[best_improvement_index] |
| best_improvements_Smeasure = improvements_lst_Smeasure[best_improvement_index] |
| elif best_measurement == 'Smeasure': |
| best_improvement_index = np.argsort(improvements_mean_Smeasure).tolist()[-1] |
| best_ckpt = ckpts[best_improvement_index] |
| best_improvement_mean_Smeasure = improvements_mean_Smeasure[best_improvement_index] |
| best_improvements_Smeasure = improvements_lst_Smeasure[best_improvement_index] |
|
|
| best_improvement_mean = improvements_mean[best_improvement_index] |
| best_improvements = improvements_lst[best_improvement_index] |
|
|
| print('The overall best one:') |
| print(ss_ar[ss_ar[:, 1] == best_ckpt]) |
| print('Got Emax improvements on CoCA-{:.3f}%, CoSOD3k-{:.3f}%, CoSal2015-{:.3f}%, mean_improvement: {:.3f}%.'.format( |
| best_improvements[0]*100, best_improvements[1]*100, best_improvements[2]*100, best_improvement_mean*100 |
| )) |
| print('Got Smes improvements on CoCA-{:.3f}%, CoSOD3k-{:.3f}%, CoSal2015-{:.3f}%, mean_improvement: {:.3f}%.'.format( |
| best_improvements_Smeasure[0]*100, best_improvements_Smeasure[1]*100, best_improvements_Smeasure[2]*100, best_improvement_mean_Smeasure*100 |
| )) |
| trial = int(best_ckpt.split('_')[-1].split('-')[0]) |
| ep = int(best_ckpt.split('ep')[-1].split(':')[0]) |
| if move_best_results_here: |
| trial, ep = 'gconet_{}'.format(trial), 'ep{}'.format(ep) |
| dr = os.path.join(trial, ep) |
| dst = '-'.join((trial, ep)) |
| shutil.move(os.path.join('/root/datasets/sod/preds', dr), dst) |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
|
|