|
import os.path as osp |
|
import tempfile |
|
from unittest import TestCase |
|
|
|
import numpy as np |
|
import torch |
|
|
|
from mmdet.evaluation import CrowdHumanMetric |
|
|
|
|
|
class TestCrowdHumanMetric(TestCase): |
|
|
|
def _create_dummy_results(self): |
|
bboxes = np.array([[1330, 317, 418, 1338], [792, 24, 723, 2017], |
|
[693, 291, 307, 894], [522, 290, 285, 826], |
|
[728, 336, 175, 602], [92, 337, 267, 681]]) |
|
bboxes[:, 2:4] += bboxes[:, 0:2] |
|
scores = np.array([1.0, 1.0, 1.0, 1.0, 1.0, 1.0]) |
|
return dict( |
|
bboxes=torch.from_numpy(bboxes), scores=torch.from_numpy(scores)) |
|
|
|
def setUp(self): |
|
self.tmp_dir = tempfile.TemporaryDirectory() |
|
self.ann_file_path = \ |
|
'tests/data/crowdhuman_dataset/test_annotation_train.odgt', |
|
|
|
def tearDown(self): |
|
self.tmp_dir.cleanup() |
|
|
|
def test_init(self): |
|
with self.assertRaisesRegex(KeyError, 'metric should be one of'): |
|
CrowdHumanMetric(ann_file=self.ann_file_path[0], metric='unknown') |
|
|
|
def test_evaluate(self): |
|
|
|
dummy_pred = self._create_dummy_results() |
|
|
|
crowdhuman_metric = CrowdHumanMetric( |
|
ann_file=self.ann_file_path[0], |
|
outfile_prefix=f'{self.tmp_dir.name}/test') |
|
crowdhuman_metric.process({}, [ |
|
dict( |
|
pred_instances=dummy_pred, |
|
img_id='283554,35288000868e92d4', |
|
ori_shape=(1640, 1640)) |
|
]) |
|
eval_results = crowdhuman_metric.evaluate(size=1) |
|
target = { |
|
'crowd_human/mAP': 0.8333, |
|
'crowd_human/mMR': 0.0, |
|
'crowd_human/JI': 1.0 |
|
} |
|
self.assertDictEqual(eval_results, target) |
|
self.assertTrue(osp.isfile(osp.join(self.tmp_dir.name, 'test.json'))) |
|
|