Update results csv file rank/diff script and small validate script tweak for batch validation

pull/175/head
Ross Wightman 4 years ago
parent d72ddafe56
commit ad150e7018

@ -1,57 +1,75 @@
import numpy as np import numpy as np
import pandas as pd import pandas as pd
results = { results = {
'results-imagenet.csv': pd.read_csv('results-imagenet.csv'), 'results-imagenet.csv': [
'results-imagenetv2-matched-frequency.csv': pd.read_csv('results-imagenetv2-matched-frequency.csv'), 'results-imagenet-real.csv',
'results-sketch.csv': pd.read_csv('results-sketch.csv'), 'results-imagenetv2-matched-frequency.csv',
'results-imagenet-a.csv': pd.read_csv('results-imagenet-a.csv'), 'results-sketch.csv'
'results-imagenet-r.csv': pd.read_csv('results-imagenet-r.csv'), ],
'results-imagenet-real.csv': pd.read_csv('results-imagenet-real.csv'), 'results-imagenet-a-clean.csv': [
'results-imagenet-a.csv',
],
'results-imagenet-r-clean.csv': [
'results-imagenet-r.csv',
],
} }
def diff(csv_file): def diff(base_df, test_csv):
base_models = results['results-imagenet.csv']['model'].values base_models = base_df['model'].values
csv_models = results[csv_file]['model'].values test_df = pd.read_csv(test_csv)
test_models = test_df['model'].values
rank_diff = np.zeros_like(csv_models, dtype='object') rank_diff = np.zeros_like(test_models, dtype='object')
top1_diff = np.zeros_like(csv_models, dtype='object') top1_diff = np.zeros_like(test_models, dtype='object')
top5_diff = np.zeros_like(csv_models, dtype='object') top5_diff = np.zeros_like(test_models, dtype='object')
for rank, model in enumerate(csv_models): for rank, model in enumerate(test_models):
if model in base_models: if model in base_models:
base_rank = int(np.where(base_models==model)[0]) base_rank = int(np.where(base_models == model)[0])
top1_d = results[csv_file]['top1'][rank]-results['results-imagenet.csv']['top1'][base_rank] top1_d = test_df['top1'][rank] - base_df['top1'][base_rank]
top5_d = results[csv_file]['top5'][rank]-results['results-imagenet.csv']['top5'][base_rank] top5_d = test_df['top5'][rank] - base_df['top5'][base_rank]
# rank_diff # rank_diff
if rank == base_rank: rank_diff[rank] = f'=' if rank == base_rank:
elif rank > base_rank: rank_diff[rank] = f'-{rank-base_rank}' rank_diff[rank] = f'0'
else: rank_diff[rank] = f'+{base_rank-rank}' elif rank > base_rank:
rank_diff[rank] = f'-{rank - base_rank}'
else:
rank_diff[rank] = f'+{base_rank - rank}'
# top1_diff # top1_diff
if top1_d >= .0: top1_diff[rank] = f'+{top1_d:.3f}' if top1_d >= .0:
else : top1_diff[rank] = f'-{abs(top1_d):.3f}' top1_diff[rank] = f'+{top1_d:.3f}'
else:
top1_diff[rank] = f'-{abs(top1_d):.3f}'
# top5_diff # top5_diff
if top5_d >= .0: top5_diff[rank] = f'+{top5_d:.3f}' if top5_d >= .0:
else : top5_diff[rank] = f'-{abs(top5_d):.3f}' top5_diff[rank] = f'+{top5_d:.3f}'
else: else:
rank_diff[rank] = 'X' top5_diff[rank] = f'-{abs(top5_d):.3f}'
top1_diff[rank] = 'X'
top5_diff[rank] = 'X'
results[csv_file]['rank_diff'] = rank_diff else:
results[csv_file]['top1_diff'] = top1_diff rank_diff[rank] = ''
results[csv_file]['top5_diff'] = top5_diff top1_diff[rank] = ''
top5_diff[rank] = ''
results[csv_file]['param_count'] = results[csv_file]['param_count'].map('{:,.2f}'.format) test_df['top1_diff'] = top1_diff
test_df['top5_diff'] = top5_diff
test_df['rank_diff'] = rank_diff
results[csv_file].to_csv(csv_file, index=False, float_format='%.3f') test_df['param_count'] = test_df['param_count'].map('{:,.2f}'.format)
test_df.sort_values('top1', ascending=False, inplace=True)
test_df.to_csv(test_csv, index=False, float_format='%.3f')
for csv_file in results: for base_results, test_results in results.items():
if csv_file != 'results-imagenet.csv': base_df = pd.read_csv(base_results)
diff(csv_file) base_df.sort_values('top1', ascending=False, inplace=True)
for test_csv in test_results:
diff(base_df, test_csv)
base_df['param_count'] = base_df['param_count'].map('{:,.2f}'.format)
base_df.to_csv(base_results, index=False, float_format='%.3f')

@ -271,6 +271,7 @@ def main():
result = OrderedDict(model=args.model) result = OrderedDict(model=args.model)
r = {} r = {}
while not r and batch_size >= args.num_gpu: while not r and batch_size >= args.num_gpu:
torch.cuda.empty_cache()
try: try:
args.batch_size = batch_size args.batch_size = batch_size
print('Validating with batch size: %d' % args.batch_size) print('Validating with batch size: %d' % args.batch_size)
@ -281,7 +282,6 @@ def main():
raise e raise e
batch_size = max(batch_size // 2, args.num_gpu) batch_size = max(batch_size // 2, args.num_gpu)
print("Validation failed, reducing batch size by 50%") print("Validation failed, reducing batch size by 50%")
torch.cuda.empty_cache()
result.update(r) result.update(r)
if args.checkpoint: if args.checkpoint:
result['checkpoint'] = args.checkpoint result['checkpoint'] = args.checkpoint

Loading…
Cancel
Save