Ultralytics YOLO27:
Get Started

Validación de modelos con Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Introducción#

La validación es un paso fundamental en el flujo de trabajo del aprendizaje automático, ya que permite evaluar la calidad de los modelos entrenados. El modo Val de Ultralytics YOLO26 ofrece un conjunto sólido de herramientas y métricas para evaluar el rendimiento de los modelos de detección de objetos. Esta guía es un recurso completo para aprender a usar el modo Val de forma eficaz y asegurarte de que tus modelos sean precisos y fiables.

Consulta la vista previa de YOLO27, aún no publicada para ver los resultados preliminares de validación.



Ver: Tutorial sobre los modos de Ultralytics: validación

¿Por qué validar con Ultralytics YOLO?#

Estas son las ventajas de usar el modo Val de YOLO26:

  • Precisión: Obtén métricas precisas como mAP50, mAP75 y mAP50-95 para evaluar tu modelo de forma exhaustiva.
  • Comodidad: Aprovecha las funciones integradas que recuerdan los ajustes del entrenamiento y simplifican el proceso de validación.
  • Flexibilidad: Valida tu modelo con los mismos conjuntos de datos o con otros distintos, y con tamaños de imagen iguales o diferentes.
  • Ajuste de hiperparámetros: Usa las métricas de validación para ajustar tu modelo y mejorar su rendimiento.

Características principales del modo Val#

Estas son las funcionalidades destacadas que ofrece el modo Val de YOLO26:

  • Ajustes automatizados: Los modelos recuerdan sus configuraciones de entrenamiento para facilitar la validación.
  • Compatibilidad con varias métricas: Evalúa tu modelo mediante diversas métricas de precisión.
  • CLI y API de Python: Elige entre la interfaz de línea de comandos y la API de Python según tus preferencias para la validación.
  • Compatibilidad de datos: Funciona sin problemas tanto con los conjuntos de datos usados durante el entrenamiento como con conjuntos de datos personalizados.
Consejo
  • Los modelos YOLO26 recuerdan automáticamente sus ajustes de entrenamiento, así que yolo val model=path/to/best.pt o YOLO("path/to/best.pt").val() valida con el tamaño de imagen del entrenamiento y el conjunto de datos original. Si se usan pesos oficiales, se recurre al conjunto de datos predeterminado de la tarea; pasa data para anularlo.

Ejemplos de uso#

Valida la precisión de un modelo YOLO26n entrenado. No hacen falta argumentos, ya que model conserva el data y los argumentos del entrenamiento como atributos del modelo: path/to/best.pt valida con el conjunto de datos con el que se entrenó. Los pesos oficiales registran una ruta al conjunto de datos de entrenamiento que no existe en tu equipo, por lo que recurren al coco8.yaml predeterminado de la tarea y muestran una advertencia. Pasa data para validar con otro conjunto de datos. Consulta la sección Argumentos más abajo para ver la lista completa de argumentos de validación.

Error de multiprocesamiento en Windows

En Windows, puede aparecer un RuntimeError al iniciar la validación como script. Añade un bloque if __name__ == "__main__": antes del código de validación para solucionarlo.

Ejemplo
from ultralytics import YOLO

# Cargar un modelo
model = YOLO("yolo26n.pt")  # carga un modelo oficial
model = YOLO("path/to/best.pt")  # cargar un modelo personalizado

# Valida el modelo
metrics = model.val()  # no hacen falta argumentos; se recuerdan el conjunto de datos y los ajustes
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # una lista que contiene mAP50-95 para cada categoría
metrics.box.image_metrics  # diccionario de métricas por imagen con precisión, exhaustividad, F1, TP, FP y FN

Argumentos para la validación de modelos YOLO#

Al validar modelos YOLO, puedes ajustar varios argumentos para optimizar el proceso de evaluación. Estos argumentos controlan aspectos como el tamaño de la imagen de entrada, el procesamiento por lotes y los umbrales de rendimiento. A continuación se detalla cada argumento para ayudarte a personalizar los ajustes de validación de forma eficaz.

