Define la especificación del conjunto de datos
Planifica los escenarios, las cuotas, la variabilidad, los casos límite y las imágenes de fondo antes de recopilar datos, y ajusta el tamaño del plan a los objetivos de volumen de Ultralytics.
Los equipos que no tienen una especificación acaban con 5000 fotos diurnas bien iluminadas de una sola cámara y un modelo que falla al anochecer el primer día en producción. Una especificación del conjunto de datos es una lista de la compra de imágenes: todos los escenarios que debe gestionar el modelo, cuántas imágenes necesita cada uno y qué casos poco frecuentes hay que sobremuestrear. Se tarda una hora en redactarla y determina dónde se invierten los esfuerzos de recopilación.
Práctico
Dónde encaja la especificación#
La especificación conecta el objetivo con la cámara. Guía la recopilación y es la página a la que vuelves cuando el primer modelo no alcanza su objetivo:
El ciclo vuelve a la especificación, no a los ajustes de entrenamiento: si no se alcanza el objetivo, normalmente es porque la especificación no contemplaba algún escenario. La guía sobre las etapas de un proyecto de CV describe el mismo ciclo de vida.
Escribe los escenarios en filas#
Un escenario es una combinación de condiciones de captura que el modelo debe gestionar. Las filas con cuotas permiten detectar carencias antes de que nadie coja una cámara:
| Escenario | Cámaras | Ubicaciones | Hora del día | Condición | Cuota | Notas |
|---|---|---|---|---|---|---|
| muelle-día | cam-1 a cam-4 | muelles A–C | 08:00–17:00 | cualquiera | 1,200 | horas de mayor actividad |
| muelle-noche | cam-1 a cam-4 | muelles A–C | 22:00–04:00 | cualquiera | 400 | iluminación de vapor de sodio, menos personas |
| carga-lluvia | cam-2, cam-3 | muelle B | cualquiera | solo lluvia | 200 | poco frecuente, pero crítico |
| apilados | cualquiera | cualquiera | cualquiera | palés de más de 2 de alto | 150 | ocultan a las personas que hay detrás |
| fondo | cualquiera | cualquiera | cualquiera | muelle vacío | 150 | sin objetos ni etiquetas |
Un escenario que no puedes describir por escrito es uno que el modelo no verá durante el entrenamiento, y será el que falle en producción.
Ajusta el tamaño de la especificación a los objetivos de volumen#
Los consejos de Ultralytics para obtener los mejores resultados de entrenamiento ofrecen reglas prácticas para producción:
| Objetivo | Recomendación |
|---|---|
| Imágenes por clase | ≥ 1,500 |
| Instancias etiquetadas por clase | ≥ 10,000 |
| Imágenes de fondo (sin etiquetas) | Entre el 0 y el 10 % del conjunto de datos; COCO tiene aproximadamente un 1 % |
| Variedad | Distintas horas, estaciones, condiciones meteorológicas, iluminación, ángulos, fuentes y cámaras |
Estos son los mínimos para un modelo de producción. Unos cientos de objetos etiquetados por clase bastan para empezar a experimentar, y ese primer modelo es la forma más rápida de saber qué escenarios necesitan más datos. Para ver cuánto le falta a un conjunto de datos, cuéntalo. Este script se ejecuta con COCO128, una muestra de 128 imágenes de COCO que se descarga automáticamente:
from collections import Counter
from pathlib import Path
from ultralytics.data.utils import IMG_FORMATS, check_det_dataset, img2label_paths
IMAGES_PER_CLASS, INSTANCES_PER_CLASS = 1500, 10_000 # Ultralytics production targets
data = check_det_dataset("coco128.yaml") # downloads COCO128 (~7 MB) on first run; swap in your data YAML
images = [p for p in Path(data["train"]).rglob("*.*") if p.suffix[1:].lower() in IMG_FORMATS]
image_count, instance_count, background = Counter(), Counter(), 0
for label in map(Path, img2label_paths([str(p) for p in images])):
classes = [int(r.split()[0]) for r in label.read_text().splitlines() if r.strip()] if label.exists() else []
instance_count.update(classes)
image_count.update(set(classes))
background += not classes
print(f"{len(images)} images, {background} background ({background / len(images):.0%}, target 0-10%)")
print(f"{'class':>12} {'images':>7} {'instances':>10} {'of target':>10}")
ranked = instance_count.most_common()
for cls, n in ranked[:3] + ranked[-3:]: # best and worst covered classes
coverage = min(image_count[cls] / IMAGES_PER_CLASS, n / INSTANCES_PER_CLASS)
print(f"{data['names'][cls]:>12} {image_count[cls]:>7} {n:>10} {coverage:>10.1%}")
never_labeled = [name for i, name in data["names"].items() if i not in instance_count]
print(f"{len(never_labeled)} classes in names with zero labels: {never_labeled[:4]} ...")128 images, 2 background (2%, target 0-10%)
class images instances of target
person 61 254 2.5%
car 12 46 0.5%
cup 10 36 0.4%
bear 1 1 0.0%
banana 1 1 0.0%
skis 1 1 0.0%
9 classes in names with zero labels: ['fire hydrant', 'parking meter', 'sheep', 'cow'] ...Cómo interpretarlo:
- La cobertura es el menor de los dos cocientes: el de imágenes y el de instancias, porque una clase necesita ambos. Incluso
person, la clase con mejor cobertura, solo alcanza el 2,5 % del objetivo de producción. - Las clases con una sola instancia (
bear,banana,skis) no se pueden aprender ni evaluar. En tu conjunto de datos, recopila más ejemplos o elimínalas de la v1. - Las clases sin etiquetas aparecen en el YAML, pero nunca se dibujan. Aun así, el modelo dedica capacidad a predecirlas. Elimínalas de
nameso recopila ejemplos antes del entrenamiento.
Cubre las dimensiones de variabilidad#

