Ultralytics YOLO27: Únete a la lista de espera.
Get Started
Entrena tu primer modelo YOLO·Datos·Lección 5/10
Lecciónprincipiante

Escribe un YAML para el conjunto de datos

Escribe el archivo data.yaml para indicar a Ultralytics dónde están tus carpetas y cómo se llaman tus clases, consigue que las rutas funcionen desde cualquier ubicación y haz una prueba rápida con yolo val.

El YAML del conjunto de datos es el contrato entre tus carpetas y todos los comandos de Ultralytics. Si te equivocas con una ruta, no se ejecutará nada; si te equivocas con el orden de las clases, todo se ejecutará, pero cada predicción tendrá un nombre incorrecto y no recibirás ningún aviso.

En esta lección escribirás data.yaml para el conjunto de datos de píldoras, aprenderás exactamente cómo resuelve Ultralytics las rutas para que también funcione en el equipo de otra persona y lo comprobarás con una ejecución de validación de una línea que, además, te dará la línea de referencia que debe superar tu entrenamiento.

Resultado

Puedes escribir un data.yaml cuyas rutas funcionen desde cualquier directorio de trabajo, mantener coherentes los índices de clase y leer la línea de análisis de yolo val para confirmar que el conjunto de datos está conectado.

Vía rápida
Si ya tienes experiencia, aquí tienes un resumen.
  1. Establece path como raíz del conjunto de datos y train/val como carpetas de imágenes relativas a ella.

  2. Enumera names como índice → nombre, exactamente igual que en los archivos de etiquetas.

  3. Ejecuta yolo val model=yolo26n.pt data=my_dataset/data.yaml y lee la línea de análisis.

  4. Convierte path en una ruta absoluta antes de compartirlo; añade clases nuevas únicamente al final.

Práctico

Escribe el archivo#

Página de perfil de Ultralytics Platform que muestra los conjuntos de datos de un usuario y un botón Nuevo conjunto de datos

Los conjuntos de datos de Ultralytics Platform tienen sus propias clases y particiones, y el entrenamiento los referencia con un URI como data=ul://username/datasets/name. En tu propio equipo, el YAML es ese contrato. Guarda esto como my_dataset/data.yaml:

path: my_dataset # dataset root: absolute, or relative to where you run yolo
train: images/train # relative to path
val: images/val # relative to path
# test: images/test  # optional held-out split

names:
  0: pill
ClaveObligatorioSignificado
pathNoRaíz del conjunto de datos; train, val y test son rutas relativas a ella. Si se omite, se usa la carpeta del propio YAML
train, valSíUna carpeta de imágenes, un archivo .txt que enumera rutas de imágenes o una lista de cualquiera de los dos
testNoImágenes de prueba reservadas, evaluadas únicamente con split=test
namesSíÍndice de clase → nombre; su longitud determina el número de clases
downloadNoURL o script que obtiene el conjunto de datos si faltan sus imágenes

train y val apuntan a carpetas de imágenes; las etiquetas se encuentran sustituyendo images por labels. El YAML de coco8 es una referencia mínima funcional y el YAML de VOC muestra un ejemplo más extenso.

Ejemplo práctico: haz una prueba rápida#

La validación con el modelo preentrenado es la forma más rápida de comprobar todo el proceso. Lee cada imagen y etiqueta, informa de los problemas y calcula las métricas:

yolo val model=yolo26n.pt data=my_dataset/data.yaml
val: Scanning my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt: 100%
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)
                   all         23        399     0.0256    0.00251      0.001     0.0002

Léelo en este orden:

  1. Scanning my_dataset/labels/val: la carpeta que Ultralytics ha localizado realmente. Comprueba que sea la que querías.
  2. 23 images, 0 backgrounds, 0 corrupt: cada imagen de validación tiene un archivo de etiquetas válido. Si hay imágenes de fondo que no esperabas o algún recuento de archivos dañados, vuelve a la lección anterior.
  3. 399 instancias: los archivos de etiquetas contienen 399 píldoras.
  4. mAP50-95 de 0.0002: es correcto, no es un error. COCO no tiene ninguna clase de píldoras, así que el modelo preentrenado no puede detectarlas. Esa puntuación casi nula es tu línea de referencia. Si tus clases sí están en COCO, como personas o coches, el mismo comando te dará una línea de referencia significativa.

Consigue que las rutas funcionen desde cualquier ubicación#

