Aumentação de dados usando Ultralytics YOLO

YOLO data augmentation examples showing original and augmented images for training

Introdução

Aumentação de dados é uma técnica crucial em visão computacional que expande artificialmente o teu conjunto de dados de treino ao aplicar várias transformações às imagens existentes. Ao treinar modelos de deep learning como o Ultralytics YOLO, a aumentação de dados ajuda a melhorar a robustez do modelo, reduz o overfitting e melhora a generalização para cenários do mundo real.



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

Por que a Aumentação de Dados é Importante

A aumentação de dados serve múltiplos propósitos críticos no treino de modelos de visão computacional:

  • Conjunto de Dados Expandido: Ao criar variações de imagens existentes, podes aumentar eficazmente o tamanho do teu conjunto de dados de treino sem coletar novos dados.
  • Generalização Melhorada: Os modelos aprendem a reconhecer objetos sob várias condições, tornando-os mais robustos em aplicações do mundo real.
  • Redução de Overfitting: Ao introduzir variabilidade nos dados de treino, os modelos têm menos probabilidade de memorizar características específicas das imagens.
  • Desempenho Aprimorado: Modelos treinados com a aumentação adequada geralmente atingem melhor precisão em conjuntos de validação e teste.

A implementação do Ultralytics YOLO fornece um conjunto abrangente de técnicas de aumentação, cada uma servindo propósitos específicos e contribuindo para o desempenho do modelo de diferentes maneiras. Este guia explorará cada parâmetro de aumentação em detalhe, ajudando-te a entender quando e como usá-los eficazmente nos teus projetos.

Exemplos de Configurações

Podes personalizar cada parâmetro usando a API Python, a interface de linha de comando (CLI) ou um ficheiro de configuração. Abaixo estão exemplos de como configurar a aumentação de dados em cada método.

Exemplos de Configuração
import albumentations as A

from ultralytics import YOLO

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

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

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

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

Usando um ficheiro de configuração

Podes definir todos os parâmetros de treino, incluindo aumentações, num ficheiro de configuração YAML (por exemplo, train_custom.yaml). O parâmetro mode só é necessário ao usar a CLI. Este novo ficheiro YAML substituirá o ficheiro padrão localizado no pacote 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

Depois, inicia o treino com a API Python:

Exemplo de Treino
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")

Aumentações de Espaço de Cor

Ajuste de Matiz (hsv_h)

  • Intervalo: 0.0 - 1.0
  • Padrão: 0.015
  • Uso: Altera as cores da imagem enquanto preserva as suas relações. O hiperparâmetro hsv_h define a magnitude da alteração, com o ajuste final escolhido aleatoriamente entre -hsv_h e hsv_h. Por exemplo, com hsv_h=0.3, a alteração é selecionada aleatoriamente entre -0.3 a 0.3. Para valores acima de 0.5, o deslocamento de matiz contorna a roda de cores, e é por isso que as aumentações parecem iguais entre 0.5 e -0.5.
  • Propósito: Particularmente útil para cenários ao ar livre onde as condições de iluminação podem afetar drasticamente a aparência dos objetos. Por exemplo, uma banana pode parecer mais amarela sob luz solar intensa, mas mais esverdeada em ambientes fechados.
  • Implementação do 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 Saturação (hsv_s)

  • Intervalo: 0.0 - 1.0
  • Padrão: 0.7
  • Uso: Modifica a intensidade das cores na imagem. O hiperparâmetro hsv_s define a magnitude da alteração, com o ajuste final escolhido aleatoriamente entre -hsv_s e hsv_s. Por exemplo, com hsv_s=0.7, a intensidade é selecionada aleatoriamente entre -0.7 a 0.7.
  • Propósito: Ajuda os modelos a lidar com condições meteorológicas variáveis e configurações de câmara. Por exemplo, um sinal de trânsito vermelho pode parecer muito vívido num dia ensolarado, mas parecer baço e desbotado em condições de nevoeiro.
  • Implementação do 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 Brilho (hsv_v)

  • Intervalo: 0.0 - 1.0
  • Padrão: 0.4
  • Uso: Altera o brilho da imagem. O hiperparâmetro hsv_v define a magnitude da alteração, com o ajuste final escolhido aleatoriamente entre -hsv_v e hsv_v. Por exemplo, com hsv_v=0.4, a intensidade é selecionada aleatoriamente entre -0.4 a 0.4.
  • Propósito: Essencial para treinar modelos que precisam de atuar em diferentes condições de iluminação. Por exemplo, uma maçã vermelha pode parecer brilhante à luz do sol, mas muito mais escura na sombra.
  • Implementação do 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

