| import yaml |
| import os |
| import os.path as osp |
| import glob |
| import numpy as np |
| from easydict import EasyDict |
| from utils.utils import recreate_dirs |
|
|
|
|
| class Config: |
|
|
| def __init__(self, cfg_id, info): |
| self.id = cfg_id |
| cfg_path = 'cfg/**/%s.yml' % cfg_id |
| files = glob.glob(cfg_path, recursive=True) |
| assert (len(files) == 1), 'YAML file [{}] does not exist!'.format(cfg_id) |
| self.yml_dict = EasyDict(yaml.safe_load(open(files[0], 'r'))) |
|
|
| self.results_root_dir = os.path.expanduser(self.yml_dict['results_root_dir']) |
| |
|
|
| self.cfg_dir = '%s/%s/%s' % (self.results_root_dir, cfg_id, info) |
| self.model_dir = '%s/models' % self.cfg_dir |
| self.log_dir = '%s/log' % self.cfg_dir |
| self.model_path = os.path.join(self.model_dir, 'model_%04d.p') |
| os.makedirs(self.model_dir, exist_ok=True) |
| os.makedirs(self.log_dir, exist_ok=True) |
|
|
| def get_last_epoch(self): |
| model_files = glob.glob(os.path.join(self.model_dir, 'model_*.p')) |
| if len(model_files) == 0: |
| return None |
| else: |
| model_file = osp.basename(model_files[0]) |
| epoch = int(osp.splitext(model_file)[0].split('model_')[-1]) |
| return epoch |
|
|
| def __getattribute__(self, name): |
| yml_dict = super().__getattribute__('yml_dict') |
| if name in yml_dict: |
| return yml_dict[name] |
| else: |
| return super().__getattribute__(name) |
|
|
| def __setattr__(self, name, value): |
| try: |
| yml_dict = super().__getattribute__('yml_dict') |
| except AttributeError: |
| return super().__setattr__(name, value) |
| if name in yml_dict: |
| yml_dict[name] = value |
| else: |
| return super().__setattr__(name, value) |
|
|
| def get(self, name, default=None): |
| if hasattr(self, name): |
| return getattr(self, name) |
| else: |
| return default |
| |