ml.preprocessing — ML 预处理

`ml.preprocessing`模块包含用于图像预处理的类,以便与机器学习模型一起使用。

class Normalization – 图像归一化

Normalization 对象用于将图像对象转换为 numpy ndarray 对象,以便与 Model 对象一起使用。当图像对象被传递给 predict() 时,它会被 Model 对象自动创建。然而,你也可以手动创建一个 Normalization 对象,以控制转换过程、选择 ROI(感兴趣区域)等。

举例:

model = ml.Model("model.tflite")
norm = ml.Normalization(scale=(0.0, 1.0), mean=(0.485, 0.456, 0.406), stdev=(0.229, 0.224, 0.225))
outputs = model.predict([norm(image)])

构造

class ml.preprocessing.Normalization(scale: tuple[float, float] = (0.0, 1.0), mean: tuple[float, float, float] = (0.0, 0.0, 0.0), stdev: tuple[float, float, float] = (1.0, 1.0, 1.0), roi: tuple[int, int, int, int] = None) Normalization

创建一个 Normalization 对象,用于将图像对象转换为 numpy 数组,以供 predict() 使用。该对象还可用于选择图像中的感兴趣区域 (ROI) 并将其转换为 numpy 数组。

Normalization 对象会自动将传入的任何图像类型(包括压缩图像)转换为单通道(灰度)或三通道(RGB888)图像,并将其传递到模型的张量输入中。图像会根据需要居中、按比例放大/缩小(使用双线性或区域缩放)、并裁剪,以匹配模型输入张量的大小。

对于 uint8 输入张量,图像会被直接传递,忽略缩放和均值/标准差处理。对于 int8 输入张量,图像会从 uint8 范围平移到 int8 范围,然后直接传递,同样忽略缩放和均值/标准差处理。接受这些格式的张量比需要浮点数输入的张量处理速度更快。

对于浮点数输入张量,无法推测模型期望的正确范围。虽然每个输入张量都编码了一个缩放值和零点值,可用于将输入转换到正确范围,但这些值并未指示浮点数输入数据应处于何种范围。例如,图像的 RGB 值在应用缩放和零点之前,应该在 (0.0, 1.0)、(-1.0, 1.0)、(0.0, 255.0) 等范围内?答案取决于模型及其训练方式。因此,Normalization 对象允许您直接指定输入数据的范围、均值和标准差。然后,灰度图像或 RGB888 图像会根据这些值转换为浮点数张量,以供模型处理。

不支持 uint16int16 输入张量。