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 precisam acompanhar os pixels: em detecção de objetos, segmentação de instâncias e estimativa de pose, uma transformação geométrica precisa atualizar cada caixa delimitadora, máscara e ponto-chave, e uma inversão horizontal também troca os pontos-chave da esquerda e da direita. Segundo, a transformação precisa representar 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 de cabeça para baixo, que nunca aparecem no momento da inferência. As transformações do Torchvision aplicam automaticamente a primeira regra quando as caixas são passadas junto 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.










