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(квантованномуndarrayтипа int8, uint8, int16 или uint16) с использованием квантованного порогаthresholdи возвращаетndarrayвсех индексов, прошедших порог.Значение
scaleпроверяется для определения того, являются ли деквантованные значения положительными или отрицательными. Когдаscale > 0, возвращаются индексы, для которыхscores > threshold; в противном случае возвращаются индексы, для которыхscores < threshold.find_maxесли True, внутренне заменяетscoresнаndarrayмаксимумов (или минимумов, в зависимости отscale) вдольfind_max_axis.find_max_axis— это ось, вдоль которой вычисляется свёртка максимума/минимума, когдаfind_maxравно True.
- ml.utils.quantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
Преобразует переданный
ndarray, деля на масштаб и прибавляя нулевую точку модели. Возвращаетvalueбез изменений, если тип выходных данных модели по индексуindexявляется float.model— это модель, чьи параметры квантования выхода используются.value— этоndarrayдля квантования.indexвыбирает, относительно какого тензора выходаmodelпроизводить квантование.
- ml.utils.dequantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
Преобразует переданный
ndarray, вычитая нулевую точку и затем умножая на масштаб модели. Возвращаетvalueбез изменений, если тип выходных данных модели по индексуindexявляется float.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— это список строк-меток, по одной на каждую рамку.colors— это список кортежей(r, g, b), по одному на каждую рамку.scoresесли неNone, список оценок достоверности для каждой рамки. Когда он предоставлен, к каждой отрисованной метке добавляется оценка, отформатированная как" %.2f".formatуправляет тем, как интерпретируются координаты рамки:"pascal_voc"— нормализованные(xmin, ymin, xmax, ymax)в диапазоне от0.0до1.0."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¶
Рисует
ndarrayзначений ключевых точек(x, y, ...)на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¶
Рисует
ndarrayзначений ключевых точек(x, y, ...)на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)исходного изображения, на котором была запущена модель (обычно возвращается объектом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— это необязательныйndarrayзначений ключевых точек(x, y, ...), связанных с данной ограничивающей рамкой.
- get_bounding_boxes(threshold: float = 0.1, sigma: float = 0.1) list[list[tuple]]¶
Выполняет Soft-NMS над всеми добавленными рамками и возвращает список списков по классам, индексированных по
label_index. Каждый внутренний список содержит кортежи((x, y, w, h), score), отображённые обратно в координаты исходного изображения. Если при добавлении были предоставленыkeypoints, кортеж дополняется пересчитаннымndarraykeypoints.После вызова этого метода создайте новый объект
NMSдля обработки нового набора ограничивающих рамок.threshold— это минимальная оценка, которую рамка должна сохранить после подавления Soft-NMS, чтобы быть оставленной.sigmaуправляет функцией Гаусса, используемой для штрафования оценок перекрывающихся ограничивающих рамок. Меньшее значениеsigmaприводит к более агрессивному подавлению.sigma <= 0.0отключает гауссовский штраф (оценки перекрывающихся рамок не уменьшаются).