CutMix
CutMix colle un fragment rectangulaire d’une image d’entraînement sur une autre et mélange leurs étiquettes en fonction de la surface du fragment, ce qui améliore la précision et la localisation.
CutMix est une technique d’augmentation des données qui découpe une zone rectangulaire dans une image d’entraînement, la colle sur la même région d’une autre image, puis mélange les deux étiquettes en proportion de la surface occupée par chaque image. Sangdoo Yun et ses collègues de NAVER Clova AI Research l’ont présentée dans un article publié à l’ICCV en 2019, en combinant deux idées antérieures : la suppression d’une région aléatoire de Cutout et le mélange d’étiquettes de MixUp. Sur ImageNet, CutMix a réduit le taux d’erreur top-1 d’un ResNet-50 de 23,68 % à 21,40 %, devançant MixUp à 22,58 % et Cutout à 22,93 %. Les modèles préentraînés avec CutMix ont aussi mieux été adaptés à la détection d’objets et au légendage d’images.
Fonctionnement de CutMix#
Pour chaque paire d’images A et B, CutMix échantillonne un coefficient de mélange λ selon une loi bêta, uniforme entre 0 et 1 lorsque le paramètre α par défaut vaut 1. Il trace ensuite une boîte dont la largeur et la hauteur correspondent à celles de l’image multipliées par √(1 − λ), la centre sur un point aléatoire, la découpe aux bords de l’image et copie cette région de B dans A. Après découpage, λ est recalculé comme la fraction de A restante, et l’étiquette devient λ part de A et (1 − λ) part de B ; une zone de chat de 30 % collée sur une image de chien produit ainsi une cible composée de 0,7 chien et de 0,3 chat. L’entraînement minimise la fonction de perte par rapport à cette étiquette souple, comme avec le lissage des étiquettes.
Le module torchvision de PyTorch applique CutMix à tout un lot, en associant chaque image à sa voisine dans le lot :
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)}")Le programme affiche une zone collée de 0,187 et des poids d’étiquette de 0,813 pour la classe 0 et de 0,187 pour la classe 3 : la part de la cible attribuée à chaque classe correspond à la part des pixels qu’elle apporte.
Pourquoi CutMix est efficace#
Un modèle de classification d’images entraîné sur des images entières peut réussir en reconnaissant une petite partie très discriminante, comme le visage d’un chien. Lorsque CutMix recouvre cette partie avec une autre image, le modèle doit reconnaître le chien grâce à son corps, ses pattes ou son pelage. Il apprend ainsi à utiliser une plus grande partie de chaque objet, ce qui améliore la localisation faiblement supervisée et la robustesse à l’occlusion. Chaque pixel de l’image mélangée provient toujours d’une vraie photo ; le modèle ne s’entraîne donc jamais sur des zones vides ou des mélanges fantomatiques. Comme d’autres augmentations fortes, CutMix agit comme une régularisation qui réduit le surapprentissage, et les recettes modernes d’entraînement des transformeurs de vision (ViT), notamment celle utilisée pour les transformeurs d’image efficaces en données (DeiT) de Meta, combinent CutMix et MixUp.
CutMix et augmentations apparentées#
- MixUp : Mélange deux images entières pixel par pixel avec le poids λ et combine leurs étiquettes de la même manière, produisant des superpositions semi-transparentes qui ne ressemblent à aucune scène réelle.
- Cutout : Masque un carré aléatoire avec des zéros et conserve l’étiquette d’origine ; les pixels masqués ne fournissent donc aucune information pour l’entraînement.
- Mosaic : Assemble quatre images redimensionnées en une seule ; il s’agit d’une augmentation standard pour entraîner les détecteurs d’objets, qui conserve l’étiquette de boîte de chaque objet encore visible dans l’image.
- Copier-coller pour la segmentation d’instances : Colle dans une image des instances d’objets segmentées, plutôt que des rectangles, provenant d’une autre image.
CutMix en détection d’objets#
En détection, chaque étiquette reste catégorique : au lieu d’un vecteur de classes mélangé, les boîtes des deux images sont conservées lorsque leurs objets restent visibles. L’augmentation cutmix d’Ultralytics YOLO, désactivée par défaut, prend une probabilité comprise entre 0 et 1. Son implémentation choisit une région de découpe qui ne chevauche aucune boîte existante dans l’image cible, copie la même région depuis une seconde image et conserve chaque boîte englobante collée dont au moins 10 % de la surface reste dans la région, ou 1 % pour les étiquettes de segmentation. Par défaut, CutMix est désactivé en même temps que mosaic durant les 10 dernières époques d’entraînement, selon la valeur de close_mosaic=10.










