import ast from typing import Tuple, List from roi.pooler import Pooler class Config(object): IMAGE_MIN_SIDE: float = 600.0 IMAGE_MAX_SIDE: float = 1000.0 ANCHOR_RATIOS: List[Tuple[int, int]] = [(1, 2), (1, 1), (2, 1)] ANCHOR_SIZES: List[int] = [128, 256, 512] POOLER_MODE: Pooler.Mode = Pooler.Mode.POOLING @classmethod def describe(cls): text = '\nConfig:\n' attrs = [attr for attr in dir(cls) if not callable(getattr(cls, attr)) and not attr.startswith('__')] text += '\n'.join(['\t{:s} = {:s}'.format(attr, str(getattr(cls, attr))) for attr in attrs]) + '\n' return text @classmethod def setup(cls, image_min_side: float = None, image_max_side: float = None, anchor_ratios: List[Tuple[int, int]] = None, anchor_sizes: List[int] = None, pooler_mode: str = None): if image_min_side is not None: cls.IMAGE_MIN_SIDE = image_min_side if image_max_side is not None: cls.IMAGE_MAX_SIDE = image_max_side if anchor_ratios is not None: cls.ANCHOR_RATIOS = ast.literal_eval(anchor_ratios) if anchor_sizes is not None: cls.ANCHOR_SIZES = ast.literal_eval(anchor_sizes) if pooler_mode is not None: cls.POOLER_MODE = Pooler.Mode(pooler_mode)