ml.utils --- ML ユーティリティ¶
ml.utils モジュールには、機械学習のためのユーティリティクラスと関数が含まれています。
関数¶
- 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)タプルのリストです。scoresがNoneでない場合、ボックスごとの信頼度スコアのリストです。指定された場合、描画される各ラベルには" %.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, ...)値からなるndarrayをimageに描画します。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, ...)値からなるndarrayをimageに描画し、それらを線分で接続します。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_wとwindow_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]の範囲外であるボックス、またはクリッピング後に幅や高さがゼロ以下になるボックスは破棄されます。xmin、ymin、xmax、ymaxは、ウィンドウのピクセル空間におけるバウンディングボックスの座標で、[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が指定されていた場合、タプルは再マッピングされたkeypointsndarrayで拡張されます。このメソッドを呼び出した後、新しいバウンディングボックスのセットを処理するには新しい
NMSオブジェクトを作成してください。thresholdは、ボックスが保持されるために Soft-NMS 抑制後に維持しなければならない最小スコアです。sigmaは、重複するバウンディングボックスのスコアにペナルティを与えるために使用されるガウス分布を制御します。sigmaが小さいほど、より積極的な抑制が行われます。sigma <= 0.0はガウスペナルティを無効にします(重複するボックスのスコアは減衰されません)。