import numpy as np from mmdet.core.evaluation.mean_ap import eval_map, tpfp_default, tpfp_imagenet det_bboxes = np.array([ [0, 0, 10, 10], [10, 10, 20, 20], [32, 32, 38, 42], ]) gt_bboxes = np.array([[0, 0, 10, 20], [0, 10, 10, 19], [10, 10, 20, 20]]) gt_ignore = np.array([[5, 5, 10, 20], [6, 10, 10, 19]]) def test_tpfp_imagenet(): result = tpfp_imagenet( det_bboxes, gt_bboxes, gt_bboxes_ignore=gt_ignore, use_legacy_coordinate=True) tp = result[0] fp = result[1] assert tp.shape == (1, 3) assert fp.shape == (1, 3) assert (tp == np.array([[1, 1, 0]])).all() assert (fp == np.array([[0, 0, 1]])).all() result = tpfp_imagenet( det_bboxes, gt_bboxes, gt_bboxes_ignore=gt_ignore, use_legacy_coordinate=False) tp = result[0] fp = result[1] assert tp.shape == (1, 3) assert fp.shape == (1, 3) assert (tp == np.array([[1, 1, 0]])).all() assert (fp == np.array([[0, 0, 1]])).all() def test_tpfp_default(): result = tpfp_default( det_bboxes, gt_bboxes, gt_bboxes_ignore=gt_ignore, use_legacy_coordinate=True) tp = result[0] fp = result[1] assert tp.shape == (1, 3) assert fp.shape == (1, 3) assert (tp == np.array([[1, 1, 0]])).all() assert (fp == np.array([[0, 0, 1]])).all() result = tpfp_default( det_bboxes, gt_bboxes, gt_bboxes_ignore=gt_ignore, use_legacy_coordinate=False) tp = result[0] fp = result[1] assert tp.shape == (1, 3) assert fp.shape == (1, 3) assert (tp == np.array([[1, 1, 0]])).all() assert (fp == np.array([[0, 0, 1]])).all() def test_eval_map(): # 2 image and 2 classes det_results = [[det_bboxes, det_bboxes], [det_bboxes, det_bboxes]] labels = np.array([0, 1, 1]) labels_ignore = np.array([0, 1]) gt_info = { 'bboxes': gt_bboxes, 'bboxes_ignore': gt_ignore, 'labels': labels, 'labels_ignore': labels_ignore } annotations = [gt_info, gt_info] mean_ap, eval_results = eval_map( det_results, annotations, use_legacy_coordinate=True) assert 0.291 < mean_ap < 0.293 eval_map(det_results, annotations, use_legacy_coordinate=False) assert 0.291 < mean_ap < 0.293