Transformações Geométricas

Rotação (degrees)

  • Intervalo: 0.0 a 180
  • Padrão: 0
  • Uso: Roda as imagens aleatoriamente dentro do intervalo especificado. O hiperparâmetro degrees define o ângulo de rotação, com o ajuste final escolhido aleatoriamente entre -degrees e degrees. Por exemplo, com degrees=10.0, a rotação é selecionada aleatoriamente entre -10.0 a 10.0.
  • Propósito: Crucial para aplicações onde os objetos podem aparecer em diferentes orientações. Por exemplo, em imagens aéreas de drones, os veículos podem estar orientados em qualquer direção, exigindo que os modelos reconheçam objetos independentemente da sua rotação.
  • Implementação do Ultralytics: RandomPerspective
-180-900.090180
Rotation -180 degrees augmentationRotation -90 degrees augmentationOriginal image without augmentationRotation 90 degrees augmentationRotation 180 degrees augmentation

Translação (translate)

  • Intervalo: 0.0 - 1.0
  • Padrão: 0.1
  • Uso: Desloca as imagens horizontal e verticalmente por uma fração aleatória do tamanho da imagem. O hiperparâmetro translate define a magnitude do deslocamento, com o ajuste final escolhido aleatoriamente duas vezes (uma para cada eixo) dentro do intervalo -translate e translate. Por exemplo, com translate=0.5, a translação é selecionada aleatoriamente entre -0.5 a 0.5 no eixo x, e um valor aleatório independente é selecionado dentro do mesmo intervalo no eixo y.
  • Propósito: Ajuda os modelos a aprenderem a detetar objetos parcialmente visíveis e melhora a robustez à posição do objeto. Por exemplo, em aplicações de avaliação de danos em veículos, peças de automóveis podem aparecer total ou parcialmente no enquadramento, dependendo da posição e distância do fotógrafo; a aumentação por translação ensinará o modelo a reconhecer estas características independentemente da sua completude ou posição.
  • Implementação do Ultralytics: RandomPerspective
  • Nota: Para simplificar, as translações aplicadas abaixo são as mesmas de cada vez para ambos os eixos x e y. Os valores -1.0 e 1.0 não são mostrados, pois traduziriam a imagem completamente para fora do enquadramento.
-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)

  • Intervalo: 0.0 - 1.0
  • Padrão: 0.5
  • Uso: Redimensiona imagens por um fator aleatório dentro do intervalo especificado. O hiperparâmetro scale define o fator de escala, com o ajuste final escolhido aleatoriamente entre 1-scale e 1+scale. Por exemplo, com scale=0.5, a escala é selecionada aleatoriamente entre 0.5 a 1.5.
  • Propósito: Permite aos modelos lidar com objetos a diferentes distâncias e tamanhos. Por exemplo, em aplicações de condução autónoma, os veículos podem aparecer a várias distâncias da câmara, exigindo que o modelo os reconheça independentemente do seu tamanho.
  • Implementação do Ultralytics: RandomPerspective
  • Nota:
    • O valor -1.0 não é mostrado pois faria a imagem desaparecer, enquanto 1.0 resulta simplesmente num zoom de 2x.
    • Os valores exibidos na tabela abaixo são os aplicados através do hiperparâmetro scale, não o fator de escala final.
    • Se scale for maior que 1.0, a imagem pode ser muito pequena ou invertida, uma vez que o fator de escala é escolhido aleatoriamente entre 1-scale e 1+scale. Por exemplo, com scale=3.0, a escala é selecionada aleatoriamente entre -2.0 a 4.0. Se for escolhido um valor negativo, a imagem é invertida.
