|
from types import ModuleType |
|
import data_info |
|
|
|
def load_data_info(module_name, data_info={}, mldb_type='mldb_info', module=None): |
|
if module is None: |
|
module = globals().get(module_name, None) |
|
if module: |
|
for key, value in module.__dict__.items(): |
|
if not (key.startswith('__')) and not (key.startswith('_')): |
|
if key == 'mldb_info': |
|
data_info.update(value) |
|
elif isinstance(value, ModuleType): |
|
load_data_info(module_name + '.' + key, data_info, module=value) |
|
else: |
|
raise RuntimeError(f'Try to access "mldb_info", but cannot find {module_name} module.') |
|
|
|
def reset_ckpt_path(cfg, data_info): |
|
if isinstance(cfg, dict): |
|
for key in cfg.keys(): |
|
if key == 'backbone': |
|
new_ckpt_path = data_info['checkpoint']['mldb_root'] + '/' + data_info['checkpoint'][cfg.backbone.type] |
|
cfg.backbone.update(checkpoint=new_ckpt_path) |
|
continue |
|
elif isinstance(cfg.get(key), dict): |
|
reset_ckpt_path(cfg.get(key), data_info) |
|
else: |
|
continue |
|
else: |
|
return |
|
|
|
if __name__ == '__main__': |
|
mldb_info_tmp = {} |
|
load_data_info('mldb_data_info', mldb_info_tmp) |
|
print('results', mldb_info_tmp.keys()) |