Validación de modelos con Ultralytics YOLO
Introducción
La validación es un paso crítico en el pipeline de aprendizaje automático, que le permite evaluar la calidad de sus modelos entrenados. El modo Val en Ultralytics YOLO11 proporciona un conjunto robusto de herramientas y métricas para evaluar el rendimiento de sus modelos de detección de objetos. Esta guía sirve como un recurso completo para entender cómo usar eficazmente el modo Val para asegurar que sus modelos sean precisos y fiables.
Ver: Tutorial de modos de Ultralytics: Validación
¿Por qué validar con Ultralytics YOLO?
He aquí por qué es ventajoso usar el modo Val de YOLO11:
- Precisión: Obtenga métricas precisas como mAP50, mAP75 y mAP50-95 para evaluar exhaustivamente su modelo.
- Comodidad: Utilice funciones integradas que recuerdan la configuración de entrenamiento, simplificando el proceso de validación.
- Flexibilidad: Valide su modelo con los mismos o diferentes conjuntos de datos y tamaños de imagen.
- Ajuste de hiperparámetros: Utilice las métricas de validación para ajustar su modelo y obtener un mejor rendimiento.
Características clave del modo Val
Estas son las funcionalidades notables que ofrece el modo Val de YOLO11:
- Configuración automatizada: Los modelos recuerdan sus configuraciones de entrenamiento para una validación sencilla.
- Soporte multi-métrico: Evalúe su modelo basándose en una variedad de métricas de precisión.
- CLI y API de python: Elija entre la interfaz de línea de comandos o la API de python según su preferencia para la validación.
- Compatibilidad de datos: Funciona perfectamente con los conjuntos de datos utilizados durante la fase de entrenamiento, así como con conjuntos de datos personalizados.
Consejo
- Los modelos YOLO11 recuerdan automáticamente su configuración de entrenamiento, por lo que puede validar un modelo con el mismo tamaño de imagen y en el conjunto de datos original fácilmente con solo
yolo val model=yolo11n.pt
omodel('yolo11n.pt').val()
Ejemplos de uso
Validar el modelo YOLO11n entrenado precisión en el conjunto de datos COCO8. No se necesitan argumentos ya que el model
conserva su entrenamiento data
y argumentos como atributos del modelo. Consulte la sección Argumentos a continuación para obtener una lista completa de los argumentos de validación.
Ejemplo
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.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 contains map50-95 of each category
yolo detect val model=yolo11n.pt # val official model
yolo detect val model=path/to/best.pt # val custom model
Argumentos para la validación del modelo YOLO
Al validar los 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 ayudarle a personalizar su configuración de validación de forma 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 incluye rutas a datos de validación, los nombres de las clases y el número de clases. |
imgsz |
int |
640 |
Define el tamaño de las imágenes de entrada. Todas las imágenes se redimensionan a esta dimensión antes de procesarlas. 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ústelo en función de los recursos de hardware disponibles. |
save_json |
bool |
False |
Si 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 mínimo de confianza para las detecciones. Los valores más bajos aumentan la exhaustividad, pero pueden introducir más falsos positivos. Se utiliza durante la validación para calcular las curvas de precisión-exhaustividad. |
iou |
float |
0.7 |
Establece el umbral de Intersección sobre Unión para la Supresión No Máxima. 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. |
half |
bool |
True |
Activa el cálculo en media precisión (FP16), lo que reduce el uso de memoria y puede aumentar la velocidad con un impacto mínimo en la precisión. |
device |
str |
None |
Especifica el dispositivo para la validación (cpu , cuda:0 , etc.). Cuando None , selecciona automáticamente el mejor dispositivo disponible. Se pueden especificar múltiples dispositivos CUDA separados por comas. |
dnn |
bool |
False |
Si True , utiliza el OpenCV módulo DNN para la inferencia del modelo ONNX, ofreciendo una alternativa a los métodos de inferencia PyTorch . |
plots |
bool |
False |
Cuando se establece en True , genera y guarda gráficos de predicciones versus la verdad fundamental, 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 entrenar. Útil para filtrar y centrarse solo en ciertas clases durante la evaluación. |
rect |
bool |
True |
Si True , utiliza la inferencia rectangular para el procesamiento por lotes, reduciendo el relleno y aumentando potencialmente la velocidad y la eficiencia al procesar las imágenes en su relación de aspecto original. |
split |
str |
'val' |
Determina la división del conjunto de datos que se 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 los resultados de la 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 las salidas de la validación. |
verbose |
bool |
False |
Si 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 True , guarda los resultados de la detección en archivos de texto, con un archivo por imagen, lo que es útil para análisis posteriores, post-procesamiento personalizado o integración con otros sistemas. |
save_conf |
bool |
False |
Si True , incluye 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. Establecer en 0 utiliza el hilo principal, que puede ser más estable en algunos entornos. |
augment |
bool |
False |
Habilita el aumento en tiempo de prueba (TTA) durante la validación, lo que podría mejorar 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 Supresión No Máxima independiente de la clase, que fusiona cuadros superpuestos independientemente de su clase predicha. Útil para aplicaciones centradas en instancias. |
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 los ground truths, verdaderos positivos, falsos positivos y falsos negativos para cada imagen. Útil para la depuración e interpretación del modelo. |
Cada una de estas configuraciones juega 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 sus necesidades y recursos específicos puede ayudar a lograr el mejor equilibrio entre precisión y rendimiento.
Ejemplo de validación con argumentos
Ver: Cómo exportar resultados de validación de modelos en CSV, JSON, SQL, Polars DataFrame y más
Los siguientes ejemplos muestran la validación del modelo YOLO con argumentos personalizados en python y CLI.
Ejemplo
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt")
# Customize validation settings
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.6, device="0")
yolo val model=yolo11n.pt data=coco8.yaml imgsz=640 batch=16 conf=0.25 iou=0.6 device=0
Exportar ConfusionMatrix
También puede guardar los resultados de la matriz de confusión en diferentes formatos utilizando el código proporcionado.
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())
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 Polars DataFrame 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 obtener más detalles, consulte la DataExportMixin
documentación de la clase.
Preguntas frecuentes
¿Cómo valido mi modelo YOLO11 con Ultralytics?
Para validar su modelo YOLO11, puede utilizar el modo Val proporcionado por Ultralytics. Por ejemplo, utilizando la API de python, puede cargar un modelo y ejecutar la validación con:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt")
# Validate the model
metrics = model.val()
print(metrics.box.map) # map50-95
Alternativamente, puede utilizar la interfaz de línea de comandos (CLI):
yolo val model=yolo11n.pt
Para una mayor personalización, puede ajustar varios argumentos como imgsz
, batch
, y conf
tanto en los modos python como en CLI. Consulte la Argumentos para la validación del modelo YOLO sección para obtener la lista completa de parámetros.
¿Qué métricas puedo obtener de la validación del modelo YOLO11?
La validación del modelo YOLO11 proporciona varias métricas clave para evaluar el rendimiento del modelo. Éstas incluyen:
- mAP50 (Precisión Media Promedio en el umbral IoU 0.5)
- mAP75 (Precisión Media Promedio en el umbral IoU 0.75)
- mAP50-95 (Precisión Media Promedio en múltiples umbrales IoU de 0.5 a 0.95)
Usando la API de python, puede 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
Para una evaluación completa del rendimiento, es crucial revisar todas estas métricas. Para más detalles, consulte las Características clave del modo Val.
¿Cuáles son las ventajas de usar Ultralytics YOLO para la validación?
El uso de Ultralytics YOLO para la validación proporciona varias ventajas:
- Precisión: YOLO11 ofrece métricas de rendimiento precisas, incluyendo mAP50, mAP75 y mAP50-95.
- Comodidad: Los modelos recuerdan su configuración de entrenamiento, lo que facilita la validación.
- Flexibilidad: Puede realizar la validación con los mismos conjuntos de datos y tamaños de imagen o con otros diferentes.
- Ajuste de hiperparámetros: Las métricas de validación ayudan a ajustar los modelos para obtener un mejor rendimiento.
Estos beneficios aseguran que sus modelos se evalúen a fondo y puedan optimizarse para obtener resultados superiores. Obtenga más información sobre estas ventajas en la sección Por qué validar con Ultralytics YOLO.
¿Puedo validar mi modelo YOLO11 usando un conjunto de datos personalizado?
Sí, puede validar su modelo YOLO11 utilizando un conjunto de datos personalizado. Especifique el data
argumento con la ruta a su archivo de configuración del conjunto de datos. Este archivo debe incluir rutas a los datos de validación, nombres de clase y otros detalles relevantes.
Ejemplo en Python:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt")
# Validate with a custom dataset
metrics = model.val(data="path/to/your/custom_dataset.yaml")
print(metrics.box.map) # map50-95
Ejemplo usando CLI:
yolo val model=yolo11n.pt data=path/to/your/custom_dataset.yaml
Para opciones más personalizables durante la validación, consulte la sección Ejemplo de validación con argumentos.
¿Cómo guardo los resultados de la validación en un archivo JSON en YOLO11?
Para guardar los resultados de la validación en un archivo JSON, puede establecer el save_json
argumento 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("yolo11n.pt")
# Save validation results to JSON
metrics = model.val(save_json=True)
Ejemplo usando CLI:
yolo val model=yolo11n.pt save_json=True
Esta funcionalidad es particularmente útil para un análisis más profundo o la integración con otras herramientas. Consulte los Argumentos para la validación del modelo YOLO para obtener más detalles.