# Copyright (c) Meta Platforms, Inc. and affiliates. # All rights reserved. # # This source code is licensed under the license found in the # LICENSE file in the root directory of this source tree. import mmengine import numpy as np def write_to_json(config: dict, filename: str): """save config to json file. Args: config (dict): Config to be saved. filename (str): Path to save config. """ with open(filename, 'w', encoding='utf-8') as f: mmengine.dump(config, f, file_format='json') def expand_rates(dilation: tuple, config: dict) -> list: """expand dilation rate according to config. Args: dilation (int): _description_ config (dict): config dict Returns: list: list of expanded dilation rates """ exp_rate = config['exp_rate'] large_rates = [] small_rates = [] for _ in range(config['num_branches'] // 2): large_rates.append( tuple([ np.clip( int(round((1 + exp_rate) * dilation[0])), config['mmin'], config['mmax']).item(), np.clip( int(round((1 + exp_rate) * dilation[1])), config['mmin'], config['mmax']).item() ])) small_rates.append( tuple([ np.clip( int(round((1 - exp_rate) * dilation[0])), config['mmin'], config['mmax']).item(), np.clip( int(round((1 - exp_rate) * dilation[1])), config['mmin'], config['mmax']).item() ])) small_rates.reverse() if config['num_branches'] % 2 == 0: rate_list = small_rates + large_rates else: rate_list = small_rates + [dilation] + large_rates unique_rate_list = list(set(rate_list)) unique_rate_list.sort(key=rate_list.index) return unique_rate_list def get_single_padding(kernel_size: int, stride: int = 1, dilation: int = 1) -> int: padding = ((stride - 1) + dilation * (kernel_size - 1)) // 2 return padding