YOLO Vision 2026:

Aumento de datos usando Ultralytics YOLO#

YOLO data augmentation examples showing original and augmented images for training

Introducción#

La ampliación de datos es una técnica fundamental en visión artificial que amplía artificialmente tu conjunto de datos de entrenamiento aplicando varias transformaciones a las imágenes existentes. Al entrenar modelos de aprendizaje profundo como Ultralytics YOLO, la ampliación de datos ayuda a mejorar la solidez del modelo, reduce el sobreajuste y mejora la generalización a 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 en el entrenamiento de 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.
  • Generalización mejorada: Los modelos aprenden a reconocer objetos en diversas condiciones, volviéndose 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 una ampliación adecuada suelen lograr una mejor precisión en los conjuntos de validación y prueba.

La implementación de Ultralytics YOLO ofrece un conjunto completo de técnicas de aumento, cada una con propósitos específicos y contribuyendo al rendimiento del modelo de diferentes maneras. Esta guía explora los ajustes de aumento a continuación, ayudándote a entender cuándo y cómo utilizarlos de manera eficaz en tus proyectos.

Ejemplos de configuraciones#

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, verás ejemplos de cómo configurar el aumento de datos en 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 mediano, escala de grises y CLAHE, cada uno en p=0.01 — siempre que el paquete albumentations esté instalado, y ningún argumento en default.yaml lo desactiva. Desinstala el paquete para eliminarlo, o pasa tu propia lista a augmentations para reemplazarlo.

Uso de un archivo de configuración#

Puedes definir todos los parámetros de entrenamiento, incluidas las ampliaciones, en un archivo de configuración YAML (por ejemplo, train_custom.yaml). El parámetro mode solo es necesario cuando se utiliza la CLI. Este nuevo archivo YAML anulará 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: Cambia los colores de la imagen mientras preserva sus relaciones. El hiperparámetro hsv_h define la magnitud del cambio, y el ajuste final se elige de forma aleatoria entre -hsv_h y hsv_h. Por ejemplo, con hsv_h=0.3, el cambio se selecciona de forma aleatoria entre -0.3 y 0.3. Para valores superiores a 0.5, el cambio de tono da la vuelta a la rueda de colores, por lo que las ampliaciones se ven iguales entre 0.5 y -0.5.
  • Propósito: Especialmente ú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 puede verse más amarillo bajo la 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 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 cambio, y el ajuste final se elige de forma aleatoria entre -hsv_s y hsv_s. Por ejemplo, con hsv_s=0.7, la intensidad se selecciona de forma aleatoria 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 puede verse muy viva en un día soleado, pero verse apagada y desteñida 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 cambio, y el ajuste final se elige de forma aleatoria entre -hsv_v y hsv_v. Por ejemplo, con hsv_v=0.4, la intensidad se selecciona de forma aleatoria 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 verse brillante bajo la luz del 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 de forma aleatoria entre -degrees y degrees. Por ejemplo, con degrees=10.0, la rotación se selecciona de forma aleatoria 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 de forma aleatoria dos veces (una para cada eje) dentro del rango -translate y translate. Por ejemplo, con translate=0.5, la traslación se selecciona de forma aleatoria entre -0.5 y 0.5 en el eje x, y se selecciona otro valor aleatorio independiente dentro del mismo rango en el eje y.
  • Propósito: Ayuda a los modelos a aprender a detectar objetos parcialmente visibles y mejora la robustez ante la posición del objeto. Por ejemplo, en aplicaciones de evaluación de daños en vehículos, las piezas del coche pueden aparecer completa o parcialmente en el encuadre según la posición y 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: Por simplicidad, las traslaciones aplicadas a continuación son las mismas en cada caso 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 fotograma.
