ml.preprocessing --- ML 预处理

ml.preprocessing 模块包含用于预处理图像以供机器学习模型使用的类。

class Normalization -- 图像归一化

Normalization 对象将 image.Image 对象转换为 ndarray 输入张量,以供 ml.Model.predict() 使用。当向 ml.Model.predict() 传入图像时,它由 ml.Model 对象自动创建,但也可手动实例化以控制转换过程(scale、mean/stdev、ROI)。

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 对象。

scale 是浮点型输入张量在归一化后所期望的值 (min, max) 范围(例如 (0.0, 1.0)(-1.0, 1.0))。对于 uint8int8 输入张量则忽略此项。

mean 是缩放后从图像中减去的逐通道均值 (R, G, B)。对于灰度张量,均值会使用 0.299*R + 0.587*G + 0.114*B 缩减为单个亮度值。对于 uint8int8 输入张量则忽略此项。

stdev 是减去均值后图像所除以的逐通道标准差 (R, G, B)。对于灰度张量,标准差会使用 0.299*R + 0.587*G + 0.114*B 缩减为单个亮度值。对于 uint8int8 输入张量则忽略此项。

roi 是输入图像内一个可选的 (x, y, w, h) 感兴趣区域,用于裁剪。若为 None,则使用整幅图像。裁剪出的区域会被居中,并双线性缩放(保持纵横比并用黑色填充)到模型的输入张量尺寸。

__call__(image: image.Image) Normalization
__call__(buffer: bytearray, shape: tuple[int, int, int, int], dtype: int) None

当以单个 image.Image 参数调用时,返回一个绑定到该图像的新 Normalization 对象。ml.Model.predict() 在内部调用的正是这个绑定对象来填充输入张量。如果原始实例上未设置 roi,则会将其初始化为整幅图像的大小。

当以 (buffer, shape, dtype) 调用时,会就地用先前所绑定图像的归一化输入张量填充 buffershape 必须为 (1, H, W, C),其中 C 等于 1(灰度)或 3(RGB)。dtype 是 ulab numpy 类型码(例如 ord('f') 表示 float32,ord('b') 表示 int8,ord('B') 表示 uint8)。浮点张量会应用 scalemeanstdev;整数张量则直接写入(对 int8 带有一个偏移量)。