Un solo fotograma ya combina personas a distintas distancias, bicicletas, un perro y coches. Una especificación real debe planificar deliberadamente esa variedad. Para cada dimensión, indica si la especificación la cubre o por qué no es aplicable; las filas vacías representan escenarios que descubrirás en producción:
| Dimensión | Ejemplos |
|---|---|
| Hora | Día, noche, amanecer, atardecer |
| Tiempo | Sol, cielo cubierto, lluvia, niebla, nieve |
| Iluminación | Luz intensa, tenue, deslumbramiento, sombras marcadas, fuentes mixtas |
| Cámara | Modelo, objetivo, altura de montaje, campo de visión |
| Geografía | Ubicaciones, ciudades, países |
| Personas y operadores | Turnos, equipos, uniformes, equipos de protección |
| Variantes del producto | SKU, revisiones del embalaje, colores |
| Tamaño del objeto | Cerca y grande, a media distancia, lejos y pequeño |
| Oclusión | Sin oclusión, parcial, intensa, detrás de un cristal |
| Estado del equipo | Objetivos sucios o empañados, palés dañados, marcas del suelo desgastadas |
La variabilidad importa más que el volumen: 1.500 imágenes distribuidas entre estas filas valen más que 5.000 tomadas con una cámara al mediodía.
Planifica las imágenes de fondo y los casos extremos#
Las imágenes de fondo son fotogramas sin objetos etiquetados, como un muelle vacío. Enseñan al modelo que no hay nada y reducen los falsos positivos.
En el formato Ultralytics YOLO, una imagen de fondo es simplemente una imagen con un archivo de etiquetas vacío o sin archivo de etiquetas. El entrenamiento cuenta ambas posibilidades en la línea de análisis (… 1200 images, 90 backgrounds, 0 corrupt). Comprueba que ese número se ajusta a tu objetivo del 0–10 % antes de la primera época.
Los casos extremos incluyen oclusiones intensas, objetos cortados por el borde del fotograma, orientaciones poco habituales, objetos apilados y elementos que se parecen, como el mástil de una carretilla elevadora junto a una columna de acero. Asigna a cada caso una fila de cuota propia.
Si 1 de cada 200 fotogramas muestra a una persona detrás de palés apilados, un conjunto de datos recopilado con una frecuencia natural contendrá unos 7 fotogramas de ese tipo entre 1.500, demasiado pocos para aprender. Sobremuestrea los casos límite deliberadamente: sus cuotas deben ser mucho mayores que su proporción en las grabaciones reales.
No se te ocurrirán todas las situaciones sobre el papel. Deja la especificación casi lista, entrena rápidamente un primer modelo y deja que sus errores revelen las situaciones que se te han pasado por alto.
Mostrar solución
Las cuotas se calculan a partir del objetivo de instancias, no solo del objetivo de imágenes. Supongamos que un contador de un aparcamiento tiene dos clases y que el vídeo piloto registra una media de 3 coches y 0,5 camiones por imagen:
| Clase | Instancias por imagen | Imágenes necesarias para 10.000 instancias | Imágenes necesarias para alcanzar el mínimo de 1.500 | Plan |
|---|---|---|---|---|
car | 3.0 | ≈ 3,300 | 1,500 | 3.300 imágenes |
truck | 0.5 | ≈ 20,000 | 1,500 | Captura dirigida en la entrada de carga, donde los camiones son 10 veces más frecuentes |
Las imágenes habituales cubren los coches. Para los camiones harían falta 20.000 imágenes aleatorias, así que la especificación añade una fila de escenario dedicada (entrada de carga, entre semana de 06:00 a 10:00) en lugar de recopilar seis veces más de todo. Añade una fila de fondo de alrededor del 5 % (aparcamiento vacío por la noche) y filas de casos extremos para la nieve acumulada y los camiones parcialmente fuera del encuadre.