ArgumentoTipoPredeterminadoDescripción
datastrNoneEspecifica la ruta al YAML del conjunto de datos (p. ej., coco8.yaml), que debe incluir la ruta a los datos de validación. Para la clasificación, en cambio, se usa un directorio de conjunto de datos o el nombre de un conjunto de datos integrado (p. ej., imagenet10).
imgszint640Define el tamaño de las imágenes de entrada. Todas las imágenes se redimensionan a estas dimensiones antes del procesamiento. Los tamaños mayores pueden mejorar la precisión en objetos pequeños, pero aumentan el tiempo de cálculo.
batchint16Establece el número de imágenes por lote. Los valores más altos aprovechan mejor la memoria de la GPU, pero requieren más VRAM. Ajústalo según los recursos de hardware disponibles.
save_jsonboolFalseSi True, guarda los resultados en un archivo JSON para analizarlos más adelante, integrarlos con otras herramientas o enviarlos a servidores de evaluación como COCO. En conjuntos de datos de detección, también evalúa las predicciones con faster-coco-eval e informa del mAP para objetos pequeños, medianos y grandes; durante el entrenamiento, estos valores se registran como metrics/mAP_small(B), metrics/mAP_medium(B) y metrics/mAP_large(B) en results.csv.
conffloat0.001Establece el umbral mínimo de confianza para las detecciones. Los valores más bajos aumentan la exhaustividad, pero pueden introducir más falsos positivos. Las curvas de precisión-exhaustividad, el mAP y las matrices de confusión de detección usan este valor; un conf más alto, como 0.25, genera una matriz más parecida a la salida de predicción, pero puede reducir el mAP. La precisión y la exhaustividad resumidas usan la confianza de F1 máximo, por lo que pueden diferir de los valores derivados de confusion_matrix.png. El valor predeterminado para la validación OBB es 0.01 para reducir el uso de memoria.
ioufloat0.7Establece el umbral de intersección sobre unión para la supresión no máxima. Controla la eliminación de detecciones duplicadas.
max_detint300Limita el número máximo de detecciones por imagen. Para detect, segment, pose y OBB, si se mantiene en 300, se aumenta hasta el número más alto de objetos etiquetados en la partición validada cuando una imagen supera ese límite, con una advertencia; cualquier otro valor se mantiene, con una advertencia de que la exhaustividad puede quedar limitada si una imagen lo supera.
quantizeint o strNonePrecisión de validación: 16/"fp16" y 32/"fp32"/sin definir seleccionan el cálculo FP16 o FP32 para los modelos PyTorch y TorchScript; los demás formatos calculan con la precisión que determinen su artefacto y entorno de ejecución. Con 16, OpenVINO sigue redondeando la entrada a FP16 en el cliente y volviéndola a ampliar a FP32, sin cambiar la precisión de cálculo del entorno de ejecución. La cuantización INT8/PTQ se configura durante la exportación y, después, se usa al validar el modelo exportado. Sustituye la marca obsoleta half.
devicestrNoneEspecifica el dispositivo para la validación (cpu, cuda:0, npu, npu:0, etc.). Con None, selecciona automáticamente el mejor dispositivo disponible. Puedes especificar varios dispositivos CUDA separándolos con comas.
dnnboolFalseSi True, usa el módulo DNN de OpenCV para la inferencia de modelos ONNX, como alternativa a los métodos de inferencia de PyTorch.
plotsboolTrueSi se establece en True, genera y guarda gráficos que comparan las predicciones con la verdad de referencia, matrices de confusión y curvas PR para evaluar visualmente el rendimiento del modelo.
classeslist[int]NoneEspecifica una lista de ID de clase que se van a evaluar. Es útil para filtrar y centrarse solo en determinadas clases durante la evaluación.
rectboolTrueSi True, usa inferencia rectangular para el procesamiento por lotes, lo que reduce el relleno y puede aumentar la velocidad y la eficiencia al procesar las imágenes con su relación de aspecto original. Se ignora durante la validación depth, que estira cada imagen a un cuadrado fijo de imgsz en lugar de añadir relleno.
splitstr'val'Determina qué partición del conjunto de datos se usa para la validación (val, test o train). Permite elegir con flexibilidad el segmento de datos para evaluar el rendimiento.
fractionfloat, int o list1.0Subconjunto de la partición validada. Con una lista [train, val, test], se aplica la entrada que coincida con split (1 = partición completa; los enteros superiores a 1 = número de imágenes; las entradas omitidas corresponden a la partición completa). Un valor escalar solo se aplica con split=train; val y test usan entonces la partición completa.
projectstrNoneNombre del directorio del proyecto donde se guardan los resultados de validación. Ayuda a organizar los resultados de distintos experimentos o modelos.
namestrNoneNombre de la ejecución de validación. Se usa para crear un subdirectorio dentro de la carpeta del proyecto, donde se guardan los registros y resultados de validación.
verboseboolTrueSi True, muestra información detallada durante el proceso de validación, incluidas las métricas por clase, el progreso de los lotes y más información de depuración.
save_txtboolFalseSi True, guarda los resultados de detección en archivos de texto, uno por imagen. Es útil para realizar análisis adicionales, posprocesamiento personalizado o integraciones con otros sistemas.
save_confboolFalseSi True, incluye valores de confianza en los archivos de texto guardados cuando se activa save_txt, lo que proporciona resultados más detallados para el análisis y el filtrado.
workersint8Número de subprocesos de trabajo para cargar datos. Los valores más altos pueden acelerar el preprocesamiento, pero aumentar el uso de la CPU. Si se establece en 0, se usa el hilo principal, lo que puede ser más estable en algunos entornos.
augmentboolFalseActiva el aumento en tiempo de prueba (TTA) durante la validación, lo que puede mejorar la precisión de detección a costa de la velocidad de inferencia al ejecutar la inferencia con versiones transformadas de la entrada. Solo está disponible para modelos PyTorch de Ultralytics.
agnostic_nmsboolFalseActiva la supresión no máxima independiente de la clase, que suprime los cuadros solapados con puntuaciones más bajas sin tener en cuenta la clase predicha. Es útil en aplicaciones centradas en instancias. Con la inferencia sin NMS (nms=False en YOLO26 o YOLOv10), solo impide que la misma detección aparezca con varias etiquetas de clase (duplicados con IoU=1.0); no suprime cuadros distintos según el umbral de IoU.
single_clsboolFalseTrata todas las clases como una sola durante la validación. Es útil para evaluar el rendimiento del modelo en tareas de detección binaria o cuando las diferencias entre clases no son importantes.
visualizeboolFalseVisualiza la verdad de referencia, los verdaderos positivos, los falsos positivos y los falsos negativos de cada imagen. Es útil para depurar e interpretar el modelo.
show_labelsboolTrueMuestra las etiquetas de clase en las visualizaciones de validación cuando visualize=True. Configúralo en False para ver las coincidencias y los errores con más claridad.
show_confboolTrueMuestra las puntuaciones de confianza en las visualizaciones de validación cuando visualize=True. Configúralo en False para ver las coincidencias y los errores con más claridad.
compilebool o strFalseActiva la compilación de grafos torch.compile de PyTorch 2.x con backend='inductor'. Acepta True → "default" para activarla, False → para desactivarla o un modo de cadena como "default", "reduce-overhead", "max-autotune-no-cudagraphs". Si no es compatible, vuelve al modo eager y muestra una advertencia.
channels_lastboolNoneUsa el formato de memoria channels_last (NHWC) para la validación nativa de PyTorch. None lo activa automáticamente en CPU x86 con Linux y Windows, compatible con oneDNN y PyTorch 1.13 o posterior; False lo desactiva y True lo solicita en dispositivos CPU x86 o CUDA compatibles. ARM64, MPS, las versiones anteriores de PyTorch, las CPU sin oneDNN y los formatos exportados no cambian; durante el entrenamiento, la validación mantiene la disposición del modelo de entrenamiento.
nmsbool, opcionalNonePor defecto, ejecuta inferencia uno a varios con NMS (None o True). Configura False para usar el cabezal uno a uno sin NMS cuando esté disponible. Consulta la guía de detección de extremo a extremo para obtener más información.

