Aumento de datos usando Ultralytics YOLO

YOLO data augmentation examples showing original and augmented images for training

Introducción

El aumento de datos es una técnica crucial en visión artificial que expande artificialmente tu conjunto de datos de entrenamiento aplicando diversas transformaciones a las imágenes existentes. Al entrenar modelos de deep learning como Ultralytics YOLO, el aumento de datos ayuda a mejorar la robustez del modelo, reduce el sobreajuste y mejora la generalización en escenarios del mundo real.



Watch: How to use Mosaic, MixUp & more Data Augmentations to help Ultralytics YOLO Models generalize better 🚀

Por qué es importante el aumento de datos

El aumento de datos cumple múltiples propósitos críticos al entrenar modelos de visión artificial:

  • Conjunto de datos expandido: Al crear variaciones de las imágenes existentes, puedes aumentar eficazmente el tamaño de tu conjunto de datos de entrenamiento sin recopilar nuevos datos.
  • Generalización mejorada: Los modelos aprenden a reconocer objetos bajo diversas condiciones, lo que los hace más robustos en aplicaciones del mundo real.
  • Reducción del sobreajuste: Al introducir variabilidad en los datos de entrenamiento, es menos probable que los modelos memoricen características específicas de las imágenes.
  • Rendimiento mejorado: Los modelos entrenados con el aumento adecuado suelen lograr una mejor precisión en los conjuntos de validación y prueba.

La implementación de Ultralytics YOLO proporciona un conjunto completo de técnicas de aumento, cada una diseñada para propósitos específicos y para contribuir al rendimiento del modelo de diferentes maneras. Esta guía explorará cada parámetro de aumento en detalle, ayudándote a entender cuándo y cómo utilizarlos eficazmente en tus proyectos.

Ejemplos de configuración

Puedes personalizar cada parámetro utilizando la API de Python, la interfaz de línea de comandos (CLI) o un archivo de configuración. A continuación, verás ejemplos de cómo configurar el aumento de datos con cada método.

