Ultralytics YOLO27: Únete a la lista de espera.
Get Started
Lecciónprincipiante

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.

Resultado

Crea una tabla de escenarios con cuotas que cubra las dimensiones de variabilidad y los casos límite, y mide cuánto le falta a cualquier conjunto de datos etiquetado para alcanzar los objetivos de volumen de producción.

Vía rápida
Si ya tienes experiencia, aquí tienes un resumen.
  1. Escribe los escenarios en filas: cámara, ubicación, hora y condición, cada uno con su cuota.

  2. Calcula las cuotas con respecto a los objetivos de producción: ≥1500 imágenes y ≥10 000 instancias etiquetadas por clase.

  3. Asigna una fila propia a cada caso límite conocido y sobremuestrea esos casos.

  4. Reserva entre el 0 y el 10 % de las imágenes como imágenes de fondo sin objetos.

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:

EscenarioCámarasUbicacionesHora del díaCondiciónCuotaNotas
muelle-díacam-1 a cam-4muelles A–C08:00–17:00cualquiera1,200horas de mayor actividad
muelle-nochecam-1 a cam-4muelles A–C22:00–04:00cualquiera400iluminación de vapor de sodio, menos personas
carga-lluviacam-2, cam-3muelle Bcualquierasolo lluvia200poco frecuente, pero crítico
apiladoscualquieracualquieracualquierapalés de más de 2 de alto150ocultan a las personas que hay detrás
fondocualquieracualquieracualquieramuelle vacío150sin 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:

ObjetivoRecomendació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 %
VariedadDistintas 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 names o recopila ejemplos antes del entrenamiento.

Cubre las dimensiones de variabilidad#

Detección con Ultralytics YOLO en un paseo marítimo: personas y ciclistas cerca de la cámara, un perro y coches a distintas distancias, cada uno con una caja etiquetada y una puntuación de confianza

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ónEjemplos
HoraDía, noche, amanecer, atardecer
TiempoSol, cielo cubierto, lluvia, niebla, nieve
IluminaciónLuz intensa, tenue, deslumbramiento, sombras marcadas, fuentes mixtas
CámaraModelo, objetivo, altura de montaje, campo de visión
GeografíaUbicaciones, ciudades, países
Personas y operadoresTurnos, equipos, uniformes, equipos de protección
Variantes del productoSKU, revisiones del embalaje, colores
Tamaño del objetoCerca y grande, a media distancia, lejos y pequeño
OclusiónSin oclusión, parcial, intensa, detrás de un cristal
Estado del equipoObjetivos 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.

Cómo se almacena una imagen de fondo

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.

La frecuencia natural deja sin suficientes ejemplos los casos límite

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.

La especificación no tiene que estar completa

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.

Pruébalo

Prepara una tabla de escenarios para tu proyecto con 5–10 filas, cada una con una cuota numérica, además de una fila de fondo y otra por cada caso extremo conocido. Revísala con alguien que trabaje en el lugar de despliegue y añade todos los escenarios que mencione. Después, ejecuta volume_gap.py con los datos etiquetados que ya tengas (o COCO128) y anota las clases con mejor y peor cobertura. Entregable: spec.md con la tabla y las cifras de cobertura.

Cuándo se considera terminado
Has terminado la lección cuando se cumplen todas estas condiciones.
  • La tabla de escenarios tiene al menos 5 filas, cada una con una cuota numérica, además de filas de fondo y de casos extremos.

  • Se cubren al menos 5 de las 10 dimensiones de variabilidad o se descartan explícitamente.

  • Las cuotas suman al menos los objetivos de imágenes e instancias por clase, o la diferencia se documenta como una excepción de la versión 1.

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:

ClaseInstancias por imagenImágenes necesarias para 10.000 instanciasImágenes necesarias para alcanzar el mínimo de 1.500Plan
car3.0≈ 3,3001,5003.300 imágenes
truck0.5≈ 20,0001,500Captura 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.

Qué viene después

Con la especificación redactada, en la siguiente lección recopilarás imágenes que la cubran de verdad.