# Copyright (c) OpenMMLab. All rights reserved. from os.path import dirname, exists, join, relpath import torch from mmcv.runner import build_optimizer def _get_config_directory(): """Find the predefined detector config directory.""" try: # Assume we are running in the source mmdetection repo repo_dpath = dirname(dirname(__file__)) except NameError: # For IPython development when this __file__ is not defined import mmpose repo_dpath = dirname(dirname(mmpose.__file__)) config_dpath = join(repo_dpath, 'configs') if not exists(config_dpath): raise Exception('Cannot find config path') return config_dpath def test_config_build_detector(): """Test that all detection models defined in the configs can be initialized.""" from mmcv import Config from mmpose.models import build_posenet config_dpath = _get_config_directory() print(f'Found config_dpath = {config_dpath}') import glob config_fpaths = list(glob.glob(join(config_dpath, '**', '*.py'))) config_fpaths = [p for p in config_fpaths if p.find('_base_') == -1] config_names = [relpath(p, config_dpath) for p in config_fpaths] print(f'Using {len(config_names)} config files') for config_fname in config_names: config_fpath = join(config_dpath, config_fname) config_mod = Config.fromfile(config_fpath) print(f'Building detector, config_fpath = {config_fpath}') # Remove pretrained keys to allow for testing in an offline environment if 'pretrained' in config_mod.model: config_mod.model['pretrained'] = None detector = build_posenet(config_mod.model) assert detector is not None optimizer = build_optimizer(detector, config_mod.optimizer) assert isinstance(optimizer, torch.optim.Optimizer)