Ultralytics YOLO27:
Get Started

Cómo funciona la detección de extremo a extremo en Ultralytics YOLO26#

YOLO26 entrena tanto una cabeza uno a muchos como una cabeza uno a uno. De forma predeterminada, la predicción y la validación usan la cabeza uno a muchos con supresión no máxima (NMS). Esta opción prioriza la precisión con los mismos pesos entrenados. Asigna nms=False para usar en su lugar la cabeza uno a uno, más rápida y sin NMS.

Un argumento controla la opción en predicción, validación, seguimiento, exportación y evaluación comparativa:

nmsPredicción y validaciónExportar
None (predeterminado)Cabeza uno a muchos; Ultralytics ejecuta NMSSalidas sin procesar de la cabeza uno a muchos; el consumidor ejecuta NMS
TrueIgual que NoneCabeza uno a muchos con NMS integrado cuando es compatible
FalseCabeza uno a uno sin supresión por IoUSalidas uno a uno sin NMS cuando es compatible

None significa que el modelo no incluye posprocesamiento opcional. No elimina el procesamiento habitual que convierte las salidas del modelo en resultados de predicción o métricas de validación. La clasificación, la segmentación semántica, la profundidad y los modelos sin cabezales de detección seleccionables mantienen el comportamiento nativo de su tarea.

Elige la ruta de salida
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
results = model.predict("image.jpg")  # uno a muchos + NMS
metrics = model.val(data="coco.yaml")  # uno a muchos + NMS
results = model.predict("image.jpg", nms=False)  # activar la inferencia sin NMS
results = model.predict("image.jpg", nms=None)  # volver a uno a muchos + NMS

model.export(format="onnx")  # salidas sin procesar de uno a muchos
model.export(format="onnx", nms=True)  # integrar NMS
model.export(format="onnx", nms=False)  # salidas uno a uno sin NMS

Cómo funciona la detección de extremo a extremo#

Ambas cabezas comparten el backbone y el neck, y se optimizan durante el entrenamiento. La cabeza uno a muchos genera varias predicciones candidatas por objeto; NMS elimina las detecciones solapadas. La cabeza uno a uno aprende a generar una única predicción por objeto. Seleccionar la ruta de inferencia no desactiva la supervisión de ambas cabezas. Durante el entrenamiento, la validación usa la cabeza de inferencia seleccionada, por lo que la selección de checkpoints y la detención temprana se basan en las mismas predicciones que el despliegue.

CabezalSalida de detección antes del procesamiento externoProcesamiento
Uno a muchos (predeterminado)(N, nc + 4, 8400)Filtrado por confianza y NMS
Uno a uno(N, 300, 6)Filtrado por confianza; sin supresión por IoU

Aquí, N es el tamaño del lote, nc es el número de clases y 8400 es el número de candidatos en imgsz=640. Las filas de detección uno a uno contienen [x1, y1, x2, y2, confidence, class_id]. Otras tareas de detección incluyen salidas adicionales:

TareaSalida de extremo a extremoDatos adicionales
Detección(N, 300, 6)—
Segmentación de instancias(N, 300, 6 + nm) y (N, nm, H, W)Coeficientes de máscara y prototipos
Pose(N, 300, 57)17 puntos clave × 3 valores
OBB(N, 300, 7)Ángulo de rotación

La fusión elimina las ramas de inferencia que no se utilizan y pliega las capas Conv y BatchNorm. Conserva el punto de control original del entrenamiento si necesitas cambiar de cabezal: la fusión no puede reconstruir una rama que ya se ha eliminado. Un modelo al que solo le queda el cabezal uno a uno conserva esa ruta disponible.

Salidas exportadas#

Los modelos de detección YOLOv8, YOLO11 y YOLO26 exportan predicciones sin procesar de uno a muchos de forma predeterminada. Exporta YOLO26 con nms=False para obtener detecciones sin NMS.

nms=Nonenms=False
Salida de detección(N, nc + 4, 8400)(N, 300, 6)
Formato de la cajaxywhxyxy
PuntuacionesUna puntuación por clase y candidatoConfianza e ID de clase por detección
Procesamiento externoFiltrado por confianza y NMSFiltrado por confianza

