ml.utils — Utilitários de ML¶
O módulo ml.utils contém classes e funções utilitárias para aprendizado de máquina.
Funções¶
- ml.utils.threshold(scores: ndarray, threshold: float, scale: float, find_max: bool = False, find_max_axis: int = 1) ndarray¶
Aplica um limiar a
scores(umndarrayquantizado de int8, uint8, int16 ou uint16) por meio de umthresholdquantizado e retorna umndarraycom todos os índices que passam pelo limiar.scaleé testado para determinar se os valores dequantizados são positivos ou negativos. Quandoscale > 0são retornados os índices ondescores > threshold; caso contrário são retornados os índices ondescores < threshold.find_maxse True, substituiscoresinternamente por umndarraycom o máximo (ou mínimo, dependendo descale) ao longo defind_max_axis.find_max_axisé o eixo ao longo do qual a redução de máximo/mínimo é calculada quandofind_maxé True.
- ml.utils.quantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
Converte o
ndarraypassado dividindo pela escala e somando o zero point do modelo. Retornavalueinalterado quando o dtype da saída do modelo emindexé float.modelé o modelo cujos parâmetros de quantização de saída são usados.valueé ondarraya ser quantizado.indexseleciona qual saída de tensor domodelserá usada como referência para a quantização.
- ml.utils.dequantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
Converte o
ndarraypassado subtraindo o zero point e em seguida multiplicando pela escala do modelo. Retornavalueinalterado quando o dtype da saída do modelo emindexé float.modelé o modelo cujos parâmetros de quantização de saída são usados.valueé ondarraya ser dequantizado.indexseleciona qual saída de tensor domodelserá usada como referência para a dequantização.
- 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¶
Desenha caixas delimitadoras (ou marcadores de ponto central) com rótulos de texto sobre
image.boxesé uma lista de tuplas(x, y, w, h).labelsé uma lista de strings de rótulo, uma por caixa.colorsé uma lista de tuplas(r, g, b), uma por caixa.scoresse não forNone, uma lista de pontuações de confiança por caixa. Quando fornecida, cada rótulo renderizado recebe como sufixo a pontuação formatada como" %.2f".formatcontrola como as coordenadas da caixa são interpretadas:"pascal_voc"–(xmin, ymin, xmax, ymax)normalizado no intervalo de0.0a1.0."point"–(x, y, w, h)em pixels absolutos; um marcador de círculo preenchido é desenhado no centro da caixa em vez de um retângulo (útil para detectores de ponto central).qualquer outro valor –
(x, y, w, h)em pixels absolutos; desenhado como um retângulo.
font_widthé a largura em pixels de cada caractere no rótulo.font_heighté a altura em pixels do fundo do rótulo.text_coloré a cor(r, g, b)usada no texto do rótulo.
- 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¶
Desenha um
ndarrayde valores de ponto-chave(x, y, ...)sobreimage.radiusé o raio do círculo do ponto-chave. Quandoradius == 0os pontos-chave são desenhados como pixels individuais.coloré a cor(r, g, b)do ponto-chave.thicknessé a espessura do contorno do círculo.fillse True preenche os círculos dos pontos-chave.
- 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¶
Desenha um
ndarrayde valores de ponto-chave(x, y, ...)sobreimagee em seguida os conecta com segmentos de linha.linesé uma lista de tuplas(kp0_idx, kp1_idx)que especificam quais pares de pontos-chave conectar.kp_radiusé o raio do círculo do ponto-chave (repassado paradraw_keypoints).kp_coloré a cor(r, g, b)do ponto-chave.kp_thicknessé a espessura do contorno do círculo do ponto-chave.kp_fillse True preenche os círculos dos pontos-chave.line_coloré a cor(r, g, b)da linha.line_thicknessé a espessura da linha.
class NMS – Supressão Não Máxima Suave (Soft-Non-Maximum Suppression)¶
O objeto NMS coleta uma lista de caixas delimitadoras com pontuações associadas, filtra caixas sobrepostas com pontuações menores por meio de Soft-NMS e remapeia as caixas detectadas em uma sub-janela de volta às coordenadas da imagem original.
- class ml.utils.NMS(window_w: int, window_h: int, roi: tuple[int, int, int, int])¶
Cria um objeto
NMS.window_wewindow_hsão a largura e a altura do tensor de entrada / janela do modelo.roié a região de interesse(x, y, w, h)da imagem original sobre a qual o modelo foi executado (tipicamente retornada pelo objetoNormalization()). Usada para remapear as caixas detectadas de volta ao espaço de coordenadas da imagem original.roi[2]eroi[3]devem ser >= 1.- add_bounding_box(xmin: float, ymin: float, xmax: float, ymax: float, score: float, label_index: int, keypoints: ndarray | None = None) None¶
Adiciona uma caixa delimitadora ao objeto
NMS. Caixas comscorefora de[0.0, 1.0]ou com largura ou altura zero/negativa após o recorte são descartadas.xmin,ymin,xmax,ymaxsão as coordenadas da caixa delimitadora no espaço de pixels da janela, recortadas para[0, window_w]/[0, window_h].scoreé a pontuação de confiança da caixa delimitadora (0.0-1.0).label_indexé o índice do rótulo de classe associado à caixa delimitadora.keypointsé umndarrayopcional de valores de ponto-chave(x, y, ...)associado a esta caixa delimitadora.
- get_bounding_boxes(threshold: float = 0.1, sigma: float = 0.1) list[list[tuple]]¶
Executa Soft-NMS sobre todas as caixas adicionadas e retorna uma lista de listas por classe, indexada por
label_index. Cada lista interna contém tuplas de((x, y, w, h), score)mapeadas de volta às coordenadas da imagem original. Sekeypointsfoi fornecido na adição, a tupla é estendida com ondarraydekeypointsremapeado.Após chamar este método crie um novo objeto
NMSpara processar um novo conjunto de caixas delimitadoras.thresholdé a pontuação mínima que uma caixa deve manter após a supressão Soft-NMS para ser preservada.sigmacontrola a gaussiana usada para penalizar as pontuações de caixas delimitadoras sobrepostas. Umsigmamenor resulta em supressão mais agressiva.sigma <= 0.0desativa a penalização gaussiana (as pontuações de caixas sobrepostas não são reduzidas).