Ultralytics YOLO27:

Aumento de dados com Ultralytics YOLO#

YOLO data augmentation examples showing original and augmented images for training

Introdução#

O aumento de dados é uma técnica crucial em visão computacional que expande artificialmente o seu conjunto de dados de treino ao aplicar várias transformações a imagens existentes. Ao treinar modelos de aprendizagem profunda, como o Ultralytics YOLO, o aumento de dados ajuda a melhorar a robustez do modelo, reduz o sobreajuste 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 o aumento de dados é importante#

O aumento de dados cumpre vários objetivos essenciais no treino de modelos de visão computacional:

  • Conjunto de dados expandido: Ao criar variações de imagens existentes, pode aumentar efetivamente o tamanho do seu conjunto de dados de treino sem recolher dados novos.
  • Generalização melhorada: Os modelos aprendem a reconhecer objetos em várias condições, tornando-se mais robustos em aplicações do mundo real.
  • Sobreajuste reduzido: Ao introduzir variabilidade nos dados de treino, é menos provável que os modelos memorizem características específicas das imagens.
  • Desempenho melhorado: Os modelos treinados com um aumento adequado geralmente alcançam melhor precisão em conjuntos de validação e teste.

A implementação do Ultralytics YOLO fornece um conjunto abrangente de técnicas de aumento, cada uma com objetivos específicos e contribuindo de formas diferentes para o desempenho do modelo. Este guia explora as definições de aumento abaixo, ajudando-te a compreender quando e como utilizá-las eficazmente nos teus projetos.

Configurações de exemplo#

Pode personalizar cada parâmetro utilizando a API do Python, a interface de linha de comandos (CLI) ou um ficheiro de configuração. Abaixo encontram-se 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)
Definir os argumentos de aumento como zero não desativa o Albumentations

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

Utilizar um ficheiro de configuração#

Pode definir todos os parâmetros de treino, incluindo os aumentos, num ficheiro de configuração YAML (por exemplo, train_custom.yaml). O parâmetro mode só é necessário ao utilizar a CLI. Este novo ficheiro YAML substituirá o ficheiro 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

Em seguida, inicia o treino com a API do 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")

Aumentos do espaço de cor#

