YOLO Vision 2026:

Aumento de dados usando Ultralytics YOLO#

YOLO data augmentation examples showing original and augmented images for training

Introdução#

Aumento de dados é uma técnica crucial em visão computacional que expande artificialmente o teu conjunto de dados de treino aplicando várias transformações às imagens existentes. Ao treinar modelos de deep learning como Ultralytics YOLO, o aumento de dados ajuda a melhorar a robustez do modelo, reduz o sobreajuste (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 🚀

Porque é que o Aumento de Dados é Importante#

O aumento de dados serve vários 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 recolher novos dados.
  • Generalização Melhorada: Os modelos aprendem a reconhecer objetos sob várias condições, tornando-se mais robustos em aplicações do mundo real.
  • Overfitting Reduzido: 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 aumento adequado normalmente alcançam melhor precisão nos conjuntos de validação e teste.

A implementação do Ultralytics YOLO fornece um conjunto abrangente de técnicas de aumento, cada uma servindo a propósitos específicos e contribuindo para o desempenho do modelo de diferentes maneiras. Este guia explora as configurações de aumento abaixo, ajudando-te a entender quando e como usá-las efetivamente nos teus projetos.

Configurações de Exemplo#

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 o aumento 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="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)
Zerar os argumentos de aumento não desativa o Albumentations

As transformações listadas nesta página são aquelas que controlas através dos argumentos de treino. O Ultralytics também aplica um pequeno conjunto do Albumentations — desfoque, desfoque mediano, escala de cinza e CLAHE, cada um em p=0.01 — sempre que o pacote albumentations estiver instalado, e nenhum argumento em default.yaml o desativa. Desinstala o pacote para o remover, ou passa a tua própria lista para augmentations para o substituir.

Usando um ficheiro de configuração#

Podes definir todos os parâmetros de treino, incluindo aumentos, num ficheiro de configuração YAML (por exemplo, train_custom.yaml). O parâmetro mode só é necessário quando usas a CLI. Este novo ficheiro YAML irá então substituir o predefinido 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 Treinamento
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 de Espaço de Cor#

Ajuste de Matiz (hsv_h)#

  • Intervalo: 0.0 - 1.0
  • Predefinição: 0.015
  • Utilização: Altera as cores da imagem preservando as suas relações. O hiperparâmetro hsv_h define a magnitude do desvio, sendo o ajuste final escolhido aleatoriamente entre -hsv_h e hsv_h. Por exemplo, com hsv_h=0.3, o desvio é selecionado aleatoriamente dentro de -0.3 até 0.3. Para valores acima de 0.5, o desvio de matiz dá a volta na roda de cores, e é por isso que os aumentos 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
  • Predefinição: 0.7
  • Utilização: Modifica a intensidade das cores na imagem. O hiperparâmetro hsv_s define a magnitude do desvio, sendo o ajuste final escolhido aleatoriamente entre -hsv_s e hsv_s. Por exemplo, com hsv_s=0.7, a intensidade é selecionada aleatoriamente dentro de -0.7 até 0.7.
  • Propósito: Ajuda os modelos a lidar com condições meteorológicas variáveis e definições de câmara. Por exemplo, um sinal de trânsito vermelho pode parecer muito vívido num dia de sol, 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
  • Predefinição: 0.4
  • Utilização: Altera o brilho da imagem. O hiperparâmetro hsv_v define a magnitude do desvio, sendo o ajuste final escolhido aleatoriamente entre -hsv_v e hsv_v. Por exemplo, com hsv_v=0.4, a intensidade é selecionada aleatoriamente dentro de -0.4 até 0.4.
  • Propósito: Essencial para treinar modelos que precisam de funcionar 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
  • Predefinição: 0
  • Utilização: Roda as imagens aleatoriamente dentro do intervalo especificado. O hiperparâmetro degrees define o ângulo de rotação, sendo o ajuste final escolhido aleatoriamente entre -degrees e degrees. Por exemplo, com degrees=10.0, a rotação é selecionada aleatoriamente dentro de -10.0 até 10.0.
  • Propósito: Crucial para aplicações onde os objetos podem aparecer em diferentes orientações. Por exemplo, em imagens de drones aéreos, os veículos podem estar orientados em qualquer direção, exigindo que os modelos reconheçam os 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
  • Predefinição: 0.1
  • Utilização: Desloca as imagens horizontal e verticalmente por uma fração aleatória do tamanho da imagem. O hiperparâmetro translate define a magnitude do desvio, sendo 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 dentro de -0.5 até 0.5 no eixo x, e outro valor aleatório independente é selecionado dentro do mesmo intervalo no eixo y.
  • Propósito: Ajuda os modelos a aprender a detetar objetos parcialmente visíveis e melhora a robustez em relação à 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; o aumento de translação ensinará o modelo a reconhecer estas características independentemente da sua completude ou posição.
  • Implementação do Ultralytics: RandomPerspective
  • Nota: Por simplicidade, as translações aplicadas abaixo são as mesmas em cada momento 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 como um float, ou um tuplo explícito (min, max)
  • Predefinição: 0.5
  • Utilização: Redimensiona imagens por um fator aleatório dentro do intervalo especificado. Como um float, o hiperparâmetro scale define o ganho de escala, com o fator final escolhido aleatoriamente entre 1-scale e 1+scale. Por exemplo, com scale=0.5, a escala é selecionada aleatoriamente dentro de 0.5 a 1.5. Como um tuplo, scale define esse intervalo diretamente, de modo que scale=(0.5, 2.0) amostra o fator entre 0.5 e 2.0.
  • 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 deltas de escala realizados, e não os valores que passas para o hiperparâmetro scale.
    • A forma de float é validada para o intervalo 0.0 - 1.0, e um valor fora dele gera um ValueError. Para amostrar um fator além de um zoom de 2x, passa a forma de tuplo (min, max) em vez disso.
    • A forma de tuplo aplica-se apenas às tarefas geométricas. O treino de classificação deriva o seu próprio intervalo de corte a partir do float (1.0 - scale a 1.0), portanto, passar um tuplo aí gera um TypeError.
-0.5-0.250.00.250.5
Scale 0.5x zoom out augmentationScale 0.75x zoom out augmentationOriginal image without augmentationScale 1.25x zoom in augmentationScale 1.5x zoom in augmentation

Cisalhamento (shear)#

  • Intervalo: -180 a +180
  • Predefinição: 0
  • Utilização: Introduz uma transformação geométrica que distorce a imagem ao longo dos eixos x e y, deslocando efetivamente 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 dentro de -10 até 10 no eixo x, e outro valor aleatório independente é selecionado dentro do mesmo intervalo no eixo y.
  • Propósito: Ajuda os modelos a generalizar para variações nos â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 trânsito podem parecer inclinados devido a colocações de câmara não perpendiculares. Aplicar o aumento de cisalhamento garante que o modelo aprende a reconhecer objetos apesar dessas distorções.
  • Implementação do Ultralytics: RandomPerspective
  • Nota:
    • Os valores de shear podem distorcer rapidamente a imagem, pelo que é 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

Perspetiva (perspective)#

  • Intervalo: 0.0 - 0.001
  • Predefinição: 0
  • Utilização: Aplica uma transformação de perspetiva completa ao longo dos eixos x e y, simulando o aspeto dos objetos quando vistos de diferentes profundidades ou ângulos. O hiperparâmetro perspective define a magnitude da perspetiva, com o ajuste final escolhido aleatoriamente entre -perspective e perspective. Por exemplo, com perspective=0.001, a perspetiva é selecionada aleatoriamente dentro de -0.001 até 0.001 no eixo x, e 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 baseada em 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
Perspective -0.001 transformationPerspective -0.0005 transformationOriginal image without augmentationPerspective 0.0005 transformationPerspective 0.001 transformation

Inversão Vertical (flipud)#

  • Intervalo: 0.0 - 1.0
  • Predefinição: 0
  • Utilização: Executa uma inversão vertical ao inverter a imagem ao longo do eixo y. Esta transformação espelha toda a imagem de cabeça para baixo, mas preserva todas as relações espaciais entre os objetos. O hiperparâmetro flipud define a probabilidade de aplicar a transformação, sendo que um valor de flipud=1.0 garante que todas as imagens são invertidas e um valor de flipud=0.0 desativa totalmente a transformação. Por exemplo, com flipud=0.5, cada imagem tem uma probabilidade de 50% de ser invertida de cabeça para baixo.
  • 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 várias orientações. A inversão vertical ajuda o modelo a reconhecer objetos independentemente do seu posicionamento vertical.
  • Implementação do Ultralytics: RandomFlip
flipud desativadoflipud ativado
Original image without augmentationVertical flip augmentation enabled

Inversão Horizontal (fliplr)#

  • Intervalo: 0.0 - 1.0
  • Predefinição: 0.5
  • Utilização: Executa 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 a garantir que todas as imagens são invertidas e um valor de fliplr=0.0 a desativar totalmente a transformação. Por exemplo, com fliplr=0.5, cada imagem tem uma probabilidade de 50% de ser invertida da esquerda para a direita.
  • Objetivo: A inversão horizontal é amplamente usada 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 do Ultralytics: RandomFlip
fliplr desativadofliplr ativado
Original image without augmentationHorizontal flip augmentation enabled

Troca de Canais BGR (bgr)#

  • Intervalo: 0.0 - 1.0
  • Predefinição: 0
  • Utilização: Troca os canais de cor de uma imagem de RGB para BGR, alterando a ordem pela qual as cores são representadas. O hiperparâmetro bgr define a probabilidade de aplicar a transformação, com bgr=1.0 a garantir que todas as imagens sofrem a troca de canais e bgr=0.0 a desativá-la. Por exemplo, com bgr=0.5, cada imagem tem uma probabilidade de 50% de ser convertida de RGB para BGR.
  • Objetivo: Aumenta a robustez a diferentes ordenações de canais de cor. Por exemplo, ao treinar modelos que devem funcionar em vários sistemas de câmera e bibliotecas de imagem onde 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 do Ultralytics: Format
bgr desativadobgr ativado
Original image without augmentationBGR channel swap augmentation

Mosaico (mosaic)#

  • Intervalo: 0.0 - 1.0
  • Predefinição: 1
  • Utilização: Combina quatro imagens de treino numa só. O hiperparâmetro mosaic define a probabilidade de aplicar a transformação, com mosaic=1.0 a garantir que todas as imagens são combinadas e mosaic=0.0 a desativar a transformação. Por exemplo, com mosaic=0.5, cada imagem tem uma probabilidade de 50% de ser combinada com outras três imagens.
  • Objetivo: Altamente eficaz para melhorar a detecção de pequenos objetos e a compreensão do contexto. Por exemplo, em projetos de conservação da vida selvagem onde os animais podem aparecer a várias distâncias e escalas, a aumentação de mosaico ajuda o modelo a aprender a reconhecer a mesma espécie através de diferentes tamanhos, oclusões parciais e contextos ambientais, criando artificialmente diversas amostras de treinamento a partir de dados limitados.
  • Implementação do Ultralytics: Mosaic
  • Nota:
    • Mesmo que o aumento mosaic torne o modelo mais robusto, também pode tornar o processo de treino mais desafiante.
    • O aumento mosaic pode ser desativado perto do fim do treino definindo close_mosaic para o número de épocas antes da conclusão em que deve ser desligado. Por exemplo, se epochs for definido como 200 e close_mosaic for definido como 20, o aumento mosaic será desativado após 180 épocas. Se close_mosaic for definido como 0, o aumento mosaic será ativado durante todo o processo de treino.
    • Fechar o mosaico também desativa copy_paste, mixup e cutmix na mesma época. Os quatro são desativados juntos, de modo que as épocas finais treinam sem eles, enquanto todos os outros aumentos — as transformações geométricas, HSV, inversões e Albumentations — continuam a correr. Nota que copy_paste no seu modo predefinido flip funciona dentro de uma única imagem em vez de combinar várias.
    • O centro do mosaico gerado é determinado usando valores aleatórios, e pode estar dentro ou fora da imagem.
    • A implementação atual do aumento mosaic combina a imagem atual com outras 3, extraídas de um buffer de imagens carregadas recentemente, ou de qualquer lugar no conjunto de dados quando cache='ram'. De qualquer forma, elas são amostradas com reposição, para que a mesma imagem possa aparecer mais do que uma vez num único mosaico.
mosaic desativadomosaic ativado
Original image without augmentationMosaic 4-image augmentation enabled

Mixup (mixup)#

  • Intervalo: 0.0 - 1.0
  • Predefinição: 0
  • Utilização: Mistura duas imagens e respetivas etiquetas com uma dada probabilidade. O hiperparâmetro mixup define a probabilidade de aplicar a transformação, com mixup=1.0 a garantir que todas as imagens são misturadas e mixup=0.0 a desativar a transformação. Por exemplo, com mixup=0.5, cada imagem tem uma probabilidade de 50% 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 ao misturar imagens de diferentes produtos, ensinando-o a identificar itens mesmo quando estão parcialmente visíveis ou obscurecidos por outros produtos em prateleiras de lojas lotadas.
  • Implementação do Ultralytics: Mixup
  • Nota:
    • O rácio mixup é um valor aleatório escolhido a partir de uma distribuição beta np.random.beta(32.0, 32.0), o que significa que cada imagem contribui com aproximadamente 50%, com pequenas variações.
Primeira imagem, mixup desativadoSegunda imagem, mixup desativadomixup ativado
First image for MixUp blendingSecond image for MixUp blendingMixUp blending augmentation enabled

CutMix (cutmix)#

  • Intervalo: 0.0 - 1.0
  • Predefinição: 0
  • Utilização: Recorta uma região retangular de uma imagem e cola-a noutra imagem com uma dada probabilidade. O hiperparâmetro cutmix define a probabilidade de aplicar a transformação, com cutmix=1.0 a garantir que todas as imagens passam por esta transformação e cutmix=0.0 a desativá-la por completo. Por exemplo, com cutmix=0.5, cada imagem tem uma probabilidade de 50% de ver uma região substituída por um retalho de outra imagem.
  • Objetivo: Aumenta o desempenho do modelo ao criar 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 do Ultralytics: CutMix
  • Nota:
    • O tamanho e a posição da região recortada são determinados aleatoriamente para cada aplicação.
    • Ao contrário do mixup, que mistura os valores dos píxeis globalmente, cutmix mantém as intensidades originais dos píxeis dentro das regiões recortadas, preservando as características 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 retêm área original suficiente dentro da região colada são preservadas.
    • Este limite mínimo de área de caixa delimitadora não pode ser alterado com a implementação atual. É 0.1 (10%) para rótulos de deteção e 0.01 (1%) assim que os rótulos contêm segmentos.
Primeira imagem, cutmix desativadoSegunda imagem, cutmix desativadocutmix ativado
First image for CutMixSecond image for CutMixCutMix augmentation enabled

Aumentações de Copiar e Colar#

Copy-Paste (copy_paste)#

  • Intervalo: 0.0 - 1.0
  • Predefinição: 0
  • Uso: Requer rótulos de polígono, portanto aplica-se a tarefas de segmentação e OBB; esta aumetnção copia objetos dentro ou entre imagens, controlado pelo copy_paste_mode. No modo flip, copy_paste é a fração de objetos elegíveis copiados: uma imagem com seis objetos elegíveis ganha três cópias em copy_paste=0.5. No modo mixup, o mesmo valor também controla a probabilidade de execução do copiar e colar. copy_paste=0.0 desativa a transformação.
  • 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 do Ultralytics: CopyPaste
  • Nota:
    • Conforme mostrado no vídeo abaixo, o aumento copy_paste pode ser usado para copiar objetos de uma imagem para outra.
    • Assim que um objeto é selecionado para cópia, a sua IoA é calculada em relação a todos os objetos já presentes na imagem de destino, independentemente de copy_paste_mode. O objeto é colado apenas se todos os valores de IoA estiverem abaixo de 0.3 (30%); não é colado se qualquer valor de IoA for 0.3 ou superior.
    • O limiar de IoA não pode ser alterado com a implementação atual e está definido como 0.3 por predefinição.
copy_paste desativadocopy_paste ativado com copy_paste_mode=flipVisualizar o processo de copy_paste
Original image without augmentationCopy-paste augmentation enabled

Modo Copy-Paste (copy_paste_mode)#

  • Opções: 'flip', 'mixup'
  • Predefinição: 'flip'
  • Utilização: Determina o método utilizado para o aumento copy-paste. Se definido como 'flip', os objetos vêm da mesma imagem, enquanto 'mixup' permite que os objetos sejam copiados de imagens diferentes.
  • Objetivo: Permite flexibilidade na forma como os objetos copiados são integrados nas imagens de destino.
  • Implementação do Ultralytics: CopyPaste
  • Nota:
    • O princípio da IoA é o mesmo para ambas as opções de copy_paste_mode, mas a forma como os objetos são copiados é diferente.
    • Dependendo do tamanho da imagem, os objetos podem, às vezes, ser copiados parcialmente ou inteiramente fora do quadro.
    • Dependendo da qualidade das anotações poligonais, 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 ativado com copy_paste_mode=mixup
Second image for MixUp blendingOriginal image without augmentationCopy-paste with MixUp mode

Aumentações específicas para classificação#

Auto Augment (auto_augment)#

  • Opções: 'randaugment', 'autoaugment', 'augmix', None
  • Predefinição: 'randaugment'
  • Utilização: Aplica políticas de aumento automatizadas para classificação. A opção 'randaugment' utiliza RandAugment, 'autoaugment' utiliza AutoAugment e 'augmix' utiliza 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. Os utilizadores podem selecionar estas políticas existentes, mas não podem treinar novas dentro do Torchvision. Para descobrir estratégias de aumento ótimas para conjuntos de dados específicos, seriam necessárias bibliotecas externas ou implementações personalizadas. Referência ao artigo do 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 do ponto de vista computacional, enquanto continua a melhorar a robustez do modelo. Referência ao artigo do RandAugment.
    • AugMix: AugMix é um método de aumento de dados que melhora a robustez do modelo ao criar diversas variações de imagem através de combinações aleatórias de transformações simples. Referência ao artigo do AugMix.
  • Implementação do 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.
    • Podes consultar este artigo que compara os três métodos em detalhe.

Apagamento Aleatório (erasing)#

  • Intervalo: 0.0 - 1.0
  • Predefinição: 0.4
  • Utilização: Apaga aleatoriamente partes da imagem durante o treino de classificação. O hiperparâmetro erasing define a probabilidade de aplicar a transformação, com erasing=1.0 a apagar uma região em cada imagem e erasing=0.0 a desativar a transformação. Por exemplo, com erasing=0.5, cada imagem tem 50% de hipóteses de ter uma porção 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 possam 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 características distintivas que podem estar obscurecidas.
  • Implementação do Ultralytics: classify_augmentations()
  • Nota:
    • O aumento erasing inclui os hiperparâmetros scale, ratio e value que não podem ser alterados com a implementação atual. Os seus valores predefinidos são (0.02, 0.33), (0.3, 3.3) e 0, respetivamente, conforme indicado na documentação do PyTorch.
erasing desativadoerasing ativado (exemplo 1)erasing ativado (exemplo 2)erasing ativado (exemplo 3)
Original image without augmentationRandom erasing example 1Random erasing example 2Random erasing example 3

Recursos Avançados de Aumento#

Transformações Albumentations Personalizadas (augmentations)#

  • Tipo: list de transformações do Albumentations
  • Predefinição: None
  • Utilização: Permite fornecer transformações Albumentations personalizadas para o aumento de dados através da API Python. Este parâmetro aceita uma lista de objetos de transformação Albumentations que serão aplicados durante o treino em vez das transformações Albumentations predefinidas.
  • Objetivo: Fornece controlo refinado sobre as estratégias de aumento de dados, tirando partido da extensa biblioteca de transformações do Albumentations. Isto é particularmente útil quando precisas de aumentos especializados além das opções integradas do YOLO, tais como deformações elásticas e distorções de grelha para imagens médicas, transformações ajustadas para perspetivas aéreas e de satélite, variações de ruído e brilho que simulam condições de pouca luz, ou variações de textura semelhantes a defeitos para inspeção industrial.
  • Implementação do Ultralytics: Albumentations
  • Nota:
    • Construir os objetos de transformação requer a API Python. O Ultralytics serializa-os com A.to_dict() ao guardar um ponto de controlo, de modo que uma lista já serializada passa por um ficheiro de configuração YAML ou pela CLI, que é o que permite a resume restaurá-los.
    • As transformações personalizadas substituem completamente o conjunto predefinido do Albumentations. Cada aumento configurado noutro lugar nesta página — mosaic, hsv_h, degrees e o resto — permanece ativo e é aplicado de forma independente.
    • Sê cauteloso com transformações espaciais que alteram a geometria da imagem. O Ultralytics ajusta as caixas delimitadoras automaticamente, mas algumas transformações complexas podem exigir configuração adicional.
    • O Albumentations oferece mais de 70 transformações; a documentação do Albumentations lista todas elas. Adicionar muitas transformações, ou algumas computacionalmente dispendiosas, torna o treino mais lento, por isso começa com um pequeno conjunto e observa o tempo por época.
    • Aplica-se às tarefas detect, segment, semantic, depth, pose e obb. A classificação está excluída, pois utiliza um pipeline de aumento separado.

Os exemplos abaixo precisam do Albumentations 1.4.22 ou mais recente e, portanto, do Python 3.9 ou mais recente.

Exemplo de Albumentations Personalizado
import albumentations as A

from ultralytics import YOLO

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

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

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

FAQ#

  • Escolher os aumentos certos depende do seu caso de uso específico e dataset. Aqui estão algumas diretrizes gerais para ajudá-lo a decidir:

    • Na maioria dos casos, pequenas variações na cor e no brilho são benéficas. Os valores predefinidos para hsv_h, hsv_s e hsv_v são um excelente ponto de partida.
    • Se o ponto de vista da câmara for consistente e não mudar após o modelo ser implementado, podes provavelmente ignorar transformações geométricas como rotation, translation, scale, shear ou perspective. No entanto, se o ângulo da câmara puder variar e precisares que o modelo seja mais robusto, é melhor manter estes aumentos.
    • Usa o aumento mosaic apenas se tiveres objetos parcialmente ocluídos ou vários objetos por imagem de forma aceitável e que isso não altere o valor da etiqueta. Em alternativa, podes manter mosaic ativo mas aumentar o valor de close_mosaic para o desativar mais cedo no processo de treino.

    Em resumo: mantenha as coisas simples. Comece com um conjunto pequeno de aumentos e gradualmente adicione mais conforme necessário. O objetivo é melhorar a generalização e robustez do modelo, não complicar 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á na produção.

  • Se o pacote albumentations estiver instalado, o Ultralytics aplica automaticamente um conjunto de aumentos de imagem extra utilizando-o. Estes aumentos são geridos internamente e não requerem nenhuma configuração adicional.

    Podes encontrar a lista completa de transformações aplicadas na nossa documentação técnica, bem como no nosso guia de integração do Albumentations. Nota que apenas os aumentos com uma probabilidade p superior a 0 estão ativos. Estes são propositadamente aplicados a baixas frequências para imitar artefactos visuais do mundo real, tais como efeitos de desfoque ou escala de cinzentos.

    Também podes fornecer as tuas próprias transformações Albumentations personalizadas utilizando a API Python. Consulta a secção Funcionalidades de Aumento Avançadas para mais detalhes.

  • Verifica se o pacote albumentations está instalado. Se não estiver, instala-o:

    pip install albumentations

    Uma vez instalado, o pacote deve ser detetado e utilizado automaticamente pelo Ultralytics.

  • Podes personalizar as augmentations criando uma classe de dataset e um trainer personalizados. Por exemplo, podes substituir as augmentations de classificação predefinidas do Ultralytics por torchvision.transforms.Resize do PyTorch ou outras transforms. Vê o custom training example na documentação de classificação para detalhes de implementação.

Comentários