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