Data Augmentation
O aumento de dados treina modelos com cópias de imagens existentes transformadas aleatoriamente, por exemplo, com inversões, recortes e alterações de cor, para melhorar a generalização.
O aumento de dados amplia a variedade de um conjunto de dados de treino ao aplicar transformações aleatórias, como inversões, recortes, redimensionamentos, alterações de cor e mistura de imagens, aos exemplos que já contém. Cada cópia transformada mantém o rótulo original, por isso o modelo aprende que um objeto continua a ser o mesmo objeto apesar de mudanças de perspetiva, iluminação e posição. Recolher e rotular imagens novas é lento e dispendioso, o que faz do aumento de dados a forma mais barata de prevenir o sobreajuste; quase todos os modelos modernos de visão computacional são treinados com ele.
Como funciona o aumento de dados#
A maioria dos pipelines de treino aplica aumento de dados em tempo real: o carregador de dados transforma cada imagem ao criar um lote, sorteando novos parâmetros aleatórios a cada vez, de modo que cada época vê uma versão diferente de cada imagem. Em contrapartida, o aumento de dados offline grava um número fixo de cópias transformadas no disco antes do treino, multiplicando o armazenamento necessário e oferecendo ao modelo muito menos variantes distintas.
Duas regras impedem que o aumento de dados corrompa os dados. Primeiro, os rótulos têm de acompanhar os píxeis: em deteção de objetos, segmentação de instâncias e estimativa de pose, uma transformação geométrica tem de atualizar cada caixa delimitadora, máscara e ponto-chave; uma inversão horizontal também troca os pontos-chave da esquerda e da direita. Segundo, a transformação tem de corresponder a algo que poderia acontecer no mundo real: inversões verticais são adequadas para imagens aéreas e de microscópio, mas, em cenas de rua, criam carros virados ao contrário que nunca aparecem no momento da inferência. As transformações do Torchvision tratam automaticamente da primeira regra quando as caixas são passadas juntamente com a imagem:
from urllib.request import urlopen
from PIL import Image
from torchvision import tv_tensors
from torchvision.transforms import v2
image = Image.open(urlopen("https://ultralytics.com/images/bus.jpg")) # 810 x 1080 pixels
boxes = tv_tensors.BoundingBoxes([[50, 400, 250, 900]], format="XYXY", canvas_size=(1080, 810))
# Flip every time (p=1.0) and shift colors; the box must move with the pixels
augment = v2.Compose([v2.RandomHorizontalFlip(p=1.0), v2.ColorJitter(brightness=0.4, saturation=0.7)])
new_image, new_boxes = augment(image, boxes)
print(f"Original box: {boxes.tolist()}")
print(f"Flipped box: {new_boxes.tolist()}")A caixa à volta do homem à esquerda da imagem desloca-se de [50, 400, 250, 900] para [560, 400, 760, 900], espelhada ao longo da largura de 810 píxeis, enquanto o ajuste de cor altera os píxeis sem tocar na caixa.
Técnicas comuns#
- Transformações geométricas: Inversões, rotações, escalas, translações, recortes, cisalhamentos e deformações em perspetiva simulam diferentes posições de câmara e tamanhos de objetos.
- Transformações fotométricas: Alterações de brilho, contraste, saturação e matiz, além de desfoque e ruído, simulam diferentes condições de iluminação, sensores e qualidade de imagem.
- Oclusão: O apagamento aleatório e o recorte ocultam retângulos para que o modelo não dependa de uma única parte de um objeto.
- Mistura de imagens: O MixUp combina duas imagens e os seus rótulos, o CutMix cola um recorte de uma imagem noutra, o mosaico organiza quatro imagens numa única amostra de treino, e a cópia e colagem transfere objetos segmentados para novos fundos.
- Políticas automatizadas: O RandAugment aplica uma sequência aleatória de transformações controlada por apenas duas definições: o número de transformações e a sua intensidade. Isso elimina a pesquisa dispendiosa necessária nas políticas aprendidas anteriores.
Pipelines de aumento de dados para deteção de objetos#
Os pipelines de deteção encadeiam várias transformações, cada uma aplicada com a sua própria probabilidade, para que cada imagem de treino receba uma combinação aleatória diferente.
O treino do Ultralytics YOLO executa este pipeline por predefinição, com mosaico em todas as imagens (mosaic=1.0), 50% de probabilidade de inversão horizontal (fliplr=0.5), escala até ±50% e alterações de cor HSV; o mosaico é desativado nas 10 épocas finais (close_mosaic=10) para que o modelo termine o treino com imagens completas e de aspeto natural.
from ultralytics import YOLO
# Carrega um modelo YOLO26n pré-treinado
model = YOLO("yolo26n.pt")
# fliplr: probabilidade de inversão horizontal; scale: intervalo de zoom (+/- 70%); degrees: intervalo de rotação (+/- 5)
results = model.train(data="coco8.yaml", epochs=10, fliplr=0.5, scale=0.7, degrees=5.0)Durante esta execução, o treinador YOLO26 guarda os três primeiros lotes aumentados como train_batch0.jpg, train_batch1.jpg e train_batch2.jpg, com as caixas desenhadas, para que possas verificar o efeito de cada definição antes de iniciar uma execução longa.
Aumento de dados em comparação com termos relacionados#
- Dados sintéticos: Gerados de raiz com mecanismos de renderização, simuladores ou modelos de difusão. O aumento de dados modifica imagens reais que já existem.
- Pré-processamento de dados: Etapas determinísticas, como redimensionamento e normalização, aplicadas da mesma forma a todas as imagens durante o treino e a inferência. O aumento de dados é aleatório e só ocorre durante o treino.
- Aumento no momento do teste (TTA): Executa a inferência em várias versões aumentadas da mesma entrada, como cópias invertidas e redimensionadas, e combina as previsões, trocando capacidade computacional adicional por um pequeno ganho de precisão.