-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

Cisalhamento (shear)

  • Intervalo: -180 a +180
  • Padrão: 0
  • Uso: Introduz uma transformação geométrica que distorce a imagem ao longo de ambos os eixos x e y, deslocando eficazmente partes da imagem numa direção enquanto mantém as linhas paralelas. O hiperparâmetro shear define o ângulo de cisalhamento, com o ajuste final escolhido aleatoriamente entre -shear e shear. Por exemplo, com shear=10.0, o cisalhamento é selecionado aleatoriamente entre -10 a 10 no eixo x, e um valor aleatório independente é selecionado dentro do mesmo intervalo no eixo y.
  • Propósito: Ajuda os modelos a generalizarem para variações em ângulos de visão causadas por ligeiras inclinações ou pontos de vista oblíquos. Por exemplo, na monitorização de tráfego, objetos como carros e sinais de estrada podem parecer inclinados devido a colocações de câmara não perpendiculares. Aplicar a aumentação de cisalhamento garante que o modelo aprende a reconhecer objetos apesar dessas distorções enviesadas.
  • Implementação do Ultralytics: RandomPerspective
  • Nota:
    • Valores de shear podem distorcer rapidamente a imagem, por isso é recomendado começar com valores pequenos e aumentá-los gradualmente.
    • Ao contrário das transformações de perspetiva, o cisalhamento não introduz profundidade ou pontos de fuga, mas distorce a forma dos objetos ao alterar os seus ângulos, mantendo os lados opostos paralelos.
-10-50.0510
Shear -10 degrees augmentationShear -5 degrees augmentationOriginal image without augmentationShear 5 degrees augmentationShear 10 degrees augmentation

Perspectiva (perspective)

  • Intervalo: 0.0 - 0.001
  • Padrão: 0
  • Uso: Aplica uma transformação de perspectiva completa ao longo dos eixos x e y, simulando como os objetos aparecem quando vistos de diferentes profundidades ou ângulos. O hiperparâmetro perspective define a magnitude da perspectiva, com o ajuste final escolhido aleatoriamente entre -perspective e perspective. Por exemplo, com perspective=0.001, a perspectiva é selecionada aleatoriamente entre -0.001 e 0.001 no eixo x, e um outro valor aleatório independente é selecionado dentro do mesmo intervalo no eixo y.
  • Objetivo: A aumentação de perspectiva é crucial para lidar com mudanças extremas de ponto de vista, especialmente em cenários onde os objetos parecem encurtados ou distorcidos devido a mudanças de perspectiva. Por exemplo, em detecção de objetos por drones, edifícios, estradas e veículos podem parecer esticados ou comprimidos dependendo da inclinação e altitude do drone. Ao aplicar transformações de perspectiva, os modelos aprendem a reconhecer objetos apesar dessas distorções induzidas pela perspectiva, melhorando sua robustez em implementações no mundo real.
  • Implementação do Ultralytics: RandomPerspective
-0.001-0.00050.00.00050.001
Transformação de perspectiva -0.001Transformação de perspectiva -0.0005Original image without augmentationTransformação de perspectiva 0.0005Transformação de perspectiva 0.001

Inversão Vertical (flipud)

  • Intervalo: 0.0 - 1.0
  • Padrão: 0
  • Usage: Performs a vertical flip by inverting the image along the y-axis. This transformation mirrors the entire image upside-down but preserves all spatial relationships between objects. The flipud hyperparameter defines the probability of applying the transformation, with a value of flipud=1.0 ensuring that all images are flipped and a value of flipud=0.0 disabling the transformation entirely. For example, with flipud=0.5, each image has a 50% chance of being flipped upside-down.
  • Objetivo: Útil para cenários onde os objetos podem aparecer de cabeça para baixo. Por exemplo, em sistemas de visão robótica, objetos em esteiras transportadoras ou braços robóticos podem ser coletados e colocados em diversas orientações. A inversão vertical ajuda o modelo a reconhecer objetos independentemente do seu posicionamento.
  • Implementação da Ultralytics: RandomFlip