-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 flotante, o una tupla explícita (min, max)
  • Predeterminado: 0.5
  • Uso: Redimensiona las imágenes mediante un factor aleatorio dentro del rango especificado. Como flotante, el hiperparámetro scale define la ganancia de escala, seleccionándose el factor final de forma aleatoria entre 1-scale y 1+scale. Por ejemplo, con scale=0.5, la escala se selecciona de forma aleatoria dentro de 0.5 a 1.5. Como tupla, scale establece ese rango directamente, por lo que scale=(0.5, 2.0) muestrea el factor entre 0.5 y 2.0.
  • 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, lo que requiere 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 da como resultado un zoom de 2x.
    • Los valores mostrados en la tabla siguiente son los deltas de escala realizados, no los valores que pasas al hiperparámetro scale.
    • La forma de flotante se valida al rango 0.0 - 1.0, y un valor fuera de él genera un ValueError. Para muestrear un factor más allá de un zoom de 2x, pasa la forma de tupla (min, max) en su lugar.
    • La forma de tupla se aplica únicamente a las tareas geométricas. El entrenamiento de clasificación deriva su propio rango de recorte a partir del flotante (1.0 - scale a 1.0), por lo que pasar una tupla allí 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

Cizalladura (shear)#

  • Rango: -180 a +180
  • Predeterminado: 0
  • Uso: Introduce una transformación geométrica que sesga la imagen tanto a lo largo del eje x como del eje y, desplazando eficazmente partes de la imagen en una dirección mientras mantiene las líneas paralelas. El hiperparámetro shear define el ángulo de cizalladura, y el ajuste final se elige de forma aleatoria entre -shear y shear. Por ejemplo, con shear=10.0, la cizalladura se selecciona de forma aleatoria entre -10 y 10 en el eje x, y se selecciona otro valor aleatorio independiente dentro del mismo rango en 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 el control de tráfico, objetos como coches y señales de tráfico pueden aparecer inclinados debido a colocaciones de cámara no perpendiculares. Aplicar el aumento de cizallamiento asegura que el modelo aprenda a reconocer objetos a pesar de tales distorsiones sesgadas.
  • 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 manteniendo 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 tanto a lo largo del eje x como del eje 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 de forma aleatoria entre -perspective y perspective. Por ejemplo, con perspective=0.001, la perspectiva se selecciona de forma aleatoria 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 basada en drones, los edificios, carreteras y vehículos pueden aparecer estirados o comprimidos dependiendo de 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 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 y un valor de flipud=0.0 desactiva la transformación por completo. Por ejemplo, con flipud=0.5, cada imagen tiene un 50 % de probabilidades de ser volteada boca abajo.
  • 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 recogerse y colocarse en varias orientaciones. El volteo vertical ayuda al modelo a reconocer objetos independientemente de su posició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 a que el modelo se generalice 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 y un valor de fliplr=0.0 desactiva la transformación por completo. Por ejemplo, con fliplr=0.5, cada imagen tiene un 50 % de probabilidades de ser volteada de izquierda a derecha.
  • Propósito: El volteo horizontal se utiliza 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
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 experimenten el intercambio de canales y bgr=0.0 lo desactiva. Por ejemplo, con bgr=0.5, cada imagen tiene un 50 % de probabilidades de ser convertida de RGB a BGR.
  • Propósito: Aumenta la robustez ante diferentes ordenamientos de canales de color. Por ejemplo, al entrenar modelos que deben funcionar en varios sistemas de cámaras y bibliotecas de imágenes donde los formatos RGB y BGR pueden usarse de forma inconsistente, o al implementar 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
Original image without augmentationBGR channel swap augmentation

