Non-Maximum Suppression (NMS)
Saiba como a Supressão Não Máxima (NMS) elimina caixas delimitadoras duplicadas na deteção de objetos. Descubra como o Ultralytics YOLO26 fornece NMS nativa de ponta a ponta.
A supressão de não máximos (NMS) é uma técnica de pós-processamento usada na deteção de objetos para refinar as previsões brutas feitas por um modelo. Quando um modelo de deteção de objetos analisa uma imagem, geralmente gera várias caixas delimitadoras sobrepostas para um único objeto, cada uma com uma pontuação de confiança associada. Estas previsões redundantes ocorrem porque o modelo pode detetar a mesma característica em escalas ou posições ligeiramente diferentes. A NMS filtra este resultado mantendo apenas a caixa delimitadora mais precisa para cada objeto e descartando as restantes, garantindo que o resultado final seja limpo, preciso e sem duplicados.
Como funciona a supressão de não máximos#
O algoritmo NMS opera sobre uma lista de caixas delimitadoras candidatas e as respetivas pontuações de confiança. O objetivo é selecionar a melhor caixa para um objeto e suprimir (remover) quaisquer outras caixas que se sobreponham significativamente a ela, pois é provável que sejam deteções duplicadas do mesmo objeto. O processo geralmente segue estas etapas:
-
Filtragem: Eliminar todas as caixas delimitadoras com pontuações de confiança abaixo de um limiar específico (por exemplo, 0.25) para remover imediatamente as previsões fracas.
-
Ordenação: Ordenar as caixas restantes por ordem decrescente com base nas respetivas pontuações de confiança.
-
Seleção: Selecionar a caixa com a pontuação de confiança mais elevada como uma deteção válida.
-
Comparação: Comparar esta caixa selecionada com todas as outras caixas restantes usando a Interseção sobre União (IoU), uma métrica que mede a sobreposição entre duas caixas.
-
Supressão: Se a IoU entre a caixa selecionada e outra caixa exceder um limiar predefinido (por exemplo, 0.45), a caixa com menor pontuação é considerada uma duplicada e removida.
-
Iteração: Repetir o processo com a caixa seguinte com maior pontuação que ainda não tenha sido suprimida ou selecionada, até que todas as caixas sejam processadas.
Aplicações no mundo real#
A NMS é essencial em cenários onde a precisão é fundamental e as deteções duplicadas podem confundir os sistemas subsequentes.
- Condução autónoma: Em sistemas de veículos autónomos, as câmaras detetam peões, outros veículos e sinais de trânsito. Um modelo pode prever três caixas ligeiramente diferentes para um único peão. A NMS garante que o sistema de planeamento do veículo receba apenas uma coordenada para esse peão, evitando travagens erráticas ou erros de planeamento de trajetórias causados por obstáculos «fantasma».
- Gestão de inventário no retalho: Ao utilizar visão computacional para contar produtos numa prateleira, os artigos estão frequentemente muito próximos uns dos outros. Sem NMS, uma única lata de refrigerante pode ser contada duas vezes devido a previsões sobrepostas, resultando em níveis de stock imprecisos. A NMS refina estas deteções para garantir que a contagem do inventário corresponde à realidade.
Implementação de NMS com PyTorch#
Embora muitas frameworks modernas tratem da NMS internamente, compreender a implementação ajuda a ajustar os parâmetros. O exemplo seguinte demonstra como aplicar NMS usando a biblioteca PyTorch:
import torch
import torchvision.ops as ops
# Example bounding boxes: [x1, y1, x2, y2]
boxes = torch.tensor(
[
[100, 100, 200, 200], # Box A
[105, 105, 195, 195], # Box B (High overlap with A)
[300, 300, 400, 400], # Box C (Distinct object)
],
dtype=torch.float32,
)
# Confidence scores for each box
scores = torch.tensor([0.9, 0.8, 0.95], dtype=torch.float32)
# Apply NMS with an IoU threshold of 0.5
# Boxes with IoU > 0.5 relative to the highest scoring box are suppressed
keep_indices = ops.nms(boxes, scores, iou_threshold=0.5)
print(f"Indices to keep: {keep_indices.tolist()}")
# Output will likely be [2, 0] corresponding to Box C (0.95) and Box A (0.9),
# while Box B (0.8) is suppressed due to overlap with A.NMS vs. deteção de ponta a ponta#
Tradicionalmente, a NMS tem sido uma etapa obrigatória de «limpeza» que ocorre fora da rede neural principal, adicionando latência de inferência. No entanto, o campo está a evoluir no sentido de arquiteturas de ponta a ponta.
- NMS padrão: Um processo heurístico que requer o ajuste manual do limiar de IoU. Se o limiar for demasiado baixo, objetos válidos próximos uns dos outros podem não ser detetados (revocação baixa). Se for demasiado alto, permanecem duplicados (precisão baixa).
- Modelos de ponta a ponta: Modelos de próxima geração como o YOLO26 foram concebidos para serem nativamente de ponta a ponta. Aprendem a prever exatamente uma caixa por objeto durante o treino, internalizando efetivamente o processo NMS. Isto elimina a necessidade de pós-processamento externo, resultando em velocidades de inferência mais elevadas e pipelines de implementação mais simples na Plataforma Ultralytics.
Conceitos relacionados#
- Soft-NMS: Uma variante na qual as caixas sobrepostas não são removidas de forma rígida, mas têm as suas pontuações de confiança reduzidas. Isto permite que objetos parcialmente sobrepostos (como pessoas numa multidão) continuem a ser detetados se as suas pontuações permanecerem suficientemente elevadas após a redução.
- Caixas âncora: Formas de caixas predefinidas utilizadas por muitos detetores para estimar o tamanho dos objetos. A NMS é aplicada às previsões finais refinadas a partir destas âncoras.
- Interseção sobre União (IoU): A fórmula matemática utilizada pela NMS para determinar o grau de sobreposição entre duas caixas, funcionando como o limiar de decisão para a supressão.









