Link to this sectionValidación de modelos con Ultralytics YOLO#
Link to this sectionIntroducción#
La validación es un paso crítico en el proceso de machine learning, que te permite evaluar la calidad de tus modelos entrenados. El modo Val en Ultralytics YOLO26 proporciona un conjunto robusto de herramientas y métricas para evaluar el rendimiento de tus modelos de detección de objetos. Esta guía sirve como recurso completo para comprender cómo utilizar eficazmente el modo Val para asegurar que tus modelos sean precisos y fiables.
Watch: Ultralytics Modes Tutorial: Validation
Link to this section¿Por qué validar con Ultralytics YOLO?#
Aquí tienes por qué utilizar el modo Val de YOLO26 es ventajoso:
- Precisión: Obtén métricas precisas como mAP50, mAP75 y mAP50-95 para evaluar exhaustivamente tu modelo.
- 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.
- Ajuste de hiperparámetros: Utiliza métricas de validación para ajustar tu modelo y obtener un mejor rendimiento.
Link to this sectionCaracterí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 sencilla.
- Soporte multimétrica: Evalúa tu modelo basándote en una gama de métricas de precisión.
- CLI y API de Python: 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 tanto con los conjuntos de datos utilizados durante la fase de entrenamiento como con conjuntos de datos personalizados.
- Los modelos YOLO26 recuerdan automáticamente sus ajustes de entrenamiento, así que puedes validar un modelo fácilmente al mismo tamaño de imagen y con el conjunto de datos original con solo
yolo val model=yolo26n.ptoYOLO("yolo26n.pt").val()
Link to this sectionEjemplos de uso#
Valida la precisión de un modelo YOLO26n entrenado con el conjunto de datos COCO8. No se necesitan argumentos, ya que el model conserva sus data de entrenamiento y los argumentos como atributos del modelo. Consulta la sección de Argumentos a continuación para obtener una lista completa de argumentos de validación.
En Windows, es posible que recibas un RuntimeError al ejecutar la validación como script. Añade un bloque if __name__ == "__main__": antes de tu código de validación para resolverlo.
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 FNLink to this sectionArgumentos 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 tus ajustes de validación de manera eficaz.
| Argumento | Tipo | Predeterminado | Descripción |
|---|---|---|---|
data | str | None | Especifica la ruta al archivo de configuración del conjunto de datos (por ejemplo, coco8.yaml). Este archivo debe incluir la ruta a los datos de validación. |
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. Los tamaños más grandes pueden mejorar la precisión para objetos pequeños, pero aumentan el tiempo de cálculo. |
batch | int | 16 | Establece el número de imágenes por lote. Los valores más altos utilizan la memoria de la GPU de forma más eficiente, pero requieren más VRAM. Ajústalos 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. Se utiliza durante la validación para calcular las curvas de precisión-recuperación. 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. Es útil en escenas densas para evitar detecciones excesivas y gestionar los recursos computacionales. |
half | bool | False | Habilita el cálculo de media precisión (FP16), reduciendo el uso de memoria y aumentando potencialmente la velocidad con un impacto mínimo en la precisión. |
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 múltiples dispositivos CUDA separados por comas. |
dnn | bool | False | Si es True, utiliza el módulo DNN de OpenCV para la inferencia de modelos 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 básica (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 ID de clases a evaluar. Es útil para filtrar y centrarse solo en ciertas clases durante la evaluación. |
rect | bool | True | Si es True, utiliza inferencia rectangular para el procesamiento por lotes, reduciendo el relleno y aumentando potencialmente la velocidad y la eficiencia al procesar imágenes en su relación de aspecto original. |
split | str | 'val' | Determina la división del conjunto de datos a utilizar para la validación (val, test o train). Permite flexibilidad al elegir el 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 salidas de validación. |
verbose | bool | True | Si es True, muestra información detallada durante el proceso de validación, incluyendo métricas por clase, progreso del lote e información de depuración adicional. |
save_txt | bool | False | Si es True, guarda los resultados de detección en archivos de texto, con un archivo por imagen, lo cual es útil para análisis posteriores, post-procesamiento personalizado o 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. Los valores más altos pueden acelerar el preprocesamiento de datos, pero pueden aumentar el uso de la CPU. Establecerlo en 0 utiliza el hilo principal, lo que puede ser más estable en algunos entornos. |
augment | bool | False | Habilita la aumentación durante la prueba (TTA) durante la validación, mejorando potencialmente la precisión de la detección a costa de la velocidad de inferencia al ejecutar la inferencia en versiones transformadas de la entrada. |
agnostic_nms | bool | False | Habilita la Non-Maximum Suppression agnóstica a la clase, que fusiona cajas superpuestas 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 umbral de IoU entre cajas distintas. |
single_cls | bool | False | Trata 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 distinciones de clase no son importantes. |
visualize | bool | False | Visualiza las verdades básicas (ground truths), los verdaderos positivos, los falsos positivos y los falsos negativos para cada imagen. Es ú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 visualize=True. Establécelo en False para 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 visualize=True. Establécelo en False para 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 como "default", "reduce-overhead", "max-autotune-no-cudagraphs". Si no es compatible, vuelve a la ejecución ansiosa (eager) con una advertencia. |
end2end | bool | None | Anula el modo de extremo a extremo en los modelos YOLO que admiten inferencia sin NMS (YOLO26, YOLOv10). Establecerlo en False te permite ejecutar la validación utilizando la canalización NMS tradicional, lo que adicionalmente te permite 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 de acuerdo con tus necesidades y recursos específicos puede ayudar a lograr el mejor equilibrio entre precisión y rendimiento.
Link to this sectionEjemplo de validación con argumentos#
Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More
Los ejemplos a continuación 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, recuperación, F1, TP, FP y FN por imagen (en el umbral de IoU 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 completada 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 recuperación 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 función 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 de Polars estructurado. |
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.
Link to this sectionPreguntas frecuentes#
Link to this section¿Cómo valido mi modelo YOLO26 con Ultralytics?#
Para validar tu modelo YOLO26, puedes utilizar el modo Val proporcionado por Ultralytics. Por ejemplo, utilizando 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, batch y conf tanto en Python como en los modos CLI. Consulta la sección Argumentos para la validación de modelos YOLO para ver la lista completa de parámetros.
Link to this section¿Qué métricas puedo obtener de la validación del modelo YOLO26?#
La validación del modelo YOLO26 proporciona varias métricas clave para evaluar el rendimiento del modelo. Estas incluyen:
- mAP50 (precisión media a un umbral de IoU de 0.5)
- mAP75 (precisión media a un umbral de IoU de 0.75)
- mAP50-95 (precisión media a través de múltiples umbrales de IoU de 0.5 a 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 de rendimiento completa, es crucial revisar todas estas métricas. Para más detalles, consulta las Características clave del modo Val.
Link to this section¿Cuáles son las ventajas de usar Ultralytics YOLO para la validación?#
Usar Ultralytics YOLO para la validación ofrece varias ventajas:
- Precisión: YOLO26 ofrece métricas de rendimiento precisas, incluyendo mAP50, mAP75 y mAP50-95.
- Comodidad: Los modelos recuerdan sus configuraciones de entrenamiento, lo que hace que la validación sea sencilla.
- Flexibilidad: Puedes validar con los mismos o diferentes conjuntos de datos y tamaños de imagen.
- Ajuste de hiperparámetros: Las métricas de validación ayudan a ajustar los modelos para obtener un mejor rendimiento.
Estos beneficios garantizan que tus modelos sean evaluados a fondo y puedan optimizarse para obtener resultados superiores. Aprende más sobre estas ventajas en la sección Por qué validar con Ultralytics YOLO.
Link to this section¿Puedo validar mi modelo YOLO26 usando un conjunto de datos personalizado?#
Sí, puedes validar tu modelo YOLO26 usando un conjunto de datos personalizado. Especifica el argumento data con la ruta a tu archivo de configuración del conjunto de datos. Este archivo debe incluir la ruta a los datos de validación.
La validación se realiza utilizando los propios nombres de clase del modelo, los cuales puedes ver usando model.names, y que pueden ser diferentes a los especificados en el archivo de configuración del conjunto de datos.
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 más opciones personalizables durante la validación, consulta la sección Ejemplo de validación con argumentos.
Link to this section¿Cómo guardo los resultados de la validación en un archivo JSON en YOLO26?#
Para guardar los resultados de la validación en un archivo JSON, puedes establecer el argumento save_json en True al 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 particularmente útil para un análisis posterior o para la integración con otras herramientas. Consulta los Argumentos para la validación de modelos YOLO para más detalles.