Ultralytics YOLO27:

Aumento de datos con 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 amplía artificialmente tu conjunto de datos de entrenamiento aplicando diversas transformaciones a imágenes existentes. Al entrenar modelos de aprendizaje profundo como Ultralytics YOLO, el aumento de datos ayuda a mejorar la robustez del modelo, reduce el sobreajuste y mejora la generalización a situaciones 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 varias funciones fundamentales al entrenar modelos de visión artificial:

  • Conjunto de datos ampliado: Al crear variaciones de imágenes existentes, puedes aumentar eficazmente el tamaño de tu conjunto de datos de entrenamiento sin recopilar datos nuevos.
  • Mejor generalización: Los modelos aprenden a reconocer objetos en diversas condiciones, lo que los hace más robustos en aplicaciones del mundo real.
  • Menor 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 un 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 con objetivos específicos y distintas contribuciones al rendimiento del modelo. En esta guía se exploran las siguientes opciones de aumento para ayudarte a entender cuándo y cómo utilizarlas eficazmente en tus proyectos.

Configuraciones de ejemplo#

Puedes personalizar cada parámetro mediante la API de Python, la interfaz de línea de comandos (CLI) o un archivo de configuración. A continuación se muestran 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="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)

# Training with every configurable augmentation disabled (disabled values omitted for clarity)
model.train(
    data="coco8.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="coco8.yaml", epochs=100, augmentations=custom_transforms)
Poner a cero los argumentos de aumento no desactiva Albumentations

Las transformaciones enumeradas en esta página son las que controlas mediante los argumentos de entrenamiento. Ultralytics también aplica un pequeño conjunto de Albumentations —desenfoque, desenfoque de mediana, escala de grises y CLAHE, cada uno con p=0.01— siempre que el paquete albumentations esté instalado, y ningún argumento de default.yaml lo desactiva. Desinstala el paquete para eliminarlo o pasa tu propia lista a augmentations para sustituirla.

Uso de un archivo de configuración#

Puedes definir todos los parámetros de entrenamiento, incluidos los aumentos, en un archivo de configuración YAML (por ejemplo, train_custom.yaml). El parámetro mode solo es necesario cuando utilizas la CLI. Este nuevo archivo YAML sustituirá al 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

A continuación, 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 del tono (hsv_h)#

  • Rango: 0.0 - 1.0
  • Predeterminado: 0.015
  • Uso: Desplaza los colores de la imagen conservando 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 dentro del intervalo -0.3 a 0.3. Para valores superiores a 0.5, el desplazamiento del tono da la vuelta a la rueda de color; por eso los aumentos tienen el mismo aspecto entre 0.5 y -0.5.
  • Objetivo: Es especialmente útil en situaciones de exterior, donde las condiciones de iluminación pueden afectar drásticamente al aspecto de los objetos. Por ejemplo, un plátano puede parecer más amarillo bajo una luz solar intensa, 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 la saturación (hsv_s)#

  • Rango: 0.0 - 1.0
  • Predeterminado: 0.7
  • Uso: Modifica la intensidad de los colores de 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 dentro del intervalo -0.7 a 0.7.
  • Objetivo: Ayuda a los modelos a gestionar distintas condiciones meteorológicas y configuraciones de cámara. Por ejemplo, una señal de tráfico roja puede verse muy intensa 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 del 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 dentro del intervalo -0.4 a 0.4.
  • Objetivo: Es esencial para entrenar modelos que deben funcionar en distintas condiciones de iluminación. Por ejemplo, una manzana roja puede verse 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: Gira las 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 dentro del intervalo -10.0 a 10.0.
  • Objetivo: Es crucial para aplicaciones en las que los objetos pueden aparecer con distintas orientaciones. Por ejemplo, en imágenes aéreas tomadas por drones, los vehículos pueden estar orientados en cualquier dirección, por lo que los modelos deben reconocer los 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 una fracción aleatoria de su tamaño. El hiperparámetro translate define la magnitud del desplazamiento, y el ajuste final se elige aleatoriamente dos veces (una por cada eje) dentro del rango -translate y translate. Por ejemplo, con translate=0.5, la traslación se selecciona aleatoriamente dentro del intervalo -0.5 a 0.5 en el eje x, y se selecciona otro valor aleatorio independiente dentro del mismo rango en el eje y.
  • Objetivo: Ayuda a los modelos a aprender a detectar objetos parcialmente visibles y mejora su robustez frente a la posición de los objetos. Por ejemplo, en aplicaciones de evaluación de daños en vehículos, las piezas pueden aparecer completa o parcialmente en el encuadre dependiendo de la posición y la distancia del fotógrafo; el aumento de traslación enseñará al modelo a reconocer estas características independientemente de su integridad o posición.
  • Implementación de Ultralytics: RandomPerspective
  • Nota: Para simplificar, las traslaciones aplicadas a continuación son las mismas cada vez para los ejes x y 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 como valor float, o una tupla (min, max) explícita
  • Predeterminado: 0.5
  • Uso: Cambia el tamaño de las imágenes mediante un factor aleatorio dentro del rango especificado. Como valor float, el hiperparámetro scale define la ganancia de escala, y el factor final se elige aleatoriamente entre 1-scale y 1+scale. Por ejemplo, con scale=0.5, la escala se selecciona aleatoriamente dentro del intervalo 0.5 a 1.5. Como tupla, scale establece directamente ese rango, por lo que scale=(0.5, 2.0) toma muestras del factor entre 0.5 y 2.0.
  • Objetivo: Permite a los modelos gestionar objetos situados a distintas distancias y con diferentes tamaños. Por ejemplo, en aplicaciones de conducción autónoma, los vehículos pueden aparecer a diversas distancias de la cámara, por lo que el modelo debe reconocerlos independientemente de su tamaño.
  • Implementación de Ultralytics: RandomPerspective
  • Nota:
    • El valor -1.0 no se muestra porque haría desaparecer la imagen, mientras que 1.0 simplemente produce un zoom de 2x.
    • Los valores mostrados en la tabla siguiente son las diferencias de escala resultantes, no los valores que pasas al hiperparámetro scale.
    • La forma float se valida dentro del rango 0.0 - 1.0, y un valor fuera de él genera un ValueError. Para tomar muestras de un factor superior a un zoom de 2x, utiliza en su lugar la forma de tupla (min, max).
    • La forma de tupla solo se aplica a las tareas geométricas. El entrenamiento de clasificación obtiene su propio rango de recorte a partir del valor float (de 1.0 - scale a 1.0), por lo que pasar una tupla en ese caso genera un TypeError.
-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 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 dentro del intervalo -10 a 10 en el eje x, y se selecciona otro valor aleatorio independiente dentro del mismo rango en el eje y.
  • Objetivo: Ayuda a los modelos a generalizar frente a variaciones en los ángulos de visión causadas por pequeñas inclinaciones o perspectivas oblicuas. Por ejemplo, en la supervisión del tráfico, objetos como coches y señales de tráfico pueden aparecer inclinados debido a la colocación no perpendicular de las cámaras. Aplicar el aumento de cizallamiento garantiza que el modelo aprenda a reconocer objetos a pesar de estas 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 y aumentarlos 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 cambiando sus ángulos mientras mantiene paralelos los lados opuestos.
-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 al observarlos desde distintas 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 dentro del intervalo -0.001 a 0.001 en el eje x, y se selecciona otro valor aleatorio independiente dentro del mismo rango en el eje y.
  • Objetivo: El aumento de perspectiva es crucial para gestionar cambios extremos del punto de vista, especialmente en situaciones en las que los objetos aparecen escorzados o distorsionados debido a cambios de perspectiva. Por ejemplo, en la detección de objetos basada en drones, los edificios, las carreteras y los vehículos pueden aparecer estirados o comprimidos según la inclinación y la altitud del dron. Al aplicar transformaciones de perspectiva, los modelos aprenden a reconocer objetos a pesar de estas distorsiones inducidas por la perspectiva, lo que mejora su robustez en implementaciones del mundo real.
  • Implementación de Ultralytics: RandomPerspective
-0.001-0.00050.00.00050.001
Perspective -0.001 transformationPerspective -0.0005 transformationOriginal image without augmentationPerspective 0.0005 transformationPerspective 0.001 transformation

Volteo vertical (flipud)#

  • Rango: 0.0 - 1.0
  • Predeterminado: 0
  • Uso: Realiza un volteo vertical invirtiendo la imagen a lo largo del eje y. Esta transformación refleja toda la imagen boca abajo, pero conserva todas las relaciones espaciales entre los objetos. El hiperparámetro flipud define la probabilidad de aplicar la transformación: un valor de flipud=1.0 garantiza que todas las imágenes se volteen, mientras que un valor de flipud=0.0 desactiva por completo la transformación. Por ejemplo, con flipud=0.5, cada imagen tiene un 50 % de probabilidad de voltearse boca abajo.
  • Objetivo: Es útil en situaciones en las que los objetos pueden aparecer boca abajo. Por ejemplo, en sistemas de visión robótica, los objetos de las cintas transportadoras o de los brazos robóticos pueden recogerse y colocarse con distintas orientaciones. El volteo vertical ayuda al modelo a reconocer objetos independientemente de su orientación de arriba abajo.
  • Implementación de Ultralytics: RandomFlip
flipud desactivadoflipud activado
Original image without augmentationVertical flip augmentation enabled

Volteo horizontal (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 coherencia espacial, lo que ayuda al modelo a generalizar frente a objetos que aparecen en orientaciones reflejadas. El hiperparámetro fliplr define la probabilidad de aplicar la transformación: un valor de fliplr=1.0 garantiza que todas las imágenes se volteen, mientras que un valor de fliplr=0.0 desactiva por completo la transformación. Por ejemplo, con fliplr=0.5, cada imagen tiene un 50 % de probabilidad de voltearse de izquierda a derecha.
  • Objetivo: El volteo horizontal se utiliza ampliamente en detección de objetos, estimación de poses y reconocimiento facial para mejorar la robustez frente a variaciones entre izquierda y derecha. Por ejemplo, en la conducción autónoma, los vehículos y los 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
Original image without augmentationHorizontal flip augmentation enabled

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 que se representan los colores. El hiperparámetro bgr define la probabilidad de aplicar la transformación: bgr=1.0 garantiza que todas las imágenes sufran el intercambio de canales y bgr=0.0 lo desactiva. Por ejemplo, con bgr=0.5, cada imagen tiene un 50 % de probabilidad de convertirse de RGB a BGR.
  • Objetivo: Aumenta la robustez frente a distintos órdenes de los canales de color. Por ejemplo, al entrenar modelos que deben funcionar con diversos sistemas de cámara y bibliotecas de imágenes en los que los formatos RGB y BGR pueden utilizarse de forma incoherente, o al implementar modelos en entornos donde el formato de color de entrada puede diferir de los datos de entrenamiento.
  • Implementación de Ultralytics: Format
bgr desactivadobgr activado
Original image without augmentationBGR channel swap augmentation

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: mosaic=1.0 garantiza que se combinen todas las imágenes y mosaic=0.0 desactiva la transformación. Por ejemplo, con mosaic=0.5, cada imagen tiene un 50 % de probabilidad de combinarse con otras tres imágenes.
  • Objetivo: Es muy eficaz para mejorar la detección de objetos pequeños y la comprensión del contexto. Por ejemplo, en proyectos de conservación de la fauna, donde los animales pueden aparecer a diversas distancias y escalas, el aumento de mosaico ayuda al modelo a aprender a reconocer la misma especie con distintos tamaños, oclusiones parciales y contextos ambientales, creando artificialmente muestras de entrenamiento variadas a partir de datos limitados.
  • Implementación de Ultralytics: Mosaic
  • Nota:
    • Aunque el aumento mosaic hace que el modelo sea más robusto, también puede dificultar el proceso de entrenamiento.
    • El aumento mosaic puede desactivarse cerca del final del entrenamiento estableciendo close_mosaic en el número de épocas que deben quedar para completar el entrenamiento cuando deba desactivarse. Por ejemplo, si epochs se establece en 200 y close_mosaic en 20, el aumento mosaic se desactivará después de 180 épocas. Si close_mosaic se establece en 0, el aumento mosaic estará activado durante todo el proceso de entrenamiento.
    • Cerrar el mosaico también desactiva copy_paste, mixup y cutmix en la misma época. Los cuatro se desactivan conjuntamente, por lo que las épocas finales se entrenan sin ellos, mientras que todos los demás aumentos —las transformaciones geométricas, HSV, los volteos y Albumentations— siguen ejecutándose. Ten en cuenta que copy_paste, en su modo predeterminado flip, funciona dentro de una sola imagen en lugar de combinar varias.
    • El centro del mosaico generado se determina mediante valores aleatorios y puede estar dentro o fuera de la imagen.
    • La implementación actual del aumento mosaic combina la imagen actual con otras 3, extraídas de un búfer de imágenes cargadas recientemente o de cualquier parte del conjunto de datos cuando cache='ram'. En ambos casos, se seleccionan con reemplazo, por lo que la misma imagen puede aparecer más de una vez en un solo mosaico.
mosaic desactivadomosaic activado
Original image without augmentationMosaic 4-image augmentation enabled

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: mixup=1.0 garantiza que se mezclen todas las imágenes y mixup=0.0 desactiva la transformación. Por ejemplo, con mixup=0.5, cada imagen tiene un 50 % de probabilidad de mezclarse con otra imagen.
  • Objetivo: Mejora la robustez del modelo y reduce el sobreajuste. Por ejemplo, en sistemas de reconocimiento de productos para comercios, mixup ayuda al modelo a aprender características más robustas al mezclar imágenes de distintos productos, enseñándole a identificar artículos aunque estén parcialmente visibles u ocultos por otros productos en estanterías abarrotadas.
  • Implementación de Ultralytics: Mixup
  • Nota:
    • La proporción mixup es un valor aleatorio elegido de una distribución beta np.random.beta(32.0, 32.0), lo que significa que cada imagen contribuye aproximadamente en un 50 %, con ligeras variaciones.
Primera imagen, mixup desactivadoSegunda imagen, mixup desactivadomixup activado
First image for MixUp blendingSecond image for MixUp blendingMixUp blending augmentation enabled

CutMix (cutmix)#

  • Rango: 0.0 - 1.0
  • Predeterminado: 0
  • Uso: Corta una región rectangular de una imagen y la pega sobre otra con una probabilidad determinada. El hiperparámetro cutmix define la probabilidad de aplicar la transformación: cutmix=1.0 garantiza que todas las imágenes sufran esta transformación y cutmix=0.0 la desactiva por completo. Por ejemplo, con cutmix=0.5, cada imagen tiene un 50 % de probabilidad de que una región se sustituya por un fragmento de otra imagen.
  • Objetivo: Mejora el rendimiento del modelo al crear situaciones de oclusión realistas y conservar 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 aunque estén parcialmente ocultos 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 en cada aplicación.
    • A diferencia de mixup, que mezcla globalmente los valores de los píxeles, cutmix conserva las intensidades de píxel originales dentro de las regiones cortadas, preservando las características locales.
    • Una región solo se pega en la imagen de destino si no se solapa con ningún cuadro delimitador existente. Además, solo se conservan los cuadros delimitadores que mantienen suficiente parte de su área original dentro de la región pegada.
    • Este umbral mínimo del área del cuadro delimitador no se puede cambiar con la implementación actual. Es 0.1 (10 %) para las etiquetas de detección y 0.01 (1 %) cuando las etiquetas contienen segmentos.
Primera imagen, cutmix desactivadoSegunda imagen, cutmix desactivadocutmix activado
First image for CutMixSecond image for CutMixCutMix augmentation enabled

Aumentos de copiar y pegar#

Copy-Paste (copy_paste)#

  • Rango: 0.0 - 1.0
  • Predeterminado: 0
  • Uso: Requiere etiquetas poligonales, por lo que se aplica a tareas de segmentación y OBB; este aumento copia objetos dentro de una imagen o entre imágenes, controlado por copy_paste_mode. En el modo flip, copy_paste es la fracción de objetos aptos que se copian: una imagen con seis objetos aptos obtiene tres copias con copy_paste=0.5. En el modo mixup, el mismo valor también controla la probabilidad de que se ejecute copy-paste. copy_paste=0.0 desactiva la transformación.
  • Objetivo: Es especialmente útil para tareas de segmentación de instancias y clases de objetos poco frecuentes. Por ejemplo, en la detección de defectos industriales, donde ciertos tipos de defectos aparecen con poca frecuencia, el aumento copy-paste puede incrementar artificialmente la aparición de estos defectos raros copiándolos de una imagen a otra, lo que ayuda al modelo a aprender mejor estos casos infrarrepresentados sin necesidad de muestras defectuosas adicionales.
  • Implementación de Ultralytics: CopyPaste
  • Nota:
    • Como se muestra en el vídeo siguiente, la ampliación copy_paste se puede utilizar para copiar objetos de una imagen a otra.
    • Una vez seleccionado un objeto para copiarlo, su IoA se calcula con respecto a todos los objetos que ya están presentes en la imagen de destino, independientemente de copy_paste_mode. El objeto solo se pega si todos los valores de IoA son inferiores a 0.3 (30 %); no se pega si algún valor de IoA es 0.3 o superior.
    • El umbral de IoA no se puede cambiar con la implementación actual y está establecido en 0.3 de forma predeterminada.
copy_paste desactivadocopy_paste activado con copy_paste_mode=flipVisualiza el proceso de copy_paste
Original image without augmentationCopy-paste augmentation enabled

Modo de copiar y pegar (copy_paste_mode)#

  • Opciones: 'flip', 'mixup'
  • Predeterminado: 'flip'
  • Uso: Determina el método utilizado para la ampliación de copiar y pegar. Si se establece en 'flip', los objetos proceden de la misma imagen, mientras que 'mixup' permite copiar objetos de imágenes diferentes.
  • Finalidad: Permite flexibilizar la forma en que los objetos copiados se integran en las imágenes de destino.
  • Implementación de Ultralytics: CopyPaste
  • Nota:
    • El principio de IoA es el mismo para ambas opciones de copy_paste_mode, pero la forma de copiar los objetos es diferente.
    • Según el tamaño de la imagen, a veces los objetos pueden copiarse parcialmente o quedar completamente fuera del encuadre.
    • Según la calidad de las anotaciones de los polígonos, los objetos copiados pueden presentar ligeras variaciones de forma con respecto a los originales.
Imagen de referenciaImagen elegida para copy_pastecopy_paste activado con copy_paste_mode=mixup
Second image for MixUp blendingOriginal image without augmentationCopy-paste with MixUp mode

Ampliaciones específicas para clasificación#

Ampliación automática (auto_augment)#

  • Opciones: 'randaugment', 'autoaugment', 'augmix', None
  • Predeterminado: 'randaugment'
  • Uso: Aplica políticas de ampliación automatizadas para la clasificación. La opción 'randaugment' utiliza RandAugment, 'autoaugment' utiliza AutoAugment y 'augmix' utiliza AugMix. Establecer None desactiva la ampliación automatizada.
  • Finalidad: Optimiza automáticamente las estrategias de ampliación para tareas de clasificación. Las diferencias son las siguientes:
    • AutoAugment: Este modo aplica políticas de ampliación predefinidas aprendidas de conjuntos de datos como ImageNet, CIFAR10 y SVHN. Los usuarios pueden seleccionar estas políticas existentes, pero no pueden entrenar otras nuevas dentro de Torchvision. Para descubrir estrategias de ampliación óptimas para conjuntos de datos específicos, serían necesarias bibliotecas externas o implementaciones personalizadas. Consulta el artículo sobre AutoAugment.
    • RandAugment: Aplica una selección aleatoria de transformaciones con una magnitud uniforme. Este enfoque reduce la necesidad de una fase de búsqueda exhaustiva, lo que lo hace más eficiente desde el punto de vista computacional y, al mismo tiempo, mejora la robustez del modelo. Consulta el artículo sobre RandAugment.
    • AugMix: AugMix es un método de ampliación de datos que mejora la robustez del modelo mediante la creación de variaciones de imagen diversas a través de combinaciones aleatorias de transformaciones sencillas. Consulta el artículo sobre 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 ampliación.
    • Puedes consultar este artículo, que compara los tres métodos en detalle.

Borrado aleatorio (erasing)#

  • Rango: 0.0 - 1.0
  • 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: erasing=1.0 borra una región en cada imagen y erasing=0.0 desactiva la transformación. Por ejemplo, con erasing=0.5, cada imagen tiene un 50 % de probabilidades de que se borre una parte.
  • Finalidad: Ayuda a los modelos a aprender características robustas y evita que dependan demasiado de regiones concretas de la imagen. Por ejemplo, en los sistemas de reconocimiento facial, el borrado aleatorio ayuda a que los modelos sean más robustos frente a oclusiones parciales, como gafas de sol, mascarillas u otros objetos que puedan cubrir parcialmente los rasgos faciales. Esto mejora el rendimiento en el mundo real al obligar al modelo a identificar a las personas mediante múltiples características faciales, en lugar de depender únicamente de rasgos distintivos que podrían quedar ocultos.
  • Implementación de Ultralytics: classify_augmentations()
  • Nota:
    • La ampliación erasing incluye los hiperparámetros 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.
erasing desactivadoerasing activado (ejemplo 1)erasing activado (ejemplo 2)erasing activado (ejemplo 3)
Original image without augmentationRandom erasing example 1Random erasing example 2Random erasing example 3

Funciones avanzadas de ampliación#

Transformaciones personalizadas de Albumentations (augmentations)#

  • Tipo: list de transformaciones de Albumentations
  • Predeterminado: None
  • Uso: Permite proporcionar transformaciones personalizadas de Albumentations para la ampliación de datos mediante 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.
  • Finalidad: Proporciona un control preciso sobre las estrategias de ampliación de datos aprovechando la extensa biblioteca de transformaciones de Albumentations. Resulta especialmente útil cuando necesitas ampliaciones especializadas que van más allá de las opciones integradas de YOLO, como deformaciones elásticas y distorsiones de cuadrícula para imágenes médicas, transformaciones ajustadas a perspectivas aéreas y de satélite, cambios de ruido y brillo que simulan condiciones de poca luz o variaciones de textura similares a defectos para la inspección industrial.
  • Implementación de Ultralytics: Albumentations
  • Nota:
    • Para crear los objetos de transformación se necesita la API de Python. Ultralytics los serializa con A.to_dict() al guardar un checkpoint, de modo que una lista ya serializada puede recorrer el proceso de ida y vuelta mediante un archivo de configuración YAML o la CLI, lo que permite que resume los restaure.
    • Las transformaciones personalizadas sustituyen por completo al conjunto predeterminado de Albumentations. Todas las ampliaciones configuradas en otras partes de esta página —mosaic, hsv_h, degrees y el resto— permanecen activas y se aplican de forma independiente.
    • Las transformaciones espaciales que modifican la geometría de la imagen, incluidas las anidadas en A.OneOf o A.Compose, mueven las cajas delimitadoras, los polígonos, los puntos clave y las máscaras de profundidad o semánticas junto con la imagen; A.RandomGridShuffle no puede conservar la topología de los polígonos o de los puntos clave y genera un error en las muestras de segmentación, estimación de poses y OBB.
    • Albumentations ofrece más de 70 transformaciones; la documentación de Albumentations las enumera todas. Añadir muchas transformaciones, o transformaciones costosas desde el punto de vista computacional, ralentiza el entrenamiento, así que empieza con un conjunto pequeño y controla el tiempo por época.
    • Se aplica a las tareas detect, segment, semantic, depth, pose y obb. La clasificación queda excluida, ya que utiliza una canalización de ampliación independiente.

Los ejemplos siguientes requieren Albumentations 1.4.22 o una versión posterior y, por tanto, Python 3.9 o una versión posterior.

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(std_range=(0.0124, 0.0277), 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,
)

Preguntas frecuentes#

  • Elegir las ampliaciones adecuadas depende de tu caso de uso específico y de tu conjunto de datos. Estas son algunas directrices generales que pueden ayudarte a decidir:

    • En la mayoría de los casos, las ligeras variaciones de color y brillo son beneficiosas. Los valores predeterminados de hsv_h, hsv_s y hsv_v son un buen punto de partida.
    • Si el punto de vista de la cámara es constante y no cambiará una vez implementado el modelo, probablemente puedas prescindir de 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 estas ampliaciones.
    • Utiliza la ampliación mosaic solo si es aceptable que haya objetos parcialmente ocluidos o varios objetos por imagen, y esto no cambia el valor de la etiqueta. Como alternativa, puedes mantener mosaic activo, pero aumentar el valor de close_mosaic para desactivarlo antes en el proceso de entrenamiento.

    En resumen: no lo compliques. Empieza con un conjunto pequeño de ampliaciones y añade más gradualmente según sea necesario. El objetivo es mejorar la capacidad de generalización y la robustez del modelo, no complicar en exceso el proceso de entrenamiento. Además, asegúrate de que las ampliaciones que aplicas reflejen la misma distribución de datos que el modelo encontrará en producción.

  • Si el paquete albumentations está instalado, Ultralytics aplica automáticamente un conjunto de ampliaciones de imagen adicionales mediante este paquete. Estas ampliaciones se gestionan internamente y no requieren configuración adicional.

    Puedes consultar 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 activas las ampliaciones cuya probabilidad p sea superior a 0. Se aplican deliberadamente con frecuencias bajas 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 mediante la API de Python. Consulta la sección Funciones avanzadas de ampliación para obtener más información.

  • Comprueba si el paquete albumentations está instalado. Si no lo está, instálalo:

    pip install albumentations

    Una vez instalado, Ultralytics debería detectar y utilizar automáticamente el paquete.

  • Puedes personalizar las ampliaciones creando una clase de conjunto de datos y un entrenador personalizados. Por ejemplo, puedes sustituir las ampliaciones de clasificación predeterminadas de Ultralytics por torchvision.transforms.Resize de PyTorch u otras transformaciones. Consulta el ejemplo de entrenamiento personalizado de la documentación de clasificación para obtener información sobre la implementación.

Comentarios