Non-Maximum Suppression (NMS)
Descubre cómo la supresión no máxima (NMS) elimina los cuadros delimitadores duplicados en la detección de objetos. Aprende cómo Ultralytics YOLO26 proporciona NMS nativa de extremo a extremo.
La supresión de no máximos (NMS) es una técnica de posprocesamiento utilizada en la detección de objetos para refinar las predicciones sin procesar realizadas por un modelo. Cuando un modelo de detección de objetos analiza una imagen, suele generar varias cajas delimitadoras superpuestas para un mismo objeto, cada una con su correspondiente puntuación de confianza. Estas predicciones redundantes se producen porque el modelo puede detectar la misma característica a escalas o posiciones ligeramente diferentes. NMS filtra estos resultados conservando únicamente la caja delimitadora más precisa para cada objeto y descartando las demás, lo que garantiza que el resultado final sea limpio, preciso y no contenga duplicados.
Cómo funciona la supresión de no máximos#
El algoritmo NMS opera sobre una lista de cajas delimitadoras candidatas y sus correspondientes puntuaciones de confianza. El objetivo es seleccionar la mejor caja para un objeto y suprimir (eliminar) cualquier otra caja que se superponga significativamente con ella, ya que probablemente sean detecciones duplicadas del mismo objeto. El proceso suele seguir estos pasos:
-
Filtrado: Elimina todas las cajas delimitadoras con puntuaciones de confianza inferiores a un umbral específico (por ejemplo, 0.25) para descartar inmediatamente las predicciones débiles.
-
Ordenación: Ordena las cajas restantes en orden descendente según sus puntuaciones de confianza.
-
Selección: Selecciona la caja con la puntuación de confianza más alta como detección válida.
-
Comparación: Compara esta caja seleccionada con todas las demás cajas restantes mediante la intersección sobre unión (IoU), una métrica que mide la superposición entre dos cajas.
-
Supresión: Si la IoU entre la caja seleccionada y otra caja supera un umbral predefinido (por ejemplo, 0.45), la caja con menor puntuación se considera un duplicado y se elimina.
-
Iteración: Repite el proceso con la siguiente caja con mayor puntuación que aún no se haya suprimido ni seleccionado, hasta procesar todas las cajas.
Aplicaciones en el mundo real#
NMS es esencial en situaciones en las que la precisión es primordial y las detecciones duplicadas pueden confundir a los sistemas posteriores.
- Conducción autónoma: En los sistemas de vehículos autónomos, las cámaras detectan peatones, otros vehículos y señales de tráfico. Un modelo podría predecir tres cajas ligeramente diferentes para un solo peatón. NMS garantiza que el sistema de planificación del vehículo reciba una sola coordenada para ese peatón, evitando frenazos erráticos o errores de planificación de la trayectoria causados por obstáculos «fantasma».
- Gestión del inventario minorista: Al utilizar visión por ordenador para contar productos en una estantería, los artículos suelen estar colocados muy juntos. Sin NMS, una sola lata de refresco podría contarse dos veces debido a predicciones superpuestas, lo que daría lugar a niveles de existencias inexactos. NMS refina estas detecciones para garantizar que el recuento del inventario coincida con la realidad.
Implementación de NMS con PyTorch#
Aunque muchos frameworks modernos gestionan NMS internamente, comprender su implementación ayuda a ajustar los parámetros. El siguiente ejemplo muestra cómo aplicar NMS mediante la 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 frente a la detección de extremo a extremo#
Tradicionalmente, NMS ha sido un paso obligatorio de «limpieza» que se ejecuta fuera de la red neuronal principal y añade latencia de inferencia. Sin embargo, el sector está evolucionando hacia arquitecturas de extremo a extremo.
- NMS estándar: Un proceso heurístico que requiere ajustar manualmente el umbral de IoU. Si el umbral es demasiado bajo, es posible que no se detecten objetos válidos cercanos entre sí (recall bajo). Si es demasiado alto, permanecen los duplicados (precision baja).
- Modelos de extremo a extremo: Los modelos de nueva generación, como YOLO26, están diseñados para funcionar de forma nativa de extremo a extremo. Aprenden a predecir exactamente una caja por objeto durante el entrenamiento, interiorizando eficazmente el proceso NMS. Esto elimina la necesidad de realizar posprocesamiento externo, lo que se traduce en velocidades de inferencia más rápidas y canalizaciones de despliegue más sencillas en la Plataforma Ultralytics.
Conceptos relacionados#
- Soft-NMS: Una variante en la que las cajas superpuestas no se eliminan estrictamente, sino que se reducen sus puntuaciones de confianza. Esto permite que los objetos parcialmente superpuestos (como las personas en una multitud) sigan detectándose si sus puntuaciones se mantienen lo suficientemente altas después de la reducción.
- Cajas de anclaje: Formas de caja predefinidas que utilizan muchos detectores para estimar el tamaño de los objetos. NMS se aplica a las predicciones finales refinadas a partir de estos anclajes.
- Intersección sobre unión (IoU): La fórmula matemática que utiliza NMS para determinar cuánto se superponen dos cajas y que actúa como umbral de decisión para la supresión.









