Spaces:
Runtime error
Runtime error
| # Copyright (c) OpenMMLab. All rights reserved. | |
| import os | |
| import random | |
| import sys | |
| import time | |
| import warnings | |
| from getpass import getuser | |
| from socket import gethostname | |
| import numpy as np | |
| import torch | |
| import annotator.uniformer.mmcv as mmcv | |
| def get_host_info(): | |
| """Get hostname and username. | |
| Return empty string if exception raised, e.g. ``getpass.getuser()`` will | |
| lead to error in docker container | |
| """ | |
| host = '' | |
| try: | |
| host = f'{getuser()}@{gethostname()}' | |
| except Exception as e: | |
| warnings.warn(f'Host or user not found: {str(e)}') | |
| finally: | |
| return host | |
| def get_time_str(): | |
| return time.strftime('%Y%m%d_%H%M%S', time.localtime()) | |
| def obj_from_dict(info, parent=None, default_args=None): | |
| """Initialize an object from dict. | |
| The dict must contain the key "type", which indicates the object type, it | |
| can be either a string or type, such as "list" or ``list``. Remaining | |
| fields are treated as the arguments for constructing the object. | |
| Args: | |
| info (dict): Object types and arguments. | |
| parent (:class:`module`): Module which may containing expected object | |
| classes. | |
| default_args (dict, optional): Default arguments for initializing the | |
| object. | |
| Returns: | |
| any type: Object built from the dict. | |
| """ | |
| assert isinstance(info, dict) and 'type' in info | |
| assert isinstance(default_args, dict) or default_args is None | |
| args = info.copy() | |
| obj_type = args.pop('type') | |
| if mmcv.is_str(obj_type): | |
| if parent is not None: | |
| obj_type = getattr(parent, obj_type) | |
| else: | |
| obj_type = sys.modules[obj_type] | |
| elif not isinstance(obj_type, type): | |
| raise TypeError('type must be a str or valid type, but ' | |
| f'got {type(obj_type)}') | |
| if default_args is not None: | |
| for name, value in default_args.items(): | |
| args.setdefault(name, value) | |
| return obj_type(**args) | |
| def set_random_seed(seed, deterministic=False, use_rank_shift=False): | |
| """Set random seed. | |
| Args: | |
| seed (int): Seed to be used. | |
| deterministic (bool): Whether to set the deterministic option for | |
| CUDNN backend, i.e., set `torch.backends.cudnn.deterministic` | |
| to True and `torch.backends.cudnn.benchmark` to False. | |
| Default: False. | |
| rank_shift (bool): Whether to add rank number to the random seed to | |
| have different random seed in different threads. Default: False. | |
| """ | |
| if use_rank_shift: | |
| rank, _ = mmcv.runner.get_dist_info() | |
| seed += rank | |
| random.seed(seed) | |
| np.random.seed(seed) | |
| torch.manual_seed(seed) | |
| torch.cuda.manual_seed(seed) | |
| torch.cuda.manual_seed_all(seed) | |
| os.environ['PYTHONHASHSEED'] = str(seed) | |
| if deterministic: | |
| torch.backends.cudnn.deterministic = True | |
| torch.backends.cudnn.benchmark = False | |