ml.utils — ML nástroje

Modul ml.utils obsahuje pomocné třídy a funkce pro strojové učení.

Funkce

ml.utils.logit(x: ndarray) ndarray

Vrací logit všech hodnot v předaném ndarray.

ml.utils.sigmoid(x: ndarray) ndarray

Vrací sigmoidu všech hodnot v předaném ndarray.

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

Prahuje scores (kvantovaný ndarray typu int8, uint8, int16 nebo uint16) kvantovaným prahem threshold a vrací ndarray všech indexů, které práh překročily.

scale se testuje, aby se zjistilo, zda jsou dekvantované hodnoty kladné nebo záporné. Když scale > 0, vrací se indexy, kde scores > threshold; jinak se vrací indexy, kde scores < threshold.

find_max pokud True, interně nahradí scores polem ndarray obsahujícím maximum (nebo minimum, v závislosti na scale) podél osy find_max_axis.

find_max_axis je osa, podél níž se počítá redukce maxima/minima, když je find_max True.

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

Převede předané ndarray vydělením měřítkem a přičtením nulového bodu modelu. Vrací value beze změny, když je výstupní datový typ modelu na pozici index float.

model je model, jehož výstupní kvantizační parametry se použijí.

value je ndarray, které se má kvantovat.

index vybírá, vůči kterému tenzorovému výstupu model se má kvantovat.

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

Převede předané ndarray odečtením nulového bodu a následným vynásobením měřítkem modelu. Vrací value beze změny, když je výstupní datový typ modelu na pozici index float.

model je model, jehož výstupní kvantizační parametry se použijí.

value je ndarray, které se má dekvantovat.

index vybírá, vůči kterému tenzorovému výstupu model se má dekvantovat.

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

Vykreslí ohraničující rámečky (nebo značky středového bodu) s textovými štítky do image.

boxes je seznam n-tic (x, y, w, h).

labels je seznam řetězců štítků, jeden na každý rámeček.

colors je seznam n-tic (r, g, b), jeden na každý rámeček.

scores pokud není None, jde o seznam hodnot spolehlivosti pro jednotlivé rámečky. Pokud je zadán, ke každému vykreslenému štítku se připojí skóre naformátované jako " %.2f".

format řídí, jak se interpretují souřadnice rámečku:

  • "pascal_voc" – normalizované (xmin, ymin, xmax, ymax) v rozsahu 0.01.0.

  • "point" – absolutní pixely (x, y, w, h); ve středu rámečku se místo obdélníku vykreslí vyplněná kruhová značka (užitečné pro detektory středového bodu).

  • jakákoli jiná hodnota – absolutní pixely (x, y, w, h); vykresleno jako obdélník.

font_width je šířka každého znaku štítku v pixelech.

font_height je výška pozadí štítku v pixelech.

text_color je barva (r, g, b) použitá pro text štítku.

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

Vykreslí ndarray hodnot klíčových bodů (x, y, ...) do image.

radius je poloměr kruhu klíčového bodu. Když radius == 0, klíčové body se vykreslí jako jednotlivé pixely.

color je barva (r, g, b) klíčového bodu.

thickness je tloušťka obrysu kruhu.

fill pokud True, vyplní kruhy klíčových bodů.

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

Vykreslí ndarray hodnot klíčových bodů (x, y, ...) do image a poté je propojí úsečkami.

lines je seznam n-tic (kp0_idx, kp1_idx) určujících, které dvojice klíčových bodů se mají propojit.

kp_radius je poloměr kruhu klíčového bodu (předáván do draw_keypoints).

kp_color je barva (r, g, b) klíčového bodu.

kp_thickness je tloušťka obrysu kruhu klíčového bodu.

kp_fill pokud True, vyplní kruhy klíčových bodů.

line_color je barva (r, g, b) úsečky.

line_thickness je tloušťka úsečky.

třída NMS – Soft-Non-Maximum Suppression

Objekt NMS shromažďuje seznam ohraničujících rámečků s přidruženými skóre, filtruje překrývající se rámečky s nižším skóre pomocí Soft-NMS a přemapuje rámečky detekované v podokně zpět do souřadnic původního obrazu.

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

Vytvoří objekt NMS.

window_w a window_h jsou šířka a výška vstupního tenzoru / okna modelu.

roi je oblast zájmu (x, y, w, h) původního obrazu, na němž byl model spuštěn (typicky vrácená objektem Normalization()). Používá se k přemapování detekovaných rámečků zpět do souřadnicového prostoru původního obrazu. roi[2] a roi[3] musí být >= 1.

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

Přidá ohraničující rámeček do objektu NMS. Rámečky se score mimo [0.0, 1.0] nebo s nulovou/zápornou šířkou či výškou po oříznutí jsou zahozeny.

xmin, ymin, xmax, ymax jsou souřadnice ohraničujícího rámečku v pixelovém prostoru okna, oříznuté na [0, window_w] / [0, window_h].

score je hodnota spolehlivosti ohraničujícího rámečku (0.0-1.0).

label_index je index štítku třídy přidruženého k ohraničujícímu rámečku.

keypoints je volitelné ndarray hodnot klíčových bodů (x, y, ...) přidružených k tomuto ohraničujícímu rámečku.

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

Provede Soft-NMS nad všemi přidanými rámečky a vrací seznam seznamů pro jednotlivé třídy, indexovaný podle label_index. Každý vnitřní seznam obsahuje n-tice ((x, y, w, h), score) přemapované zpět do souřadnic původního obrazu. Pokud byly při přidávání zadány keypoints, n-tice se rozšíří o přemapované ndarray keypoints.

Po zavolání této metody vytvořte nový objekt NMS ke zpracování nové sady ohraničujících rámečků.

threshold je minimální skóre, které si rámeček musí po potlačení Soft-NMS zachovat, aby byl ponechán.

sigma řídí Gaussovskou funkci použitou k penalizaci skóre překrývajících se ohraničujících rámečků. Menší sigma vede k agresivnějšímu potlačení. sigma <= 0.0 zakáže Gaussovskou penalizaci (skóre překrývajících se rámečků se nesnižuje).