flipud desligadoflipud ligado
Imagem original sem aumentaçãoAumentação de inversão vertical ativada

Inversão Horizontal (fliplr)

  • Intervalo: 0.0 - 1.0
  • Padrão: 0.5
  • Uso: Realiza uma inversão horizontal espelhando a imagem ao longo do eixo x. Esta transformação troca os lados esquerdo e direito enquanto mantém a consistência espacial, o que ajuda o modelo a generalizar para objetos que aparecem em orientações espelhadas. O hiperparâmetro fliplr define a probabilidade de aplicar a transformação, com um valor de fliplr=1.0 garantindo que todas as imagens sejam invertidas e um valor de fliplr=0.0 desativando a transformação completamente. Por exemplo, com fliplr=0.5, cada imagem tem 50% de chance de ser invertida da esquerda para a direita.
  • Objetivo: A inversão horizontal é amplamente utilizada em detecção de objetos, estimativa de pose e reconhecimento facial para melhorar a robustez contra variações esquerda-direita. Por exemplo, em direção autônoma, veículos e pedestres podem aparecer em qualquer lado da estrada, e a inversão horizontal ajuda o modelo a reconhecê-los igualmente bem em ambas as orientações.
  • Implementação da Ultralytics: RandomFlip
fliplr desligadofliplr ligado
Imagem original sem aumentaçãoAumentação de inversão horizontal ativada

Troca de Canal BGR (bgr)

  • Intervalo: 0.0 - 1.0
  • Padrão: 0
  • Uso: Troca os canais de cor de uma imagem de RGB para BGR, alterando a ordem em que as cores são representadas. O hiperparâmetro bgr define a probabilidade de aplicar a transformação, com bgr=1.0 garantindo que todas as imagens passem pela troca de canal e bgr=0.0 desativando-a. Por exemplo, com bgr=0.5, cada imagem tem 50% de chance de ser convertida de RGB para BGR.
  • Objetivo: Aumenta a robustez para diferentes ordenações de canais de cor. Por exemplo, ao treinar modelos que devem funcionar em vários sistemas de câmeras e bibliotecas de imagem onde os formatos RGB e BGR podem ser usados de forma inconsistente, ou ao implementar modelos em ambientes onde o formato de cor de entrada pode diferir dos dados de treinamento.
  • Implementação da Ultralytics: Format
bgr desligadobgr ligado
Imagem original sem aumentaçãoAumentação de troca de canal BGR

Mosaico (mosaic)

  • Intervalo: 0.0 - 1.0
  • Padrão: 1
  • Uso: Combina quatro imagens de treinamento em uma. O hiperparâmetro mosaic define a probabilidade de aplicar a transformação, com mosaic=1.0 garantindo que todas as imagens sejam combinadas e mosaic=0.0 desativando a transformação. Por exemplo, com mosaic=0.5, cada imagem tem 50% de chance de ser combinada com três outras imagens.
  • Objetivo: Altamente eficaz para melhorar a detecção de pequenos objetos e a compreensão de contexto. Por exemplo, em projetos de conservação da vida selvagem onde os animais podem aparecer em várias distâncias e escalas, a aumentação de mosaico ajuda o modelo a aprender a reconhecer a mesma espécie em diferentes tamanhos, oclusões parciais e contextos ambientais, criando artificialmente diversas amostras de treinamento a partir de dados limitados.
  • Implementação da Ultralytics: Mosaic
  • Nota:
    • Mesmo que a aumentação de mosaic torne o modelo mais robusto, ela também pode tornar o processo de treinamento mais desafiador.
    • A aumentação de mosaic pode ser desativada perto do final do treinamento definindo close_mosaic para o número de épocas antes da conclusão em que deve ser desligada. Por exemplo, se epochs estiver definido como 200 e close_mosaic como 20, a aumentação de mosaic será desativada após 180 épocas. Se close_mosaic for definido como 0, a aumentação de mosaic será ativada durante todo o processo de treinamento.
    • O centro do mosaico gerado é determinado usando valores aleatórios e pode estar dentro ou fora da imagem.
    • A implementação atual da aumentação de mosaic combina 4 imagens escolhidas aleatoriamente do conjunto de dados. Se o conjunto de dados for pequeno, a mesma imagem pode ser usada várias vezes no mesmo mosaico.
