88 lines
2.3 KiB
Python
88 lines
2.3 KiB
Python
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
|