nms=True también genera detecciones procesadas, pero utiliza el cabezal uno a muchos e integra la NMS tradicional. Resulta útil cuando el entorno de ejecución de despliegue debe recibir las detecciones sin implementar la supresión por su cuenta.

El grafo de un modelo exportado determina sus salidas. Pasar nms al cargarlo no reconstruye el grafo; exporta el punto de control de origen con el valor nms que quieras para seleccionar su ruta de salida. Ultralytics utiliza los metadatos del artefacto para evitar aplicar NMS dos veces.

Compatibilidad de los formatos de exportación#

ONNX, TensorRT, CoreML, OpenVINO y varios formatos más admiten exportaciones sin NMS. NCNN, RKNN, PaddlePaddle, ExecuTorch, IMX, Edge TPU y Qualcomm QNN recurren a la ruta uno a muchos cuando sus operadores no pueden admitir una salida de extremo a extremo. Las advertencias del formato explican este comportamiento alternativo.

  • NMS integrada: nms=True está sujeta a las restricciones de tarea, precisión y formas dinámicas de cada formato. Los formatos que no admiten NMS integrada exportan salidas nativas para procesarlas externamente.
  • CoreML: La NMS integrada admite detección, segmentación y pose con formas estáticas. Usa nms=True para los modelos de detección que necesitan el proceso de NMS de Xcode Preview.
  • MNN: La NMS integrada admite detección y pose con dynamic=False.
  • IMX: La detección, la segmentación de instancias y la pose requieren NMS integrada, que se selecciona automáticamente.
  • Hailo: YOLO26 utiliza tensores sin procesar con NMS en el host de forma predeterminada; nms=False selecciona su ruta uno a uno. La detección con YOLOv8/YOLO11 utiliza HailoRT NMS.
  • Cuantización: Las versiones de TensorRT anteriores a la 8.5.0, TensorRT 10.3.0 INT8 en JetPack 6 y LiteRT INT8 o w8a16 recurren a salidas uno a muchos.

Consulta las guías de integración individuales para conocer los requisitos de hardware. Para obtener tensores de salida completos en FP16, usa nms=None; los índices de clase de extremo a extremo pueden mantener los tensores de salida en FP32 incluso cuando el modelo está cuantizado.

Equilibrio entre precisión y velocidad#

Los resultados publicados de YOLO26 en COCO muestran que el cabezal uno a muchos mejora el mAP de detección entre 0,6 y 0,8 puntos en las cinco escalas: por ejemplo, 40,9 frente a 40,1 para YOLO26n, y 57,5 frente a 56,9 para YOLO26x. El cabezal uno a uno evita el paso de NMS y prioriza la latencia. Estos resultados justifican la configuración predeterminada, pero no garantizan una mejora en todos los conjuntos de datos.

Las mediciones de velocidad sin NMS publicadas utilizan nms=False. Compara la precisión y la latencia con la misma selección de cabezal, tamaño de imagen, precisión y hardware.

Preguntas frecuentes#

  • Limita las detecciones que devuelven la predicción y la validación. En las exportaciones de extremo a extremo y con NMS integrada, el límite forma parte del grafo, así que debes volver a exportar para cambiarlo; la NMS integrada de detección de CoreML es la excepción y no tiene límite de detecciones. La salida de extremo a extremo puede contener menos candidatos si la imagen proporciona menos anclajes que max_det.

  • Sí, para nms=False o nms=True con el límite de detecciones predeterminado. La forma por sí sola no permite identificar qué cabezal se ha exportado. En cambio, una exportación de detección COCO sin procesar con la configuración predeterminada suele tener la forma (1, 84, 8400) en imgsz=640.

  • Sí. El mismo argumento nms selecciona el cabezal de detección disponible para las tareas de detección, segmentación de instancias, pose y OBB. No sustituye la reconstrucción de máscaras, la decodificación de puntos clave, el tratamiento de cajas giradas, las probabilidades de clasificación, los mapas de clases semánticas ni la decodificación de profundidad.

Comentarios