def test_net_on_dataset(args, dataset_name, proposal_file, output_dir, multi_gpu=False, gpu_id=0): """Run inference on a dataset.""" dataset = JsonDatasetRel(dataset_name) test_timer = Timer() test_timer.tic() if multi_gpu: num_images = len(dataset.get_roidb(gt=args.do_val)) all_results = multi_gpu_test_net_on_dataset(args, dataset_name, proposal_file, num_images, output_dir) else: all_results = test_net(args, dataset_name, proposal_file, output_dir, gpu_id=gpu_id) test_timer.toc() logger.info('Total inference time: {:.3f}s'.format( test_timer.average_time)) logger.info('Starting evaluation now...') if dataset_name.find('vg') >= 0 or dataset_name.find('vrd') >= 0: task_evaluation_vg_and_vrd.eval_rel_results(all_results, output_dir, args.do_val) else: task_evaluation_sg.eval_rel_results(all_results, output_dir, args.do_val, args.do_vis, args.do_special) return all_results
def get_metrics_det_boxes(model, timers, dataset_name): # assert len(cfg.TEST.DATASETS) == 1 # dataset_name, proposal_file = get_inference_dataset(0, cfg.TEST.DATASETS) # dataset = JsonDatasetRel(dataset_name) model.eval() roidb, dataset, start_ind, end_ind, total_num_images = get_roidb_and_dataset( dataset_name, None, None, True) num_images = len(roidb) all_results = [None for _ in range(num_images)] for i, entry in enumerate(roidb): box_proposals = None im = cv2.imread(entry['image']) im_results = im_detect_rels(model, im, dataset_name, box_proposals, False, timers) im_results.update(dict(image=entry['image'])) # add gt im_results.update( dict(gt_sbj_boxes=entry['sbj_gt_boxes'], gt_sbj_labels=entry['sbj_gt_classes'], gt_obj_boxes=entry['obj_gt_boxes'], gt_obj_labels=entry['obj_gt_classes'], gt_prd_labels=entry['prd_gt_classes'])) all_results[i] = im_results if dataset_name.find('vg') >= 0 or dataset_name.find( 'vrd') >= 0: # TODO: use pred_det to val metrics = task_evaluation_vg_and_vrd.eval_rel_results( all_results, None, True) else: metrics = task_evaluation_sg.eval_rel_results(all_results, None, True) return metrics
if args.use_gt_boxes: if args.use_gt_labels: det_file = os.path.join( args.output_dir, 'rel_detections_gt_boxes_prdcls_' + args.load_ckpt.split('_')[-1].split('.')[-2] + '.pkl') else: det_file = os.path.join( args.output_dir, 'rel_detections_gt_boxes_sgcls_' + args.load_ckpt.split('_')[-1].split('.')[-2] + '.pkl') else: det_file = os.path.join( args.output_dir, 'rel_detections_' + args.load_ckpt.split('_')[-1].split('.')[-2] + '.pkl') if os.path.exists(det_file): logger.info('Loading results from {}'.format(det_file)) with open(det_file, 'rb') as f: all_results = pickle.load(f) logger.info('Starting evaluation now...') if args.dataset.find('vg') >= 0 or args.dataset.find('vrd') >= 0: task_evaluation_vg_and_vrd.eval_rel_results( all_results, args.output_dir, args.do_val) else: task_evaluation_sg.eval_rel_results(all_results, args.output_dir, args.do_val, args.do_vis, args.do_special) else: run_inference(args, ind_range=args.range, multi_gpu_testing=args.multi_gpu_testing, check_expected_results=True)