Non-Maximum Suppression (NMS)
Aprende como a Supressão de Não-Máximos (NMS) elimina caixas delimitadoras duplicadas na deteção de objetos. Descobre como o Ultralytics YOLO26 fornece NMS nativo de ponta a ponta.
Non-Maximum Suppression (NMS) é uma técnica de pós-processamento usada na object detection para refinar as previsões brutas feitas por um modelo. Quando um modelo de detecção de objetos analisa uma imagem, ele frequentemente gera várias bounding boxes sobrepostas para um único objeto, cada uma com um confidence score associado. Essas previsões redundantes ocorrem porque o modelo pode detectar a mesma característica em escalas ou posições ligeiramente diferentes. O NMS filtra essa saída mantendo apenas a caixa delimitadora mais precisa para cada objeto e descartando as outras, garantindo que a saída final seja limpa, precisa e livre de duplicatas.
Como funciona o Non-Maximum Suppression#
O algoritmo NMS opera sobre uma lista de bounding boxes candidatas e suas respectivas confidence scores. O objetivo é selecionar a melhor caixa para um objeto e suprimir (remover) quaisquer outras caixas que se sobreponham significativamente a ela, pois provavelmente são detecções duplicadas do mesmo objeto. O processo geralmente segue estes passos:
-
Filtragem: Elimina todas as bounding boxes com confidence scores abaixo de um limiar específico (por exemplo, 0,25) para remover previsões fracas imediatamente.
-
Ordenação: Ordena as caixas restantes em ordem decrescente com base nas suas confidence scores.
-
Seleção: Escolhe a caixa com a maior confidence score como uma detecção válida.
-
Comparison: Compara esta caixa selecionada com todas as outras caixas restantes usando Intersection over Union (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 pontuação mais baixa é considerada uma duplicata e é removida.
-
Iteração: Repete o processo com a próxima caixa de maior pontuação que ainda não foi suprimida ou selecionada, até que todas as caixas sejam processadas.
Aplicações no Mundo Real#
O NMS é essencial em cenários onde a precisão é fundamental e detecções duplicadas podem confundir sistemas subsequentes.
- Direção Autônoma: Em sistemas de carros autônomos, câmeras detectam pedestres, outros veículos e placas de trânsito. Um modelo pode prever três caixas ligeiramente diferentes para um único pedestre. O NMS garante que o sistema de planejamento do veículo receba apenas uma coordenada para aquele pedestre, evitando freadas erráticas ou erros de planejamento de trajetória causados por obstáculos "fantasma".
- Retail Inventory Management: Ao usar computer vision para contar produtos em uma prateleira, os itens geralmente ficam empacotados muito próximos uns dos outros. Sem o NMS, uma única lata de refrigerante pode ser contada duas vezes devido a previsões sobrepostas, levando a níveis de estoque imprecisos. O NMS refina essas detecções para garantir que a contagem de inventário corresponda à realidade.
Implementação de NMS com PyTorch#
Embora muitos frameworks modernos lidem com o NMS internamente, entender a implementação ajuda no ajuste de parâmetros. O exemplo a seguir demonstra como aplicar o NMS usando a PyTorch library:
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. Detecção End-to-End#
Tradicionalmente, o NMS tem sido uma etapa de "limpeza" obrigatória que fica fora da rede neural principal, adicionando inference latency. No entanto, o campo está evoluindo em direção a arquiteturas de ponta a ponta.
- Standard NMS: Um processo heurístico que requer ajuste manual do limite de IoU. Se o limite for muito baixo, objetos válidos próximos uns dos outros podem ser perdidos (recall baixo). Se for muito alto, duplicatas permanecem (precision baixa).
- End-to-End Models: Modelos de próxima geração como YOLO26 são projetados para serem nativamente ponta a ponta. Eles aprendem a prever exatamente uma caixa por objeto durante o treinamento, internalizando efetivamente o processo de NMS. Isso elimina a necessidade de pós-processamento externo, resultando em velocidades de inferência mais rápidas e pipelines de implantação mais simples na Ultralytics Platform.
Conceitos Relacionados#
- Soft-NMS: Uma variação onde as caixas sobrepostas não são estritamente removidas, mas têm suas pontuações de confiança reduzidas. Isso permite que objetos ligeiramente sobrepostos (como pessoas em uma multidão) ainda sejam detectados se suas pontuações permanecerem altas o suficiente após a decaimento.
- Anchor Boxes: Formas de caixa predefinidas usadas por muitos detectores para estimar o tamanho do objeto. O NMS é aplicado às previsões finais refinadas a partir dessas âncoras.
- Intersection over Union (IoU): A fórmula matemática usada pelo NMS para determinar o quanto duas caixas se sobrepõem, atuando como o limite de decisão para supressão.






