ml.utils — ML nástroje¶
Modul ml.utils obsahuje pomocné třídy a funkce pro strojové učení.
Funkce¶
- ml.utils.threshold(scores: ndarray, threshold: float, scale: float, find_max: bool = False, find_max_axis: int = 1) ndarray¶
Prahuje
scores(kvantovanýndarraytypu int8, uint8, int16 nebo uint16) kvantovaným prahemthresholda vracíndarrayvšech indexů, které práh překročily.scalese testuje, aby se zjistilo, zda jsou dekvantované hodnoty kladné nebo záporné. Kdyžscale > 0, vrací se indexy, kdescores > threshold; jinak se vrací indexy, kdescores < threshold.find_maxpokud True, interně nahradíscorespolemndarrayobsahujícím maximum (nebo minimum, v závislosti nascale) podél osyfind_max_axis.find_max_axisje osa, podél níž se počítá redukce maxima/minima, když jefind_maxTrue.
- ml.utils.quantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
Převede předané
ndarrayvydělením měřítkem a přičtením nulového bodu modelu. Vracívaluebeze změny, když je výstupní datový typ modelu na poziciindexfloat.modelje model, jehož výstupní kvantizační parametry se použijí.valuejendarray, které se má kvantovat.indexvybírá, vůči kterému tenzorovému výstupumodelse má kvantovat.
- ml.utils.dequantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
Převede předané
ndarrayodečtením nulového bodu a následným vynásobením měřítkem modelu. Vracívaluebeze změny, když je výstupní datový typ modelu na poziciindexfloat.modelje model, jehož výstupní kvantizační parametry se použijí.valuejendarray, které se má dekvantovat.indexvybírá, vůči kterému tenzorovému výstupumodelse 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.boxesje seznam n-tic(x, y, w, h).labelsje seznam řetězců štítků, jeden na každý rámeček.colorsje seznam n-tic(r, g, b), jeden na každý rámeček.scorespokud 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 rozsahu0.0až1.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_widthje šířka každého znaku štítku v pixelech.font_heightje výška pozadí štítku v pixelech.text_colorje 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í
ndarrayhodnot klíčových bodů(x, y, ...)doimage.radiusje poloměr kruhu klíčového bodu. Kdyžradius == 0, klíčové body se vykreslí jako jednotlivé pixely.colorje barva(r, g, b)klíčového bodu.thicknessje tloušťka obrysu kruhu.fillpokud 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í
ndarrayhodnot klíčových bodů(x, y, ...)doimagea poté je propojí úsečkami.linesje seznam n-tic(kp0_idx, kp1_idx)určujících, které dvojice klíčových bodů se mají propojit.kp_radiusje poloměr kruhu klíčového bodu (předáván dodraw_keypoints).kp_colorje barva(r, g, b)klíčového bodu.kp_thicknessje tloušťka obrysu kruhu klíčového bodu.kp_fillpokud True, vyplní kruhy klíčových bodů.line_colorje barva(r, g, b)úsečky.line_thicknessje 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_wawindow_hjsou šířka a výška vstupního tenzoru / okna modelu.roije oblast zájmu(x, y, w, h)původního obrazu, na němž byl model spuštěn (typicky vrácená objektemNormalization()). 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]aroi[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 sescoremimo[0.0, 1.0]nebo s nulovou/zápornou šířkou či výškou po oříznutí jsou zahozeny.xmin,ymin,xmax,ymaxjsou souřadnice ohraničujícího rámečku v pixelovém prostoru okna, oříznuté na[0, window_w]/[0, window_h].scoreje hodnota spolehlivosti ohraničujícího rámečku (0.0-1.0).label_indexje index štítku třídy přidruženého k ohraničujícímu rámečku.keypointsje volitelnéndarrayhodnot 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ánykeypoints, n-tice se rozšíří o přemapovanéndarraykeypoints.Po zavolání této metody vytvořte nový objekt
NMSke zpracování nové sady ohraničujících rámečků.thresholdje 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šísigmavede k agresivnějšímu potlačení.sigma <= 0.0zakáže Gaussovskou penalizaci (skóre překrývajících se rámečků se nesnižuje).