Ejemplos de configuración
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Training with custom augmentation parameters
model.train(data="coco.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Training without any augmentations (disabled values omitted for clarity)
model.train(
    data="coco.yaml",
    epochs=100,
    hsv_h=0.0,
    hsv_s=0.0,
    hsv_v=0.0,
    translate=0.0,
    scale=0.0,
    fliplr=0.0,
    mosaic=0.0,
    erasing=0.0,
    auto_augment=None,
)

# Training with custom Albumentations transforms (Python API only)
custom_transforms = [
    A.Blur(blur_limit=7, p=0.5),
    A.CLAHE(clip_limit=4.0, p=0.5),
]
model.train(data="coco.yaml", epochs=100, augmentations=custom_transforms)

Usando un archivo de configuración

Puedes definir todos los parámetros de entrenamiento, incluyendo los aumentos, en un archivo de configuración YAML (p. ej., train_custom.yaml). El parámetro mode solo es necesario al usar la CLI. Este nuevo archivo YAML sobrescribirá el predeterminado ubicado en el paquete ultralytics.

# train_custom.yaml
# 'mode' is required only for CLI usage
mode: train
data: coco8.yaml
model: yolo26n.pt
epochs: 100
hsv_h: 0.03
hsv_s: 0.6
hsv_v: 0.5

Luego, inicia el entrenamiento con la API de Python:

Ejemplo de entrenamiento
from ultralytics import YOLO

# Load a COCO-pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Train the model with custom configuration
model.train(cfg="train_custom.yaml")

Aumentos del espacio de color

Ajuste de tono (hsv_h)

  • Rango: 0.0 - 1.0
  • Predeterminado: 0.015
  • Uso: Desplaza los colores de la imagen preservando sus relaciones. El hiperparámetro hsv_h define la magnitud del desplazamiento, y el ajuste final se elige aleatoriamente entre -hsv_h y hsv_h. Por ejemplo, con hsv_h=0.3, el desplazamiento se selecciona aleatoriamente entre -0.3 y 0.3. Para valores superiores a 0.5, el desplazamiento de tono da una vuelta completa al círculo cromático; por eso los aumentos se ven iguales entre 0.5 y -0.5.
  • Propósito: Particularmente útil para escenarios al aire libre donde las condiciones de iluminación pueden afectar drásticamente la apariencia del objeto. Por ejemplo, un plátano podría parecer más amarillo bajo luz solar directa, pero más verdoso en interiores.
  • Implementación de Ultralytics: RandomHSV
-0.5-0.250.00.250.5
Hue shift -0.5 augmentationHue shift -0.25 augmentationOriginal image without augmentationHue shift 0.25 augmentationHue shift -0.5 augmentation

Ajuste de saturación (hsv_s)

  • Rango: 0.0 - 1.0
  • Predeterminado: 0.7
  • Uso: Modifica la intensidad de los colores en la imagen. El hiperparámetro hsv_s define la magnitud del desplazamiento, y el ajuste final se elige aleatoriamente entre -hsv_s y hsv_s. Por ejemplo, con hsv_s=0.7, la intensidad se selecciona aleatoriamente entre -0.7 y 0.7.
  • Propósito: Ayuda a los modelos a manejar condiciones climáticas y configuraciones de cámara variables. Por ejemplo, una señal de tráfico roja podría parecer muy vívida en un día soleado, pero apagada y descolorida en condiciones de niebla.
  • Implementación de Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Saturation -1.0 grayscale augmentationSaturation -0.5 augmentationOriginal image without augmentationSaturation 0.5 augmentationSaturation 1.0 vivid augmentation

Ajuste de brillo (hsv_v)

  • Rango: 0.0 - 1.0
  • Predeterminado: 0.4
  • Uso: Cambia el brillo de la imagen. El hiperparámetro hsv_v define la magnitud del desplazamiento, y el ajuste final se elige aleatoriamente entre -hsv_v y hsv_v. Por ejemplo, con hsv_v=0.4, la intensidad se selecciona aleatoriamente entre -0.4 y 0.4.
  • Propósito: Esencial para entrenar modelos que necesitan funcionar en diferentes condiciones de iluminación. Por ejemplo, una manzana roja puede parecer brillante bajo el sol, pero mucho más oscura a la sombra.
  • Implementación de Ultralytics: RandomHSV
-1.0-0.50.00.51.0
Brightness -1.0 dark augmentationBrightness -0.5 augmentationOriginal image without augmentationBrightness 0.5 augmentationBrightness 1.0 bright augmentation

Transformaciones geométricas

Rotación (degrees)

  • Rango: 0.0 a 180
  • Predeterminado: 0
  • Uso: Rota imágenes aleatoriamente dentro del rango especificado. El hiperparámetro degrees define el ángulo de rotación, y el ajuste final se elige aleatoriamente entre -degrees y degrees. Por ejemplo, con degrees=10.0, la rotación se selecciona aleatoriamente entre -10.0 y 10.0.
  • Propósito: Crucial para aplicaciones donde los objetos pueden aparecer en diferentes orientaciones. Por ejemplo, en imágenes de drones aéreos, los vehículos pueden estar orientados en cualquier dirección, lo que requiere que los modelos reconozcan objetos independientemente de su rotación.
  • Implementación de Ultralytics: RandomPerspective
-180-900.090180
Rotation -180 degrees augmentationRotation -90 degrees augmentationOriginal image without augmentationRotation 90 degrees augmentationRotation 180 degrees augmentation

Traslación (translate)

  • Rango: 0.0 - 1.0
  • Predeterminado: 0.1
  • Uso: Desplaza las imágenes horizontal y verticalmente por una fracción aleatoria del tamaño de la imagen. El hiperparámetro translate define la magnitud del desplazamiento, y el ajuste final se elige aleatoriamente dos veces (una vez para cada eje) dentro del rango -translate a translate. Por ejemplo, con translate=0.5, la traslación se selecciona aleatoriamente entre -0.5 y 0.5 en el eje x, y se selecciona otro valor aleatorio independiente dentro del mismo rango para el eje y.
  • Propósito: Ayuda a los modelos a aprender a detectar objetos parcialmente visibles y mejora la robustez a la posición del objeto. Por ejemplo, en aplicaciones de evaluación de daños en vehículos, las partes del coche pueden aparecer completa o parcialmente en el encuadre dependiendo de la posición y distancia del fotógrafo; la traslación enseñará al modelo a reconocer estas características independientemente de si están completas o no.
  • Implementación de Ultralytics: RandomPerspective
  • Nota: Para simplificar, las traslaciones aplicadas a continuación son las mismas cada vez tanto para el eje x como para el y. Los valores -1.0 y 1.0 no se muestran, ya que trasladarían la imagen completamente fuera del encuadre.
-0.5-0.250.00.250.5
Translation -0.5 shift augmentationTranslation -0.25 shift augmentationOriginal image without augmentationTranslation 0.25 shift augmentationTranslation 0.5 shift augmentation

Escala (scale)

  • Rango: 0.0 - 1.0
  • Predeterminado: 0.5
  • Uso: Cambia el tamaño de las imágenes mediante un factor aleatorio dentro del rango especificado. El hiperparámetro scale define el factor de escala, y el ajuste final se elige aleatoriamente entre 1-scale y 1+scale. Por ejemplo, con scale=0.5, la escala se selecciona aleatoriamente entre 0.5 y 1.5.
  • Propósito: Permite a los modelos manejar objetos a diferentes distancias y tamaños. Por ejemplo, en aplicaciones de conducción autónoma, los vehículos pueden aparecer a varias distancias de la cámara, requiriendo que el modelo los reconozca independientemente de su tamaño.
  • Implementación de Ultralytics: RandomPerspective
  • Nota:
    • El valor -1.0 no se muestra ya que haría desaparecer la imagen, mientras que 1.0 simplemente resulta en un zoom de 2x.
    • Los valores mostrados en la tabla a continuación son los aplicados a través del hiperparámetro scale, no el factor de escala final.
    • Si scale es mayor que 1.0, la imagen puede ser muy pequeña o invertida, ya que el factor de escala se elige aleatoriamente entre 1-scale y 1+scale. Por ejemplo, con scale=3.0, la escala se selecciona aleatoriamente entre -2.0 y 4.0. Si se elige un valor negativo, la imagen se invierte.
-0.5-0.250.00.250.5
Scale 0.5x zoom out augmentationScale 0.75x zoom out augmentationOriginal image without augmentationScale 1.25x zoom in augmentationScale 1.5x zoom in augmentation

Cizallamiento (shear)

  • Rango: -180 a +180
  • Predeterminado: 0
  • Uso: Introduce una transformación geométrica que sesga la imagen a lo largo de los ejes x e y, desplazando efectivamente partes de la imagen en una dirección mientras mantiene las líneas paralelas. El hiperparámetro shear define el ángulo de cizallamiento, y el ajuste final se elige aleatoriamente entre -shear y shear. Por ejemplo, con shear=10.0, el cizallamiento se selecciona aleatoriamente entre -10 y 10 en el eje x, y se selecciona otro valor aleatorio independiente dentro del mismo rango para el eje y.
  • Propósito: Ayuda a los modelos a generalizar ante variaciones en los ángulos de visión causadas por ligeras inclinaciones o puntos de vista oblicuos. Por ejemplo, en la vigilancia del tráfico, objetos como coches y señales de tráfico pueden aparecer inclinados debido a ubicaciones de cámara no perpendiculares. Aplicar el aumento de cizallamiento asegura que el modelo aprenda a reconocer objetos a pesar de tales distorsiones.
  • Implementación de Ultralytics: RandomPerspective
  • Nota:
    • Los valores de shear pueden distorsionar rápidamente la imagen, por lo que se recomienda empezar con valores pequeños e ir aumentándolos gradualmente.
    • A diferencia de las transformaciones de perspectiva, el cizallamiento no introduce profundidad ni puntos de fuga, sino que distorsiona la forma de los objetos al cambiar sus ángulos mientras mantiene los lados opuestos paralelos.
-10-50.0510
Shear -10 degrees augmentationShear -5 degrees augmentationOriginal image without augmentationShear 5 degrees augmentationShear 10 degrees augmentation

Perspectiva (perspective)

  • Rango: 0.0 - 0.001
  • Predeterminado: 0
  • Uso: Aplica una transformación de perspectiva completa a lo largo de los ejes x e y, simulando cómo aparecen los objetos cuando se ven desde diferentes profundidades o ángulos. El hiperparámetro perspective define la magnitud de la perspectiva, y el ajuste final se elige aleatoriamente entre -perspective y perspective. Por ejemplo, con perspective=0.001, la perspectiva se selecciona aleatoriamente entre -0.001 y 0.001 en el eje x, y se selecciona otro valor aleatorio independiente dentro del mismo rango en el eje y.
  • Propósito: La aumentación de perspectiva es crucial para manejar cambios extremos de punto de vista, especialmente en escenarios donde los objetos aparecen acortados o distorsionados debido a cambios de perspectiva. Por ejemplo, en la detección de objetos con drones, los edificios, carreteras y vehículos pueden parecer estirados o comprimidos según la inclinación y altitud del dron. Al aplicar transformaciones de perspectiva, los modelos aprenden a reconocer objetos a pesar de estas distorsiones inducidas por la perspectiva, mejorando su robustez en despliegues del mundo real.
  • Implementación de Ultralytics: RandomPerspective
-0.001-0.00050.00.00050.001
Transformación de perspectiva -0.001Transformación de perspectiva -0.0005Original image without augmentationTransformación de perspectiva 0.0005Transformación de perspectiva 0.001

Voltear arriba-abajo (flipud)

  • Rango: 0.0 - 1.0
  • Predeterminado: 0
  • Usage: Performs a vertical flip by inverting the image along the y-axis. This transformation mirrors the entire image upside-down but preserves all spatial relationships between objects. The flipud hyperparameter defines the probability of applying the transformation, with a value of flipud=1.0 ensuring that all images are flipped and a value of flipud=0.0 disabling the transformation entirely. For example, with flipud=0.5, each image has a 50% chance of being flipped upside-down.
  • Propósito: Útil para escenarios donde los objetos pueden aparecer al revés. Por ejemplo, en sistemas de visión robótica, los objetos en cintas transportadoras o brazos robóticos pueden ser recogidos y colocados en diversas orientaciones. El volteo vertical ayuda al modelo a reconocer objetos independientemente de su posición de arriba a abajo.
  • Implementación de Ultralytics: RandomFlip
flipud desactivadoflipud activado
Imagen original sin aumentaciónAumentación de volteo vertical activada

Voltear izquierda-derecha (fliplr)

  • Rango: 0.0 - 1.0
  • Predeterminado: 0.5
  • Uso: Realiza un volteo horizontal reflejando la imagen a lo largo del eje x. Esta transformación intercambia los lados izquierdo y derecho manteniendo la consistencia espacial, lo que ayuda al modelo a generalizar a objetos que aparecen en orientaciones reflejadas. El hiperparámetro fliplr define la probabilidad de aplicar la transformación, con un valor de fliplr=1.0 que asegura que todas las imágenes se volteen y un valor de fliplr=0.0 que deshabilita la transformación por completo. Por ejemplo, con fliplr=0.5, cada imagen tiene un 50% de probabilidad de ser volteada de izquierda a derecha.
  • Propósito: El volteo horizontal se usa ampliamente en la detección de objetos, estimación de poses y reconocimiento facial para mejorar la robustez contra variaciones de izquierda a derecha. Por ejemplo, en la conducción autónoma, los vehículos y peatones pueden aparecer a cualquier lado de la carretera, y el volteo horizontal ayuda al modelo a reconocerlos igual de bien en ambas orientaciones.
  • Implementación de Ultralytics: RandomFlip
fliplr desactivadofliplr activado
Imagen original sin aumentaciónAumentación de volteo horizontal activada

Intercambio de canales BGR (bgr)

  • Rango: 0.0 - 1.0
  • Predeterminado: 0
  • Uso: Intercambia los canales de color de una imagen de RGB a BGR, alterando el orden en el que se representan los colores. El hiperparámetro bgr define la probabilidad de aplicar la transformación, con bgr=1.0 que asegura que todas las imágenes se sometan al intercambio de canales y bgr=0.0 que lo deshabilita. Por ejemplo, con bgr=0.5, cada imagen tiene un 50% de probabilidad de ser convertida de RGB a BGR.
  • Propósito: Aumenta la robustez ante diferentes ordenamientos de canales de color. Por ejemplo, cuando entrenas modelos que deben funcionar a través de diversos sistemas de cámaras y bibliotecas de imágenes donde los formatos RGB y BGR pueden usarse de forma inconsistente, o al desplegar modelos en entornos donde el formato de color de entrada podría diferir de los datos de entrenamiento.
  • Implementación de Ultralytics: Format
bgr desactivadobgr activado
Imagen original sin aumentaciónAumentación de intercambio de canales BGR

Mosaico (mosaic)

  • Rango: 0.0 - 1.0
  • Predeterminado: 1
  • Uso: Combina cuatro imágenes de entrenamiento en una. El hiperparámetro mosaic define la probabilidad de aplicar la transformación, con mosaic=1.0 que asegura que todas las imágenes se combinen y mosaic=0.0 que deshabilita la transformación. Por ejemplo, con mosaic=0.5, cada imagen tiene un 50% de probabilidad de ser combinada con otras tres imágenes.
  • Propósito: Altamente eficaz para mejorar la detección de objetos pequeños y la comprensión del contexto. Por ejemplo, en proyectos de conservación de vida silvestre donde los animales pueden aparecer a varias distancias y escalas, la aumentación de mosaico ayuda al modelo a aprender a reconocer la misma especie a través de diferentes tamaños, oclusiones parciales y contextos ambientales mediante la creación artificial de muestras de entrenamiento diversas a partir de datos limitados.
  • Implementación de Ultralytics: Mosaic
  • Nota:
    • Aunque la aumentación mosaic hace que el modelo sea más robusto, también puede hacer que el proceso de entrenamiento sea más desafiante.
    • La aumentación mosaic se puede desactivar cerca del final del entrenamiento configurando close_mosaic con el número de épocas antes de la finalización en las que debería desactivarse. Por ejemplo, si epochs se establece en 200 y close_mosaic se establece en 20, la aumentación mosaic se desactivará después de 180 épocas. Si close_mosaic se establece en 0, la aumentación mosaic estará habilitada durante todo el proceso de entrenamiento.
    • El centro del mosaico generado se determina mediante valores aleatorios y puede estar dentro o fuera de la imagen.
    • La implementación actual de la aumentación mosaic combina 4 imágenes elegidas aleatoriamente del conjunto de datos. Si el conjunto de datos es pequeño, la misma imagen puede usarse varias veces en el mismo mosaico.
mosaic desactivadomosaic activado
Imagen original sin aumentaciónAumentación de mosaico de 4 imágenes activada

Mixup (mixup)

  • Rango: 0.0 - 1.0
  • Predeterminado: 0
  • Uso: Mezcla dos imágenes y sus etiquetas con una probabilidad determinada. El hiperparámetro mixup define la probabilidad de aplicar la transformación, con mixup=1.0 asegurando que todas las imágenes se mezclen y mixup=0.0 deshabilitando la transformación. Por ejemplo, con mixup=0.5, cada imagen tiene un 50% de probabilidad de mezclarse con otra imagen.
  • Propósito: Mejora la robustez del modelo y reduce el sobreajuste. Por ejemplo, en sistemas de reconocimiento de productos minoristas, mixup ayuda al modelo a aprender características más robustas al mezclar imágenes de diferentes productos, enseñándole a identificar artículos incluso cuando están parcialmente visibles o ocultos por otros productos en estantes de tiendas concurridos.
  • Implementación de Ultralytics: Mixup
  • Nota:
    • La relación de mixup es un valor aleatorio extraído de una distribución beta np.random.beta(32.0, 32.0), lo que significa que cada imagen contribuye aproximadamente un 50%, con ligeras variaciones.
Primera imagen, mixup desactivadoSegunda imagen, mixup desactivadomixup activado
Primera imagen para mezcla MixUpSegunda imagen para mezcla MixUpAumentación de mezcla MixUp activada

CutMix (cutmix)

  • Rango: 0.0 - 1.0
  • Predeterminado: 0
  • Uso: Corta una región rectangular de una imagen y la pega sobre otra imagen con una probabilidad determinada. El hiperparámetro cutmix define la probabilidad de aplicar la transformación, con cutmix=1.0 asegurando que todas las imágenes se sometan a esta transformación y cutmix=0.0 deshabilitándola por completo. Por ejemplo, con cutmix=0.5, cada imagen tiene un 50% de probabilidad de que una región sea reemplazada por un parche de otra imagen.
  • Propósito: Mejora el rendimiento del modelo creando escenarios de oclusión realistas mientras mantiene la integridad de las características locales. Por ejemplo, en sistemas de conducción autónoma, cutmix ayuda al modelo a aprender a reconocer vehículos o peatones incluso cuando están parcialmente ocluidos por otros objetos, mejorando la precisión de detección en entornos complejos del mundo real con objetos superpuestos.
  • Implementación de Ultralytics: CutMix
  • Nota:
    • El tamaño y la posición de la región cortada se determinan aleatoriamente para cada aplicación.
    • A diferencia de mixup, que mezcla valores de píxeles globalmente, cutmix mantiene las intensidades de píxeles originales dentro de las regiones cortadas, preservando las características locales.
    • Una región se pega en la imagen objetivo solo si no se superpone con ninguna caja delimitadora existente. Además, solo se conservan las cajas delimitadoras que retienen al menos 0.1 (10%) de su área original dentro de la región pegada.
    • Este umbral de área mínima de caja delimitadora no se puede cambiar con la implementación actual y se establece en 0.1 de forma predeterminada.
Primera imagen, cutmix desactivadoSegunda imagen, cutmix desactivadocutmix activado
Primera imagen para CutMixSegunda imagen para CutMixAumentación CutMix activada

Aumentaciones específicas para segmentación

Copy-Paste (copy_paste)

  • Rango: 0.0 - 1.0
  • Predeterminado: 0
  • Uso: Solo funciona para tareas de segmentación; esta aumentación copia objetos dentro o entre imágenes según una probabilidad especificada, controlada por el copy_paste_mode. El hiperparámetro copy_paste define la probabilidad de aplicar la transformación, con copy_paste=1.0 asegurando que todas las imágenes se copien y copy_paste=0.0 deshabilitando la transformación. Por ejemplo, con copy_paste=0.5, cada imagen tiene un 50% de probabilidad de tener objetos copiados desde otra imagen.
  • Propósito: Particularmente útil para tareas de segmentación de instancias y clases de objetos raros. Por ejemplo, en la detección de defectos industriales donde ciertos tipos de defectos aparecen con poca frecuencia, la aumentación copy-paste puede aumentar artificialmente la ocurrencia de estos defectos raros copiándolos de una imagen a otra, ayudando al modelo a aprender mejor estos casos subrepresentados sin necesidad de muestras defectuosas adicionales.
  • Implementación de Ultralytics: CopyPaste
  • Nota:
    • Como se muestra en el gif a continuación, la aumentación copy_paste se puede usar para copiar objetos de una imagen a otra.
    • Una vez que se copia un objeto, independientemente del copy_paste_mode, su intersección sobre área (IoA) se calcula con todos los objetos de la imagen de origen. Si todos los IoA están por debajo de 0.3 (30%), el objeto se pega en la imagen objetivo. Si solo uno de los IoA está por encima de 0.3, el objeto no se pega en la imagen objetivo.
    • El umbral de IoA no se puede cambiar con la implementación actual y se establece en 0.3 de forma predeterminada.
copy_paste desactivadocopy_paste activado con copy_paste_mode=flipVisualiza el proceso de copy_paste
Imagen original sin aumentaciónAumentación copy-paste activadaDemo animado de aumentación copy-paste

Modo Copy-Paste (copy_paste_mode)

  • Opciones: 'flip', 'mixup'
  • Predeterminado: 'flip'
  • Uso: Determina el método utilizado para la aumentación copy-paste. Si se establece en 'flip', los objetos provienen de la misma imagen, mientras que 'mixup' permite que los objetos se copien de diferentes imágenes.
  • Propósito: Permite flexibilidad en cómo se integran los objetos copiados en las imágenes objetivo.
  • Implementación de Ultralytics: CopyPaste
  • Nota:
    • El principio de IoA es el mismo para ambos copy_paste_mode, pero la forma en que se copian los objetos es diferente.
    • Dependiendo del tamaño de la imagen, los objetos a veces pueden copiarse parcial o totalmente fuera del marco.
    • Dependiendo de la calidad de las anotaciones poligonales, los objetos copiados pueden tener ligeras variaciones de forma en comparación con los originales.
Imagen de referenciaImagen elegida para copy_pastecopy_paste activado con copy_paste_mode=mixup
Segunda imagen para mezcla MixUpImagen original sin aumentaciónCopy-paste con modo MixUp

Aumentaciones específicas para clasificación

Auto Aumentación (auto_augment)

  • Opciones: 'randaugment', 'autoaugment', 'augmix', None
  • Predeterminado: 'randaugment'
  • Uso: Aplica políticas de aumento automatizadas para la clasificación. La opción 'randaugment' utiliza RandAugment, 'autoaugment' utiliza AutoAugment y 'augmix' utiliza AugMix. Si se establece en None, se deshabilita el aumento automatizado.
  • Propósito: Optimiza automáticamente las estrategias de aumento para tareas de clasificación. Las diferencias son las siguientes:
    • AutoAugment: Este modo aplica políticas de aumento predefinidas aprendidas de datasets como ImageNet, CIFAR10 y SVHN. Puedes seleccionar estas políticas existentes, pero no puedes entrenar otras nuevas dentro de Torchvision. Para descubrir estrategias de aumento óptimas para datasets específicos, serían necesarias bibliotecas externas o implementaciones personalizadas. Referencia al artículo de AutoAugment.
    • RandAugment: Aplica una selección aleatoria de transformaciones con una magnitud uniforme. Este enfoque reduce la necesidad de una fase de búsqueda extensiva, haciéndolo más eficiente computacionalmente y mejorando la robustez del modelo. Referencia al artículo de RandAugment.
    • AugMix: AugMix es un método de aumento de datos que mejora la robustez del modelo al crear diversas variaciones de imagen mediante combinaciones aleatorias de transformaciones simples. Referencia al artículo de AugMix.
  • Implementación de Ultralytics: classify_augmentations()
  • Nota:
    • En esencia, la principal diferencia entre los tres métodos es la forma en que se definen y aplican las políticas de aumento.
    • Puedes consultar este artículo que compara los tres métodos en detalle.

Borrado aleatorio (erasing)

  • Rango: 0.0 - 0.9
  • Predeterminado: 0.4
  • Uso: Borra aleatoriamente partes de la imagen durante el entrenamiento de clasificación. El hiperparámetro erasing define la probabilidad de aplicar la transformación, con erasing=0.9 asegurando que casi todas las imágenes se borren y erasing=0.0 deshabilitando la transformación. Por ejemplo, con erasing=0.5, cada imagen tiene un 50% de probabilidad de que una parte sea borrada.
  • Propósito: Ayuda a los modelos a aprender características robustas y evita una dependencia excesiva de regiones específicas de la imagen. Por ejemplo, en los sistemas de reconocimiento facial, el borrado aleatorio ayuda a que los modelos sean más robustos ante oclusiones parciales como gafas de sol, mascarillas u otros objetos que podrían cubrir parcialmente los rasgos faciales. Esto mejora el rendimiento en el mundo real obligando al modelo a identificar individuos utilizando múltiples características faciales en lugar de depender únicamente de rasgos distintivos que podrían estar ocultos.
  • Implementación de Ultralytics: classify_augmentations()
  • Nota:
    • El aumento erasing incluye hiperparámetros de scale, ratio y value que no se pueden cambiar con la implementación actual. Sus valores predeterminados son (0.02, 0.33), (0.3, 3.3) y 0, respectivamente, tal como se indica en la documentación de PyTorch.
    • El límite superior del hiperparámetro erasing está fijado en 0.9 para evitar aplicar la transformación a todas las imágenes.
erasing desactivadoerasing activado (ejemplo 1)erasing activado (ejemplo 2)erasing activado (ejemplo 3)
Imagen original sin aumentoEjemplo 1 de borrado aleatorioEjemplo 2 de borrado aleatorioEjemplo 3 de borrado aleatorio

Funciones de aumento avanzadas

Transformaciones personalizadas de Albumentations (augmentations)

  • Tipo: list de transformaciones de Albumentations
  • Predeterminado: None
  • Uso: Te permite proporcionar transformaciones personalizadas de Albumentations para el aumento de datos utilizando la API de Python. Este parámetro acepta una lista de objetos de transformación de Albumentations que se aplicarán durante el entrenamiento en lugar de las transformaciones predeterminadas de Albumentations.
  • Propósito: Proporciona un control preciso sobre las estrategias de aumento de datos aprovechando la extensa biblioteca de transformaciones de Albumentations. Esto es particularmente útil cuando necesitas aumentos especializados más allá de las opciones integradas de YOLO, como ajustes de color avanzados, inyección de ruido o transformaciones específicas de dominio.
  • Implementación de Ultralytics: Albumentations
Ejemplo de Albumentations personalizado
import albumentations as A

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Define custom Albumentations transforms
custom_transforms = [
    A.Blur(blur_limit=7, p=0.5),
    A.GaussNoise(var_limit=(10.0, 50.0), p=0.3),
    A.CLAHE(clip_limit=4.0, p=0.5),
    A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5),
    A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
]

