ml.preprocessing --- ML 前処理

ml.preprocessing モジュールには、機械学習モデルで使用するための画像を前処理するクラスが含まれています。

class Normalization -- 画像正規化

Normalization オブジェクトは、image.Image オブジェクトを ml.Model.predict() で使用する ndarray 入力テンソルに変換します。これは画像が ml.Model.predict() に渡されたときに ml.Model オブジェクトによって自動的に作成されますが、変換(スケール、平均/標準偏差、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) でなければならず、C1(グレースケール)または 3(RGB)に等しい必要があります。dtype は ulab numpy の型コードです(例: float32 の場合は ord('f')、int8 の場合は ord('b')、uint8 の場合は ord('B'))。浮動小数点テンソルには scalemeanstdev が適用されます。整数テンソルは(int8 用のオフセットを付けて)直接書き込まれます。