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.
Práctico
Escribe el archivo#

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| Clave | Obligatorio | Significado |
|---|---|---|
path | No | Raí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, val | Sí | Una carpeta de imágenes, un archivo .txt que enumera rutas de imágenes o una lista de cualquiera de los dos |
test | No | Imágenes de prueba reservadas, evaluadas únicamente con split=test |
names | Sí | Índice de clase → nombre; su longitud determina el número de clases |
download | No | URL 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.yamlval: 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.0002Léelo en este orden:
Scanning my_dataset/labels/val: la carpeta que Ultralytics ha localizado realmente. Comprueba que sea la que querías.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.399instancias: los archivos de etiquetas contienen 399 píldoras.- 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
pathes 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#
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.
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.
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.
Mostrar solución
path: /home/you/projects/pills/my_dataset # absolute path to the dataset root
train: images/train
val: images/val
names:
0: pillval: 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.0002Desde 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.