ml.utils — ML-Hilfsfunktionen¶
Das Modul ml.utils enthält Hilfsklassen und -funktionen für maschinelles Lernen.
Funktionen¶
- ml.utils.sigmoid(x: ndarray) ndarray¶
Gibt die Sigmoidfunktion aller Werte im übergebenen
ndarrayzurück.
- ml.utils.threshold(scores: ndarray, threshold: float, scale: float, find_max: bool = False, find_max_axis: int = 1) ndarray¶
Wendet einen Schwellenwert auf
scores(ein quantisiertesndarrayvom Typ int8, uint8, int16 oder uint16) anhand eines quantisiertenthresholdan und gibt einndarrayaller Indizes zurück, die den Schwellenwert überschreiten.scalewird geprüft, um zu bestimmen, ob die dequantisierten Werte positiv oder negativ sind. Wennscale > 0ist, werden Indizes zurückgegeben, bei denenscores > thresholdgilt; andernfalls werden Indizes zurückgegeben, bei denenscores < thresholdgilt.find_maxersetzt, falls True,scoresintern durch einndarraydes Maximums (oder Minimums, je nachscale) entlangfind_max_axis.find_max_axisist die Achse, entlang derer die Max-/Min-Reduktion berechnet wird, wennfind_maxTrue ist.
- ml.utils.quantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
Konvertiert das übergebene
ndarray, indem durch die Skalierung geteilt und der Nullpunkt des Modells addiert wird. Gibtvalueunverändert zurück, wenn der Ausgabedatentyp des Modells beiindexfloat ist.modelist das Modell, dessen Quantisierungsparameter der Ausgabe verwendet werden.valueist das zu quantisierendendarray.indexwählt aus, gegen welche Tensorausgabe desmodelquantisiert wird.
- ml.utils.dequantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
Konvertiert das übergebene
ndarray, indem der Nullpunkt subtrahiert und anschließend mit der Skalierung des Modells multipliziert wird. Gibtvalueunverändert zurück, wenn der Ausgabedatentyp des Modells beiindexfloat ist.modelist das Modell, dessen Quantisierungsparameter der Ausgabe verwendet werden.valueist das zu dequantisierendendarray.indexwählt aus, gegen welche Tensorausgabe desmodeldequantisiert wird.
- 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¶
Zeichnet Begrenzungsrahmen (oder Mittelpunktmarkierungen) mit Textlabels auf
image.boxesist eine Liste von(x, y, w, h)-Tupeln.labelsist eine Liste von Label-Strings, eines pro Box.colorsist eine Liste von(r, g, b)-Tupeln, eines pro Box.scoresist, falls nichtNone, eine Liste von Konfidenzwerten pro Box. Wenn angegeben, wird an jedes gerenderte Label der als" %.2f"formatierte Wert angehängt.formatsteuert, wie die Box-Koordinaten interpretiert werden:"pascal_voc"– normalisierte(xmin, ymin, xmax, ymax)im Bereich0.0bis1.0."point"– absolute Pixel(x, y, w, h); anstelle eines Rechtecks wird eine gefüllte Kreismarkierung in der Mitte der Box gezeichnet (nützlich für Mittelpunktdetektoren).jeder andere Wert – absolute Pixel
(x, y, w, h); als Rechteck gezeichnet.
font_widthist die Breite jedes Zeichens im Label in Pixeln.font_heightist die Höhe des Label-Hintergrunds in Pixeln.text_colorist die für den Label-Text verwendete(r, g, b)-Farbe.
- 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¶
Zeichnet ein
ndarrayvon Schlüsselpunktwerten(x, y, ...)aufimage.radiusist der Radius des Schlüsselpunktkreises. Wennradius == 0ist, werden die Schlüsselpunkte als einzelne Pixel gezeichnet.colorist die(r, g, b)-Farbe der Schlüsselpunkte.thicknessist die Dicke des Kreisumrisses.fillfüllt, falls True, die Schlüsselpunktkreise.
- 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¶
Zeichnet ein
ndarrayvon Schlüsselpunktwerten(x, y, ...)aufimageund verbindet diese anschließend mit Liniensegmenten.linesist eine Liste von(kp0_idx, kp1_idx)-Tupeln, die angeben, welche Schlüsselpunktpaare verbunden werden sollen.kp_radiusist der Radius des Schlüsselpunktkreises (wird andraw_keypointsdurchgereicht).kp_colorist die(r, g, b)-Farbe der Schlüsselpunkte.kp_thicknessist die Dicke des Schlüsselpunktkreisumrisses.kp_fillfüllt, falls True, die Schlüsselpunktkreise.line_colorist die(r, g, b)-Linienfarbe.line_thicknessist die Liniendicke.
class NMS – Soft-Non-Maximum-Suppression¶
Das NMS-Objekt sammelt eine Liste von Begrenzungsrahmen mit zugehörigen Konfidenzwerten, filtert überlappende Boxen mit niedrigeren Werten per Soft-NMS und bildet in einem Teilfenster erkannte Boxen wieder auf die ursprünglichen Bildkoordinaten ab.
- class ml.utils.NMS(window_w: int, window_h: int, roi: tuple[int, int, int, int])¶
Erstellt ein
NMS-Objekt.window_wundwindow_hsind die Breite und Höhe des Eingabetensors / Fensters des Modells.roiist der(x, y, w, h)-Interessensbereich des Originalbilds, auf dem das Modell ausgeführt wurde (typischerweise vomNormalization()-Objekt zurückgegeben). Wird verwendet, um erkannte Boxen wieder in den ursprünglichen Bildkoordinatenraum abzubilden.roi[2]undroi[3]müssen >= 1 sein.- add_bounding_box(xmin: float, ymin: float, xmax: float, ymax: float, score: float, label_index: int, keypoints: ndarray | None = None) None¶
Fügt dem
NMS-Objekt einen Begrenzungsrahmen hinzu. Boxen mit einemscoreaußerhalb von[0.0, 1.0]oder mit einer Breite oder Höhe von null bzw. negativ nach dem Zuschneiden werden verworfen.xmin,ymin,xmax,ymaxsind die Koordinaten des Begrenzungsrahmens im Pixelraum des Fensters, zugeschnitten auf[0, window_w]/[0, window_h].scoreist der Konfidenzwert des Begrenzungsrahmens (0.0-1.0).label_indexist der Index des Klassenlabels, das dem Begrenzungsrahmen zugeordnet ist.keypointsist ein optionalesndarrayvon Schlüsselpunktwerten(x, y, ...), das diesem Begrenzungsrahmen zugeordnet ist.
- get_bounding_boxes(threshold: float = 0.1, sigma: float = 0.1) list[list[tuple]]¶
Führt Soft-NMS über alle hinzugefügten Boxen aus und gibt eine Liste von Listen pro Klasse zurück, indexiert nach
label_index. Jede innere Liste enthält Tupel der Form((x, y, w, h), score), die wieder auf die ursprünglichen Bildkoordinaten abgebildet sind. Wenn beim Hinzufügenkeypointsangegeben wurde, wird das Tupel um das umgerechnetekeypoints-ndarrayerweitert.Erstellen Sie nach dem Aufruf dieser Methode ein neues
NMS-Objekt, um eine neue Menge von Begrenzungsrahmen zu verarbeiten.thresholdist der Mindestwert, den eine Box nach der Soft-NMS-Unterdrückung behalten muss, um beibehalten zu werden.sigmasteuert die Gaußfunktion, die zur Bestrafung der Werte überlappender Begrenzungsrahmen verwendet wird. Ein kleineressigmaführt zu einer aggressiveren Unterdrückung.sigma <= 0.0deaktiviert die Gauß-Bestrafung (die Werte überlappender Boxen werden nicht verringert).