""" 作者:林泽毅 建这个开源库的起源呢,是因为在做 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