def save_results(args, dataset_name, eval_exp_path, dataset_results, print_header=True): all_ious, elapsed_time = dataset_results mean_spc, mean_spi = utils.get_time_metrics(all_ious, elapsed_time) iou_thrs = np.arange(0.8, min(0.95, args.target_iou) + 0.001, 0.05).tolist() noc_list, over_max_list = utils.compute_noc_metric(all_ious, iou_thrs=iou_thrs, max_clicks=args.n_clicks) header, table_row = utils.get_results_table(noc_list, over_max_list, args.mode, dataset_name, mean_spc, elapsed_time, args.n_clicks, model_name=eval_exp_path.stem) target_iou_int = int(args.target_iou * 100) if target_iou_int not in [80, 85, 90]: noc_list, over_max_list = utils.compute_noc_metric(all_ious, iou_thrs=[args.target_iou], max_clicks=args.n_clicks) table_row += f' NoC@{args.target_iou:.1%} = {noc_list[0]:.2f};' table_row += f' >={args.n_clicks}@{args.target_iou:.1%} = {over_max_list[0]}' if print_header: print(header) print(table_row) log_path = eval_exp_path / f'results_{args.mode}_{args.n_clicks}.txt' if log_path.exists(): with open(log_path, 'a') as f: f.write(table_row + '\n') else: with open(log_path, 'w') as f: f.write(header + '\n') f.write(table_row + '\n') ious_path = eval_exp_path / 'all_ious' ious_path.mkdir(exist_ok=True) with open(ious_path / f'{dataset_name}_{args.mode}_{args.n_clicks}.pkl', 'wb') as fp: pickle.dump(all_ious, fp)
def save_results(args, row_name, dataset_name, logs_path, logs_prefix, dataset_results, save_ious=False, print_header=True, single_model_eval=False): all_ious, elapsed_time = dataset_results mean_spc, mean_spi = utils.get_time_metrics(all_ious, elapsed_time) iou_thrs = np.arange(0.8, min(0.95, args.target_iou) + 0.001, 0.05).tolist() noc_list, over_max_list = utils.compute_noc_metric( all_ious, iou_thrs=iou_thrs, max_clicks=args.n_clicks) row_name = 'last' if row_name == 'last_checkpoint' else row_name model_name = str(logs_path.relative_to( args.logs_path)) + ':' + logs_prefix if logs_prefix else logs_path.stem header, table_row = utils.get_results_table(noc_list, over_max_list, row_name, dataset_name, mean_spc, elapsed_time, args.n_clicks, model_name=model_name) if args.print_ious: min_num_clicks = min(len(x) for x in all_ious) mean_ious = np.array([x[:min_num_clicks] for x in all_ious]).mean(axis=0) miou_str = ' '.join([ f'mIoU@{click_id}={mean_ious[click_id - 1]:.2%};' for click_id in [1, 2, 3, 5, 10, 20] if click_id <= min_num_clicks ]) table_row += '; ' + miou_str else: target_iou_int = int(args.target_iou * 100) if target_iou_int not in [80, 85, 90]: noc_list, over_max_list = utils.compute_noc_metric( all_ious, iou_thrs=[args.target_iou], max_clicks=args.n_clicks) table_row += f' NoC@{args.target_iou:.1%} = {noc_list[0]:.2f};' table_row += f' >={args.n_clicks}@{args.target_iou:.1%} = {over_max_list[0]}' if print_header: print(header) print(table_row) if save_ious: ious_path = logs_path / 'ious' / (logs_prefix if logs_prefix else '') ious_path.mkdir(parents=True, exist_ok=True) with open( ious_path / f'{dataset_name}_{args.eval_mode}_{args.mode}_{args.n_clicks}.pkl', 'wb') as fp: pickle.dump(all_ious, fp) name_prefix = '' if logs_prefix: name_prefix = logs_prefix + '_' if not single_model_eval: name_prefix += f'{dataset_name}_' log_path = logs_path / f'{name_prefix}{args.eval_mode}_{args.mode}_{args.n_clicks}.txt' if log_path.exists(): with open(log_path, 'a') as f: f.write(table_row + '\n') else: with open(log_path, 'w') as f: if print_header: f.write(header + '\n') f.write(table_row + '\n')