|
|
|
from unittest.mock import MagicMock |
|
|
|
import pytest |
|
from mmcv import Config |
|
from numpy.testing import assert_almost_equal |
|
|
|
from mmpose.datasets import DATASETS |
|
from tests.utils.data_utils import convert_db_to_output |
|
|
|
|
|
def test_deepfashion_dataset(): |
|
dataset = 'DeepFashionDataset' |
|
dataset_info = Config.fromfile( |
|
'configs/_base_/datasets/deepfashion_full.py').dataset_info |
|
|
|
dataset_class = DATASETS.get(dataset) |
|
dataset_class.load_annotations = MagicMock() |
|
dataset_class.coco = MagicMock() |
|
|
|
channel_cfg = dict( |
|
num_output_channels=8, |
|
dataset_joints=8, |
|
dataset_channel=[ |
|
[0, 1, 2, 3, 4, 5, 6, 7], |
|
], |
|
inference_channel=[0, 1, 2, 3, 4, 5, 6, 7]) |
|
|
|
data_cfg = dict( |
|
image_size=[192, 256], |
|
heatmap_size=[48, 64], |
|
num_output_channels=channel_cfg['num_output_channels'], |
|
num_joints=channel_cfg['dataset_joints'], |
|
dataset_channel=channel_cfg['dataset_channel'], |
|
inference_channel=channel_cfg['inference_channel'], |
|
soft_nms=False, |
|
nms_thr=1.0, |
|
oks_thr=0.9, |
|
vis_thr=0.2, |
|
use_gt_bbox=True, |
|
det_bbox_thr=0.0, |
|
image_thr=0.0, |
|
bbox_file='') |
|
|
|
|
|
custom_dataset = dataset_class( |
|
ann_file='tests/data/fld/test_fld.json', |
|
img_prefix='tests/data/fld/', |
|
subset='full', |
|
data_cfg=data_cfg, |
|
pipeline=[], |
|
dataset_info=dataset_info, |
|
test_mode=True) |
|
|
|
assert custom_dataset.test_mode is True |
|
assert custom_dataset.dataset_name == 'deepfashion_full' |
|
|
|
image_id = 128 |
|
assert image_id in custom_dataset.img_ids |
|
assert len(custom_dataset.img_ids) == 2 |
|
_ = custom_dataset[0] |
|
|
|
results = convert_db_to_output(custom_dataset.db) |
|
infos = custom_dataset.evaluate(results, metric=['PCK', 'EPE', 'AUC']) |
|
assert_almost_equal(infos['PCK'], 1.0) |
|
assert_almost_equal(infos['AUC'], 0.95) |
|
assert_almost_equal(infos['EPE'], 0.0) |
|
|
|
with pytest.raises(KeyError): |
|
infos = custom_dataset.evaluate(results, metric='mAP') |
|
|