Aumento de dados com Ultralytics YOLO#
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.
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)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.5Em seguida, inicia o treino com a API do Python:
from ultralytics import YOLO
# Load a COCO-pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Train the model with custom configuration
model.train(cfg="train_custom.yaml")Aumentos 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_hdefine a magnitude do deslocamento, sendo o ajuste final escolhido aleatoriamente entre-hsv_hehsv_h. Por exemplo, comhsv_h=0.3, o deslocamento é selecionado aleatoriamente entre-0.3e0.3. Para valores superiores a0.5, o deslocamento da tonalidade dá a volta ao círculo cromático; por isso, os aumentos têm o mesmo aspeto entre0.5e-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.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
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_sdefine a magnitude do deslocamento, sendo o ajuste final escolhido aleatoriamente entre-hsv_sehsv_s. Por exemplo, comhsv_s=0.7, a intensidade é selecionada aleatoriamente entre-0.7e0.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.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
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_vdefine a magnitude do deslocamento, sendo o ajuste final escolhido aleatoriamente entre-hsv_vehsv_v. Por exemplo, comhsv_v=0.4, a intensidade é selecionada aleatoriamente entre-0.4e0.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.5 | 0.0 | 0.5 | 1.0 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Transformações geométricas#
Rotação (degrees)#
- Intervalo:
0.0a180 - Predefinição:
0 - Utilização: Roda as imagens aleatoriamente dentro do intervalo especificado. O hiperparâmetro
degreesdefine o ângulo de rotação, sendo o ajuste final escolhido aleatoriamente entre-degreesedegrees. Por exemplo, comdegrees=10.0, a rotação é selecionada aleatoriamente entre-10.0e10.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 | -90 | 0.0 | 90 | 180 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
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
translatedefine a magnitude do deslocamento, sendo o ajuste final escolhido aleatoriamente duas vezes (uma para cada eixo) dentro do intervalo-translateetranslate. Por exemplo, comtranslate=0.5, a translação é selecionada aleatoriamente entre-0.5e0.5no 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
xey. Os valores-1.0e1.0não são apresentados, pois transladariam a imagem completamente para fora do enquadramento.
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Escala (scale)#
- Intervalo:
0.0-1.0como 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
scaledefine o ganho de escala, sendo o fator final escolhido aleatoriamente entre1-scalee1+scale. Por exemplo, comscale=0.5, a escala é selecionada aleatoriamente entre0.5e1.5. Como tupla,scaledefine diretamente esse intervalo, pelo quescale=(0.5, 2.0)amostra o fator entre0.5e2.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.0não é apresentado, pois faria a imagem desaparecer, enquanto1.0resulta 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 umValueError. 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 - scalea1.0), pelo que passar uma tupla nesse caso gera umTypeError.
- O valor
-0.5 | -0.25 | 0.0 | 0.25 | 0.5 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Cisalhamento (shear)#
- Intervalo:
-180a+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
sheardefine o ângulo de cisalhamento, sendo o ajuste final escolhido aleatoriamente entre-sheareshear. Por exemplo, comshear=10.0, o cisalhamento é selecionado aleatoriamente entre-10e10no 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
shearpodem 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.
- Os valores de
-10 | -5 | 0.0 | 5 | 10 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
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
perspectivedefine a magnitude da perspetiva, sendo o ajuste final escolhido aleatoriamente entre-perspectiveeperspective. Por exemplo, comperspective=0.001, a perspetiva é selecionada aleatoriamente entre-0.001e0.001no 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.0005 | 0.0 | 0.0005 | 0.001 |
|---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
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.0o que garante que todas as imagens são invertidas e o valorflipud=0.0o que desativa completamente a transformação. Por exemplo, comflipud=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 desativado | flipud ativado |
|---|---|
![]() | ![]() |
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
fliplrdefine a probabilidade de aplicar a transformação, sendo o valorfliplr=1.0o que garante que todas as imagens são invertidas e o valorfliplr=0.0o que desativa completamente a transformação. Por exemplo, comfliplr=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 desativado | fliplr ativado |
|---|---|
![]() | ![]() |
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
bgrdefine a probabilidade de aplicar a transformação, sendobgr=1.0o que garante que todas as imagens sofrem a troca de canais ebgr=0.0o que a desativa. Por exemplo, combgr=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 desativado | bgr ativado |
|---|---|
![]() | ![]() |
Mosaic (mosaic)#
- Intervalo:
0.0-1.0 - Predefinição:
1 - Utilização: Combina quatro imagens de treino numa só. O hiperparâmetro
mosaicdefine a probabilidade de aplicar a transformação, sendomosaic=1.0o que garante que todas as imagens são combinadas emosaic=0.0o que desativa a transformação. Por exemplo, commosaic=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
mosaictorne o modelo mais robusto, também pode tornar o processo de treino mais desafiante. - O aumento
mosaicpode ser desativado perto do final do treino, definindoclose_mosaicpara o número de épocas antes da conclusão em que deve ser desativado. Por exemplo, seepochsestiver definido como200eclose_mosaicestiver definido como20, o aumentomosaicserá desativado após180épocas. Seclose_mosaicestiver definido como0, o aumentomosaicserá ativado durante todo o processo de treino. - Fechar o mosaic também desativa
copy_paste,mixupecutmixna 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 quecopy_paste, no seu modo predefinidoflip, 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
mosaiccombina a imagem atual com outras 3, obtidas de um buffer de imagens carregadas recentemente ou de qualquer localização do conjunto de dados quandocache='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.
- Mesmo que o aumento
mosaic desativado | mosaic ativado |
|---|---|
![]() | ![]() |
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
mixupdefine a probabilidade de aplicar a transformação, sendomixup=1.0o que garante que todas as imagens são misturadas emixup=0.0o que desativa a transformação. Por exemplo, commixup=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 betanp.random.beta(32.0, 32.0), o que significa que cada imagem contribui aproximadamente com 50%, com pequenas variações.
- A proporção
Primeira imagem, mixup desativado | Segunda imagem, mixup desativado | mixup ativado |
|---|---|---|
![]() | ![]() | ![]() |
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
cutmixdefine a probabilidade de aplicar a transformação, sendocutmix=1.0o que garante que todas as imagens sofrem esta transformação ecutmix=0.0o que a desativa completamente. Por exemplo, comcutmix=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,
cutmixmanté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 e0.01(1%) quando as etiquetas incluem segmentos.
Primeira imagem, cutmix desativado | Segunda imagem, cutmix desativado | cutmix ativado |
|---|---|---|
![]() | ![]() | ![]() |
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 modoflip,copy_pasteé a fração de objetos elegíveis copiados: uma imagem com seis objetos elegíveis ganha três cópias emcopy_paste=0.5. No modomixup, o mesmo valor também controla a probabilidade de execução do copy-paste.copy_paste=0.0desativa 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_pastepode 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 a0.3(30%); não é colado se algum valor de IoA for0.3ou superior. - O limiar de IoA não pode ser alterado com a implementação atual e, por predefinição, está definido como
0.3.
- Como mostrado no vídeo abaixo, a ampliação
copy_paste desativado | copy_paste ativado com copy_paste_mode=flip | Visualizar o processo de copy_paste |
|---|---|---|
![]() | ![]() |
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.
- O princípio de IoA é o mesmo para ambas as opções de
| Imagem de referência | Imagem escolhida para copy_paste | copy_paste ativado com copy_paste_mode=mixup |
|---|---|---|
![]() | ![]() | ![]() |
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 comoNonedesativa 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
erasingdefine a probabilidade de aplicar a transformação, sendo queerasing=1.0apaga uma região em todas as imagens eerasing=0.0desativa a transformação. Por exemplo, comerasing=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
erasinginclui os hiperparâmetrosscale,ratioevalue, que não podem ser alterados com a implementação atual. Os valores predefinidos são(0.02, 0.33),(0.3, 3.3)e0, respetivamente, conforme indicado na documentação do PyTorch.
- A ampliação
erasing desativado | erasing ativado (exemplo 1) | erasing ativado (exemplo 2) | erasing ativado (exemplo 3) |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
Funcionalidades avançadas de ampliação#
Transformações personalizadas do Albumentations (augmentations)#
- Tipo:
listde 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 queresumeos 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,degreese 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.OneOfouA.Compose, movem caixas delimitadoras, polígonos, pontos-chave e máscaras de profundidade ou semânticas junto com a imagem;A.RandomGridShufflenã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,poseeobb. A classificação está excluída, pois usa um pipeline de ampliação separado.
- A criação dos objetos de transformação requer a API do Python. A Ultralytics serializa-os com
Os exemplos abaixo requerem o Albumentations 1.4.22 ou posterior e, por isso, o Python 3.9 ou posterior.
import albumentations as A
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Define custom Albumentations transforms
custom_transforms = [
A.Blur(blur_limit=7, p=0.5),
A.GaussNoise(std_range=(0.0124, 0.0277), p=0.3),
A.CLAHE(clip_limit=4.0, p=0.5),
A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.5),
A.HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, p=0.5),
]
# Train with custom Albumentations transforms
model.train(
data="coco8.yaml",
epochs=100,
augmentations=custom_transforms, # Pass custom transforms
imgsz=640,
)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_sehsv_vsã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,shearouperspective. 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
mosaicapenas 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 mantermosaicativo, mas aumentar o valor declose_mosaicpara 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.
- Na maioria dos casos, ligeiras variações de cor e brilho são benéficas. Os valores predefinidos de
Se o pacote
albumentationsestiver 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
psuperior a0estã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
albumentationsestá instalado. Caso contrário, instala-o:pip install albumentationsDepois 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.













































