Aumento de datos con Ultralytics YOLO#
Introducción#
El aumento de datos es una técnica crucial en visión artificial que amplía artificialmente el conjunto de datos de entrenamiento aplicando diversas transformaciones a las 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.
Ver: Cómo usar Mosaic, MixUp y más técnicas de aumento de datos para que los modelos Ultralytics YOLO generalicen mejor 🚀
Por qué es importante el aumento de datos#
El aumento de datos cumple varias funciones fundamentales en el entrenamiento de modelos de visión artificial:
- Ampliación del conjunto de datos: Al crear variaciones de las imágenes existentes, puedes aumentar eficazmente el tamaño del conjunto de datos de entrenamiento sin recopilar datos nuevos.
- Mejora de la generalización: Los modelos aprenden a reconocer objetos en distintas 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.
- Mejora del rendimiento: Los modelos entrenados con un aumento adecuado suelen alcanzar una mayor 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 una función específica y que contribuye de forma distinta al rendimiento del modelo. Esta guía analiza los ajustes de aumento que se indican a continuación y te ayuda a entender cuándo y cómo utilizarlos de forma eficaz en tus proyectos.
Ejemplos de configuración#
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.
import albumentations as A
from ultralytics import YOLO
# Cargar un modelo
model = YOLO("yolo26n.pt")
# Entrenamiento con parámetros de aumento personalizados
model.train(data="coco8.yaml", epochs=100, hsv_h=0.03, hsv_s=0.6, hsv_v=0.5)
# Entrenamiento con todos los aumentos configurables desactivados (se omiten los valores desactivados para mayor claridad)
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,
)
# Entrenamiento con transformaciones personalizadas de Albumentations (solo API de Python)
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)Las transformaciones que se indican 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 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 sustituirlo.
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 si utilizas la CLI. Este nuevo archivo YAML sustituirá entonces al archivo predeterminado que se encuentra 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.5A continuación, inicia el entrenamiento con la API de Python:
from ultralytics import YOLO
# Carga un modelo YOLO26n preentrenado en COCO
model = YOLO("yolo26n.pt")
# Entrena el modelo con una configuración personalizada
model.train(cfg="train_custom.yaml")Aumentos del espacio de color#
Ajuste del tono (hsv_h)#
- Intervalo:
0.0-1.0 - Valor predeterminado:
0.015 - Uso: Desplaza los colores de la imagen sin alterar sus relaciones. El hiperparámetro
hsv_hdefine la magnitud del desplazamiento; el ajuste final se elige aleatoriamente entre-hsv_hyhsv_h. Por ejemplo, conhsv_h=0.3, el desplazamiento se selecciona aleatoriamente dentro del intervalo de-0.3a0.3. Para valores superiores a0.5, el desplazamiento del tono da la vuelta a la rueda de colores; por eso los aumentos se ven iguales entre0.5y-0.5. - Finalidad: Es especialmente útil en entornos exteriores, donde las condiciones de iluminación pueden afectar notablemente al aspecto de los objetos. Por ejemplo, un plátano puede parecer más amarillo con luz solar intensa y más verdoso en interiores.
- Implementación de Ultralytics: RandomHSV
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Ajuste de la saturación (hsv_s)#
- Intervalo:
0.0-1.0 - Valor predeterminado:
0.7 - Uso: Modifica la intensidad de los colores de la imagen. El hiperparámetro
hsv_sdefine la magnitud del desplazamiento; el ajuste final se elige aleatoriamente entre-hsv_syhsv_s. Por ejemplo, conhsv_s=0.7, la intensidad se selecciona aleatoriamente dentro del intervalo de-0.7a0.7. - Finalidad: Ayuda a los modelos a adaptarse a distintas condiciones meteorológicas y configuraciones de cámara. Por ejemplo, una señal de tráfico roja puede tener un aspecto muy vivo en un día soleado, pero apagado y desvaído con niebla.
- Implementación de Ultralytics: RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Ajuste del brillo (hsv_v)#
- Intervalo:
0.0-1.0 - Valor predeterminado:
0.4 - Uso: Cambia el brillo de la imagen. El hiperparámetro
hsv_vdefine la magnitud del desplazamiento; el ajuste final se elige aleatoriamente entre-hsv_vyhsv_v. Por ejemplo, conhsv_v=0.4, la intensidad se selecciona aleatoriamente dentro del intervalo de-0.4a0.4. - Finalidad: Es esencial para entrenar modelos que deban funcionar con distintas condiciones de iluminación. Por ejemplo, una manzana roja puede verse brillante al sol y mucho más oscura a la sombra.
- Implementación de Ultralytics: RandomHSV
-1.0 | -0.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Transformaciones geométricas#
Rotación (degrees)#
- Intervalo: de
0.0a180 - Valor predeterminado:
0 - Uso: Rota las imágenes aleatoriamente dentro del intervalo especificado. El hiperparámetro
degreesdefine el ángulo de rotación; el ajuste final se elige aleatoriamente entre-degreesydegrees. Por ejemplo, condegrees=10.0, la rotación se selecciona aleatoriamente dentro del intervalo de-10.0a10.0. - Finalidad: Es fundamental en aplicaciones donde los objetos pueden aparecer con distintas orientaciones. Por ejemplo, en imágenes aéreas captadas por drones, los vehículos pueden estar orientados en cualquier dirección, por lo que los modelos deben reconocerlos con independencia de su rotación.
- Implementación de Ultralytics: RandomPerspective
-180 | -90 | 0.0 | 90 | 180 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Traslación (translate)#
- Intervalo:
0.0-1.0 - Valor predeterminado:
0.1 - Uso: Desplaza las imágenes horizontal y verticalmente una fracción aleatoria del tamaño de la imagen. El hiperparámetro
translatedefine la magnitud del desplazamiento; el ajuste final se elige aleatoriamente dos veces (una por cada eje) dentro del intervalo-translateytranslate. Por ejemplo, contranslate=0.5, la traslación en el eje x se selecciona aleatoriamente dentro del intervalo de-0.5a0.5, y se selecciona otro valor aleatorio independiente dentro del mismo intervalo para el eje y. - Finalidad: Ayuda a los modelos a aprender a detectar objetos parcialmente visibles y mejora la robustez ante cambios de posición. Por ejemplo, en aplicaciones de evaluación de daños en vehículos, las partes de un coche pueden aparecer completas o parcialmente en el encuadre según la posición y la distancia de quien toma la foto; el aumento por traslación enseñará al modelo a reconocer estas características con independencia de que estén completas o de su posición.
- Implementación de Ultralytics: RandomPerspective
- Nota: Para simplificar, las traslaciones que se aplican a continuación son las mismas en cada caso para los ejes
xyy. No se muestran los valores-1.0y1.0, ya que desplazarían la imagen completamente fuera del encuadre.
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Escala (scale)#
- Intervalo: de
0.0a1.0como número decimal, o una tupla(min, max)explícita - Valor predeterminado:
0.5 - Uso: Cambia el tamaño de las imágenes mediante un factor aleatorio dentro del intervalo especificado. Si se expresa como número decimal, el hiperparámetro
scaledefine el factor de escala; el factor final se elige aleatoriamente entre1-scaley1+scale. Por ejemplo, conscale=0.5, la escala se selecciona aleatoriamente dentro del intervalo de0.5a1.5. Si se expresa como tupla,scaleestablece directamente ese intervalo, de modo quescale=(0.5, 2.0)obtiene el factor entre0.5y2.0. - Finalidad: Permite que los modelos gestionen objetos a distintas distancias y de distintos tamaños. Por ejemplo, en aplicaciones de conducción autónoma, los vehículos pueden aparecer a varias distancias de la cámara, por lo que el modelo debe reconocerlos con independencia de su tamaño.
- Implementación de Ultralytics: RandomPerspective
- Nota:
- No se muestra el valor
-1.0, ya que haría desaparecer la imagen, mientras que1.0simplemente aplica un zoom de 2x. - Los valores que se muestran en la tabla siguiente son los cambios de escala resultantes, no los valores que se pasan al hiperparámetro
scale. - La forma decimal se valida para el intervalo de
0.0a1.0; un valor fuera de ese intervalo genera unValueError. Para obtener un factor superior a un zoom de 2x, pasa 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 intervalo de recorte a partir del valor decimal (de
1.0 - scalea1.0), por lo que pasar una tupla en ese caso genera unTypeError.
- No se muestra el valor
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Cizallamiento (shear)#
- Intervalo: de
-180a+180 - Valor predeterminado:
0 - Uso: Introduce una transformación geométrica que inclina la imagen a lo largo de los ejes x e y, desplazando partes de la imagen en una dirección y manteniendo las líneas paralelas. El hiperparámetro
sheardefine el ángulo de cizallamiento; el ajuste final se elige aleatoriamente entre-shearyshear. Por ejemplo, conshear=10.0, el cizallamiento en el eje x se selecciona aleatoriamente dentro del intervalo de-10a10, y se selecciona otro valor aleatorio independiente dentro del mismo intervalo para el eje y. - Finalidad: Ayuda a los modelos a generalizar ante variaciones del ángulo de visión causadas por ligeras 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 que las cámaras no están colocadas en perpendicular. El aumento por cizallamiento garantiza que el modelo aprenda a reconocer objetos pese a esas distorsiones.
- Implementación de Ultralytics: RandomPerspective
- Nota:
- Los valores de
shearpueden 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; distorsiona la forma de los objetos cambiando sus ángulos, pero mantiene paralelos los lados opuestos.
- Los valores de
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Perspectiva (perspective)#
- Intervalo:
0.0-0.001 - Valor predeterminado:
0 - Uso: Aplica una transformación de perspectiva completa a lo largo de los ejes x e y para simular el aspecto de los objetos vistos desde distintas profundidades o ángulos. El hiperparámetro
perspectivedefine la magnitud de la perspectiva; el ajuste final se elige aleatoriamente entre-perspectiveyperspective. Por ejemplo, conperspective=0.001, la perspectiva en el eje x se selecciona aleatoriamente dentro del intervalo de-0.001a0.001, y se selecciona otro valor aleatorio independiente dentro del mismo intervalo para el eje y. - Finalidad: El aumento de perspectiva es fundamental para gestionar cambios extremos del punto de vista, sobre todo en situaciones en las que los objetos aparecen acortados o distorsionados por cambios de perspectiva. Por ejemplo, en la detección de objetos con 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 pese a las distorsiones causadas por la perspectiva, lo que mejora su robustez en entornos reales.
- Implementación de Ultralytics: RandomPerspective
-0.001 | -0.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Volteo vertical (flipud)#
- Intervalo:
0.0-1.0 - Valor predeterminado:
0 - Uso: Voltea la imagen verticalmente invirtiéndola a lo largo del eje y. Esta transformación pone toda la imagen boca abajo, pero conserva las relaciones espaciales entre los objetos. El hiperparámetro flipud define la probabilidad de aplicar la transformación: un valor de
flipud=1.0garantiza que se volteen todas las imágenes y un valor deflipud=0.0la desactiva por completo. Por ejemplo, conflipud=0.5, cada imagen tiene un 50 % de probabilidades de ponerse boca abajo. - Finalidad: 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 en distintas orientaciones. El volteo vertical ayuda al modelo a reconocer los objetos con independencia de su orientación vertical.
- Implementación de Ultralytics: RandomFlip
flipud desactivado | flipud activado |
|---|---|
![]() | ![]() |
Volteo horizontal (fliplr)#
- Intervalo:
0.0-1.0 - Valor predeterminado:
0.5 - Uso: Voltea la imagen horizontalmente reflejándola a lo largo del eje x. Esta transformación intercambia los lados izquierdo y derecho y mantiene la coherencia espacial, lo que ayuda al modelo a generalizar a objetos con orientaciones invertidas. El hiperparámetro
fliplrdefine la probabilidad de aplicar la transformación: un valor defliplr=1.0garantiza que se volteen todas las imágenes y un valor defliplr=0.0la desactiva por completo. Por ejemplo, confliplr=0.5, cada imagen tiene un 50 % de probabilidades de voltearse de izquierda a derecha. - Finalidad: El volteo horizontal se utiliza ampliamente en la detección de objetos, la estimación de poses y el reconocimiento facial para mejorar la robustez ante variaciones de izquierda a derecha. Por ejemplo, en la conducción autónoma, los vehículos y los peatones pueden aparecer a ambos lados de la carretera, y el volteo horizontal ayuda al modelo a reconocerlos igual de bien en ambas orientaciones.
- Implementación de Ultralytics: RandomFlip
fliplr desactivado | fliplr activado |
|---|---|
![]() | ![]() |
Intercambio de canales BGR (bgr)#
- Intervalo:
0.0-1.0 - Valor predeterminado:
0 - Uso: Intercambia los canales de color de una imagen de RGB a BGR y altera el orden en el que se representan los colores. El hiperparámetro
bgrdefine la probabilidad de aplicar la transformación:bgr=1.0garantiza que todas las imágenes intercambien sus canales ybgr=0.0la desactiva. Por ejemplo, conbgr=0.5, cada imagen tiene un 50 % de probabilidades de convertirse de RGB a BGR. - Finalidad: Aumenta la robustez ante distintos órdenes de los canales de color. Por ejemplo, al entrenar modelos que deben funcionar con diversos sistemas de cámaras y bibliotecas de procesamiento de imágenes que pueden utilizar los formatos RGB y BGR de forma inconsistente, o al implementar modelos en entornos donde el formato de color de entrada puede diferir del de los datos de entrenamiento.
- Implementación de Ultralytics: Format
bgr desactivado | bgr activado |
|---|---|
![]() | ![]() |
Mosaico (mosaic)#
- Intervalo:
0.0-1.0 - Valor predeterminado:
1 - Uso: Combina cuatro imágenes de entrenamiento en una. El hiperparámetro
mosaicdefine la probabilidad de aplicar la transformación:mosaic=1.0garantiza que se combinen todas las imágenes ymosaic=0.0la desactiva. Por ejemplo, conmosaic=0.5, cada imagen tiene un 50 % de probabilidades de combinarse con otras tres. - Finalidad: 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, los animales pueden aparecer a distintas 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, al crear artificialmente muestras de entrenamiento diversas a partir de datos limitados.
- Implementación de Ultralytics: Mosaic
- Nota:
- Aunque el aumento
mosaichace que el modelo sea más robusto, también puede dificultar el proceso de entrenamiento. - El aumento
mosaicpuede desactivarse hacia el final del entrenamiento estableciendoclose_mosaicen el número de épocas que faltan para completarlo cuando deba desactivarse. Por ejemplo, siepochsse establece en200yclose_mosaicen20, el aumentomosaicse desactivará después de180épocas. Siclose_mosaicse establece en0, el aumentomosaicestará activado durante todo el entrenamiento. - Al cerrar el mosaico, también se desactivan
copy_paste,mixupycutmixen la misma época. Los cuatro se desactivan a la vez, de modo que las últimas épocas se entrenan sin ellos, mientras que los demás aumentos —las transformaciones geométricas, HSV, los volteos y Albumentations— siguen aplicándose. Ten en cuenta quecopy_paste, en su modo predeterminadoflip, opera dentro de una sola imagen en lugar de combinar varias. - El centro del mosaico generado se determina mediante valores aleatorios y puede quedar dentro o fuera de la imagen.
- La implementación actual del aumento
mosaiccombina la imagen actual con otras 3, tomadas de un búfer de imágenes cargadas recientemente o de cualquier parte del conjunto de datos cuandocache='ram'. En ambos casos, el muestreo se realiza con reemplazo, por lo que una misma imagen puede aparecer más de una vez en un único mosaico.
- Aunque el aumento
mosaic desactivado | mosaic activado |
|---|---|
![]() | ![]() |
Mixup (mixup)#
- Intervalo:
0.0-1.0 - Valor predeterminado:
0 - Uso: Combina dos imágenes y sus etiquetas con una probabilidad determinada. El hiperparámetro
mixupdefine la probabilidad de aplicar la transformación:mixup=1.0garantiza que se mezclen todas las imágenes ymixup=0.0la desactiva. Por ejemplo, conmixup=0.5, cada imagen tiene un 50 % de probabilidades de mezclarse con otra. - Finalidad: Mejora la robustez del modelo y reduce el sobreajuste. Por ejemplo, en sistemas de reconocimiento de productos de venta al por menor, mixup ayuda al modelo a aprender características más robustas al combinar imágenes de distintos productos, enseñándole a identificar artículos aunque estén parcialmente visibles o tapados por otros productos en estanterías abarrotadas.
- Implementación de Ultralytics: MixUp
- Nota:
- La proporción
mixupes un valor aleatorio obtenido de una distribución betanp.random.beta(32.0, 32.0), lo que significa que cada imagen contribuye aproximadamente en un 50 %, con ligeras variaciones.
- La proporción
Primera imagen, mixup desactivado | Segunda imagen, mixup desactivado | mixup activado |
|---|---|---|
![]() | ![]() | ![]() |
CutMix (cutmix)#
- Intervalo:
0.0-1.0 - Valor predeterminado:
0 - Uso: Recorta una región rectangular de una imagen y la pega sobre otra con una probabilidad determinada. El hiperparámetro
cutmixdefine la probabilidad de aplicar la transformación;cutmix=1.0hace que todas las imágenes pasen por ella ycutmix=0.0la desactiva por completo. Por ejemplo, concutmix=0.5, cada imagen tiene un 50 % de probabilidades de que se sustituya una región por un fragmento de otra imagen. - Finalidad: Mejora el rendimiento del modelo al crear escenarios de oclusión realistas y mantener la integridad de las características locales. Por ejemplo, en los sistemas de conducción autónoma, CutMix ayuda al modelo a aprender a reconocer vehículos o peatones aunque otros objetos los oculten parcialmente, lo que mejora la precisión de detección en entornos reales complejos con objetos superpuestos.
- Implementación de Ultralytics: CutMix
- Nota:
- El tamaño y la posición de la región recortada se determinan aleatoriamente en cada aplicación.
- A diferencia de MixUp, que combina globalmente los valores de los píxeles,
cutmixmantiene las intensidades originales de los píxeles dentro de las regiones recortadas y conserva las características locales. - Solo se pega una región 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 superficie original dentro de la región pegada.
- Este umbral mínimo de superficie del cuadro delimitador no se puede cambiar con la implementación actual. Es
0.1(10 %) para las etiquetas de detección y0.01(1 %) cuando las etiquetas incluyen segmentos.
Primera imagen, cutmix desactivado | Segunda imagen, cutmix desactivado | cutmix activado |
|---|---|---|
![]() | ![]() | ![]() |
Aumentos Copy-Paste#
Copy-Paste (copy_paste)#
- Intervalo:
0.0-1.0 - Valor predeterminado:
0 - Uso: Requiere etiquetas de polígonos, por lo que se aplica a tareas de segmentación y OBB; este aumento copia objetos dentro de una imagen o entre imágenes y se controla mediante
copy_paste_mode. En el modoflip,copy_pastees la fracción de objetos aptos que se copia: una imagen con seis objetos aptos obtiene tres copias concopy_paste=0.5. En el modomixup, el mismo valor también controla la probabilidad de que se aplique Copy-Paste.copy_paste=0.0desactiva la transformación. - Finalidad: 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 presencia de estos defectos poco frecuentes al copiarlos de una imagen a otra. Así, el modelo aprende mejor estos casos infrarrepresentados sin necesidad de obtener más muestras defectuosas.
- Implementación de Ultralytics: CopyPaste
- Nota:
- Como se muestra en el vídeo siguiente, el aumento
copy_pastepermite copiar objetos de una imagen a otra. - Cuando se selecciona un objeto para copiarlo, se calcula su IoA con todos los objetos que ya están en la imagen de destino, independientemente de
copy_paste_mode. El objeto solo se pega si todos los valores de IoA son inferiores a0.3(30 %); no se pega si algún valor de IoA es igual o superior a0.3. - El umbral de IoA no se puede cambiar con la implementación actual y, de forma predeterminada, está establecido en
0.3.
- Como se muestra en el vídeo siguiente, el aumento
copy_paste desactivado | copy_paste activado con copy_paste_mode=flip | Visualiza el proceso de copy_paste |
|---|---|---|
![]() | ![]() |
Modo Copy-Paste (copy_paste_mode)#
- Opciones:
'flip','mixup' - Valor predeterminado:
'flip' - Uso: Determina el método empleado para el aumento Copy-Paste. Si se establece en
'flip', los objetos proceden de la misma imagen, mientras que'mixup'permite copiar objetos de distintas imágenes. - Finalidad: Ofrece flexibilidad para integrar 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 de copiar los objetos es distinta. - 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 polígonos, los objetos copiados pueden presentar ligeras variaciones de forma con respecto a los originales.
- El principio de IoA es el mismo para ambas opciones de
| Imagen de referencia | Imagen elegida para copy_paste | copy_paste activado con copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
Aumentos específicos de clasificación#
Auto Augment (auto_augment)#
- Opciones:
'randaugment','autoaugment','augmix',None - Valor predeterminado:
'randaugment' - Uso: Aplica políticas de aumento automatizadas para clasificación. La opción
'randaugment'usa RandAugment,'autoaugment'usa AutoAugment y'augmix'usa AugMix. Si se establece enNone, se desactiva el aumento automatizado. - Finalidad: Optimiza automáticamente las estrategias de aumento para tareas de clasificación. Estas son las diferencias:
- AutoAugment: Este modo aplica políticas de aumento predefinidas, aprendidas a partir de conjuntos de datos como ImageNet, CIFAR10 y SVHN. Puedes seleccionar estas políticas existentes, pero no entrenar otras nuevas con Torchvision. Para encontrar estrategias de aumento óptimas para conjuntos de datos específicos, se necesitan bibliotecas externas o implementaciones personalizadas. Consulta el artículo de AutoAugment.
- RandAugment: Aplica una selección aleatoria de transformaciones con una intensidad uniforme. Este enfoque reduce la necesidad de una fase de búsqueda exhaustiva, lo que mejora la eficiencia computacional y, a la vez, la robustez del modelo. Consulta el artículo de RandAugment.
- AugMix: AugMix es un método de aumento de datos que mejora la robustez del modelo al crear variaciones de imagen diversas mediante combinaciones aleatorias de transformaciones sencillas. Consulta el artículo de AugMix.
- Implementación de Ultralytics: classify_augmentations()
- Nota:
- En esencia, la principal diferencia entre los tres métodos es cómo 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)#
- Intervalo:
0.0-1.0 - Valor predeterminado:
0.4 - Uso: Borra aleatoriamente partes de la imagen durante el entrenamiento de clasificación. El hiperparámetro
erasingdefine la probabilidad de aplicar la transformación;erasing=1.0borra una región en cada imagen yerasing=0.0desactiva la transformación. Por ejemplo, conerasing=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 ante oclusiones parciales, como gafas de sol, mascarillas u otros objetos que puedan cubrir parcialmente los rasgos faciales. Esto mejora el rendimiento en situaciones reales al obligar al modelo a identificar a las personas mediante varios rasgos faciales, en lugar de depender únicamente de características distintivas que podrían quedar ocultas.
- Implementación de Ultralytics: classify_augmentations()
- Nota:
- El aumento
erasingincluye los hiperparámetrosscale,ratioyvalue, que no se pueden cambiar con la implementación actual. Sus valores predeterminados son(0.02, 0.33),(0.3, 3.3)y0, respectivamente, tal como se indica en la documentación de PyTorch.
- El aumento
erasing desactivado | erasing activado (ejemplo 1) | erasing activado (ejemplo 2) | erasing activado (ejemplo 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
Funciones avanzadas de aumento#
Transformaciones personalizadas de Albumentations (augmentations)#
- Tipo:
listde transformaciones de Albumentations - Valor predeterminado:
None - Uso: Permite proporcionar transformaciones personalizadas de Albumentations para el aumento 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: Ofrece un control detallado de las estrategias de aumento de datos al aprovechar la amplia biblioteca de transformaciones de Albumentations. Resulta especialmente útil cuando necesitas aumentos especializados 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 adaptadas a perspectivas aéreas y satelitales, 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 punto de control, por lo que una lista ya serializada puede conservarse al pasar por un archivo de configuración YAML o la CLI; esto permite queresumela restaure. - Las transformaciones personalizadas sustituyen por completo el conjunto predeterminado de Albumentations. Todos los aumentos configurados en otras partes de esta página —
mosaic,hsv_h,degreesy los demás— siguen activos y se aplican de forma independiente. - Las transformaciones espaciales que modifican la geometría de la imagen, incluidas las anidadas en
A.OneOfoA.Compose, desplazan los cuadros delimitadores, los polígonos, los puntos clave y las máscaras de profundidad o semánticas junto con la imagen;A.RandomGridShuffleno puede conservar la topología de los polígonos ni de los puntos clave y genera un error con muestras de segmentación, pose y OBB. - Albumentations ofrece más de 70 transformaciones; la documentación de Albumentations las enumera todas. Añadir muchas transformaciones o transformaciones que requieran mucho cálculo ralentiza el entrenamiento, así que empieza con un conjunto pequeño y controla la duración de cada época.
- Se aplica a las tareas
detect,segment,semantic,depth,poseyobb. Se excluye la clasificación, ya que utiliza un proceso de aumento independiente.
- Para crear los objetos de transformación se necesita la API de Python. Ultralytics los serializa con
Los ejemplos siguientes requieren Albumentations 1.4.22 o posterior y, por tanto, Python 3.9 o posterior.
import albumentations as A
from ultralytics import YOLO
# Cargar un modelo
model = YOLO("yolo26n.pt")
# Define transformaciones personalizadas de Albumentations
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),
]
# Entrena con transformaciones personalizadas de Albumentations
model.train(
data="coco8.yaml",
epochs=100,
augmentations=custom_transforms, # Pasa transformaciones personalizadas
imgsz=640,
)Preguntas frecuentes#
Elegir los aumentos adecuados depende de tu caso de uso y de tu conjunto de datos. Aquí tienes algunas pautas generales que te ayudarán a decidir:
- En la mayoría de los casos, las pequeñas variaciones de color y brillo son beneficiosas. Los valores predeterminados de
hsv_h,hsv_syhsv_vson 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
degrees(rotación),translate,scale,shearoperspective. 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. - Usa el aumento
mosaicsolo si es aceptable que haya objetos parcialmente ocluidos o varios objetos por imagen, y eso no cambia el valor de la etiqueta. También puedes mantener activomosaic, pero aumentar el valor declose_mosaicpara desactivarlo antes durante el proceso de entrenamiento.
En resumen: no te compliques. Empieza con unos pocos aumentos y añade más poco a poco según haga falta. 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 los aumentos que aplicas reflejen la misma distribución de datos que encontrará el modelo en producción.
- En la mayoría de los casos, las pequeñas variaciones de color y brillo son beneficiosas. Los valores predeterminados de
Si el paquete
albumentationsestá instalado, Ultralytics aplica automáticamente un conjunto de aumentos de imagen adicionales mediante ese paquete. Estos aumentos se gestionan internamente y no requieren ninguna configuración adicional.Puedes consultar la lista completa de transformaciones aplicadas en nuestra documentación técnica y en nuestra guía de integración de Albumentations. Ten en cuenta que solo se activan los aumentos cuya probabilidad
psea superior a0. Se aplican deliberadamente con poca 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 mediante la API de Python. Consulta la sección Funciones avanzadas de aumento para obtener más información.
Comprueba si el paquete
albumentationsestá instalado. Si no lo está, instálalo:pip install albumentationsUna vez instalado, Ultralytics debería detectar y utilizar automáticamente el paquete.
Puedes personalizar los aumentos creando una clase de conjunto de datos y un entrenador personalizados. Por ejemplo, puedes sustituir los aumentos de clasificación predeterminados 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 ver los detalles de la implementación.













































