Validación de modelos con Ultralytics YOLO#
Introducción#
La validación es un paso fundamental en el flujo de trabajo de machine learning, ya que te permite evaluar la calidad de tus modelos entrenados. El modo Val en Ultralytics YOLO26 ofrece un conjunto sólido de herramientas y métricas para evaluar el rendimiento de tus modelos de object detection. Esta guía sirve como un recurso completo para entender cómo utilizar eficazmente el modo Val y garantizar que tus modelos sean precisos y fiables.
Watch: Ultralytics Modes Tutorial: Validation
¿Por qué validar con Ultralytics YOLO?#
He aquí por qué usar el modo Val de YOLO26 es ventajoso:
- Precisión: Obtén métricas precisas como mAP50, mAP75 y mAP50-95 para evaluar tu modelo de manera integral.
- Comodidad: Utiliza funciones integradas que recuerdan los ajustes de entrenamiento, simplificando el proceso de validación.
- Flexibilidad: Valida tu modelo con los mismos o diferentes conjuntos de datos y tamaños de imagen.
- Hyperparameter Tuning: Utiliza las métricas de validación para ajustar tu modelo y obtener un mejor rendimiento.
Características clave del modo Val#
Estas son las funcionalidades notables que ofrece el modo Val de YOLO26:
- Ajustes automatizados: Los modelos recuerdan sus configuraciones de entrenamiento para una validación directa.
- Soporte multimétrica: Evalúa tu modelo basándote en una gama de métricas de precisión.
- API de Python y CLI: Elige entre la interfaz de línea de comandos o la API de Python según tu preferencia para la validación.
- Compatibilidad de datos: Funciona sin problemas con los conjuntos de datos utilizados durante la fase de entrenamiento, así como con conjuntos de datos personalizados.
- Los modelos YOLO26 recuerdan automáticamente sus ajustes de entrenamiento, por lo que puedes validar un modelo con el mismo tamaño de imagen y en el conjunto de datos original de forma sencilla con solo
yolo val model=yolo26n.ptoYOLO("yolo26n.pt").val()
Ejemplos de uso#
Valida la precisión de un modelo YOLO26n entrenado en el conjunto de datos COCO8. No se necesitan argumentos, ya que el model conserva su data y sus argumentos como atributos del modelo. Consulta la sección de argumentos más abajo para ver una lista completa de los argumentos de validación.
En Windows, es posible que recibas un RuntimeError al iniciar la validación como un script. Añade un bloque if __name__ == "__main__": antes de tu código de validación para solucionarlo.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val() # no arguments needed, dataset and settings remembered
metrics.box.map # map50-95
metrics.box.map50 # map50
metrics.box.map75 # map75
metrics.box.maps # a list containing mAP50-95 for each category
metrics.box.image_metrics # per-image metrics dictionary with precision, recall, F1, TP, FP, and FNArgumentos para la validación de modelos YOLO#
Al validar modelos YOLO, se pueden 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 presenta un desglose detallado de cada argumento para ayudarte a personalizar eficazmente tus ajustes de validación.
| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
data | str | None | Especifica la ruta al YAML del dataset (p. ej., coco8.yaml), que debe incluir la ruta a los datos de validación. La clasificación, en su lugar, toma un directorio de dataset o un nombre de dataset integrado (p. ej., imagenet10). |
imgsz | int | 640 | Define el tamaño de las imágenes de entrada. Todas las imágenes se redimensionan a esta dimensión antes del procesamiento. Tamaños mayores pueden mejorar la precisión para objetos pequeños pero aumentan el tiempo de cómputo. |
batch | int | 16 | Establece el número de imágenes por lote. Valores más altos utilizan la memoria de la GPU de forma más eficiente pero requieren más VRAM. Ajusta según los recursos de hardware disponibles. |
save_json | bool | False | Si es True, guarda los resultados en un archivo JSON para su posterior análisis, integración con otras herramientas o envío a servidores de evaluación como COCO. |
conf | float | 0.001 | Establece el umbral de confianza mínimo para las detecciones. Los valores más bajos aumentan la recuperación pero pueden introducir más falsos positivos. Las curvas de precisión-recuperación utilizan por defecto 0.001; las matrices de confusión de detección utilizan un valor explícito conf, o 0.25 cuando se omite. La precisión y la recuperación del resumen utilizan la confianza max-F1, por lo que pueden diferir de los valores derivados de confusion_matrix.png. Por defecto es 0.01 para la validación OBB para reducir el uso de memoria. |
iou | float | 0.7 | Establece el umbral de Intersection Over Union para la Non-Maximum Suppression. Controla la eliminación de detecciones duplicadas. |
max_det | int | 300 | Limita el número máximo de detecciones por imagen. Útil en escenas densas para evitar detecciones excesivas y gestionar los recursos computacionales. |
quantize | int o str | None | Precisión de la validación: 16/"fp16" habilita la validación en FP16 en GPUs compatibles; 32/"fp32"/sin establecer es FP32. La cuantización INT8/PTQ se configura durante el export y, a continuación, se utiliza validando el modelo exportado. Sustituye al indicador obsoleto half. |
device | str | None | Especifica el dispositivo para la validación (cpu, cuda:0, npu, npu:0, etc.). Cuando es None, selecciona automáticamente el mejor dispositivo disponible. Se pueden especificar varios dispositivos CUDA separados por comas. |
dnn | bool | False | Si es True, utiliza el módulo DNN de OpenCV para la inferencia del modelo ONNX, ofreciendo una alternativa a los métodos de inferencia de PyTorch. |
plots | bool | True | Cuando se establece en True, genera y guarda gráficos de predicciones frente a la verdad de terreno (ground truth), matrices de confusión y curvas PR para la evaluación visual del rendimiento del modelo. |
classes | list[int] | None | Especifica una lista de IDs de clase para evaluar. Útil para filtrar y centrarse solo en determinadas clases durante la evaluación. |
rect | bool | True | Si True, utiliza inferencia rectangular para el procesamiento por lotes, lo que reduce el relleno y potencialmente aumenta la velocidad y la eficiencia al procesar las imágenes en su relación de aspecto original. Se ignora para la validación de depth, que estira cada imagen hasta convertirla en un cuadrado fijo de imgsz en lugar de aplicar relleno. |
split | str | 'val' | Determina la partición del conjunto de datos que se va a utilizar para la validación (val, test o train). Permite flexibilidad en la elección del segmento de datos para la evaluación del rendimiento. |
project | str | None | Nombre del directorio del proyecto donde se guardan las salidas de validación. Ayuda a organizar los resultados de diferentes experimentos o modelos. |
name | str | None | Nombre de la ejecución de validación. Se utiliza para crear un subdirectorio dentro de la carpeta del proyecto, donde se almacenan los registros y resultados de la validación. |
verbose | bool | True | Si es True, muestra información detallada durante el proceso de validación, incluidas las métricas por clase, el progreso de los lotes y la información de depuración adicional. |
save_txt | bool | False | Si es True, guarda los resultados de la detección en archivos de texto, con un archivo por imagen, lo cual es útil para un análisis posterior, un postprocesamiento personalizado o la integración con otros sistemas. |
save_conf | bool | False | Si es True, incluye los valores de confianza en los archivos de texto guardados cuando save_txt está habilitado, proporcionando una salida más detallada para el análisis y el filtrado. |
workers | int | 8 | Número de hilos de trabajo para la carga de datos. Valores más altos pueden acelerar el preprocesamiento de datos, pero pueden aumentar el uso de CPU. Establecerlo en 0 utiliza el hilo principal, lo que puede ser más estable en algunos entornos. |
augment | bool | False | Habilita la aumentacion en tiempo de prueba (TTA) durante la validacion, lo que puede mejorar la precision de la deteccion a costa de la velocidad de inferencia al ejecutar la inferencia en versiones transformadas de la entrada. Solo disponible para modelos Ultralytics PyTorch. |
agnostic_nms | bool | False | Habilita la supresión de no máximos agnóstica de clases, suprimiendo las cajas superpuestas con puntuaciones más bajas independientemente de su clase predicha. Es útil para aplicaciones centradas en instancias. Para modelos de extremo a extremo (YOLO26, YOLOv10), esto solo evita que la misma detección aparezca con múltiples etiquetas de clase (duplicados con IoU=1.0) y no realiza una supresión basada en el umbral de IoU entre cajas distintas. |
single_cls | bool | False | Trata todas las clases como una sola clase durante la validación. Útil para evaluar el rendimiento del modelo en tareas de detección binaria o cuando las distinciones de clase no son importantes. |
visualize | bool | False | Visualiza las verdades fundamentales, los verdaderos positivos, los falsos positivos y los falsos negativos para cada imagen. Útil para la depuración y la interpretación del modelo. |
show_labels | bool | True | Muestra las etiquetas de clase en las visualizaciones de validación cuando se usa visualize=True. Establécelo en False para obtener una vista más limpia de las coincidencias y los errores. |
show_conf | bool | True | Muestra las puntuaciones de confianza en las visualizaciones de validación cuando se usa visualize=True. Establécelo en False para obtener una vista más limpia de las coincidencias y los errores. |
compile | bool o str | False | Habilita la compilación de grafos torch.compile de PyTorch 2.x con backend='inductor'. Acepta True → "default", False → deshabilita, o un modo de cadena de texto como "default", "reduce-overhead", "max-autotune-no-cudagraphs". Vuelve al modo diligente (eager) con una advertencia si no es compatible. |
channels_last | bool | False | Utiliza el formato de memoria channels_last (NHWC) para las convoluciones durante la validación, lo que acelera las GPU CUDA Tensor Core sin cambios en los resultados. Se aplica únicamente a modelos nativos de PyTorch; se ignora para CPU, MPS y formatos exportados como TensorRT y ONNX. |
end2end | bool | None | Anula el modo de extremo a extremo (end-to-end) en los modelos YOLO que admiten inferencia sin NMS (YOLO26, YOLOv10). Configurarlo en False te permite ejecutar la validación utilizando la canalización NMS tradicional, lo que te permite además hacer uso del argumento iou. |
Cada uno de estos ajustes desempeña un papel vital en el proceso de validación, permitiendo una evaluación personalizable y eficiente de los modelos YOLO. Ajustar estos parámetros según tus necesidades y recursos específicos puede ayudar a lograr el mejor equilibrio entre precisión y rendimiento.
Ejemplo de validación con argumentos#
Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More
Los siguientes ejemplos muestran la validación de modelos YOLO con argumentos personalizados en Python y CLI.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Customize validation settings
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")También puedes guardar los resultados de ConfusionMatrix en diferentes formatos utilizando 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())La validación almacena métricas de precisión, recall, F1, TP, FP y FN por imagen (con un umbral de IoU de 0.5) para todas las tareas excepto la clasificación. Accede a ellas a través de 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 que se complete la validación.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Validate and access per-image metrics
results = model.val(data="coco8.yaml")
# image_metrics is a dictionary with image filenames as keys
print(results.box.image_metrics)
# Output: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}
# Access metrics for a specific image
results.box.image_metrics["image1.jpg"] # {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}Cada entrada en image_metrics contiene las siguientes claves:
| Clave | Descripción |
|---|---|
precision | Puntuación de precisión para la imagen (tp / (tp + fp)). |
recall | Puntuación de exhaustividad (recall) para la imagen (tp / (tp + fn)). |
f1 | Media armónica de precisión y recuperación. |
tp | Número de verdaderos positivos para la imagen. |
fp | Número de falsos positivos para la imagen. |
fn | Número de falsos negativos para la imagen. |
Esta característica está disponible para tareas de detección, segmentación, pose y OBB.
| Método | Tipo de retorno | Descripción |
|---|---|---|
summary() | List[Dict[str, Any]] | Convierte los resultados de la validación en un diccionario resumido. |
to_df() | DataFrame | Devuelve los resultados de la validación como un DataFrame estructurado de Polars. |
to_csv() | str | Exporta los resultados de la validación en formato CSV y devuelve la cadena CSV. |
to_json() | str | Exporta los resultados de la validación en formato JSON y devuelve la cadena JSON. |
Para más detalles, consulta la documentación de la clase DataExportMixin.
Qué sigue#
¿Estás satisfecho con las métricas? Exporta el modelo a un formato de despliegue. Si la precisión no es la esperada, vuelve atrás y reentrena con diferentes hiperparámetros o más datos de entrenamiento.
FAQ#
Para validar tu modelo YOLO26, puedes utilizar el modo Val proporcionado por Ultralytics. Por ejemplo, usando la API de Python, puedes cargar un modelo y ejecutar la validación con:
from ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # Validate the model metrics = model.val() print(metrics.box.map) # map50-95Alternativamente, puedes usar la interfaz de línea de comandos (CLI):
yolo val model=yolo26n.ptPara una mayor personalización, puedes ajustar varios argumentos como
imgsz,batchyconftanto en el modo Python como en CLI. Consulta la sección Arguments for YOLO Model Validation para ver la lista completa de parámetros.La validación del modelo YOLO26 proporciona varias métricas clave para evaluar el rendimiento del modelo. Estas incluyen:
- mAP50 (precisión media media en el umbral IoU de 0.5)
- mAP75 (precisión media media en el umbral IoU de 0.75)
- mAP50-95 (precisión media media en múltiples umbrales de IoU desde 0.5 hasta 0.95)
Usando la API de Python, puedes acceder a estas métricas de la siguiente manera:
metrics = model.val() # assumes `model` has been loaded print(metrics.box.map) # mAP50-95 print(metrics.box.map50) # mAP50 print(metrics.box.map75) # mAP75 print(metrics.box.maps) # list of mAP50-95 for each category print(metrics.box.image_metrics) # per-image metrics dictionary with precision, recall, F1, TP, FP, and FNPara una evaluación completa del rendimiento, es crucial revisar todas estas métricas. Para más detalles, consulta la sección Key Features of Val Mode.
Utilizar Ultralytics YOLO para la validación ofrece varias ventajas:
- Precision: YOLO26 ofrece métricas de rendimiento precisas que incluyen mAP50, mAP75 y mAP50-95.
- Comodidad: Los modelos recuerdan sus ajustes de entrenamiento, haciendo que la validación sea sencilla.
- Flexibilidad: Puedes validar con los mismos o diferentes conjuntos de datos y tamaños de imagen.
- Hyperparameter Tuning: Las métricas de validación ayudan a ajustar los modelos para obtener un mejor rendimiento.
Estas ventajas garantizan que tus modelos se evalúen a fondo y se puedan optimizar para obtener resultados superiores. Obtén más información sobre estas ventajas en la sección Why Validate with Ultralytics YOLO.
Sí, puedes validar tu modelo YOLO26 utilizando un custom dataset. Especifica el argumento
datacon la ruta al archivo YAML de tu conjunto de datos, el cual debe incluir la ruta a los validation data. La clasificación en su lugar toma un directorio de conjuntos de datos o un nombre de conjunto de datos integrado (por ejemplo,imagenet10).NotaLa validación se realiza utilizando los nombres de las clases del propio modelo, los cuales puedes ver usando
model.names, y que pueden ser diferentes a los que el propio conjunto de datos define.Ejemplo en Python:
from ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # Validate with a custom dataset metrics = model.val(data="path/to/your/custom_dataset.yaml") print(metrics.box.map) # map50-95Ejemplo usando CLI:
yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yamlPara ver más opciones personalizables durante la validación, consulta la sección Example Validation with Arguments.
Para guardar los resultados de la validación en un archivo JSON, puedes configurar el argumento
save_jsoncomoTrueal ejecutar la validación. Esto se puede hacer tanto en la API de Python como en la CLI.Ejemplo en Python:
from ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # Save validation results to JSON metrics = model.val(save_json=True)Ejemplo usando CLI:
yolo val model=yolo26n.pt save_json=TrueEsta funcionalidad es especialmente útil para realizar análisis adicionales o integrarla con otras herramientas. Consulta la sección Arguments for YOLO Model Validation para obtener más detalles.