ml.utils — Utilitários ML¶
O módulo ml.utils contém classes e funções utilitárias para aprendizagem automática.
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) usando umthresholdquantizado e devolve umndarraycom todos os índices que passam o limiar.scaleé testado para determinar se os valores desquantizados são positivos ou negativos. Quandoscale > 0, são devolvidos os índices ondescores > threshold; caso contrário, são devolvidos os índices ondescores < threshold.find_maxse True, substitui internamentescorespor umndarraydo máximo (ou mínimo, consoantescale) ao longo defind_max_axis.find_max_axisé o eixo ao longo do qual a redução máx/mín é calculada quandofind_maxé True.
- ml.utils.quantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
Converte o
ndarrayfornecido dividindo pela escala e adicionando o ponto zero do modelo. Devolvevalueinalterado quando o dtype de saída do modelo noindexé float.modelé o modelo cujos parâmetros de quantização de saída são utilizados.valueé ondarraya quantizar.indexseleciona qual saída tensorial domodelusar para a quantização.
- ml.utils.dequantize(model: ml.Model, value: ndarray, index: int = 0) ndarray¶
Converte o
ndarrayfornecido subtraindo o ponto zero e multiplicando pela escala do modelo. Devolvevalueinalterado quando o dtype de saída do modelo noindexé float.modelé o modelo cujos parâmetros de quantização de saída são utilizados.valueé ondarraya desquantizar.indexseleciona qual saída tensorial domodelusar para a desquantizaçã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 etiquetas de texto na
image.boxesé uma lista de tuplos(x, y, w, h).labelsé uma lista de cadeias de etiquetas, uma por caixa.colorsé uma lista de tuplos(r, g, b), um por caixa.scoresse não forNone, uma lista de pontuações de confiança por caixa. Quando fornecida, cada etiqueta apresentada é sufixada com a pontuação formatada como" %.2f".formatcontrola como as coordenadas da caixa são interpretadas:"pascal_voc"–(xmin, ymin, xmax, ymax)normalizados no intervalo0.0a1.0."point"– pixel absoluto(x, y, w, h); é desenhado um marcador de círculo preenchido no centro da caixa em vez de um retângulo (útil para detetores de ponto central).qualquer outro valor – pixel absoluto
(x, y, w, h); desenhado como um retângulo.
font_widthé a largura em pixéis de cada caráter na etiqueta.font_heighté a altura em pixéis do fundo da etiqueta.text_coloré a cor(r, g, b)utilizada para o texto da etiqueta.
- 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, ...)naimage.radiusé o raio do círculo do ponto-chave. Quandoradius == 0, os pontos-chave são desenhados como pixéis 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, ...)naimagee liga-os com segmentos de linha.linesé uma lista de tuplos(kp0_idx, kp1_idx)que especificam quais pares de pontos-chave ligar.kp_radiusé o raio do círculo do ponto-chave (passado 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.
classe NMS – Supressão Não-Máxima Suave¶
O objeto NMS recolhe uma lista de caixas delimitadoras com pontuações associadas, filtra caixas sobrepostas com pontuações mais baixas via Soft-NMS, e remapeia as caixas detetadas numa sub-janela de volta para as 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 altura do tensor de entrada do modelo / janela.roié a região de interesse(x, y, w, h)da imagem original em que o modelo foi executado (tipicamente devolvida pelo objetoNormalization()). Utilizada para remapear as caixas detetadas de volta para o 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. As caixas comscorefora de[0.0, 1.0]ou com largura ou altura zero/negativa após recorte são descartadas.xmin,ymin,xmax,ymaxsão as coordenadas da caixa delimitadora no espaço de pixéis 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 da etiqueta de classe associada à caixa delimitadora.keypointsé umndarrayopcional de valores de ponto-chave(x, y, ...)associados a esta caixa delimitadora.
- get_bounding_boxes(threshold: float = 0.1, sigma: float = 0.1) list[list[tuple]]¶
Realiza Soft-NMS sobre todas as caixas adicionadas e devolve uma lista de listas por classe, indexadas por
label_index. Cada lista interna contém tuplos de((x, y, w, h), score)mapeados de volta para as coordenadas da imagem original. Sekeypointsfoi fornecido ao adicionar, o tuplo é estendido 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 reter após supressão Soft-NMS para ser mantida.sigmacontrola a Gaussiana utilizada para penalizar as pontuações de caixas delimitadoras sobrepostas. Umsigmamais pequeno resulta numa supressão mais agressiva.sigma <= 0.0desativa a penalização Gaussiana (as pontuações de caixas sobrepostas não são reduzidas).