Ultralytics YOLO27:

Comprender la detección de extremo a extremo en Ultralytics YOLO26#

YOLO26 entrena tanto una cabeza de uno a muchos como una cabeza de uno a uno. La predicción y la validación utilizan la cabeza de uno a muchos con Supresión de No Máximos (NMS) de forma predeterminada. Esto favorece la precisión utilizando los mismos pesos entrenados. Configura nms=False para utilizar en su lugar la cabeza de uno a uno, que es más rápida y no requiere NMS.

Un único argumento controla la selección entre predicción, validación, seguimiento, exportación y evaluación comparativa:

nmsPredicción y validaciónExportar
None (predeterminado)Cabeza de uno a muchos; Ultralytics ejecuta NMSSalidas brutas de uno a muchos; el consumidor ejecuta NMS
TrueIgual que NoneCabeza de uno a muchos con NMS integrado donde sea compatible
FalseCabeza de uno a uno sin supresión de IoUSalidas de uno a uno sin NMS donde sea compatible

None significa que no hay un postprocesamiento opcional integrado en el modelo. No elimina el procesamiento normal 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 cabezas de detección seleccionables conservan el comportamiento nativo de su tarea.

Elige la ruta de salida
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
results = model.predict("image.jpg")  # one-to-many + NMS
metrics = model.val(data="coco.yaml")  # one-to-many + NMS
results = model.predict("image.jpg", nms=False)  # opt into NMS-free inference
results = model.predict("image.jpg", nms=None)  # switch back to one-to-many + NMS

model.export(format="onnx")  # raw one-to-many outputs
model.export(format="onnx", nms=True)  # embed NMS
model.export(format="onnx", nms=False)  # NMS-free one-to-one outputs

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

Ambas cabezas comparten la columna vertebral y el cuello y se optimizan durante el entrenamiento. La cabeza de uno a muchos proporciona múltiples predicciones candidatas por objeto; NMS elimina las detecciones superpuestas. La cabeza de uno a uno aprende a producir una única predicción por objeto. Seleccionar la ruta de inferencia no desactiva la supervisión de doble cabeza. La validación durante el entrenamiento utiliza la cabeza de inferencia seleccionada, por lo que la selección de puntos de control y la detención temprana siguen las mismas predicciones que el despliegue.

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

Aquí N es el tamaño del lote, nc es el número de clases, y 8400 es el recuento de candidatos en imgsz=640. Las filas de detección de uno a uno contienen [x1, y1, x2, y2, confidence, class_id]. Otras tareas de detección conllevan 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 y prototipos de máscaras
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 no utilizadas, además de plegar las capas Conv y BatchNorm. Mantén el punto de control de entrenamiento original si necesitas cambiar de cabeza: la fusión no puede reconstruir una rama que ya ha sido eliminada. Un modelo al que solo le queda su cabeza de uno a uno mantiene esa ruta disponible.

Salidas exportadas#

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

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

nms=True también produce detecciones procesadas, pero utiliza la cabeza de uno a muchos e integra NMS tradicional. Es útil cuando tu entorno de ejecución de despliegue debe recibir detecciones sin implementar la supresión por sí mismo.

El grafo de un modelo exportado determina sus salidas. Pasar nms al cargarlo no reconstruye el grafo; exporta el punto de control fuente con el valor de nms deseado 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 de uno a muchos cuando sus operadores no pueden admitir salidas de extremo a extremo. Las advertencias de formato explican esta alternativa.

  • NMS integrado: nms=True está sujeto a las restricciones de tarea, precisión y forma dinámica de cada formato. Los formatos sin NMS integrado exportan salidas nativas para su procesamiento externo.
  • CoreML: El NMS integrado admite detección, segmentación y pose con formas estáticas. Utiliza nms=True para modelos de detección que necesiten la canalización de NMS de Xcode Preview.
  • MNN: El NMS integrado admite detección y pose con dynamic=False.
  • IMX: La detección, la segmentación de instancias y la pose requieren NMS integrado, seleccionado automáticamente.
  • Hailo: YOLO26 utiliza tensores en bruto con NMS del host de forma predeterminada; nms=False selecciona su ruta de uno a uno. La detección de YOLOv8/YOLO11 utiliza NMS de HailoRT.
  • 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 de uno a muchos.

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

Compromisos entre precisión y velocidad#

Los resultados publicados de COCO para YOLO26 muestran que la cabeza de 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. La cabeza de uno a uno evita la pasada de NMS y favorece la latencia. Estos resultados motivan el comportamiento predeterminado; 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 utilizando la misma selección de cabeza, tamaño de imagen, precisión y hardware.

Preguntas frecuentes#

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

  • Sí, para nms=False o nms=True con el límite de detección predeterminado. La forma por sí sola no identifica qué cabeza se exportó. Una exportación de detección COCO en bruto predeterminada suele tener en su lugar la forma (1, 84, 8400) en imgsz=640.

  • Sí. El mismo argumento nms selecciona la cabeza de detección disponible para detección, segmentación de instancias, pose y OBB. No reemplaza la reconstrucción de máscaras, la decodificación de puntos clave, el manejo de cajas rotadas, las probabilidades de clasificación, los mapas de clases semánticas o la decodificación de profundidad.

Comentarios