CutMix
O CutMix cola um recorte retangular de uma imagem de treinamento em outra e combina os rótulos de acordo com a área do recorte, melhorando a precisão e a localização.
CutMix é uma técnica de aumento de dados que recorta uma região retangular de uma imagem de treinamento, cola essa região sobre a mesma área de outra imagem e combina os dois rótulos proporcionalmente à área ocupada por cada imagem. Sangdoo Yun e colegas da NAVER Clova AI Research apresentaram a técnica em um artigo da ICCV de 2019 como uma combinação de duas ideias anteriores: a remoção de uma região aleatória do Cutout e a combinação de rótulos do MixUp. No ImageNet, o CutMix reduziu o erro top-1 de um ResNet-50 de 23,68% para 21,40%, superando o MixUp, com 22,58%, e o Cutout, com 22,93%; além disso, os modelos pré-treinados com essa técnica também foram mais bem transferidos para detecção de objetos e legendas de imagens.
Como funciona o CutMix#
Para cada par de imagens A e B, o CutMix amostra uma proporção de combinação λ de uma distribuição Beta, que, com o parâmetro padrão α = 1, é uniforme entre 0 e 1. Em seguida, desenha uma caixa cuja largura e altura correspondem à largura e à altura da imagem multiplicadas por √(1 − λ), centraliza a caixa em um ponto aleatório, limita-a às bordas da imagem e copia essa região de B para A. Após o recorte, λ é recalculado como a fração de A que permanece, e o rótulo passa a conter λ partes de A e (1 − λ) partes de B; assim, um recorte de 30% de um gato em uma imagem de cachorro resulta em um alvo de 0,7 para cachorro e 0,3 para gato. O treinamento minimiza a função de perda em relação a esse rótulo suave, da mesma forma que com o suavizamento de rótulos.
O torchvision do PyTorch aplica CutMix a um lote inteiro, pareando cada imagem com a vizinha no lote:
import torch
from torchvision.transforms import v2
# A batch of 4 random 224x224 images labeled with classes 0-3 of 10
torch.manual_seed(0)
images = torch.rand(4, 3, 224, 224)
labels = torch.tensor([0, 1, 2, 3])
# Paste a random box from each image's neighbor in the batch and mix the labels by area
cutmix = v2.CutMix(num_classes=10)
mixed_images, mixed_labels = cutmix(images, labels)
# Image 0 received its patch from image 3
pasted = (mixed_images[0] != images[0]).any(dim=0).float().mean()
print(f"pasted area: {pasted:.3f}")
print(f"label weights for classes 0-3: {mixed_labels[0, :4].numpy().round(3)}")A saída mostra uma área colada de 0,187 e pesos de rótulo de 0,813 para a classe 0 e 0,187 para a classe 3: a parcela do alvo atribuída a cada classe corresponde à parcela de pixels que ela fornece.
Por que o CutMix ajuda#
Um modelo de classificação de imagens treinado com imagens inteiras pode acertar ao reconhecer uma parte pequena e altamente discriminativa, como o rosto de um cachorro. Quando o CutMix cobre essa parte com outra imagem, o modelo precisa reconhecer o cachorro pelo corpo, pelas patas ou pelo pelo; assim, aprende a usar mais partes de cada objeto, melhorando a localização fracamente supervisionada e a robustez à oclusão. Cada pixel da imagem combinada ainda vem de uma foto real, então o modelo nunca treina com regiões vazias ou misturas fantasmagóricas. Como outras ampliações fortes, o CutMix atua como regularização que reduz o sobreajuste, e receitas modernas de treinamento para transformadores de visão (ViT), incluindo a usada nos Data-efficient Image Transformers (DeiT) da Meta, aplicam CutMix e MixUp em conjunto.
CutMix vs. aumentos de dados relacionados#
- MixUp: Combina duas imagens inteiras pixel a pixel com peso λ e mistura seus rótulos da mesma forma, produzindo sobreposições semitransparentes que não se parecem com nenhuma cena real.
- Cutout: Mascara um quadrado aleatório com zeros e mantém o rótulo original; assim, os pixels mascarados não fornecem informação para o treinamento.
- Mosaic: Junta quatro imagens redimensionadas em uma só; é um aumento padrão para treinar detectores de objetos que mantém o rótulo da caixa de cada objeto ainda visível no quadro.
- Copiar e colar para segmentação de instâncias: Cola instâncias de objetos segmentadas, em vez de retângulos, de uma imagem em outra.
CutMix na detecção de objetos#
Na detecção, todos os rótulos permanecem categóricos: em vez de um vetor de classes combinado, são mantidas as caixas de ambas as imagens onde seus objetos continuam visíveis. A ampliação cutmix do Ultralytics YOLO, desativada por padrão, recebe uma probabilidade entre 0 e 1. A implementação escolhe uma região de recorte que não se sobrepõe a nenhuma das caixas existentes na imagem de destino, copia a mesma região de uma segunda imagem e mantém cada caixa delimitadora colada que preserve pelo menos 10% de sua área dentro da região, ou 1% para rótulos de segmentação. Por padrão, o CutMix é desativado junto com o mosaic nas 10 épocas finais do treinamento, conforme definido por close_mosaic=10.