# Train with custom Albumentations transforms
model.train(
    data="coco8.yaml",
    epochs=100,
    augmentations=custom_transforms,  # Pass custom transforms
    imgsz=640,
)

Puntos clave:

  • Solo API de Python: Las transformaciones personalizadas de Albumentations actualmente solo son compatibles mediante la API de Python. No se pueden especificar a través de la CLI ni de archivos de configuración YAML.
  • Reemplaza las transformaciones predeterminadas: Cuando proporcionas transformaciones personalizadas a través del parámetro augmentations, estas reemplazan por completo las transformaciones predeterminadas de Albumentations. Los aumentos predeterminados de YOLO (como mosaic, hsv_h, hsv_s, degrees, etc.) permanecen activos y se aplican de forma independiente.
  • Compatibilidad con BBox: Ten cuidado al utilizar transformaciones espaciales (transformaciones que cambian la geometría de la imagen). Ultralytics gestiona los ajustes de los BBox automáticamente, pero algunas transformaciones complejas pueden requerir configuración adicional.
  • Biblioteca extensa: Albumentations ofrece más de 70 transformaciones diferentes. Explora la documentación de Albumentations para descubrir todas las opciones disponibles.
  • Consideración de rendimiento: Añadir demasiados aumentos o utilizar transformaciones computacionalmente costosas puede ralentizar el entrenamiento. Empieza con un conjunto pequeño y supervisa la velocidad de entrenamiento.