Cada uno de estos ajustes desempeña un papel fundamental en el proceso de validación y permite evaluar los modelos YOLO de forma personalizable y eficiente. Si adaptas estos parámetros a tus necesidades y recursos concretos, podrás lograr el mejor equilibrio entre precisión y rendimiento.

Ejemplo de validación con argumentos#



Ver: Cómo exportar los resultados de validación de modelos a CSV, JSON, SQL, DataFrame de Polars y mucho más

Explore model validation and different export methods in Google Colab

Los siguientes ejemplos muestran cómo validar un modelo YOLO con argumentos personalizados en Python y CLI.

Ejemplo
from ultralytics import YOLO

# Cargar un modelo
model = YOLO("yolo26n.pt")

# Personaliza los ajustes de validación
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")
Exportar ConfusionMatrix

También puedes guardar los resultados de ConfusionMatrix en distintos formatos mediante el código proporcionado.

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())
Precisión, exhaustividad y F1 por imagen

La validación almacena las métricas de precisión, exhaustividad, F1, TP, FP y FN por imagen (con un umbral de IoU de 0.5) para todas las tareas, excepto clasificación. Puedes acceder a ellas mediante results.box.image_metrics para detección y OBB, results.seg.image_metrics para segmentación y results.pose.image_metrics para pose, una vez finalizada la validación.

