Spaces:
Runtime error
Runtime error
| # Copyright (c) OpenMMLab. All rights reserved. | |
| import numpy as np | |
| def quantize(arr, min_val, max_val, levels, dtype=np.int64): | |
| """Quantize an array of (-inf, inf) to [0, levels-1]. | |
| Args: | |
| arr (ndarray): Input array. | |
| min_val (scalar): Minimum value to be clipped. | |
| max_val (scalar): Maximum value to be clipped. | |
| levels (int): Quantization levels. | |
| dtype (np.type): The type of the quantized array. | |
| Returns: | |
| tuple: Quantized array. | |
| """ | |
| if not (isinstance(levels, int) and levels > 1): | |
| raise ValueError( | |
| f'levels must be a positive integer, but got {levels}') | |
| if min_val >= max_val: | |
| raise ValueError( | |
| f'min_val ({min_val}) must be smaller than max_val ({max_val})') | |
| arr = np.clip(arr, min_val, max_val) - min_val | |
| quantized_arr = np.minimum( | |
| np.floor(levels * arr / (max_val - min_val)).astype(dtype), levels - 1) | |
| return quantized_arr | |
| def dequantize(arr, min_val, max_val, levels, dtype=np.float64): | |
| """Dequantize an array. | |
| Args: | |
| arr (ndarray): Input array. | |
| min_val (scalar): Minimum value to be clipped. | |
| max_val (scalar): Maximum value to be clipped. | |
| levels (int): Quantization levels. | |
| dtype (np.type): The type of the dequantized array. | |
| Returns: | |
| tuple: Dequantized array. | |
| """ | |
| if not (isinstance(levels, int) and levels > 1): | |
| raise ValueError( | |
| f'levels must be a positive integer, but got {levels}') | |
| if min_val >= max_val: | |
| raise ValueError( | |
| f'min_val ({min_val}) must be smaller than max_val ({max_val})') | |
| dequantized_arr = (arr + 0.5).astype(dtype) * (max_val - | |
| min_val) / levels + min_val | |
| return dequantized_arr | |