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 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.
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)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.5A continuación, inicia el entrenamiento con la API de Python:
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_hdefine la magnitud del desplazamiento, y el ajuste final se elige aleatoriamente entre-hsv_hyhsv_h. Por ejemplo, conhsv_h=0.3, el desplazamiento se selecciona aleatoriamente dentro del intervalo-0.3a0.3. Para valores superiores a0.5, el desplazamiento del tono da la vuelta a la rueda de color; por eso los aumentos tienen el mismo aspecto entre0.5y-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.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
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_sdefine la magnitud del desplazamiento, y el ajuste final se elige aleatoriamente entre-hsv_syhsv_s. Por ejemplo, conhsv_s=0.7, la intensidad se selecciona aleatoriamente dentro del intervalo-0.7a0.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.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Ajuste del brillo (hsv_v)#
- Rango:
0.0-1.0 - Predeterminado:
0.4 - Uso: Cambia el brillo de la imagen. El hiperparámetro
hsv_vdefine la magnitud del desplazamiento, y el ajuste final se elige aleatoriamente entre-hsv_vyhsv_v. Por ejemplo, conhsv_v=0.4, la intensidad se selecciona aleatoriamente dentro del intervalo-0.4a0.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.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Transformaciones geométricas#
Rotación (degrees)#
- Rango:
0.0a180 - Predeterminado:
0 - Uso: Gira las imágenes aleatoriamente dentro del rango especificado. El hiperparámetro
degreesdefine el ángulo de rotación, y el ajuste final se elige aleatoriamente entre-degreesydegrees. Por ejemplo, condegrees=10.0, la rotación se selecciona aleatoriamente dentro del intervalo-10.0a10.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 | -90 | 0.0 | 90 | 180 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
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
translatedefine la magnitud del desplazamiento, y el ajuste final se elige aleatoriamente dos veces (una por cada eje) dentro del rango-translateytranslate. Por ejemplo, contranslate=0.5, la traslación se selecciona aleatoriamente dentro del intervalo-0.5a0.5en 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
xyy. Los valores-1.0y1.0no se muestran, ya que trasladarían la imagen completamente fuera del encuadre.
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Escala (scale)#
- Rango:
0.0-1.0como 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
scaledefine la ganancia de escala, y el factor final se elige aleatoriamente entre1-scaley1+scale. Por ejemplo, conscale=0.5, la escala se selecciona aleatoriamente dentro del intervalo0.5a1.5. Como tupla,scaleestablece directamente ese rango, por lo quescale=(0.5, 2.0)toma muestras del factor entre0.5y2.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.0no se muestra porque haría desaparecer la imagen, mientras que1.0simplemente 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 unValueError. 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 - scalea1.0), por lo que pasar una tupla en ese caso genera unTypeError.
- El valor
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Cizallamiento (shear)#
- Rango:
-180a+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
sheardefine el ángulo de cizallamiento, y el ajuste final se elige aleatoriamente entre-shearyshear. Por ejemplo, conshear=10.0, el cizallamiento se selecciona aleatoriamente dentro del intervalo-10a10en 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
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, sino que distorsiona la forma de los objetos cambiando sus ángulos mientras mantiene paralelos los lados opuestos.
- Los valores de
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
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
perspectivedefine la magnitud de la perspectiva, y el ajuste final se elige aleatoriamente entre-perspectiveyperspective. Por ejemplo, conperspective=0.001, la perspectiva se selecciona aleatoriamente dentro del intervalo-0.001a0.001en 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.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
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.0garantiza que todas las imágenes se volteen, mientras que un valor deflipud=0.0desactiva por completo la transformación. Por ejemplo, conflipud=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 desactivado | flipud activado |
|---|---|
![]() | ![]() |
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
fliplrdefine la probabilidad de aplicar la transformación: un valor defliplr=1.0garantiza que todas las imágenes se volteen, mientras que un valor defliplr=0.0desactiva por completo la transformación. Por ejemplo, confliplr=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 desactivado | fliplr activado |
|---|---|
![]() | ![]() |
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
bgrdefine la probabilidad de aplicar la transformación:bgr=1.0garantiza que todas las imágenes sufran el intercambio de canales ybgr=0.0lo desactiva. Por ejemplo, conbgr=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 desactivado | bgr activado |
|---|---|
![]() | ![]() |
Mosaico (mosaic)#
- Rango:
0.0-1.0 - 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.0desactiva la transformación. Por ejemplo, conmosaic=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
mosaichace que el modelo sea más robusto, también puede dificultar el proceso de entrenamiento. - El aumento
mosaicpuede desactivarse cerca del final del entrenamiento estableciendoclose_mosaicen el número de épocas que deben quedar para completar el entrenamiento 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 proceso de entrenamiento. - Cerrar el mosaico también desactiva
copy_paste,mixupycutmixen 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 quecopy_paste, en su modo predeterminadoflip, 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
mosaiccombina 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 cuandocache='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.
- Aunque el aumento
mosaic desactivado | mosaic activado |
|---|---|
![]() | ![]() |
Mixup (mixup)#
- Rango:
0.0-1.0 - Predeterminado:
0 - Uso: Mezcla 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.0desactiva la transformación. Por ejemplo, conmixup=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
mixupes un valor aleatorio elegido 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)#
- 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
cutmixdefine la probabilidad de aplicar la transformación:cutmix=1.0garantiza que todas las imágenes sufran esta transformación ycutmix=0.0la desactiva por completo. Por ejemplo, concutmix=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,
cutmixconserva 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 y0.01(1 %) cuando las etiquetas contienen segmentos.
Primera imagen, cutmix desactivado | Segunda imagen, cutmix desactivado | cutmix activado |
|---|---|---|
![]() | ![]() | ![]() |
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 modoflip,copy_pastees la fracción de objetos aptos que se copian: 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 ejecute copy-paste.copy_paste=0.0desactiva 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_pastese 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 a0.3(30 %); no se pega si algún valor de IoA es0.3o superior. - El umbral de IoA no se puede cambiar con la implementación actual y está establecido en
0.3de forma predeterminada.
- Como se muestra en el vídeo siguiente, la ampliación
copy_paste desactivado | copy_paste activado con copy_paste_mode=flip | Visualiza el proceso de copy_paste |
|---|---|---|
![]() | ![]() |
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.
- 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 |
|---|---|---|
![]() | ![]() | ![]() |
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. EstablecerNonedesactiva 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
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 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
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.
- La ampliación
erasing desactivado | erasing activado (ejemplo 1) | erasing activado (ejemplo 2) | erasing activado (ejemplo 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
Funciones avanzadas de ampliación#
Transformaciones personalizadas de Albumentations (augmentations)#
- Tipo:
listde 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 queresumelos 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,degreesy 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.OneOfoA.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.RandomGridShuffleno 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,poseyobb. La clasificación queda excluida, ya que utiliza una canalización de ampliación 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 una versión posterior y, por tanto, Python 3.9 o una versión posterior.
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_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
rotation,translation,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 estas ampliaciones. - Utiliza la ampliación
mosaicsolo 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 mantenermosaicactivo, pero aumentar el valor declose_mosaicpara 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.
- En la mayoría de los casos, las ligeras variaciones de color y brillo son beneficiosas. Los valores predeterminados de
Si el paquete
albumentationsestá 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
psea superior a0. 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
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 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.













