from ultralytics import YOLO

# Cargar un modelo
model = YOLO("yolo26n.pt")

# Valida y accede a las métricas por imagen
results = model.val(data="coco8.yaml")

# image_metrics es un diccionario que usa los nombres de archivo de imagen como claves
print(results.box.image_metrics)
# Output: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}

# Accede a las métricas de una imagen concreta
results.box.image_metrics["image1.jpg"]  # {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}

Cada entrada de image_metrics contiene las siguientes claves:

ClaveDescripción
precisionPuntuación de precisión de la imagen (tp / (tp + fp)).
recallPuntuación de exhaustividad de la imagen (tp / (tp + fn)).
f1Media armónica de la precisión y la exhaustividad.
tpNúmero de verdaderos positivos de la imagen.
fpNúmero de falsos positivos de la imagen.
fnNúmero de falsos negativos de la imagen.

Esta función está disponible para las tareas de detección, segmentación, pose y OBB.

El objeto de métricas devuelto también incluye métodos de exportación para análisis posteriores:

MétodoTipo de retornoDescripción
summary()List[Dict[str, Any]]Convierte los resultados de validación en un diccionario resumido.
to_df()DataFrameDevuelve los resultados de validación como un DataFrame de Polars estructurado.
to_csv()strExporta los resultados de validación en formato CSV y devuelve la cadena CSV.
to_json()strExporta los resultados de validación en formato JSON y devuelve la cadena JSON.

Para obtener más información, consulta la documentación de la clase DataExportMixin.

Qué hacer a continuación#

¿Te convencen las métricas? Exporta el modelo a un formato de despliegue. Si la precisión no es la adecuada, vuelve atrás y entrena de nuevo con hiperparámetros distintos o más datos de entrenamiento.