Mosaic (mosaic)#

  • Rango: 0.0 - 1.0
  • Predeterminado: 1
  • Uso: Combina cuatro imágenes de entrenamiento en una sola. El hiperparámetro mosaic define la probabilidad de aplicar la transformación; mosaic=1.0 garantiza que todas las imágenes se combinen y mosaic=0.0 desactiva la transformación. Por ejemplo, con mosaic=0.5, cada imagen tiene un 50 % de probabilidades de combinarse 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 la 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 en 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 ampliación mosaic hace que el modelo sea más robusto, también puede hacer que el proceso de entrenamiento sea más difícil.
    • La ampliación mosaic se puede desactivar cerca del final del entrenamiento configurando close_mosaic con el número de épocas antes de finalizar en el que debe apagarse. Por ejemplo, si epochs se establece en 200 y close_mosaic se establece en 20, la ampliación mosaic se desactivará después de 180 épocas. Si close_mosaic se establece en 0, la ampliación mosaic se habilitará 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 juntos, por lo que las épocas finales se entrenan sin ellos mientras cualquier otro aumento —las transformaciones geométricas, HSV, volteos y Albumentations— sigue funcionando. 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 usando 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'. De cualquier manera, se muestrean 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 dada. El hiperparámetro mixup define la probabilidad de aplicar la transformación; mixup=1.0 garantiza que todas las imágenes se mezclen y mixup=0.0 desactiva la transformación. Por ejemplo, con mixup=0.5, cada imagen tiene un 50 % de probabilidades 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 mediante la mezcla de imágenes de diferentes productos, enseñándole a identificar artículos incluso cuando están parcialmente visibles u oscurecidos por otros productos en estantes de tiendas concurridos.
  • Implementación de Ultralytics: Mixup
  • Nota:
    • La proporción 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 aporta aproximadamente 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: Recorta una región rectangular de una imagen y la pega en otra imagen con una probabilidad dada. El hiperparámetro cutmix define la probabilidad de aplicar la transformación; cutmix=1.0 garantiza que todas las imágenes experimenten esta transformación y cutmix=0.0 la desactiva por completo. Por ejemplo, con cutmix=0.5, cada imagen tiene un 50 % de probabilidades de que se le sustituya una región por un parche de otra imagen.
  • Propósito: Mejora el rendimiento del modelo al crear 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 de corte se determinan aleatoriamente para cada aplicación.
    • A diferencia de mixup, que mezcla los valores de los píxeles a nivel global, cutmix mantiene las intensidades de los píxeles originales dentro de las regiones recortadas, conservando las características locales.
    • Una región se pega en la imagen de destino solo si no se superpone con ninguna caja delimitadora existente. Además, solo se conservan las cajas delimitadoras que retienen suficiente de su área original dentro de la región pegada.
    • Este umbral mínimo de área de la caja delimitadora no se puede cambiar con la implementación actual. Es 0.1 (10 %) para las etiquetas de detección y 0.01 (1 %) una vez que 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 de polígono, por lo que se aplica a las tareas de segment y OBB; esta aportación copia objetos dentro o entre imágenes, controlado por copy_paste_mode. En el modo flip, copy_paste es la fracción de objetos elegibles copiados: una imagen con seis objetos elegibles obtiene tres copias con copy_paste=0.5. En el modo mixup, el mismo valor también controla la probabilidad de que se ejecute la acción de copiar y pegar. copy_paste=0.0 desactiva la transformación.
  • 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 de copiar y pegar puede aumentar artificialmente la aparición de estos defectos raros copiándolos de una imagen a otra, ayudando al modelo a aprender mejor estos casos poco representados sin necesidad de muestras defectuosas adicionales.
  • Implementación de Ultralytics: CopyPaste
  • Nota:
    • Como se muestra en el vídeo a continuación, el aumento copy_paste se puede utilizar para copiar objetos de una imagen a otra.
    • Una vez que se selecciona un objeto para copiarlo, se calcula su IoA frente a todos los objetos que ya están presentes en la imagen de destino, independientemente de copy_paste_mode. El objeto se pega solo si todos los valores de IoA están por debajo de 0.3 (30 %); no se pega si algún valor de IoA es igual o superior a 0.3.
    • 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
Original image without augmentationCopy-paste augmentation enabled

Modo Copy-Paste (copy_paste_mode)#

  • Opciones: 'flip', 'mixup'
  • Predeterminado: 'flip'
  • Uso: Determina el método utilizado para la ampliación copy-paste. Si se establece en 'flip', los objetos provienen de la misma imagen, mientras que 'mixup' permite copiar objetos de diferentes imágenes.
  • Propósito: Permite flexibilidad en cómo se integran los objetos copiados 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 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 de polígono, 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
Second image for MixUp blendingOriginal image without augmentationCopy-paste with MixUp mode

Aumentaciones específicas para clasificación#