Casos de uso comunes:

  • Imágenes médicas: Aplica transformaciones especializadas como deformaciones elásticas o distorsiones de cuadrícula para el aumento de imágenes de rayos X o MRI
  • Imágenes aéreas/satelitales: Utiliza transformaciones optimizadas para perspectivas cenitales
  • Condiciones de poca luz: Aplica ajustes de ruido y brillo para simular condiciones de iluminación difíciles
  • Inspección industrial: Añade patrones similares a defectos o variaciones de textura para aplicaciones de control de calidad

Notas de compatibilidad:

  • Requiere Albumentations versión 1.0.3 o superior
  • Compatible con todas las tareas de detección y segmentación de YOLO
  • No aplicable para tareas de clasificación (la clasificación utiliza una canalización de aumento diferente)

Para obtener más información sobre Albumentations y las transformaciones disponibles, visita la documentación oficial de Albumentations.

Preguntas frecuentes

Hay demasiados aumentos para elegir. ¿Cómo sé cuáles usar?

Elegir los aumentos adecuados depende de tu caso de uso y dataset específicos. Aquí tienes algunas pautas generales para ayudarte a decidir:

  • En la mayoría de los casos, son beneficiosas ligeras variaciones en el color y el brillo. Los valores predeterminados para hsv_h, hsv_s y hsv_v son un buen punto de partida.
  • Si el punto de vista de la cámara es consistente y no cambiará una vez que el modelo esté desplegado, probablemente puedas omitir transformaciones geométricas como rotation, translation, scale, shear o perspective. Sin embargo, si el ángulo de la cámara puede variar y necesitas que el modelo sea más robusto, es mejor mantener estos aumentos.
  • Utiliza el aumento mosaic solo si es aceptable tener objetos parcialmente ocluidos o múltiples objetos por imagen y esto no cambia el valor de la etiqueta. Alternativamente, puedes mantener mosaic activo pero aumentar el valor de close_mosaic para deshabilitarlo antes en el proceso de entrenamiento.