Preguntas frecuentes#

  • Para validar tu modelo YOLO26, puedes usar el modo Val que ofrece Ultralytics. Por ejemplo, con la API de Python puedes cargar un modelo y ejecutar la validación así:

    from ultralytics import YOLO
    
    # Cargar un modelo
    model = YOLO("yolo26n.pt")
    
    # Valida el modelo
    metrics = model.val()
    print(metrics.box.map)  # map50-95

    También puedes usar la interfaz de línea de comandos (CLI):

    yolo detect val model=yolo26n.pt data=coco8.yaml

    Para personalizarlo más, puedes ajustar varios argumentos, como imgsz, batch y conf, tanto en Python como en CLI. Consulta la sección Argumentos para la validación de modelos YOLO para ver la lista completa de parámetros.

  • La validación de modelos YOLO26 proporciona varias métricas clave para evaluar el rendimiento del modelo. Entre ellas se incluyen:

    • mAP50 (precisión media con un umbral de IoU de 0.5)
    • mAP75 (precisión media con un umbral de IoU de 0.75)
    • mAP50-95 (precisión media en varios umbrales de IoU, del 0.5 al 0.95)

    Con la API de Python, puedes acceder a estas métricas así:

    metrics = model.val()  # se supone que `model` ya está cargado
    print(metrics.box.map)  # mAP50-95
    print(metrics.box.map50)  # mAP50
    print(metrics.box.map75)  # mAP75
    print(metrics.box.maps)  # lista de mAP50-95 para cada categoría
    print(metrics.box.image_metrics)  # diccionario de métricas por imagen con precisión, exhaustividad, F1, TP, FP y FN

    Para evaluar el rendimiento por completo, es fundamental revisar todas estas métricas. Para obtener más información, consulta Características principales del modo Val.

  • Usar Ultralytics YOLO para la validación ofrece varias ventajas:

    • Precisión: YOLO26 ofrece métricas de rendimiento precisas, como mAP50, mAP75 y mAP50-95.
    • Comodidad: Los modelos recuerdan sus ajustes de entrenamiento, lo que simplifica la validación.
    • Flexibilidad: Puedes validar con los mismos conjuntos de datos o con otros distintos, y con tamaños de imagen iguales o diferentes.
    • Ajuste de hiperparámetros: Las métricas de validación ayudan a ajustar los modelos y mejorar su rendimiento.

    Estas ventajas garantizan que tus modelos se evalúen a fondo y puedan optimizarse para obtener mejores resultados. Descubre más sobre estas ventajas en la sección Por qué validar con Ultralytics YOLO.

  • Sí, puedes validar tu modelo YOLO26 con un conjunto de datos personalizado. Especifica el argumento data con la ruta al archivo YAML de tu conjunto de datos, que debe incluir la ruta a los datos de validación. Para clasificación, en cambio, se indica un directorio de conjunto de datos o el nombre de un conjunto de datos integrado (p. ej., imagenet10).

    Nota

    La validación se realiza con los nombres de clase propios del modelo, que puedes consultar mediante model.names y que pueden diferir de los definidos por el propio conjunto de datos.

    Ejemplo en Python:

    from ultralytics import YOLO
    
    # Cargar un modelo
    model = YOLO("yolo26n.pt")
    
    # Valida con un conjunto de datos personalizado
    metrics = model.val(data="path/to/your/custom_dataset.yaml")
    print(metrics.box.map)  # map50-95

    Ejemplo con CLI:

    yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yaml

    Para ver más opciones de personalización durante la validación, consulta la sección Ejemplo de validación con argumentos.

  • Para guardar los resultados de validación en un archivo JSON, puedes establecer el argumento save_json en True al ejecutar la validación. Puedes hacerlo tanto con la API de Python como con CLI.

    Ejemplo en Python:

    from ultralytics import YOLO
    
    # Cargar un modelo
    model = YOLO("yolo26n.pt")
    
    # Guarda los resultados de validación en JSON
    metrics = model.val(save_json=True)

    Ejemplo con CLI:

    yolo val model=yolo26n.pt save_json=True

    En los conjuntos de datos de detección, save_json=True también indica la mAP de objetos pequeños, medianos y grandes mediante faster-coco-eval. Consulta Argumentos para la validación de modelos YOLO para obtener más información.

Comentarios