Ultralytics YOLO27: Únete a la lista de espera.
Get Started
Fundamentos de visión artificial·Consulta las métricas·Lección 9/10
Lecciónprincipiante

Interpretar correctamente las métricas de detección

Ejecuta la validación, analiza la precisión, la exhaustividad, mAP50-95, AP por clase y la matriz de confusión, y elige un umbral para producción a partir de un objetivo.

Una sola cifra tranquiliza: mAP 0,83, y listo. Pero esa misma mAP puede ocultar una clase que falla la mitad de las veces, cajas sistemáticamente imprecisas o un umbral que envía una alerta cada minuto. Ejecutarás una validación real y la analizarás línea por línea hasta que te indique qué debes corregir y dónde establecer el umbral.

Resultado

Ejecuta la validación, identifica la clase limitante a partir de su AP por clase, elige un umbral de confianza según un objetivo de precisión o exhaustividad y decide si debes publicar, iterar o replantear el enfoque.

Vía rápida
Si ya tienes experiencia, aquí tienes un resumen.
  1. Precisión: proporción de cajas dibujadas que son correctas. Exhaustividad: proporción de objetos reales encontrados.

  2. Informa de mAP50-95; mAP50 tolera cajas imprecisas.

  3. Analiza el AP por clase; la media oculta la clase más débil.

  4. Las columnas P y R corresponden a un único punto de funcionamiento, no al umbral que usarás en producción.

  5. Elige el umbral a partir de un objetivo: precisión ≥ X o exhaustividad ≥ Y.

Práctico

Cómo se puntúa cada predicción#

Durante la validación, cada caja predicha se compara con la verdad terreno. Una predicción es un verdadero positivo (TP) si tiene la clase correcta y su IoU con una caja de verdad terreno aún no emparejada supera un umbral; de lo contrario, es un falso positivo (FP). Cada objeto de verdad terreno que queda sin emparejar es un falso negativo (FN).

MétricaFórmulaPregunta a la que responde
PrecisiónTP / (TP + FP)Cuando el modelo dibuja una caja, ¿con qué frecuencia acierta?
ExhaustividadTP / (TP + FN)De todos los objetos reales, ¿cuántos encontró?
F12 × P × R / (P + R)Una cifra que equilibra ambas

Al reducir el umbral de confianza, se añaden cajas: aumenta la exhaustividad y disminuye la precisión. La curva precisión-exhaustividad representa ese equilibrio para todos los umbrales, y el área bajo la curva es la precisión media (AP) de una clase. mAP50 calcula la media del AP de todas las clases con un IoU de 0,5, donde una caja claramente imprecisa sigue contando. mAP50-95 calcula la media con diez umbrales de IoU entre 0,5 y 0,95, por lo que recompensa las cajas ajustadas; es la cifra principal de las tablas de modelos de Ultralytics.

Ejecuta una validación#

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
metrics = model.val(data="coco8.yaml")

print(f"precision={metrics.box.mp:.3f} recall={metrics.box.mr:.3f}")
print(f"mAP50={metrics.box.map50:.3f} mAP50-95={metrics.box.map:.3f}")
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)
                   all          4         17      0.551      0.962      0.943      0.669
                person          3         10      0.551        0.8      0.848      0.387
                   dog          1          1       0.36          1      0.995      0.597
                 horse          1          2       0.36          1      0.995      0.696
              elephant          1          2      0.656      0.969      0.828      0.545
              umbrella          1          1      0.543          1      0.995      0.895
          potted plant          1          1      0.833          1      0.995      0.895

Léela de arriba abajo:

  • Instancias 17, imágenes 4. COCO8 sirve para una prueba rápida. Cuatro imágenes no bastan para decidir si publicar el modelo; interpreta todas las cifras como ejemplos.
  • mAP50 0,943 frente a mAP50-95 0,669. Se encuentran la mayoría de los objetos, pero muchas cajas son imprecisas. Una diferencia grande indica que el punto débil es la localización, no la detección.
  • AP50-95 de person: 0,387. La clase más común es la más débil. Ese es tu cuello de botella.
  • P 0,551, R 0,962. Estas columnas se leen en el nivel de confianza único que maximiza F1 entre todas las clases —un umbral bajo en este caso—, no en el 0,25 con el que haces predicciones. No las cites como «la precisión del modelo».

AP por clase y umbral para producción#

La misma ejecución incluye el AP por clase y la precisión y la exhaustividad para cada umbral de confianza, así que puedes elegir un umbral según un objetivo en lugar de hacer una suposición:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
metrics = model.val(data="coco8.yaml", plots=False, verbose=False)
box = metrics.box

# Per-class AP from the same run: the average hides the weakest class
for i, c in enumerate(box.ap_class_index):
    print(f"{model.names[int(c)]:13} AP50={box.ap50[i]:.3f}  AP50-95={box.ap[i]:.3f}")

# Precision and recall at every confidence threshold for one class
row = list(box.ap_class_index).index(0)  # class 0 = person
for conf in (0.1, 0.25, 0.5, 0.75):
    j = int(conf * (len(box.px) - 1))
    print(f"person @ conf {conf:.2f}: precision {box.p_curve[row, j]:.2f}, recall {box.r_curve[row, j]:.2f}")
                   all          4         17      0.551      0.962      0.943      0.669
