Augmentations
L'augmentation est configurée par les paramètres de TrainConfig, mais chaque famille de modèles exécute son propre pipeline d'entraînement, et un pipeline dépourvu de branche mosaïque ignore mosaic_prob au lieu de l'approximer.
Régler les paramètres
Les paramètres d'augmentation sont des arguments ordinaires de train().
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt")model.train( data="my-dataset.yaml", epochs=100, mosaic_prob=1.0, mixup_prob=0.15, hsv_prob=1.0, flip_prob=0.5, no_aug_epochs=15,)# La CLI nomme mosaic_prob mosaic et mixup_prob mixup.libreyolo train model=LibreYOLO9s.pt data=my-dataset.yaml \ epochs=100 mosaic=1.0 mixup=0.15 hsv_prob=1.0 \ flip_prob=0.5 no_aug_epochs=15Trois d'entre eux ont une forme plus courte, acceptée aussi bien par train()
que par la CLI : mosaic correspond à mosaic_prob, fliplr à flip_prob
et, en détection, mixup à mixup_prob. Passer une forme courte et son champ
avec des valeurs différentes lève une erreur. Tous les autres paramètres portent
le même nom aux deux endroits.
Trois états, pas deux
L'effet d'un paramètre dépend de la famille. La bibliothèque conserve une table déclarative de ce comportement, dont chaque entrée adopte l'un des trois états.
used signifie que le paramètre atteint le pipeline et modifie les échantillons.
ignored signifie qu'il n'atteint jamais le pipeline, si bien que le définir
n'a aucun effet. gated_by_mosaic signifie qu'il s'applique uniquement aux
échantillons passés par la branche mosaïque. Avec mosaic_prob=0, il ne se
déclenche donc jamais, même s'il est connecté.
Ce troisième état est celui qui surprend. Dans un pipeline de style YOLOX, la
transformation affine s'exécute sur le canevas mosaïque et MixUp fusionne un
échantillon mosaïque. mosaic_prob=0 désactive donc silencieusement degrees,
translate, shear, perspective, mosaic_scale, mixup_prob et
mixup_scale en même temps. Le trainer journalise spécifiquement un
avertissement pour MixUp :
mixup_prob=0.15 has no effect for YOLOv9: mixup only applies to mosaic samplesand mosaic_prob=0. Set mosaic_prob > 0 to enable mixup.La CLI avertit aussi des paramètres ignorés en ne listant que ceux que vous avez réellement saisis :
Warning: RF-DETR ignores these parameters: degrees, mosaicQuatre formes de pipeline
Les familles se regroupent en quatre pipelines d'entraînement, et le pipeline détermine presque toutes les réponses.
Le pipeline mosaïque de style YOLOX applique une variation HSV et des retournements à chaque échantillon, puis exécute la transformation affine et MixUp dans la branche mosaïque. Il couvre YOLOX, YOLOv7, YOLOv9 et ses variantes E2E et P2, RTMDet, PicoDet, RT-DETR, RT-DETRv2 et FOMO.
Le pipeline traversant de style DETR ne contient ni mosaïque ni transformation
affine. Sa distorsion photométrique, son zoom arrière et son recadrage IoU sont
des constantes de la recette plutôt que des paramètres de configuration. Seuls
flip_prob et no_aug_epochs sont donc actifs. Il couvre D-FINE, Dome-DETR,
DEIM, DEIMv2, RT-DETRv4, EC et, avec une différence, RF-DETR.
Le pipeline ImageFolder de classification possède ses propres contrôles d'augmentation. flip_prob règle les retournements horizontaux et vaut 0.5 par défaut ; fliplr en est l'alias.
YOLO-NAS constitue un cas à part : aucune mosaïque, une transformation affine
par échantillon toujours active et MixUp appliqué indépendamment plutôt que
conditionné. Sa valeur mosaic_scale est réutilisée comme plage d'échelle de
la transformation affine.
SegFormer, LingBot-Vision et NAFNet utilisent chacun un pipeline propre à leur
tâche, dont l'aléa est fixé dans la famille au lieu d'être configurable. Pour
SegFormer et LingBot-Vision, les paramètres actifs sont les attributs de classe
semantic_scale_jitter et semantic_hsv_prob, pas mosaic_scale et
hsv_prob. Le recadrage et les
retournements de NAFNet sont des opérations couplées sur l'entrée et la cible,
avec une probabilité fixe de 0.5.
Paramètres respectés par chaque famille
La table ci-dessous est la spécification distribuée dans
libreyolo/data/augment/spec.py, comparée aux branchements réels du pipeline
par les propres tests de la bibliothèque. Consultez-la plutôt que de déduire
le comportement de l'architecture.
from libreyolo.data.augment.spec import AUG_KNOBS, aug_support for knob, description in AUG_KNOBS.items(): support = aug_support("yolo9")[knob] print(f"{knob:16} {support.status:16} {support.note or description}")from libreyolo.data.augment.spec import ignored_aug_params print(sorted(ignored_aug_params("rfdetr")))Résumé par pipeline pour les paramètres de base :
| Paramètre | Style YOLOX | YOLO-NAS | Style DETR | Classification |
|---|---|---|---|---|
mosaic_prob | utilisé | ignoré | ignoré | ignoré |
mixup_prob | conditionné par la mosaïque | utilisé | ignoré | ignoré |
hsv_prob | utilisé | utilisé | ignoré | ignoré |
flip_prob | utilisé | utilisé | utilisé | utilisé |
flipud | utilisé | utilisé | ignoré | utilisé |
degrees | conditionné par la mosaïque | utilisé | ignoré | ignoré |
translate | conditionné par la mosaïque | utilisé | ignoré | ignoré |
shear | conditionné par la mosaïque | utilisé | ignoré | ignoré |
perspective | conditionné par la mosaïque | utilisé | ignoré | ignoré |
mosaic_scale | conditionné par la mosaïque | utilisé | ignoré | ignoré |
mixup_scale | conditionné par la mosaïque | utilisé | ignoré | ignoré |
no_aug_epochs | utilisé | utilisé | utilisé | utilisé |
Les exceptions dans ces colonnes les restreignent toutes :
- RTMDet, PicoDet, RT-DETR, RT-DETRv2 et FOMO n'ont aucun retournement vertical,
si bien que
flipudest ignoré. Le wrapper mosaïque de FOMO est également construit sans perspective. - Le pipeline natif de RF-DETR n'a aucune variation HSV, si bien que
hsv_probest ignoré en plus de la colonne de style DETR. - EC respecte
hsv_prob,degreesettranslate, mais seulement pourtask="pose", dont la transformation tenant compte des points clés les lit. Ses chemins de détection et de segmentation utilisent des recettes photométriques fixes. - DINOv2 suit la colonne de style DETR pour ses tâches de détection et de
segmentation sémantique, et ajoute l'ensemble de classification pour
task="classify".
no_aug_epochs est used partout, mais son effet varie. Dans les pipelines avec mosaic, il désactive mosaic et MixUp pendant les dernières époques. Dans les pipelines de type DETR, il arrête les augmentations photométriques, le zoom-out et le recadrage, et règle la fin du planning. En classification, il désactive l'augmentation automatique, erasing, MixUp et CutMix ; le recadrage et les retournements restent actifs.
perspective ajoute une transformation projective par-dessus la rotation,
l'échelle, le cisaillement et la translation. Chaque coin du canevas se déplace
vers l'intérieur d'une quantité aléatoire pouvant atteindre
min(perspective * 100, 0.2) fois la moitié du côté du canevas, par axe, si bien
que perspective=0.001 déplace un coin d'au plus 5 pour cent du côté, quelle que
soit la résolution, et que toute valeur à partir de 0.002 atteint le même
maximum. La valeur par défaut 0 garde la déformation affine, et une valeur
négative lève ValueError lorsque le premier échantillon est déformé. YOLOv9 et
ses variantes E2E et P2, YOLOX, YOLOv7, YOLO-NAS, PP-YOLOE, RTMDet, PicoDet,
RT-DETR et RT-DETRv2 l'appliquent.
MixUp dans le pipeline mosaic de YOLOv9, par lequel s'entraînent YOLOv9 et ses variantes, YOLOv7, RT-DETR et RT-DETRv2, tire le ratio de mélange selon Beta(1, 1), uniforme sur [0, 1]. Le wrapper mosaïque de YOLOX, utilisé par YOLOX, RTMDet et PicoDet, mélange à un ratio fixe de 0.5.
L'ensemble de classification
Quatre paramètres pilotent le pipeline de classification, et rien d'autre. Les familles de détection les ignorent tous les quatre.
from libreyolo import LibreYOLO model = LibreYOLO("LibreConvNeXtt-cls.pt")model.train( data="my-classification-dataset", epochs=50, auto_augment="randaugment", erasing=0.25, mixup=0.2, cutmix=0.2,)auto_augment accepte "randaugment", "autoaugment", "augmix" ou None.
erasing est la probabilité de RandomErasing. mixup et cutmix sont des
probabilités par batch qui produisent des étiquettes souples ; au plus une
technique s'exécute par batch, MixUp en premier. Elles sont donc additives et
leur somme ne doit pas dépasser 1.
Les quatre sont désactivées par défaut, si bien que l'entraînement de classification reste inchangé tant que vous ne les demandez pas.
train() et la CLI routent mixup selon la tâche : la classification mélange les lots, tandis que la détection utilise mixup_prob.
scale=0.5 signifie une plage d'aire de recadrage aléatoire de (0.5, 1.0) ; une paire explicite fixe les deux bornes. crop_pct=None conserve le ratio de redimensionnement d'évaluation de la famille ; un remplacement affecte l'évaluation pendant l'entraînement et la validation, tandis que l'export conserve le prétraitement natif de la famille.
La CLI expose auto_augment, erasing, cutmix, fliplr et flipud. En classification, mixup signifie un mélange de batch et vaut 0.0 par défaut. Les retournements horizontaux valent 0.5 par défaut et les verticaux 0.0. mixup + cutmix ne doit pas dépasser 1.
no_aug_epochs désactive l'auto-augmentation, l'effacement, MixUp et CutMix pendant les dernières époques, en conservant le recadrage et les retournements. Les recettes de classification fixent cette fin de programme à 0 par défaut.
Paramètres propres aux familles
Certains paramètres se trouvent dans la sous-classe de configuration d'une famille plutôt que dans la classe de base. Ils n'existent donc que pour cette famille et ne disposent d'aucun flag CLI.
| Famille | Paramètre | Effet |
|---|---|---|
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | copy_paste | Probabilité d'augmentation copy-paste des instances, uniquement pour task="segment" |
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | copy_paste_mode | "flip" réutilise le même échantillon retourné, "mixup" charge un second échantillon |
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | rot90 | Probabilité de rotation aléatoire à 90 degrés |
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | max_labels | Limite de vérités terrain par image dans les transformations d'entraînement, 300 par défaut |
| RF-DETR | copy_paste, copy_paste_mode | Copy-paste pour task="segment", mode "flip" uniquement |
| RF-DETR, D-FINE, EC | crop_resize_prob | Probabilité de recadrage-redimensionnement aléatoire |
| EC, YOLO-NAS | brightness_contrast_prob, affine_prob | Probabilités de variation sur le chemin de pose et de transformation affine tenant compte des points clés |
max_labels est celui qui fait perdre des données. Les boîtes au-delà de la
limite sont supprimées avec un avertissement unique plutôt qu'une erreur. Les
images denses, comme les photographies aériennes, exigent donc d'augmenter cette
valeur. La mémoire d'affectation des labels suit l'image la plus dense du batch,
pas la limite.
La mosaïque et MixUp sont désactivés pour l'entraînement de boîtes orientées, quels que soient les paramètres, car l'augmentation tenant compte des coins pour les boîtes tournées n'est pas implémentée.
Pages connexes
- Hyperparamètres pour
no_aug_epochsen tant qu'argument de schedule et le reste detrain(). - Datasets pour les formats d'étiquettes consommés par ces transformations.