CutMix
CutMix incolla una porzione rettangolare di un'immagine di addestramento su un'altra e combina le etichette in base all'area della porzione, migliorando la precisione e la localizzazione.
CutMix è una tecnica di aumento dei dati che ritaglia una patch rettangolare da un'immagine di addestramento, la incolla sulla stessa area di un'altra immagine e combina le due etichette in proporzione all'area occupata da ciascuna immagine. Sangdoo Yun e colleghi di NAVER Clova AI Research l'hanno introdotta in un articolo ICCV del 2019 come combinazione di due idee precedenti: la rimozione di un'area casuale operata da Cutout e la combinazione delle etichette di MixUp. Su ImageNet, CutMix ha ridotto l'errore top-1 di una ResNet-50 dal 23,68% al 21,40%, superando MixUp al 22,58% e Cutout al 22,93%; inoltre, i modelli preaddestrati con questa tecnica si sono trasferiti meglio al rilevamento di oggetti e alla generazione di didascalie per immagini.
Come funziona CutMix#
Per ogni coppia di immagini A e B, CutMix estrae un rapporto di miscelazione λ da una distribuzione Beta, che con il parametro predefinito α = 1 è uniforme tra 0 e 1. Disegna quindi un riquadro la cui larghezza e altezza sono quelle dell'immagine moltiplicate per √(1 − λ), lo centra in un punto casuale, lo ritaglia entro i bordi dell'immagine e copia in A la regione corrispondente di B. Dopo il ritaglio, λ viene ricalcolato come frazione di A rimasta e l'etichetta diventa λ parti A e (1 − λ) parti B; per esempio, una patch di gatto che copre il 30% di un'immagine di cane produce un target composto per 0,7 da cane e per 0,3 da gatto. L'addestramento minimizza la funzione di loss rispetto a questa etichetta morbida, come avviene con lo smussamento delle etichette.
Il modulo torchvision di PyTorch applica CutMix a un intero batch, abbinando ogni immagine a quella adiacente nel batch:
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)}")Stampa un'area incollata pari a 0,187 e pesi delle etichette pari a 0,813 per la classe 0 e 0,187 per la classe 3: la quota del target assegnata a ciascuna classe corrisponde alla quota di pixel fornita da quella classe.
Perché CutMix è utile#
Un modello di classificazione delle immagini addestrato su immagini intere può riuscire nel compito riconoscendo una singola parte molto discriminante, come il muso di un cane. Quando CutMix copre quella parte con un'altra immagine, il modello deve riconoscere il cane dal corpo, dalle zampe o dal pelo; impara così a sfruttare una porzione maggiore di ciascun oggetto, migliorando la localizzazione debolmente supervisionata e la robustezza all'occlusione. Ogni pixel dell'immagine combinata proviene comunque da una foto reale, quindi il modello non viene mai addestrato su aree vuote o fusioni spettrali. Come altri metodi di aumento dei dati avanzati, CutMix agisce da regolarizzatore e riduce l'overfitting; le ricette di addestramento moderne per i vision transformer (ViT), inclusa quella alla base dei Data-efficient Image Transformers (DeiT) di Meta, applicano insieme CutMix e MixUp.
CutMix e metodi di aumento dei dati correlati#
- MixUp: combina due immagini intere pixel per pixel con un peso λ e miscela le relative etichette allo stesso modo, producendo sovrapposizioni semitrasparenti che non somigliano a scene reali.
- Cutout: maschera un quadrato casuale con zeri e conserva l'etichetta originale, così i pixel mascherati non forniscono informazioni utili all'addestramento.
- Mosaic: affianca quattro immagini ridimensionate in un'unica immagine; è un metodo di aumento dei dati standard per addestrare rilevatori di oggetti e conserva le etichette dei riquadri di ogni oggetto ancora presente nell'immagine.
- Copia-incolla per la segmentazione di istanze: incolla in un'immagine le istanze di oggetti segmentate provenienti da un'altra, anziché rettangoli.
CutMix nel rilevamento di oggetti#
Nel rilevamento, tutte le etichette restano discrete: invece di un vettore di classi misto, si conservano i riquadri di entrambe le immagini per gli oggetti che restano visibili. La cutmix tecnica di aumento dei dati di Ultralytics YOLO, disattivata per impostazione predefinita, accetta una probabilità compresa tra 0 e 1. La sua implementazione sceglie una regione di ritaglio che non si sovrappone ad alcuno dei riquadri già presenti nell'immagine di destinazione, copia la stessa regione da una seconda immagine e conserva ogni riquadro di delimitazione incollato che mantiene almeno il 10% della propria area all'interno della regione, oppure l'1% nel caso delle etichette di segmentazione. Per impostazione predefinita, CutMix si disattiva insieme a mosaic nelle ultime 10 epoche di addestramento, secondo il valore impostato da close_mosaic=10.