Auto Augment (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. Establecerlo en None desactiva la ampliación automatizada.
  • Propósito: Optimiza estrategias de aumento automáticamente 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. Referencia al artículo de AutoAugment.
    • RandAugment: Aplica una selección aleatoria de transformaciones con magnitud uniforme. Este enfoque reduce la necesidad de una fase de búsqueda extensa, lo que lo hace más eficiente desde el punto de vista computacional sin dejar de mejorar la solidez del modelo. Referencia al artículo de RandAugment.
    • AugMix: AugMix es un método de ampliación de datos que mejora la solidez del modelo creando diversas variaciones de imagen mediante combinaciones aleatorias de transformaciones sencillas. Referencia al artículo de AugMix.
  • Implementación de Ultralytics: classify_augmentations()
  • Nota:
    • Esencialmente, 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 - 1.0
  • Predeterminado: 0.4
  • Uso: Borra aleatoriamente porciones de la imagen durante el entrenamiento de clasificación. El hiperparámetro erasing define la probabilidad de aplicar la transformación, con erasing=1.0 borrando una región en cada imagen y erasing=0.0 deshabilitando la transformación. Por ejemplo, con erasing=0.5, cada imagen tiene un 50 % de probabilidad de que se le borre una porción.
  • Propósito: Ayuda a los modelos a aprender características robustas y evita la dependencia excesiva de regiones específicas de la imagen. Por ejemplo, en sistemas de reconocimiento facial, el borrado aleatorio ayuda a los modelos a ser 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 al forzar 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:
    • La ampliación erasing incluye los hiperparámetros scale, ratio y value, los cuales 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

Características 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 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.
  • Propósito: Proporciona un control detallado sobre las estrategias de aumento de datos aprovechando la extensa biblioteca de transformaciones de Albumentations. Esto es especialmente útil cuando necesitas aumentos especializados 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 para 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 inspección industrial.
  • Implementación de Ultralytics: Albumentations
  • Nota:
    • La construcción de los objetos de transformación requiere la API de Python. Ultralytics los serializa con A.to_dict() al guardar un punto de control, por lo que una lista ya serializada pasa de ida y vuelta a través de un archivo de configuración YAML o la CLI, que es lo que permite que resume los restaure.
    • Las transformaciones personalizadas reemplazan por completo el conjunto predeterminado de Albumentations. Cada aumento configurado en otra parte de esta página —mosaic, hsv_h, degrees y el resto— permanece activo y se aplica de forma independiente.
    • Ten cuidado con las transformaciones espaciales que cambian la geometría de la imagen. Ultralytics ajusta las cajas delimitadoras automáticamente, pero algunas transformaciones complejas pueden requerir configuración adicional.
    • Albumentations ofrece más de 70 transformaciones; la documentación de Albumentations las enumera todas. Agregar muchas transformaciones, o algunas computacionalmente costosas, ralentiza el entrenamiento, así que comienza con un conjunto pequeño y observa 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 aumento independiente.

Los ejemplos siguientes necesitan Albumentations 1.4.22 o una versión más reciente, y por tanto Python 3.9 o una versión más reciente.

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,
)

FAQ#

  • Elegir los aumentos adecuados depende de tu caso de uso específico y de tu conjunto de datos. Aquí tienes algunas pautas generales para ayudarte a decidir:

    • En la mayoría de los casos, las ligeras variaciones de color y brillo son beneficiosas. Los valores predeterminados para hsv_h, hsv_s y hsv_v son un punto de partida sólido.
    • Si el punto de vista de la cámara es coherente y no va a 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 estas ampliaciones.
    • Utiliza la ampliación mosaic solo si tener objetos parcialmente ocluidos o múltiples objetos por imagen es aceptable y no cambia el valor de la etiqueta. Alternativamente, puedes mantener mosaic activo, pero aumentar el valor de close_mosaic para desactivarlo antes en el proceso de entrenamiento.

    En resumen: mantén las cosas simples. Comienza con un conjunto pequeño de aumentos y añade gradualmente más 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 tu modelo encontrará en producción.

  • Si el paquete albumentations está instalado, Ultralytics aplica automáticamente un conjunto de ampliaciones de imagen adicionales utilizándolo. Estas ampliaciones se gestionan internamente y no requieren ninguna 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 las ampliaciones con una probabilidad p mayor que 0 están activas. Estas se aplican deliberadamente a baja frecuencia para imitar artefactos visuales del mundo real, como el desenfoque o los efectos de escala de grises.

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

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

    pip install albumentations

    Una vez instalado, el paquete debería ser detectado y utilizado automáticamente por Ultralytics.

  • Puedes personalizar las aumentaciones creando una clase de conjunto de datos y un entrenador personalizados. Por ejemplo, puedes reemplazar las aumentaciones de clasificación predeterminadas 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