Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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)