mosaic desligadomosaic ligado
Imagem original sem aumentaçãoAumentação de mosaico de 4 imagens ativada

Mixup (mixup)

  • Intervalo: 0.0 - 1.0
  • Padrão: 0
  • Uso: Mistura duas imagens e seus rótulos com uma determinada probabilidade. O hiperparâmetro mixup define a probabilidade de aplicar a transformação, com mixup=1.0 garantindo que todas as imagens sejam misturadas e mixup=0.0 desativando a transformação. Por exemplo, com mixup=0.5, cada imagem tem 50% de chance de ser misturada com outra imagem.
  • Objetivo: Melhora a robustez do modelo e reduz o overfitting. Por exemplo, em sistemas de reconhecimento de produtos de varejo, o mixup ajuda o modelo a aprender características mais robustas misturando imagens de diferentes produtos, ensinando-o a identificar itens mesmo quando estão parcialmente visíveis ou obscurecidos por outros produtos em prateleiras lotadas.
  • Implementação da Ultralytics: Mixup
  • Nota:
    • A taxa de mixup é um valor aleatório escolhido a partir de uma distribuição beta np.random.beta(32.0, 32.0), significando que cada imagem contribui aproximadamente 50%, com pequenas variações.
Primeira imagem, mixup desligadoSegunda imagem, mixup desligadomixup ligado
Primeira imagem para mistura MixUpSegunda imagem para mistura MixUpAumentação de mistura MixUp ativada

CutMix (cutmix)

  • Intervalo: 0.0 - 1.0
  • Padrão: 0
  • Uso: Corta uma região retangular de uma imagem e a cola em outra imagem com uma determinada probabilidade. O hiperparâmetro cutmix define a probabilidade de aplicar a transformação, com cutmix=1.0 garantindo que todas as imagens passem por esta transformação e cutmix=0.0 desativando-a completamente. Por exemplo, com cutmix=0.5, cada imagem tem 50% de chance de ter uma região substituída por um recorte de outra imagem.
  • Objetivo: Aumenta o desempenho do modelo criando cenários de oclusão realistas enquanto mantém a integridade dos recursos locais. Por exemplo, em sistemas de direção autônoma, o cutmix ajuda o modelo a aprender a reconhecer veículos ou pedestres mesmo quando estão parcialmente obscurecidos por outros objetos, melhorando a precisão da detecção em ambientes complexos do mundo real com objetos sobrepostos.
  • Implementação da Ultralytics: CutMix
  • Nota:
    • O tamanho e a posição da região de corte são determinados aleatoriamente para cada aplicação.
    • Ao contrário do mixup, que mistura valores de pixels globalmente, o cutmix mantém as intensidades originais dos pixels dentro das regiões cortadas, preservando os recursos locais.
    • Uma região é colada na imagem de destino apenas se não se sobrepuser a nenhuma caixa delimitadora existente. Além disso, apenas as caixas delimitadoras que mantêm pelo menos 0.1 (10%) de sua área original dentro da região colada são preservadas.
    • Este limite de área mínima da caixa delimitadora não pode ser alterado com a implementação atual e é definido como 0.1 por padrão.
Primeira imagem, cutmix desligadoSegunda imagem, cutmix desligadocutmix ligado
Primeira imagem para CutMixSegunda imagem para CutMixAumentação de CutMix ativada

Aumentações Específicas de Segmentação