La mayoría de los errores de «no se encuentran las imágenes» se deben a las rutas. Ultralytics resuelve path de la siguiente manera:

datasets_dir es un ajuste de Ultralytics; yolo settings lo muestra, y la guía de ajustes explica cómo cambiarlo. Los conjuntos de datos integrados dependen de esa alternativa: coco8.yaml establece path: coco8 y una URL download:, por lo que data=coco8.yaml funciona desde cualquier carpeta.

Reglas para decidir:

  • ¿Solo lo usas tú y siempre desde la carpeta del proyecto? Una ruta relativa path es válida.
  • ¿Compañeros, servidores, CI o notebooks en otras carpetas? Usa una ruta absoluta path.
  • ¿Los datos están en otro sitio y deben descargarse automáticamente? Añade download: con una URL de archivo ZIP.

Mantén los índices de clase como un contrato#

El número entero al principio de cada línea de etiquetas es un índice de names. Ultralytics comprueba el rango — Label class 1 exceeds dataset class count 1 —, pero no puede comprobar el significado. Si tu herramienta de etiquetado exportó 0: forklift, 1: person y tu YAML indica 0: person, 1: forklift, el entrenamiento se completa, la mAP de validación parece correcta y todas las predicciones llevan el nombre equivocado. Mantén una única fuente de verdad para la lista de clases, compartida por la herramienta de etiquetado, el script de conversión, el YAML y el código de despliegue.

Evita estos errores#

La ruta relativa parte de la carpeta equivocada

Síntoma: FileNotFoundError: Dataset 'data.yaml' images not found, missing path '.../datasets/my_dataset/images/val', con una nota sobre el directorio de descarga del conjunto de datos. Causa: ejecutaste el comando desde otra carpeta, así que path, la ruta relativa, no existía y Ultralytics buscó en datasets_dir. Solución: ejecuta el comando desde la carpeta del proyecto o convierte path en una ruta absoluta.

Cambiar el orden de los nombres es destructivo

Intercambiar o eliminar entradas de names sin volver a etiquetar cambia silenciosamente el significado de todas las etiquetas. El modelo se entrena y predice las clases equivocadas, sin mostrar ningún error. Añade las clases nuevas al final, con el siguiente índice libre, y no cambies nunca los índices existentes.

Las listas se combinan en una sola puntuación

val: [images/val_day, images/val_night] combina ambas carpetas en un único conjunto de validación y muestra un solo valor. Para ver por separado los resultados de día y de noche, o los de un conjunto de regresión seleccionado junto a una muestra reciente de producción, mantén un YAML por conjunto y valida cada uno. En Divide correctamente el conjunto de datos se explica cómo gestionar una división test que solo evalúas una vez con split=test.

Los ajustes de entrenamiento, como la aumentación y el almacenamiento en caché, son argumentos de train, no claves YAML; están todos en la referencia de configuración.

Pruébalo

Escribe my_dataset/data.yaml y ejecuta yolo val model=yolo26n.pt data=my_dataset/data.yaml. Anota el número de imágenes, fondos, elementos corruptos e instancias, así como la mAP50-95 de referencia. Después, cd en una carpeta distinta, vuelve a ejecutar el comando con la ruta del YAML, lee el error y corrige el YAML para que el comando funcione desde cualquier ubicación. Entrega el YAML corregido y las dos líneas del análisis.

Cuándo se considera terminado
Has terminado la lección cuando se cumplen todas estas condiciones.
  • yolo val indica que el YAML contiene 23 imágenes, 0 fondos y 0 elementos corruptos.

  • Has anotado la mAP50-95 de referencia del modelo preentrenado para el conjunto de datos.

  • Tu YAML funciona desde cualquier directorio de trabajo porque path es una ruta absoluta.

Mostrar solución
path: /home/you/projects/pills/my_dataset # absolute path to the dataset root
train: images/train
val: images/val

names:
  0: pill
val: Scanning /home/you/projects/pills/my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt
                   all         23        399     0.0256    0.00251      0.001     0.0002

Desde otra carpeta, la versión relativa falló con Dataset ... images not found porque my_dataset no existía allí y tampoco había una copia en la ruta alternativa datasets_dir. La ruta absoluta path elimina esa búsqueda. La mAP50-95 de referencia es aproximadamente 0: el modelo preentrenado no tiene una clase de píldora.

Qué viene después

Los datos están conectados y la referencia está registrada. A continuación, entrena YOLO26 con ellos.