Spaces:
Running
Running
| """ | |
| 作者:林泽毅 | |
| 建这个开源库的起源呢,是因为在做 onnx 推理的时候,需要将原来的 tensor 转换成 numpy.array | |
| 问题是 Tensor 和 Numpy 的矩阵排布逻辑不同 | |
| 包括 Tensor 推理经常会进行 Transform,比如 ToTensor,Normalize 等 | |
| 就想做一些等价转换的函数。 | |
| """ | |
| import numpy as np | |
| def NTo_Tensor(array): | |
| """ | |
| :param array: opencv/PIL读取的numpy矩阵 | |
| :return:返回一个形如 Tensor 的 numpy 矩阵 | |
| Example: | |
| Inputs:array.shape = (512,512,3) | |
| Outputs:output.shape = (3,512,512) | |
| """ | |
| output = array.transpose((2, 0, 1)) | |
| return output | |
| def NNormalize(array, mean=np.array([0.5, 0.5, 0.5]), std=np.array([0.5, 0.5, 0.5]), dtype=np.float32): | |
| """ | |
| :param array: opencv/PIL读取的numpy矩阵 | |
| mean: 归一化均值,np.array 格式 | |
| std: 归一化标准差,np.array 格式 | |
| dtype:输出的 numpy 数据格式,一般 onnx 需要 float32 | |
| :return:numpy 矩阵 | |
| Example: | |
| Inputs:array 为 opencv/PIL 读取的一张图片 | |
| mean=np.array([0.5,0.5,0.5]) | |
| std=np.array([0.5,0.5,0.5]) | |
| dtype=np.float32 | |
| Outputs:output 为归一化后的 numpy 矩阵 | |
| """ | |
| im = array / 255.0 | |
| im = np.divide(np.subtract(im, mean), std) | |
| output = np.asarray(im, dtype=dtype) | |
| return output | |
| def NUnsqueeze(array, axis=0): | |
| """ | |
| :param array: opencv/PIL读取的numpy矩阵 | |
| axis:要增加的维度 | |
| :return:numpy 矩阵 | |
| Example: | |
| Inputs:array 为 opencv/PIL 读取的一张图片,array.shape 为 [512,512,3] | |
| axis=0 | |
| Outputs:output 为 array 在第 0 维增加一个维度,shape 转为 [1,512,512,3] | |
| """ | |
| if axis == 0: | |
| output = array[None, :, :, :] | |
| elif axis == 1: | |
| output = array[:, None, :, :] | |
| elif axis == 2: | |
| output = array[:, :, None, :] | |
| else: | |
| output = array[:, :, :, None] | |
| return output | |