Copy-Paste (copy_paste)

  • Intervalo: 0.0 - 1.0
  • Padrão: 0
  • Uso: Funciona apenas para tarefas de segmentação, esta aumentação copia objetos dentro ou entre imagens com base em uma probabilidade especificada, controlada pelo copy_paste_mode. O hiperparâmetro copy_paste define a probabilidade de aplicar a transformação, com copy_paste=1.0 garantindo que todas as imagens sejam copiadas e copy_paste=0.0 desativando a transformação. Por exemplo, com copy_paste=0.5, cada imagem tem 50% de chance de ter objetos copiados de outra imagem.
  • Objetivo: Particularmente útil para tarefas de segmentação de instância e classes de objetos raros. Por exemplo, na detecção de defeitos industriais onde certos tipos de defeitos aparecem com pouca frequência, a aumentação de copy-paste pode aumentar artificialmente a ocorrência desses defeitos raros copiando-os de uma imagem para outra, ajudando o modelo a aprender melhor esses casos sub-representados sem exigir amostras defeituosas adicionais.
  • Implementação da Ultralytics: CopyPaste
  • Nota:
    • Como ilustrado no gif abaixo, a aumentação de copy_paste pode ser usada para copiar objetos de uma imagem para outra.
    • Uma vez que um objeto é copiado, independentemente do copy_paste_mode, sua Interseção sobre Área (IoA) é calculada com todos os objetos da imagem de origem. Se todo o IoA estiver abaixo de 0.3 (30%), o objeto é colado na imagem de destino. Se apenas um dos IoA for superior a 0.3, o objeto não é colado na imagem de destino.
    • O limite de IoA não pode ser alterado com a implementação atual e é definido como 0.3 por padrão.
copy_paste desligadocopy_paste ligado com copy_paste_mode=flipVisualize o processo de copy_paste
Imagem original sem aumentaçãoAumentação de copy-paste ativadaDemonstração animada da aumentação de copy-paste

Modo Copy-Paste (copy_paste_mode)

  • Opções: 'flip', 'mixup'
  • Padrão: 'flip'
  • Uso: Determina o método usado para a aumentação de copy-paste. Se definido como 'flip', os objetos vêm da mesma imagem, enquanto 'mixup' permite que objetos sejam copiados de imagens diferentes.
  • Objetivo: Permite flexibilidade em como os objetos copiados são integrados nas imagens de destino.
  • Implementação da Ultralytics: CopyPaste
  • Nota:
    • O princípio de IoA é o mesmo para ambos os copy_paste_mode, mas a maneira como os objetos são copiados é diferente.
    • Dependendo do tamanho da imagem, os objetos podem, às vezes, ser copiados parcial ou inteiramente fora do quadro.
    • Dependendo da qualidade das anotações de polígono, os objetos copiados podem ter pequenas variações de forma em comparação com os originais.
Imagem de referênciaImagem escolhida para copy_pastecopy_paste ligado com copy_paste_mode=mixup
Segunda imagem para mistura MixUpImagem original sem aumentaçãoCopy-paste com modo MixUp

Aumentações Específicas de Classificação

Auto Augment (auto_augment)

  • Opções: 'randaugment', 'autoaugment', 'augmix', None
  • Padrão: 'randaugment'
  • Uso: Aplica políticas de aumento automatizadas para classificação. A opção 'randaugment' usa o RandAugment, 'autoaugment' usa o AutoAugment e 'augmix' usa o AugMix. Definir como None desativa o aumento automatizado.
  • Objetivo: Otimiza estratégias de aumento automaticamente para tarefas de classificação. As diferenças são as seguintes:
    • AutoAugment: Este modo aplica políticas de aumento predefinidas aprendidas a partir de conjuntos de dados como ImageNet, CIFAR10 e SVHN. Você pode selecionar essas políticas existentes, mas não pode treinar novas dentro do Torchvision. Para descobrir estratégias de aumento ideais para conjuntos de dados específicos, seriam necessárias bibliotecas externas ou implementações personalizadas. Referência ao artigo sobre AutoAugment.
    • RandAugment: Aplica uma seleção aleatória de transformações com magnitude uniforme. Esta abordagem reduz a necessidade de uma fase de pesquisa extensiva, tornando-a mais eficiente computacionalmente, enquanto ainda aumenta a robustez do modelo. Referência ao artigo sobre RandAugment.
    • AugMix: AugMix é um método de aumento de dados que melhora a robustez do modelo criando diversas variações de imagem através de combinações aleatórias de transformações simples. Referência ao artigo sobre AugMix.
  • Implementação da Ultralytics: classify_augmentations()
  • Nota:
    • Essencialmente, a principal diferença entre os três métodos é a maneira como as políticas de aumento são definidas e aplicadas.
    • Você pode consultar este artigo que compara os três métodos em detalhes.

