File size: 1,967 Bytes
c5819e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
"""

作者:林泽毅

建这个开源库的起源呢,是因为在做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