ml.preprocessing — ML-Vorverarbeitung

Das Modul ml.preprocessing enthält Klassen zur Vorverarbeitung von Bildern für die Verwendung mit Modellen des maschinellen Lernens.

class Normalization – Bildnormalisierung

Das Normalization-Objekt konvertiert image.Image-Objekte in ndarray-Eingabetensoren zur Verwendung mit ml.Model.predict(). Es wird automatisch vom ml.Model-Objekt erstellt, wenn ein Bild an ml.Model.predict() übergeben wird, kann aber auch manuell instanziiert werden, um die Konvertierung zu steuern (Skala, Mittelwert/Standardabweichung, 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)

Erstellt ein Normalization-Objekt.

scale ist der (min, max)-Wertebereich, den Gleitkomma-Eingabetensoren nach der Normalisierung erwarten (z. B. (0.0, 1.0) oder (-1.0, 1.0)). Wird für uint8- und int8-Eingabetensoren ignoriert.

mean ist der kanalweise Mittelwert (R, G, B), der nach der Skalierung vom Bild abgezogen wird. Für Graustufentensoren wird der Mittelwert mittels 0.299*R + 0.587*G + 0.114*B auf einen einzelnen Luma-Wert reduziert. Wird für uint8- und int8-Eingabetensoren ignoriert.

stdev ist die kanalweise Standardabweichung (R, G, B), durch die das Bild nach dem Abziehen des Mittelwerts geteilt wird. Für Graustufentensoren wird die Standardabweichung mittels 0.299*R + 0.587*G + 0.114*B auf einen einzelnen Luma-Wert reduziert. Wird für uint8- und int8-Eingabetensoren ignoriert.

roi ist ein optionaler (x, y, w, h)-Interessensbereich innerhalb des Eingabebildes, der zugeschnitten werden soll. Ist er None, wird das gesamte Bild verwendet. Der zugeschnittene Bereich wird zentriert und bilinear (unter Beibehaltung des Seitenverhältnisses mit schwarzer Auffüllung) auf die Abmessungen des Eingabetensors des Modells skaliert.

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

Beim Aufruf mit einem einzelnen image.Image-Argument wird ein neues, an dieses Bild gebundenes Normalization-Objekt zurückgegeben. Das gebundene Objekt ist das, was ml.Model.predict() intern aufruft, um den Eingabetensor zu füllen. Wurde roi an der ursprünglichen Instanz nicht gesetzt, wird es auf die volle Bildgröße initialisiert.

Beim Aufruf mit (buffer, shape, dtype) wird buffer direkt mit dem normalisierten Eingabetensor für das zuvor gebundene Bild gefüllt. shape muss (1, H, W, C) sein, wobei C gleich 1 (Graustufen) oder 3 (RGB) ist. dtype ist der ulab-numpy-Typcode (z. B. ord('f') für float32, ord('b') für int8, ord('B') für uint8). Float-Tensoren wenden scale, mean und stdev an; Integer-Tensoren werden direkt geschrieben (mit einem Offset für int8).