Ajuste da tonalidade (hsv_h)#

  • Intervalo: 0.0 - 1.0
  • Predefinição: 0.015
  • Utilização: Desloca as cores da imagem preservando as suas relações. O hiperparâmetro hsv_h define a magnitude do deslocamento, sendo o ajuste final escolhido aleatoriamente entre -hsv_h e hsv_h. Por exemplo, com hsv_h=0.3, o deslocamento é selecionado aleatoriamente entre -0.3 e 0.3. Para valores superiores a 0.5, o deslocamento da tonalidade dá a volta ao círculo cromático; por isso, os aumentos têm o mesmo aspeto entre 0.5 e -0.5.
  • Objetivo: Particularmente útil em cenários exteriores, onde as condições de iluminação podem afetar drasticamente o aspeto dos objetos. Por exemplo, uma banana pode parecer mais amarela sob luz solar intensa, mas mais esverdeada no interior.
  • 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 da 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 deslocamento, sendo 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 e 0.7.
  • Objetivo: Ajuda os modelos a lidar com condições meteorológicas e definições de câmara variáveis. Por exemplo, um sinal de trânsito vermelho pode parecer muito vívido num dia ensolarado, mas apresentar cores baças e desvanecidas 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 do 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 deslocamento, sendo 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 e 0.4.
  • Objetivo: 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 à 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 entre -10.0 e 10.0.
  • Objetivo: Crucial para aplicações em que os objetos podem surgir com diferentes orientações. Por exemplo, em imagens aéreas captadas por drones, 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 deslocamento, 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 entre -0.5 e 0.5 no eixo x, e outro valor aleatório independente é selecionado dentro do mesmo intervalo no eixo y.
  • Objetivo: Ajuda os modelos a aprender a detetar objetos parcialmente visíveis e melhora a robustez à posição dos objetos. Por exemplo, em aplicações de avaliação de danos em veículos, as peças dos carros podem aparecer total ou parcialmente no enquadramento, dependendo da posição e da distância do fotógrafo; o aumento por translação ensina o modelo a reconhecer estas características independentemente da sua integridade ou posição.
  • Implementação do Ultralytics: RandomPerspective
  • Nota: Para simplificar, as translações aplicadas abaixo são iguais em cada ocasião para ambos os eixos x e y. Os valores -1.0 e 1.0 não são apresentados, pois transladariam 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 float ou uma tupla (min, max) explícita
  • Predefinição: 0.5
  • Utilização: Redimensiona as imagens por um fator aleatório dentro do intervalo especificado. Como float, o hiperparâmetro scale define o ganho de escala, sendo o fator final escolhido aleatoriamente entre 1-scale e 1+scale. Por exemplo, com scale=0.5, a escala é selecionada aleatoriamente entre 0.5 e 1.5. Como tupla, scale define diretamente esse intervalo, pelo que scale=(0.5, 2.0) amostra o fator entre 0.5 e 2.0.
  • Objetivo: Permite que os modelos lidem com objetos a diferentes distâncias e tamanhos. Por exemplo, em aplicações de condução autónoma, os veículos podem surgir 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 é apresentado, pois faria a imagem desaparecer, enquanto 1.0 resulta simplesmente num zoom de 2x.
    • Os valores apresentados na tabela abaixo são as variações de escala realizadas, não os valores que passas ao hiperparâmetro scale.
    • A forma float é validada para o intervalo 0.0 - 1.0, e um valor fora desse intervalo gera um ValueError. Para amostrar um fator superior a um zoom de 2x, passa antes a forma de tupla (min, max).
    • A forma de tupla aplica-se apenas a tarefas geométricas. O treino de classificação deriva o seu próprio intervalo de recorte a partir do float (1.0 - scale a 1.0), pelo que passar uma tupla nesse caso 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 inclina 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, sendo o ajuste final escolhido aleatoriamente entre -shear e shear. Por exemplo, com shear=10.0, o cisalhamento é selecionado aleatoriamente entre -10 e 10 no eixo x, e outro valor aleatório independente é selecionado dentro do mesmo intervalo no eixo y.
  • Objetivo: Ajuda os modelos a generalizar para variações nos ângulos de visão causadas por ligeiras inclinações ou perspetivas oblíquas. Por exemplo, na monitorização de tráfego, objetos como carros e sinais rodoviários podem parecer inclinados devido à colocação não perpendicular das câmaras. A aplicação do aumento por 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 é recomendável começar com valores pequenos e aumentá-los gradualmente.
    • Ao contrário das transformações de perspetiva, o cisalhamento não introduz profundidade nem pontos de fuga; em vez disso, distorce a forma dos objetos alterando os seus ângulos enquanto mantém 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 a diferentes profundidades ou ângulos. O hiperparâmetro perspective define a magnitude da perspetiva, sendo o ajuste final escolhido aleatoriamente entre -perspective e perspective. Por exemplo, com perspective=0.001, a perspetiva é selecionada aleatoriamente entre -0.001 e 0.001 no eixo x, e outro valor aleatório independente é selecionado dentro do mesmo intervalo no eixo y.
  • Objetivo: O aumento de perspetiva é crucial para lidar com alterações extremas do ponto de vista, especialmente em cenários onde os objetos parecem encurtados ou distorcidos devido a mudanças de perspetiva. Por exemplo, na deteção de objetos com drones, edifícios, estradas e veículos podem parecer esticados ou comprimidos dependendo da inclinação e da altitude do drone. Ao aplicar transformações de perspetiva, os modelos aprendem a reconhecer objetos apesar dessas distorções induzidas pela perspetiva, melhorando a sua robustez em implementações do 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: Realiza uma inversão vertical, invertendo 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 o valor flipud=1.0 o que garante que todas as imagens são invertidas e o valor flipud=0.0 o que desativa completamente a transformação. Por exemplo, com flipud=0.5, cada imagem tem 50% de probabilidade de ser invertida de cabeça para baixo.
  • Objetivo: Útil em cenários onde os objetos podem surgir de cabeça para baixo. Por exemplo, em sistemas de visão robótica, os objetos em tapetes transportadores ou braços robóticos podem ser recolhidos e colocados em várias orientações. A inversão vertical ajuda o modelo a reconhecer objetos independentemente da sua orientação de cima para baixo.
  • 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: Realiza uma inversão horizontal, espelhando a imagem ao longo do eixo x. Esta transformação troca os lados esquerdo e direito mantendo a consistência espacial, o que ajuda o modelo a generalizar para objetos que surgem em orientações espelhadas. O hiperparâmetro fliplr define a probabilidade de aplicar a transformação, sendo o valor fliplr=1.0 o que garante que todas as imagens são invertidas e o valor fliplr=0.0 o que desativa completamente a transformação. Por exemplo, com fliplr=0.5, cada imagem tem 50% de probabilidade de ser invertida da esquerda para a direita.
  • Objetivo: A inversão horizontal é amplamente utilizada na deteção de objetos, na estimativa de pose e no reconhecimento facial para melhorar a robustez perante variações entre a esquerda e a direita. Por exemplo, na condução autónoma, os veículos e peões podem surgir 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, sendo bgr=1.0 o que garante que todas as imagens sofrem a troca de canais e bgr=0.0 o que a desativa. Por exemplo, com bgr=0.5, cada imagem tem 50% de probabilidade de ser convertida de RGB para BGR.
  • Objetivo: Aumenta a robustez perante diferentes ordens dos canais de cor. Por exemplo, ao treinar modelos que precisam de funcionar em vários sistemas de câmaras e bibliotecas de processamento de imagem onde os formatos RGB e BGR podem ser utilizados de forma inconsistente, ou ao implementar modelos em ambientes onde o formato de cor de entrada pode diferir dos dados de treino.
  • Implementação do Ultralytics: Format
