import yaml class Args: def get_args_string(self) -> str: string = '' for key, value in self.__dict__.items(): if not isinstance(value, Configuration.Train.OtherHyps) and value is not None: if key == 'img-size': string += f' --{key} {value.split(" ")[0]} {value.split(" ")[1]}' elif type(value) == bool: if value: string += f" --{key}" else: continue elif type(value) in [int, str] and value != '': string += f' --{key} {value}' else: raise Exception(f"Cannot parse argument {key} {value}") return string class Configuration: class Train(Args): class OtherHyps: def __init__(self, config_file) -> None: for key, value in config_file['train']['other-hyps'].items(): self.__dict__[key] = value def __init__(self, config_file) -> None: self.other_hyps = Configuration.Train.OtherHyps(config_file) for key, value in config_file['train'].items(): if key != 'other-hyps': self.__dict__[key] = value class Experiments(Args): def __init__(self, config_file) -> None: for key, value in config_file['experiments'].items(): self.__dict__[key] = value class Detect(Args): def __init__(self, config_file) -> None: for key, value in config_file['detect'].items(): self.__dict__[key] = value class ConfussionMatrix(Args): def __init__(self, config_file) -> None: for key, value in config_file['confussion-matrix'].items(): self.__dict__[key] = value class Bayes(Args): def __init__(self, config_file) -> None: for key, value in config_file['bayes'].items(): self.__dict__[key] = value def __init__(self, config_path='/home/tomekb/yolov3/our_scripts/config.yml') -> None: self.config_path = config_path file = yaml.load(open(config_path, 'r'), Loader=yaml.Loader) self.train = self.Train(file) self.experiments = self.Experiments(file) self.detect = self.Detect(file) self.confussion_matrix = self.ConfussionMatrix(file) self.bayes = self.Bayes(file)