ml.preprocessing — Предобработка ML

Модуль ml.preprocessing содержит классы для предобработки изображений для использования с моделями машинного обучения.

class Normalization – Нормализация изображения

Объект Normalization преобразует объекты image.Image во входные тензоры ndarray для использования с ml.Model.predict(). Он автоматически создаётся объектом ml.Model, когда изображение передаётся в ml.Model.predict(), но может быть создан вручную для управления преобразованием (масштаб, среднее/стандартное отклонение, 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)). Игнорируется для входных тензоров uint8 и int8.

mean — это среднее по каналам (R, G, B), вычитаемое из изображения после масштабирования. Для тензоров в оттенках серого среднее сводится к одному значению яркости с помощью 0.299*R + 0.587*G + 0.114*B. Игнорируется для входных тензоров uint8 и int8.

stdev — это стандартное отклонение по каналам (R, G, B), на которое делится изображение после вычитания среднего. Для тензоров в оттенках серого стандартное отклонение сводится к одному значению яркости с помощью 0.299*R + 0.587*G + 0.114*B. Игнорируется для входных тензоров uint8 и int8.

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) заполняет buffer на месте нормализованным входным тензором для ранее привязанного изображения. shape должна быть (1, H, W, C) с C, равным 1 (оттенки серого) или 3 (RGB). dtype — это код типа ulab numpy (например, ord('f') для float32, ord('b') для int8, ord('B') для uint8). Тензоры с плавающей точкой применяют scale, mean и stdev; целочисленные тензоры записываются напрямую (со смещением для int8).