Apagamento Aleatório (erasing)

  • Intervalo: 0.0 - 0.9
  • Padrão: 0.4
  • Uso: Apaga aleatoriamente partes da imagem durante o treinamento de classificação. O hiperparâmetro erasing define a probabilidade de aplicar a transformação, sendo que erasing=0.9 garante que quase todas as imagens sejam apagadas e erasing=0.0 desativa a transformação. Por exemplo, com erasing=0.5, cada imagem tem 50% de chance de ter uma parte apagada.
  • Objetivo: Ajuda os modelos a aprender características robustas e evita a dependência excessiva de regiões específicas da imagem. Por exemplo, em sistemas de reconhecimento facial, o apagamento aleatório ajuda os modelos a se tornarem mais robustos a oclusões parciais, como óculos de sol, máscaras faciais ou outros objetos que podem cobrir parcialmente as características faciais. Isso melhora o desempenho no mundo real ao forçar o modelo a identificar indivíduos usando múltiplas características faciais em vez de depender apenas de traços distintos que podem estar ocultos.
  • Implementação da Ultralytics: classify_augmentations()
  • Nota:
    • O aumento erasing vem com os hiperparâmetros scale, ratio e value que não podem ser alterados com a implementação atual. Seus valores padrão são (0.02, 0.33), (0.3, 3.3) e 0, respectivamente, conforme declarado na documentação do PyTorch.
    • O limite superior do hiperparâmetro erasing é definido como 0.9 para evitar a aplicação da transformação a todas as imagens.
erasing desativadoerasing ativado (exemplo 1)erasing ativado (exemplo 2)erasing ativado (exemplo 3)
Imagem original sem aumentoExemplo 1 de apagamento aleatórioExemplo 2 de apagamento aleatórioExemplo 3 de apagamento aleatório

Recursos Avançados de Aumento

Transformações Albumentations Personalizadas (augmentations)

  • Tipo: list de transformações Albumentations
  • Padrão: None
  • Uso: Permite que você forneça transformações personalizadas do Albumentations para aumento de dados usando a API Python. Este parâmetro aceita uma lista de objetos de transformação Albumentations que serão aplicados durante o treinamento em vez das transformações Albumentations padrão.
  • Objetivo: Fornece controle refinado sobre estratégias de aumento de dados aproveitando a extensa biblioteca de transformações do Albumentations. Isso é particularmente útil quando você precisa de aumentos especializados além das opções nativas do YOLO, como ajustes avançados de cor, injeção de ruído ou transformações específicas de domínio.
  • Implementação da Ultralytics: Albumentations
Exemplo com Albumentations Personalizado
import albumentations as A

from ultralytics import YOLO

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

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

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

Pontos-Chave:

  • Apenas API Python: As transformações personalizadas do Albumentations são suportadas atualmente apenas através da API Python. Elas não podem ser especificadas via CLI ou arquivos de configuração YAML.
  • Substitui Transformações Padrão: Quando você fornece transformações personalizadas através do parâmetro augmentations, elas substituem completamente as transformações padrão do Albumentations. Os aumentos padrão do YOLO (como mosaic, hsv_h, hsv_s, degrees, etc.) permanecem ativos e são aplicados independentemente.
  • Compatibilidade com Bounding Box: Tenha cuidado ao usar transformações espaciais (transformações que alteram a geometria da imagem). A Ultralytics lida com ajustes de bounding box automaticamente, mas algumas transformações complexas podem exigir configuração adicional.
  • Biblioteca Extensa: O Albumentations oferece mais de 70 transformações diferentes. Explore a documentação do Albumentations para descobrir todas as opções disponíveis.
  • Consideração de Desempenho: Adicionar muitos aumentos ou usar transformações computacionalmente caras pode deixar o treinamento mais lento. Comece com um conjunto pequeno e monitore a velocidade do treinamento.