bgr desativadobgr ativado
Original image without augmentationBGR channel swap augmentation

Mosaic (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, sendo mosaic=1.0 o que garante que todas as imagens são combinadas e mosaic=0.0 o que desativa a transformação. Por exemplo, com mosaic=0.5, cada imagem tem 50% de probabilidade de ser combinada com outras três imagens.
  • Objetivo: Altamente eficaz para melhorar a deteção de objetos pequenos e a compreensão do contexto. Por exemplo, em projetos de conservação da vida selvagem, onde os animais podem surgir a várias distâncias e escalas, o aumento mosaic ajuda o modelo a aprender a reconhecer a mesma espécie em diferentes tamanhos, com oclusões parciais e em vários contextos ambientais, criando artificialmente amostras de treino diversificadas 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 final do treino, definindo close_mosaic para o número de épocas antes da conclusão em que deve ser desativado. Por exemplo, se epochs estiver definido como 200 e close_mosaic estiver definido como 20, o aumento mosaic será desativado após 180 épocas. Se close_mosaic estiver definido como 0, o aumento mosaic será ativado durante todo o processo de treino.
    • Fechar o mosaic também desativa copy_paste, mixup e cutmix na mesma época. Os quatro são desativados em conjunto, pelo que as épocas finais decorrem sem eles, enquanto todos os outros aumentos — as transformações geométricas, HSV, as inversões e o Albumentations — continuam a ser executados. Nota que copy_paste, no seu modo predefinido flip, funciona numa única imagem em vez de combinar várias.
    • O centro do mosaic gerado é determinado utilizando valores aleatórios e pode ficar dentro ou fora da imagem.
    • A implementação atual do aumento mosaic combina a imagem atual com outras 3, obtidas de um buffer de imagens carregadas recentemente ou de qualquer localização do conjunto de dados quando cache='ram'. Em ambos os casos, são amostradas com reposição, pelo que a mesma imagem pode aparecer mais do que uma vez num único mosaic.
mosaic desativadomosaic ativado
Original image without augmentationMosaic 4-image augmentation enabled

Mixup (mixup)#

  • Intervalo: 0.0 - 1.0
  • Predefinição: 0
  • Utilização: Combina duas imagens e as suas etiquetas com uma determinada probabilidade. O hiperparâmetro mixup define a probabilidade de aplicar a transformação, sendo mixup=1.0 o que garante que todas as imagens são misturadas e mixup=0.0 o que desativa a transformação. Por exemplo, com mixup=0.5, cada imagem tem 50% de probabilidade de ser misturada com outra imagem.
  • Objetivo: Melhora a robustez do modelo e reduz o sobreajuste. Por exemplo, em sistemas de reconhecimento de produtos de retalho, o mixup ajuda o modelo a aprender características mais robustas ao combinar imagens de produtos diferentes, ensinando-o a identificar artigos mesmo quando estão parcialmente visíveis ou ocultos por outros produtos em prateleiras de lojas cheias.
  • Implementação do Ultralytics: Mixup
  • Nota:
    • A proporção mixup é um valor aleatório obtido de uma distribuição beta np.random.beta(32.0, 32.0), o que significa que cada imagem contribui aproximadamente com 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 determinada probabilidade. O hiperparâmetro cutmix define a probabilidade de aplicar a transformação, sendo cutmix=1.0 o que garante que todas as imagens sofrem esta transformação e cutmix=0.0 o que a desativa completamente. Por exemplo, com cutmix=0.5, cada imagem tem 50% de probabilidade de ter uma região substituída por um recorte de outra imagem.
  • Objetivo: Melhora o desempenho do modelo ao criar cenários de oclusão realistas, preservando simultaneamente a integridade das características locais. Por exemplo, em sistemas de condução autónoma, o cutmix ajuda o modelo a aprender a reconhecer veículos ou peões mesmo quando estão parcialmente ocultos por outros objetos, melhorando a precisão da deteçã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 em cada aplicação.
    • Ao contrário do mixup, que combina globalmente os valores dos píxeis, cutmix mantém as intensidades originais dos píxeis dentro das regiões recortadas, preservando as características locais.
    • Uma região só é colada na imagem de destino se não se sobrepuser a nenhuma BBox existente. Além disso, apenas são preservadas as BBox que mantêm uma parte suficiente da sua área original dentro da região colada.
    • Este limiar mínimo da área da BBox não pode ser alterado na implementação atual. É 0.1 (10%) para etiquetas de deteção e 0.01 (1%) quando as etiquetas incluem segmentos.
Primeira imagem, cutmix desativadoSegunda imagem, cutmix desativadocutmix ativado
First image for CutMixSecond image for CutMixCutMix augmentation enabled

Aumentos de copiar e colar#

Copy-Paste (copy_paste)#

  • Intervalo: 0.0 - 1.0
  • Predefinição: 0
  • Utilização: Requer etiquetas poligonais, pelo que se aplica a tarefas de segmentação e OBB; este aumento copia objetos dentro ou entre imagens, sendo controlado por 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 copy-paste. copy_paste=0.0 desativa a transformação.
  • Objetivo: Particularmente útil para tarefas de segmentação de instâncias e classes de objetos raras. Por exemplo, na deteção de defeitos industriais, onde certos tipos de defeitos surgem com pouca frequência, o aumento copy-paste pode aumentar artificialmente a ocorrência desses defeitos raros ao copiá-los de uma imagem para outra, ajudando o modelo a aprender melhor estes casos sub-representados sem exigir amostras defeituosas adicionais.
  • Implementação do Ultralytics: CopyPaste
  • Nota:
    • Como mostrado no vídeo abaixo, a ampliação copy_paste pode ser usada para copiar objetos de uma imagem para outra.
    • Depois de selecionar um objeto para copiar, o IoA é calculado em relação a todos os objetos já presentes na imagem de destino, independentemente de copy_paste_mode. O objeto só é colado se todos os valores de IoA forem inferiores a 0.3 (30%); não é colado se algum valor de IoA for 0.3 ou superior.
    • O limiar de IoA não pode ser alterado com a implementação atual e, por predefinição, está definido como 0.3.
copy_paste desativadocopy_paste ativado com copy_paste_mode=flipVisualizar o processo de copy_paste
Original image without augmentationCopy-paste augmentation enabled

Modo de copiar-colar (copy_paste_mode)#

  • Opções: 'flip', 'mixup'
  • Predefinição: 'flip'
  • Utilização: Determina o método usado para a ampliação de copiar-colar. Se definido como 'flip', os objetos vêm da mesma imagem, enquanto 'mixup' permite copiar objetos 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 de 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, por vezes os objetos podem ser copiados parcialmente ou totalmente para fora do enquadramento.
    • Dependendo da qualidade das anotações de polígonos, os objetos copiados podem apresentar ligeiras 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

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

Ampliação automática (auto_augment)#

  • Opções: 'randaugment', 'autoaugment', 'augmix', None
  • Predefinição: 'randaugment'
  • Utilização: Aplica políticas de ampliação automatizadas para classificação. A opção 'randaugment' usa RandAugment, 'autoaugment' usa AutoAugment e 'augmix' usa AugMix. Definir como None desativa a ampliação automatizada.
  • Objetivo: Otimiza automaticamente as estratégias de ampliação para tarefas de classificação. As diferenças são as seguintes:
    • AutoAugment: Este modo aplica políticas de ampliação 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 no Torchvision. Para descobrir estratégias de ampliação ideais para conjuntos de dados específicos, seriam necessárias bibliotecas externas ou implementações personalizadas. Consulta o 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 extensa, tornando-a mais eficiente do ponto de vista computacional e melhorando simultaneamente a robustez do modelo. Consulta o artigo sobre RandAugment.
    • AugMix: AugMix é um método de ampliação de dados que melhora a robustez do modelo ao criar variações diversificadas de imagens através de combinações aleatórias de transformações simples. Consulta o artigo sobre AugMix.
  • Implementação da Ultralytics: classify_augmentations()
  • Nota:
    • Essencialmente, a principal diferença entre os três métodos é a forma como as políticas de ampliação são definidas e aplicadas.
    • Podes consultar este artigo, que compara detalhadamente os três métodos.

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, sendo que erasing=1.0 apaga uma região em todas as imagens e erasing=0.0 desativa a transformação. Por exemplo, com erasing=0.5, cada imagem tem 50% de probabilidade 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 tornarem-se mais robustos a oclusões parciais, como óculos de sol, máscaras faciais ou outros objetos que possam cobrir parcialmente as características faciais. Isto melhora o desempenho no mundo real ao obrigar o modelo a identificar indivíduos usando várias características faciais, em vez de depender exclusivamente de características distintivas que podem estar obscurecidas.
  • Implementação da Ultralytics: classify_augmentations()
  • Nota:
    • A ampliação erasing inclui os hiperparâmetros scale, ratio e value, que não podem ser alterados com a implementação atual. Os 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

Funcionalidades avançadas de ampliação#

Transformações personalizadas do Albumentations (augmentations)#

  • Tipo: list de transformações do Albumentations
  • Predefinição: None
  • Utilização: Permite fornecer transformações personalizadas do Albumentations para ampliação de dados usando a API do Python. Este parâmetro aceita uma lista de objetos de transformação do Albumentations, que serão aplicados durante o treino em vez das transformações predefinidas do Albumentations.
  • Objetivo: Proporciona um controlo detalhado sobre as estratégias de ampliação de dados, aproveitando a extensa biblioteca de transformações do Albumentations. Isto é particularmente útil quando precisas de ampliações especializadas além das opções integradas do YOLO, como deformações elásticas e distorções de grelha para imagens médicas, transformações ajustadas a perspetivas aéreas e de satélite, alteraçõ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 da Ultralytics: Albumentations
  • Nota:
    • A criação dos objetos de transformação requer a API do Python. A Ultralytics serializa-os com A.to_dict() ao guardar um checkpoint, pelo que uma lista já serializada pode fazer round-trip através de um ficheiro de configuração YAML ou da CLI, permitindo que resume os restaure.
    • As transformações personalizadas substituem completamente o conjunto predefinido do Albumentations. Todas as ampliações configuradas noutros pontos desta página — mosaic, hsv_h, degrees e as restantes — permanecem ativas e são aplicadas de forma independente.
    • Transformações espaciais que alteram a geometria da imagem, incluindo aquelas aninhadas em A.OneOf ou A.Compose, movem caixas delimitadoras, polígonos, pontos-chave e máscaras de profundidade ou semânticas junto com a imagem; A.RandomGridShuffle não pode preservar a topologia de polígonos ou pontos-chave e gera um erro em amostras de segmentação, pose e OBB.
    • O Albumentations disponibiliza mais de 70 transformações; a documentação do Albumentations apresenta a lista completa. Adicionar muitas transformações, ou transformações computacionalmente dispendiosas, torna o treino mais lento, por isso começa com um conjunto pequeno e acompanha o tempo por época.
    • Aplica-se às tarefas detect, segment, semantic, depth, pose e obb. A classificação está excluída, pois usa um pipeline de ampliação separado.

Os exemplos abaixo requerem o Albumentations 1.4.22 ou posterior e, por isso, o Python 3.9 ou posterior.

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

Perguntas frequentes#

  • A escolha das ampliações adequadas depende do teu caso de utilização específico e do teu conjunto de dados. Eis algumas orientações gerais para te ajudar a decidir:

    • Na maioria dos casos, ligeiras variações de cor e brilho são benéficas. Os valores predefinidos de hsv_h, hsv_s e hsv_v são um bom ponto de partida.
    • Se o ponto de vista da câmara for consistente e não mudar depois de o modelo ser implementado, provavelmente podes ignorar transformações geométricas como rotation, translation, scale, shear ou perspective. No entanto, se o ângulo da câmara puder variar e precisares de tornar o modelo mais robusto, é melhor manter estas ampliações.
    • Usa a ampliação mosaic apenas se for aceitável ter objetos parcialmente ocluídos ou vários objetos por imagem e isso não alterar 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: mantém a simplicidade. Começa com um conjunto pequeno de ampliações e adiciona gradualmente mais conforme necessário. O objetivo é melhorar a generalização e a robustez do modelo, não complicar excessivamente o processo de treino. Além disso, certifica-te de que as ampliações aplicadas refletem a mesma distribuição de dados que o modelo encontrará em produção.

  • Se o pacote albumentations estiver instalado, a Ultralytics aplica automaticamente um conjunto de ampliações de imagem adicionais usando esse pacote. Estas ampliações são processadas internamente e não requerem configuração adicional.

    Podes encontrar a lista completa das transformações aplicadas na nossa documentação técnica, bem como no nosso guia de integração do Albumentations. Nota que apenas as ampliações com uma probabilidade p superior a 0 estão ativas. Estas são aplicadas intencionalmente com baixa frequência para imitar artefactos visuais do mundo real, como efeitos de desfocagem ou de escala de cinzentos.

    Também podes fornecer as tuas próprias transformações personalizadas do Albumentations usando a API do Python. Consulta a secção Funcionalidades avançadas de ampliação para obter mais informações.

  • Verifica se o pacote albumentations está instalado. Caso contrário, instala-o:

    pip install albumentations

    Depois de instalado, o pacote deverá ser detetado e utilizado automaticamente pela Ultralytics.

  • Podes personalizar as ampliações criando uma classe de conjunto de dados e um treinador personalizados. Por exemplo, podes substituir as ampliações de classificação predefinidas da Ultralytics por torchvision.transforms.Resize do PyTorch ou por outras transformações. Consulta o exemplo de treino personalizado na documentação de classificação para obter detalhes de implementação.

Comentários