ml.utils --- ML ユーティリティ

ml.utils モジュールには、機械学習のためのユーティリティクラスと関数が含まれています。

関数

ml.utils.logit(x: ndarray) ndarray

渡された ndarray のすべての値のロジットを返します。

ml.utils.sigmoid(x: ndarray) ndarray

渡された ndarray のすべての値のシグモイドを返します。

ml.utils.threshold(scores: ndarray, threshold: float, scale: float, find_max: bool = False, find_max_axis: int = 1) ndarray

scores (int8、uint8、int16、または uint16 の量子化された ndarray)を量子化された threshold でしきい値処理し、しきい値を通過したすべてのインデックスからなる ndarray を返します。

scale を調べて、逆量子化された値が正か負かを判定します。scale > 0 の場合は scores > threshold となるインデックスが返され、それ以外の場合は scores < threshold となるインデックスが返されます。

find_max が True の場合、scores を内部的に find_max_axis に沿った最大値(scale に応じて最小値)の ndarray で置き換えます。

find_max_axis は、find_max が True のときに最大値/最小値の縮約を計算する軸です。

ml.utils.quantize(model: ml.Model, value: ndarray, index: int = 0) ndarray

渡された ndarray をスケールで除算し、モデルのゼロ点を加算することで変換します。index におけるモデル出力の dtype が float の場合は value をそのまま返します。

model は、出力の量子化パラメータが使用されるモデルです。

value は量子化する ndarray です。

index は、量子化の対象とする model のテンソル出力を選択します。

ml.utils.dequantize(model: ml.Model, value: ndarray, index: int = 0) ndarray

渡された ndarray からゼロ点を減算し、モデルのスケールを乗算することで変換します。index におけるモデル出力の dtype が float の場合は value をそのまま返します。

model は、出力の量子化パラメータが使用されるモデルです。

value は逆量子化する ndarray です。

index は、逆量子化の対象とする model のテンソル出力を選択します。

ml.utils.draw_predictions(image: image.Image, boxes: list[tuple[float, float, float, float]], labels: list[str], colors: list[tuple[int, int, int]], scores: list[float] | None = None, format: str = 'pascal_voc', font_width: int = 8, font_height: int = 10, text_color: tuple[int, int, int] = (255, 255, 255)) None

テキストラベル付きのバウンディングボックス(または中心点マーカー)を image に描画します。

boxes(x, y, w, h) タプルのリストです。

labels はボックスごとに1つのラベル文字列のリストです。

colors はボックスごとに1つの (r, g, b) タプルのリストです。

scoresNone でない場合、ボックスごとの信頼度スコアのリストです。指定された場合、描画される各ラベルには " %.2f" の形式でフォーマットされたスコアが付加されます。

format はボックス座標の解釈方法を制御します。

  • "pascal_voc" -- 0.0 から 1.0 の範囲に正規化された (xmin, ymin, xmax, ymax)

  • "point" -- 絶対ピクセルの (x, y, w, h)。長方形の代わりに、ボックスの中心に塗りつぶされた円マーカーが描画されます(中心点検出器に便利です)。

  • その他の値 -- 絶対ピクセルの (x, y, w, h)。長方形として描画されます。

font_width はラベル内の各文字の幅(ピクセル単位)です。

font_height はラベル背景の高さ(ピクセル単位)です。

text_color はラベルテキストに使用される (r, g, b) カラーです。

ml.utils.draw_keypoints(image: image.Image, keypoints: ndarray, radius: int = 4, color: tuple[int, int, int] = (255, 0, 0), thickness: int = 1, fill: bool = False) None

キーポイントの (x, y, ...) 値からなる ndarrayimage に描画します。

radius はキーポイントの円の半径です。radius == 0 の場合、キーポイントは単一ピクセルとして描画されます。

color はキーポイントの (r, g, b) カラーです。

thickness は円の輪郭の太さです。

fill が True の場合、キーポイントの円を塗りつぶします。

ml.utils.draw_skeleton(image: image.Image, keypoints: ndarray, lines: list[tuple[int, int]], kp_radius: int = 4, kp_color: tuple[int, int, int] = (255, 0, 0), kp_thickness: int = 1, kp_fill: bool = False, line_color: tuple[int, int, int] = (0, 255, 0), line_thickness: int = 1) None

キーポイントの (x, y, ...) 値からなる ndarrayimage に描画し、それらを線分で接続します。

lines は、接続するキーポイントのペアを指定する (kp0_idx, kp1_idx) タプルのリストです。

kp_radius はキーポイントの円の半径です(draw_keypoints にそのまま渡されます)。

kp_color はキーポイントの (r, g, b) カラーです。

kp_thickness はキーポイントの円の輪郭の太さです。

kp_fill が True の場合、キーポイントの円を塗りつぶします。

line_color は線の (r, g, b) カラーです。

line_thickness は線の太さです。

class NMS -- ソフト非最大抑制(Soft-Non-Maximum Suppression)

NMS オブジェクトは、関連するスコアを持つバウンディングボックスのリストを収集し、Soft-NMS によってスコアの低い重複ボックスをフィルタリングし、サブウィンドウ内で検出されたボックスを元の画像座標に再マッピングします。

class ml.utils.NMS(window_w: int, window_h: int, roi: tuple[int, int, int, int])

NMS オブジェクトを作成します。

window_wwindow_h は、モデル入力テンソル/ウィンドウの幅と高さです。

roi は、モデルが実行された元の画像の (x, y, w, h) 関心領域(ROI)です(通常は Normalization() オブジェクトから返されます)。検出されたボックスを元の画像座標空間に再マッピングするために使用されます。roi[2]roi[3] は1以上でなければなりません。

add_bounding_box(xmin: float, ymin: float, xmax: float, ymax: float, score: float, label_index: int, keypoints: ndarray | None = None) None

NMS オブジェクトにバウンディングボックスを追加します。score[0.0, 1.0] の範囲外であるボックス、またはクリッピング後に幅や高さがゼロ以下になるボックスは破棄されます。

xminyminxmaxymax は、ウィンドウのピクセル空間におけるバウンディングボックスの座標で、[0, window_w][0, window_h] にクリッピングされます。

score はバウンディングボックスの信頼度スコア(0.0~1.0)です。

label_index はバウンディングボックスに関連付けられたクラスラベルのインデックスです。

keypoints は、このバウンディングボックスに関連付けられたキーポイントの (x, y, ...) 値からなる省略可能な ndarray です。

get_bounding_boxes(threshold: float = 0.1, sigma: float = 0.1) list[list[tuple]]

追加されたすべてのボックスに対して Soft-NMS を実行し、label_index でインデックス付けされたクラスごとのリストのリストを返します。各内部リストには、元の画像座標に再マッピングされた ((x, y, w, h), score) のタプルが含まれます。追加時に keypoints が指定されていた場合、タプルは再マッピングされた keypoints ndarray で拡張されます。

このメソッドを呼び出した後、新しいバウンディングボックスのセットを処理するには新しい NMS オブジェクトを作成してください。

threshold は、ボックスが保持されるために Soft-NMS 抑制後に維持しなければならない最小スコアです。

sigma は、重複するバウンディングボックスのスコアにペナルティを与えるために使用されるガウス分布を制御します。sigma が小さいほど、より積極的な抑制が行われます。sigma <= 0.0 はガウスペナルティを無効にします(重複するボックスのスコアは減衰されません)。