person        AP50=0.848  AP50-95=0.387
dog           AP50=0.995  AP50-95=0.597
horse         AP50=0.995  AP50-95=0.696
elephant      AP50=0.828  AP50-95=0.545
umbrella      AP50=0.995  AP50-95=0.895
potted plant  AP50=0.995  AP50-95=0.895
person @ conf 0.10: precision 0.63, recall 0.80
person @ conf 0.25: precision 1.00, recall 0.54
person @ conf 0.50: precision 1.00, recall 0.40
person @ conf 0.75: precision 1.00, recall 0.14

Ahora el umbral es una regla de decisión, no una corazonada:

Objetivo según tu criterio de decisiónEligeEn esta ejecución
Como máximo, el 5 % de las alertas pueden ser falsas (precisión ≥ 0,95)El umbral más bajo que lo cumple, para conservar la máxima exhaustividad0,25: precisión 1,00, exhaustividad 0,54
No omitas a más de 1 de cada 5 personas (exhaustividad ≥ 0,80)El umbral más alto que lo cumple, para conservar la máxima precisión0,10: precisión 0,63, exhaustividad 0,80

Ninguna de las dos opciones es suficientemente buena en este caso: una precisión alta deja fuera a la mitad de las personas, y una exhaustividad alta genera un tercio de alertas. Eso justifica «iterar»; no es un problema de umbral. La validación también guarda BoxPR_curve.png, BoxP_curve.png, BoxR_curve.png, BoxF1_curve.png y confusion_matrix.png en la carpeta de ejecución, para que puedas observar el mismo equilibrio en los gráficos; la guía de métricas de rendimiento explica cada una.

Qué corregir a continuación#

La matriz de confusión te indica con qué se confunde una clase débil. Si el AP de forklift es bajo y las carretillas elevadoras se predicen como pallet_jack, se trata de una confusión entre clases, no de un problema de localización: añade ejemplos que muestren la diferencia visual o combina las clases si ningún código posterior necesita distinguirlas. La guía de análisis de evaluación de modelos explica el flujo de trabajo.

Tres formas de mejorar mAP: calidad de los datos, optimización del modelo y proceso de anotación

La mayoría de las mejoras corresponden al primer y al tercer panel: mejores datos y mejores etiquetas para la clase limitante. Cambia el modelo o los parámetros de entrenamiento solo después de superar las comprobaciones de datos de las tres lecciones anteriores.

Evidencias en un conjunto de prueba congeladoDecisión
Todas las clases críticas para el negocio cumplen sus objetivos de precisión y exhaustividadPublica el modelo y supervisa su rendimiento
Una clase o condición no alcanza su objetivoItera: recopila datos y etiquetas específicos para cubrir esa carencia
Todas las clases están muy lejos del objetivo o se solapan visualmenteReplantea la especificación de la tarea, las clases o la configuración de la cámara

Errores habituales#

La AP por clase supera a la media

Un mAP de 0,83 puede ocultar una clase con 0,40. Si esa clase aporta valor al negocio, no tienes un modelo con 0,83: tienes un modelo defectuoso con una media engañosamente favorable.

Citar solo mAP50

Síntoma: un modelo que «obtiene 0,94» dibuja cajas demasiado holgadas para medir o recortar. Solución: informa de mAP50-95 e interpreta la diferencia respecto a mAP50 como una señal de localización.

Confiar en un conjunto de validación diminuto o contaminado

Síntoma: resultados aparentemente perfectos con unas pocas decenas de imágenes o con imágenes casi idénticas a las del conjunto de entrenamiento. Solución: amplía la validación hasta alcanzar unos cientos de instancias por clase importante y ejecuta la comprobación de casi duplicados de la lección anterior antes de consultar cualquier métrica.

Pruébalo

Ejecuta los dos scripts anteriores. Escribe un informe de un párrafo para una aplicación de recuento de personas basada en este modelo: indica la clase limitante y su AP50-95, qué revela la diferencia entre mAP50 y mAP50-95, el umbral con el que publicarías el modelo para obtener una precisión ≥ 0,95 y la pérdida de exhaustividad que implica, y decide si debes publicar, iterar o replantear el enfoque.

Cuándo se considera terminado
Has terminado la lección cuando se cumplen todas estas condiciones.
  • Tu informe identifica la clase limitante e indica su AP50-95.

  • Tu informe indica un umbral de envío, el objetivo que lo ha generado y el coste en exhaustividad o precisión.

  • Tu informe termina con una decisión —enviar, iterar o replantear— respaldada por los datos.

Mostrar solución

Informe: contador de personas en yolo26n.pt, validación con COCO8

El cuello de botella es person, con un AP50-95 de 0.387 frente a un 0.669 global. También es la clase con más instancias (10 de 17), así que es tanto la más débil como la más importante para un contador de personas. Su AP50 es 0.848, por lo que el modelo detecta a la mayoría de las personas, pero dibuja cajas poco ajustadas; esto importa menos para contar que para cualquier tarea que mida la posición o el tamaño.

Para una precisión ≥ 0.95, el umbral más bajo que cumple el requisito es conf 0.25, con una precisión de 1.00, pero una exhaustividad de solo 0.54: el contador no detectaría a casi la mitad de las personas. Para una exhaustividad ≥ 0.80 necesitaríamos conf 0.10, donde un tercio de los recuentos serían falsos.

Decisión: iterar. Recopila y etiqueta imágenes de personas tomadas con la cámara de despliegue, sobre todo personas pequeñas, ocluidas y situadas en los bordes del encuadre; después, vuelve a validar con un conjunto de prueba congelado de unos cientos de personas. Cuatro imágenes de validación no bastan para decidir si se puede desplegar.

Qué viene después

Última lección: ejecuta YOLO26 con tus propias imágenes y comprueba el resultado según las especificaciones de tu tarea.