Casos de Uso Comuns:

  • Imagens Médicas: Aplique transformações especializadas como deformações elásticas ou distorções de grade para aumento de imagens de Raio-X ou ressonância magnética.
  • Imagens Aéreas/de Satélite: Use transformações otimizadas para perspectivas de cima (overhead).
  • Condições de Baixa Luminosidade: Aplique ajustes de ruído e brilho para simular iluminação desafiadora.
  • Inspeção Industrial: Adicione padrões semelhantes a defeitos ou variações de textura para aplicações de controle de qualidade.

Notas de Compatibilidade:

  • Requer Albumentations versão 1.0.3 ou superior.
  • Compatível com todas as tarefas de detecção e segmentação do YOLO.
  • Não aplicável para tarefas de classificação (a classificação usa um pipeline de aumento diferente).

Para mais informações sobre o Albumentations e as transformações disponíveis, visite a documentação oficial do Albumentations.

FAQ

Existem muitos tipos de aumento para escolher. Como sei quais usar?

A escolha dos aumentos certos depende do seu caso de uso específico e do conjunto de dados. Aqui estão algumas diretrizes gerais para ajudar você a decidir:

  • Na maioria dos casos, pequenas variações de cor e brilho são benéficas. Os valores padrão para hsv_h, hsv_s e hsv_v são um ponto de partida sólido.
  • Se o ponto de vista da câmera for consistente e não mudar após a implantação do modelo, você provavelmente pode pular transformações geométricas como rotation, translation, scale, shear ou perspective. No entanto, se o ângulo da câmera puder variar e você precisar que o modelo seja mais robusto, é melhor manter esses aumentos.
  • Use o aumento mosaic apenas se tiver objetos parcialmente ocluídos ou vários objetos por imagem for aceitável e não alterar o valor do rótulo. Alternativamente, você pode manter o mosaic ativo, mas aumentar o valor de close_mosaic para desativá-lo mais cedo no processo de treinamento.

Em resumo: mantenha a simplicidade. Comece com um pequeno conjunto de aumentos e adicione gradualmente mais conforme necessário. O objetivo é melhorar a generalização e a robustez do modelo, não complicar demais o processo de treinamento. Além disso, certifique-se de que os aumentos que você aplica reflitam a mesma distribuição de dados que seu modelo encontrará em produção.

Ao iniciar um treinamento, vejo uma referência albumentations: Blur[...]. Isso significa que o Ultralytics YOLO executa aumentos adicionais como desfoque?

Se o pacote albumentations estiver instalado, a Ultralytics aplica automaticamente um conjunto de aumentos de imagem extras usando-o. Esses aumentos são tratados internamente e não exigem configuração adicional.

Você pode encontrar a lista completa de transformações aplicadas em nossa documentação técnica, bem como em nosso guia de integração do Albumentations. Observe que apenas os aumentos com uma probabilidade p maior que 0 estão ativos. Eles são aplicados propositalmente em baixas frequências para imitar artefatos visuais do mundo real, como desfoque ou efeitos de escala de cinza.

Você também pode fornecer suas próprias transformações personalizadas do Albumentations usando a API Python. Veja a seção Recursos Avançados de Aumento para mais detalhes.

Ao iniciar um treinamento, não vejo nenhuma referência ao Albumentations. Por quê?

Verifique se o pacote albumentations está instalado. Caso contrário, você pode instalá-lo executando pip install albumentations. Uma vez instalado, o pacote deve ser detectado e usado automaticamente pela Ultralytics.

Como posso personalizar meus aumentos?

Você pode personalizar aumentos criando uma classe de conjunto de dados e um treinador personalizados. Por exemplo, você pode substituir os aumentos de classificação padrão da Ultralytics por torchvision.transforms.Resize do PyTorch ou outras transformações. Consulte o exemplo de treinamento personalizado na documentação de classificação para detalhes de implementação.

Comentários