En resumen: mantenlo simple. Empieza con un conjunto pequeño de aumentos y añade más gradualmente según sea necesario. El objetivo es mejorar la generalización y robustez del modelo, no complicar innecesariamente el proceso de entrenamiento. Además, asegúrate de que los aumentos que apliques reflejen la misma distribución de datos que encontrará tu modelo en producción.

Al comenzar un entrenamiento, veo una referencia albumentations: Blur[...]. ¿Significa eso que Ultralytics YOLO ejecuta un aumento adicional como el desenfoque?

Si el paquete albumentations está instalado, Ultralytics aplica automáticamente un conjunto de aumentos de imagen extra utilizando dicho paquete. Estos aumentos se gestionan internamente y no requieren configuración adicional.

Puedes encontrar la lista completa de transformaciones aplicadas en nuestra documentación técnica, así como en nuestra guía de integración de Albumentations. Ten en cuenta que solo están activos los aumentos con una probabilidad p superior a 0. Estos se aplican deliberadamente a bajas frecuencias para imitar artefactos visuales del mundo real, como efectos de desenfoque o escala de grises.

También puedes proporcionar tus propias transformaciones personalizadas de Albumentations usando la API de Python. Consulta la sección Funciones de aumento avanzadas para obtener más detalles.

Al comenzar un entrenamiento, no veo ninguna referencia a albumentations. ¿Por qué?

Comprueba si el paquete albumentations está instalado. Si no es así, puedes instalarlo ejecutando pip install albumentations. Una vez instalado, el paquete debería ser detectado y utilizado automáticamente por Ultralytics.

¿Cómo personalizo mis aumentos?

Puedes personalizar los aumentos creando una clase de dataset y un entrenador personalizados. Por ejemplo, puedes reemplazar los aumentos de clasificación predeterminados de Ultralytics con torchvision.transforms.Resize de PyTorch u otras transformaciones. Consulta el ejemplo de entrenamiento personalizado en la documentación de clasificación para obtener detalles de implementación.

Comentarios