Técnicas de preprocesamiento de datos de visión artificial anotados#
El preprocesamiento de datos convierte las imágenes sin procesar y anotadas en entradas limpias y coherentes que un modelo de visión artificial necesita para entrenarse correctamente. Con Ultralytics YOLO26, las operaciones básicas sobre los píxeles —conversión a RGB, escalado a [0, 1] y redimensionado— se ejecutan automáticamente dentro del flujo de entrenamiento, por lo que el trabajo restante consiste en dividir correctamente el conjunto de datos, equilibrar las clases y elegir las aumentaciones. Esta guía aborda esas técnicas esenciales: redimensionado, normalización, división del conjunto de datos, aumento de datos y análisis exploratorio de datos (EDA).
Watch: How to Use Data Preprocessing and Augmentation to Improve Model Accuracy in Real-World Scenarios 🚀
Este paso se realiza después de haber definido los objetivos de tu proyecto y recopilado y anotado tus datos, y se sitúa al principio del flujo de trabajo de un proyecto de visión artificial.
Por qué es importante el preprocesamiento#
El preprocesamiento prepara los datos en un formato que reduce la carga computacional y mejora el rendimiento del modelo. Aborda tres problemas habituales de los datos sin procesar:
- Ruido: Variaciones irrelevantes o aleatorias en los datos.
- Incoherencia: Variaciones en el tamaño, el formato y la calidad de las imágenes.
- Desequilibrio: Distribución desigual de las clases o categorías en el conjunto de datos.
Técnicas de preprocesamiento#
Las técnicas principales son el redimensionado, la normalización, la división del conjunto de datos y el aumento de datos. Con YOLO26, las dos primeras son automáticas, mientras que tus decisiones son más importantes en la división y la aumentación.
Redimensionado de imágenes#
Muchos modelos requieren un tamaño de entrada uniforme, por lo que el redimensionado homogeneiza las imágenes y reduce la complejidad computacional. Hay dos métodos de interpolación habituales:
- Interpolación bilineal: Suaviza los valores de los píxeles calculando una media ponderada de los cuatro píxeles más cercanos.
- Vecino más cercano: Copia el valor del píxel más cercano sin calcular una media; es más rápido, pero produce una imagen más pixelada.
Bibliotecas como OpenCV y PIL (Pillow) proporcionan estas funciones, pero con YOLO26 normalmente no tienes que redimensionar las imágenes manualmente. El argumento imgsz se encarga de ello. En la ruta cuadrada de tamaño fijo, la validación y la inferencia aplican letterbox a las imágenes hacia una entrada imgsz × imgsz, como 640 × 640, preservando la relación de aspecto y añadiendo un relleno gris (valor 114). Las imágenes grandes se reducen para que quepan, mientras que las pequeñas no se amplían cuando el escalado está desactivado. En la ruta de entrenamiento predeterminada, mosaic=1.0 coloca en mosaico cuatro imágenes sobre un lienzo más grande y recorta de nuevo a imgsz; cuando close_mosaic desactiva el mosaico durante las últimas épocas, las imágenes reciben letterbox y después siguen transformándose aleatoriamente en lugar de pasar sin modificaciones. Los lotes rectangulares (rect=True) y multi_scale utilizan formas de entrada diferentes.
Normalización de los valores de los píxeles#
La normalización escala los valores de los píxeles a un intervalo estándar, lo que ayuda al modelo a converger más rápido durante el entrenamiento. Hay dos técnicas habituales:
- Escalado min-max: Escala los valores de los píxeles a un intervalo de 0 a 1.
- Normalización de puntuación Z: Escala los valores de los píxeles en función de su media y desviación estándar.
YOLO26 gestiona la normalización automáticamente como parte de su flujo de preprocesamiento: convierte las imágenes a RGB y escala los valores de los píxeles al intervalo [0, 1] dividiéndolos entre 255 (escalado min-max). YOLO no aplica de forma predeterminada la normalización de media y desviación estándar al estilo de ImageNet (puntuación Z), por lo que no es necesario realizar ningún paso de normalización manual.
División del conjunto de datos#
Dividir los datos en conjuntos de entrenamiento, validación y prueba te permite evaluar el modelo con datos no vistos y medir su capacidad de generalización. Una división habitual es de un 70 % para entrenamiento, un 20 % para validación y un 10 % para pruebas. Herramientas como scikit-learn o TensorFlow simplifican este proceso.
Ten en cuenta estos puntos al dividir los datos:
- Mantén la distribución de las clases: Asegúrate de que cada clase esté representada proporcionalmente en los conjuntos de entrenamiento, validación y prueba.
- Equilibra las clases: En conjuntos de datos desequilibrados, considera sobremuestrear la clase minoritaria o submuestrear la clase mayoritaria, únicamente dentro del conjunto de entrenamiento.
Divide el conjunto de datos antes de aplicar cualquier aumento u otro preprocesamiento, y aplica esas transformaciones únicamente al conjunto de entrenamiento. Aumentar los datos antes de dividirlos permite que la información de las imágenes de validación o prueba influya en el entrenamiento, lo que produce puntuaciones engañosamente altas que se desploman con datos del mundo real.
Aumento del conjunto de datos#
El aumento de datos incrementa artificialmente el tamaño de un conjunto de datos mediante la creación de versiones modificadas de imágenes existentes. Ayuda a reducir el sobreajuste y mejora la generalización, con varias ventajas:
- Modelos más robustos: Las variaciones de iluminación, orientación y escala hacen que el modelo sea resistente a las distorsiones del mundo real.
- Rentable: Amplías el conjunto de entrenamiento sin recopilar ni etiquetar datos nuevos.
- Mejor aprovechamiento de los datos: Cada imagen anotada genera varias variaciones de entrenamiento.
Con YOLO26, la intensidad de la aumentación se controla mediante argumentos de entrenamiento que se pasan a model.train() o mediante las opciones equivalentes de la CLI, no editando el YAML del conjunto de datos, que define metadatos como las rutas, los nombres de las clases y las divisiones. La única excepción es flip_idx: los conjuntos de datos de poses lo declaran en el YAML del conjunto de datos para asignar pares de puntos clave izquierdo/derecho, y YOLO desactiva completamente fliplr y flipud cuando falta. Las aumentaciones integradas incluyen:
- Mosaic, MixUp y CutMix (
mosaic,mixup,cutmix): Combinan varias imágenes en una muestra de entrenamiento. - Volteos (
fliplr,flipud): Reflejan las imágenes horizontal o verticalmente. - Transformaciones geométricas (
degrees,translate,scale,shear,perspective): Giran, desplazan, amplían y deforman las imágenes. - Variación cromática HSV (
hsv_h,hsv_s,hsv_v): Varía el tono, la saturación y el brillo. - Copy-paste (
copy_paste): Pega copias adicionales de objetos segmentados, reflejadas de forma predeterminada dentro de la misma imagen o tomadas de otra imagen concopy_paste_mode=mixup. - Intercambio de canales (
bgr): Intercambia el orden de los canales RGB a BGR. - Transformaciones de clasificación (
auto_augment,erasing): Aplican una política de aumentación automatizada y borrado aleatorio al entrenar un clasificador.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Augmentation is configured with training arguments, not the dataset YAML
model.train(data="coco8.yaml", epochs=10, hsv_h=0.015, fliplr=0.5, mosaic=1.0, degrees=10.0)Para consultar la lista completa de argumentos de aumentación y sus valores predeterminados, visita la referencia de configuración de aumentación y la guía específica de aumento de datos de YOLO. Si el paquete albumentations está instalado, YOLO también activa automáticamente sus aumentaciones integradas basadas en Albumentations.
Caso práctico: preprocesamiento para la detección de vehículos#
Considera un proyecto para detectar y clasificar vehículos en imágenes de tráfico con YOLO26, partiendo de imágenes anotadas con cuadros delimitadores y etiquetas. Así sería cada decisión de preprocesamiento:
- Redimensionado: No requiere trabajo manual; YOLO26 redimensiona a
imgszdurante el entrenamiento. - Normalización: No requiere trabajo manual; YOLO26 escala automáticamente los valores de los píxeles a
[0, 1]. - División: Divide el conjunto de datos en un 70 % para entrenamiento, un 20 % para validación y un 10 % para pruebas, manteniendo una distribución coherente de las clases entre las divisiones.
- Aumentación: Configura argumentos de entrenamiento adecuados para escenas de tráfico; por ejemplo,
fliplrpara la invariancia direccional,hsv_vpara la iluminación diurna/nocturna ymosaicpara distintas densidades de objetos.
Con estas decisiones tomadas, el conjunto de datos está listo para el análisis exploratorio de datos (EDA).
Análisis exploratorio de datos (EDA)#
El análisis exploratorio de datos (EDA) utiliza estadísticas y visualizaciones para revelar patrones y distribuciones en tus datos, ayudándote a detectar problemas como el desequilibrio de clases o los valores atípicos antes del entrenamiento.
Técnicas estadísticas de EDA#
El análisis exploratorio de datos (EDA) estadístico comienza con métricas básicas —media, mediana, desviación estándar y rango— calculadas sobre propiedades como las distribuciones de intensidad de los píxeles. Estas métricas ofrecen una visión general rápida de la calidad de tu conjunto de datos y permiten detectar irregularidades desde el principio.
Técnicas visuales de EDA#
Las visualizaciones revelan patrones que las estadísticas resumidas no muestran, como el desequilibrio de clases y los valores atípicos. Entre las herramientas habituales se incluyen:
- Histogramas y diagramas de caja: Muestran la distribución de los valores de los píxeles y señalan valores atípicos en las distribuciones de intensidad o características.
- Gráficos de barras: Revelan el desequilibrio de clases comparando cuántos ejemplos tiene cada clase.
- Diagramas de dispersión: Exploran las relaciones entre las características de las imágenes o las anotaciones.
- Mapas de calor: Visualizan las distribuciones de intensidad de los píxeles o la distribución espacial de las anotaciones en las imágenes.
Ultralytics Platform para EDA#
Para realizar EDA sin código, sube tu conjunto de datos a Ultralytics Platform. La pestaña Charts del conjunto de datos genera automáticamente visualizaciones clave de EDA: distribución de las divisiones, recuentos de las clases principales, histogramas de anchura y altura de las imágenes y mapas de calor 2D de las posiciones de las anotaciones y las dimensiones de las imágenes. La pestaña Images te permite explorar tus datos en vistas de cuadrícula, compacta o de tabla con superposiciones de anotaciones, lo que facilita detectar ejemplos mal etiquetados o clases desequilibradas sin escribir código.
Conclusión#
Los datos correctamente divididos, normalizados y aumentados reducen el ruido y mejoran la generalización, convirtiendo una colección sin procesar de imágenes en un conjunto de entrenamiento fiable. Con el conjunto de datos preprocesado, el siguiente paso es entrenar tu modelo. Si te surgen dudas, pregunta a la comunidad en el repositorio de Ultralytics en GitHub o en el servidor de Ultralytics en Discord.
Preguntas frecuentes#
El preprocesamiento garantiza que tus datos estén limpios, sean coherentes y tengan un formato optimizado para el entrenamiento. Al abordar el ruido, la incoherencia y el desequilibrio de clases de los datos sin procesar, pasos como el redimensionado, la normalización, la aumentación y la división del conjunto de datos reducen la carga computacional y mejoran el rendimiento del modelo. Consulta los pasos de un proyecto de visión artificial para saber cómo encaja en el flujo de trabajo general.
Configura la aumentación mediante argumentos de entrenamiento en lugar del YAML del conjunto de datos. Pasa argumentos como
fliplr,mosaic,hsv_hydegreesamodel.train()(o las opciones equivalentes de la CLI) para establecer la probabilidad y la intensidad de cada transformación. Estos argumentos se definen en la configuración de aumentación y se explican en la guía de aumento de datos de YOLO. Los conjuntos de datos de poses son la excepción: su asignación de puntos claveflip_idxse encuentra en el YAML del conjunto de datos, y los volteos se desactivan si falta.Las dos técnicas más habituales son el escalado min-max (reescalado de los píxeles a un intervalo de 0 a 1) y la normalización de puntuación Z (reescalado en función de la media y la desviación estándar). YOLO26 aplica automáticamente el escalado min-max —convierte las imágenes a RGB y divide los valores de los píxeles entre 255—, por lo que no necesitas realizar una normalización manual. De forma predeterminada, no aplica la normalización de puntuación Z.
Una práctica habitual es asignar un 70 % al entrenamiento, un 20 % a la validación y un 10 % a las pruebas. Mantén la distribución de las clases en las tres divisiones y evita la fuga de datos aplicando la aumentación únicamente al conjunto de entrenamiento después de dividir los datos. Herramientas como scikit-learn o TensorFlow gestionan la división de forma eficiente. Consulta la guía de recopilación y anotación de datos para obtener información sobre la preparación previa del conjunto de datos.
Sí. El argumento
imgszcontrola el tamaño de entrada objetivo sin necesidad de trabajo manual. En la ruta cuadrada de tamaño fijo, la validación y la inferencia aplican letterbox a las imágenes hacia la forma especificada, preservando la relación de aspecto; las imágenes grandes se reducen para que quepan, mientras que las pequeñas no se amplían cuando el escalado está desactivado. Durante el entrenamiento, la aumentación de mosaico predeterminada alcanza el tamaño objetivo colocando en mosaico cuatro imágenes y recortándolas. Los lotes rectangulares (rect=True) ymulti_scaleutilizan formas de entrada diferentes. Consulta la documentación de entrenamiento de modelos para obtener más información.