Augmentationen
Augmentation wird über Einstellungen in TrainConfig konfiguriert. Jede Modellfamilie führt jedoch ihre eigene Trainingspipeline aus. Eine Pipeline ohne Mosaic-Zweig ignoriert mosaic_prob, statt es anzunähern.
Festlegen der Einstellungen
Die Augmentationseinstellungen sind gewöhnliche Argumente von 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,)# In der CLI heißt mosaic_prob mosaic und mixup_prob heißt 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=15Drei davon besitzen kürzere Schreibweisen, die train() und die CLI gleichermaßen akzeptieren: mosaic wird auf mosaic_prob abgebildet, fliplr auf flip_prob und bei der Detektion mixup auf mixup_prob. Werden eine kurze Schreibweise und ihr Feld mit unterschiedlichen Werten übergeben, wird ein Fehler ausgelöst. Alle anderen Einstellungen heißen an beiden Stellen gleich.
Drei statt zwei Zustände
Ob eine Einstellung eine Wirkung hat, hängt von der Familie ab. Die Bibliothek verwaltet dafür eine deklarative Tabelle. Jeder Eintrag besitzt einen von drei Zuständen.
used bedeutet, dass die Einstellung die Pipeline erreicht und Samples verändert. ignored bedeutet, dass sie die Pipeline nie erreicht und wirkungslos bleibt. gated_by_mosaic bedeutet, dass sie nur für Samples gilt, die den Mosaic-Zweig durchlaufen haben. Bei mosaic_prob=0 wird sie daher trotz vorhandener Verdrahtung nie ausgelöst.
Dieser dritte Zustand überrascht häufig. In einer Pipeline im YOLOX-Stil wird die affine Transformation auf dem Mosaic-Canvas ausgeführt und MixUp mischt ein Mosaic-Sample ein. mosaic_prob=0 deaktiviert deshalb gleichzeitig und ohne Fehler degrees, translate, shear, perspective, mosaic_scale, mixup_prob und mixup_scale. Der Trainer protokolliert speziell für MixUp eine Warnung:
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.Die CLI warnt auch vor ignorierten Einstellungen und nennt nur die ausdrücklich angegebenen:
Warning: RF-DETR ignores these parameters: degrees, mosaicVier Pipeline-Formen
Die Familien lassen sich vier Trainingspipelines zuordnen, die fast alle Antworten bestimmen.
Die Mosaic-Pipeline im YOLOX-Stil wendet HSV-Jitter und Spiegelungen auf jedes Sample an. Affine Transformation und MixUp werden anschließend innerhalb des Mosaic-Zweigs ausgeführt. Diese Pipeline gilt für YOLOX, YOLOv7, YOLOv9 und dessen E2E- und P2-Varianten, RTMDet, PicoDet, RT-DETR, RT-DETRv2 und FOMO.
Die durchleitende Pipeline im DETR-Stil besitzt weder Mosaic noch eine affine Transformation. Fotometrische Verzerrung, Zoom-out und IoU-Beschnitt sind feste Rezeptwerte und keine Konfigurationseinstellungen. Nur flip_prob und no_aug_epochs sind daher aktiv. Diese Pipeline gilt für D-FINE, Dome-DETR, DEIM, DEIMv2, RT-DETRv4, EC und mit einer Änderung RF-DETR.
Die ImageFolder-Pipeline für Klassifikation hat eigene Augmentierungsparameter. flip_prob steuert horizontales Spiegeln und hat den Standardwert 0.5; fliplr ist der Alias dafür.
YOLO-NAS bildet eine eigene Form: kein Mosaic, eine immer aktive affine Transformation je Sample und unabhängiges statt gekoppeltes MixUp. Der Wert mosaic_scale wird als affiner Skalierungsbereich wiederverwendet.
SegFormer, LingBot-Vision und NAFNet führen jeweils eine aufgabenspezifische Pipeline aus, deren Zufälligkeit fest in der Familie definiert und nicht konfigurierbar ist. Bei SegFormer und LingBot-Vision sind die Klassenattribute semantic_scale_jitter und semantic_hsv_prob aktiv, nicht mosaic_scale und hsv_prob. Beschnitt und Spiegelungen von NAFNet koppeln Eingabe- und Zieloperationen mit einer festen Wahrscheinlichkeit von 0,5.
Berücksichtigte Einstellungen je Familie
Die folgende Tabelle fasst die ausgelieferte Spezifikation unter libreyolo/data/augment/spec.py zusammen. Bibliothekstests gleichen sie mit der tatsächlichen Pipeline-Verdrahtung ab. Lies sie dort, statt aus der Architektur zu folgern.
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")))Zusammenfassung der Basiseinstellungen nach Pipeline:
| Einstellung | YOLOX-Stil | YOLO-NAS | DETR-Stil | Klassifizierung |
|---|---|---|---|---|
mosaic_prob | verwendet | ignoriert | ignoriert | ignoriert |
mixup_prob | an Mosaic gekoppelt | verwendet | ignoriert | ignoriert |
hsv_prob | verwendet | verwendet | ignoriert | ignoriert |
flip_prob | verwendet | verwendet | verwendet | verwendet |
flipud | verwendet | verwendet | ignoriert | verwendet |
degrees | an Mosaic gekoppelt | verwendet | ignoriert | ignoriert |
translate | an Mosaic gekoppelt | verwendet | ignoriert | ignoriert |
shear | an Mosaic gekoppelt | verwendet | ignoriert | ignoriert |
perspective | an Mosaic gekoppelt | verwendet | ignoriert | ignoriert |
mosaic_scale | an Mosaic gekoppelt | verwendet | ignoriert | ignoriert |
mixup_scale | an Mosaic gekoppelt | verwendet | ignoriert | ignoriert |
no_aug_epochs | verwendet | verwendet | verwendet | verwendet |
Innerhalb dieser Spalten gibt es ausschließlich einschränkende Ausnahmen:
- RTMDet, PicoDet, RT-DETR, RT-DETRv2 und FOMO besitzen keine vertikale Spiegelung, daher wird
flipudignoriert. Der Mosaic-Wrapper von FOMO ist außerdem ohne Perspektive aufgebaut. - Die native Pipeline von RF-DETR besitzt keinen HSV-Jitter, weshalb zusätzlich zur Spalte im DETR-Stil
hsv_probignoriert wird. - EC berücksichtigt
hsv_prob,degreesundtranslate, aber nur fürtask="pose", dessen Keypoint-bewusste Transformation sie liest. Die detect- und segment-Pfade verwenden feste fotometrische Rezepte. - DINOv2 folgt für detect und semantic der Spalte im DETR-Stil und ergänzt für
task="classify"das Klassifizierungspaket.
no_aug_epochs ist überall used, wirkt aber je nach Pipeline anders. In Mosaic-Pipelines schaltet es Mosaic und MixUp für die letzten Epochen ab. In DETR-Pipelines beendet es photometrische Augmentierung, Zoom-out und Cropping und steuert die Schlussphase des Zeitplans. Bei Klassifikation schaltet es automatische Augmentierung, Erasing, MixUp und CutMix ab; Cropping und Spiegeln bleiben aktiv.
perspective fügt zusätzlich zu Rotation, Skalierung, Scherung und Translation eine projektive Verzerrung hinzu. Jede Ecke der Leinwand wandert pro Achse um einen zufälligen Betrag von bis zu min(perspective * 100, 0.2) mal die halbe Leinwandseite nach innen, sodass perspective=0.001 eine Ecke bei jeder Auflösung um höchstens 5 Prozent der Seite verschiebt und jeder Wert ab 0.002 dasselbe Maximum erreicht. Der Standard 0 hält die Verzerrung affin, und ein negativer Wert löst ValueError aus, sobald das erste Sample verzerrt wird. YOLOv9 samt E2E- und P2-Varianten, YOLOX, YOLOv7, YOLO-NAS, PP-YOLOE, RTMDet, PicoDet, RT-DETR und RT-DETRv2 wenden sie an.
MixUp in der YOLOv9-Mosaic-Pipeline, über die YOLOv9 und seine Varianten, YOLOv7, RT-DETR und RT-DETRv2 trainieren, zieht das Mischverhältnis aus Beta(1, 1), gleichverteilt auf [0, 1]. Der Mosaic-Wrapper von YOLOX, den YOLOX, RTMDet und PicoDet verwenden, mischt mit festen 0.5.
Klassifizierungspaket
Vier Einstellungen steuern ausschließlich die Klassifizierungspipeline. Erkennungsfamilien ignorieren alle vier.
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 akzeptiert "randaugment", "autoaugment", "augmix" oder None. erasing ist die RandomErasing-Wahrscheinlichkeit. mixup und cutmix sind Wahrscheinlichkeiten je Batch, die weiche Labels erzeugen. Höchstens eine davon wird je Batch ausgeführt, wobei MixUp zuerst kommt. Die beiden Werte sind daher additiv und sollten höchstens 1 ergeben.
Alle vier sind standardmäßig deaktiviert. Das Klassifizierungstraining bleibt unverändert, sofern du sie nicht anforderst.
train() und die CLI ordnen mixup nach Aufgabe zu: Klassifikation verwendet Batch-Mischung, Detektion verwendet mixup_prob.
scale=0.5 bedeutet einen zufälligen Ausschnittsflächenbereich von (0.5, 1.0); ein explizites Paar setzt beide Grenzen. crop_pct=None behält das Auswertungsskalierungsverhältnis der Familie bei. Ein abweichender Wert beeinflusst die Auswertung beim Training und bei der Validierung; der Export behält die native Familienvorverarbeitung.
Die CLI stellt auto_augment, erasing, cutmix, fliplr und flipud bereit. Bei der Klassifikation bedeutet mixup Batch-Mischung und ist standardmäßig 0.0. Horizontale Spiegelungen haben den Standardwert 0.5, vertikale 0.0. mixup + cutmix darf 1 nicht überschreiten.
no_aug_epochs deaktiviert Auto-Augmentierung, Erasing, MixUp und CutMix für die letzten Epochen; Zuschnitt und Spiegelungen bleiben erhalten. Klassifikationsrezepte setzen diesen Endabschnitt standardmäßig auf 0.
Familienspezifische Einstellungen
Einige Einstellungen liegen in der Konfigurationsunterklasse einer Familie statt in der Basisklasse. Sie existieren daher nur für diese Familie und besitzen kein CLI-Flag.
| Familie | Einstellung | Wirkung |
|---|---|---|
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | copy_paste | Wahrscheinlichkeit der Copy-Paste-Instanzaugmentation, nur für task="segment" |
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | copy_paste_mode | "flip" verwendet dasselbe Sample gespiegelt, "mixup" lädt ein zweites Sample |
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | rot90 | Wahrscheinlichkeit einer zufälligen Drehung um 90 Grad |
| YOLOv9, YOLOv9-E2E, YOLOv9-P2 | max_labels | Obergrenze der Ground-Truth-Labels je Bild in den Trainingstransformationen, Standard 300 |
| RF-DETR | copy_paste, copy_paste_mode | Copy-Paste für task="segment", nur Modus "flip" |
| RF-DETR, D-FINE, EC | crop_resize_prob | Wahrscheinlichkeit für zufälliges Beschneiden und Skalieren |
| EC, YOLO-NAS | brightness_contrast_prob, affine_prob | Jitter im Pose-Pfad und Wahrscheinlichkeit einer Keypoint-bewussten affinen Transformation |
max_labels ist die einzige Einstellung, durch die Daten verloren gehen. Boxen oberhalb der Grenze werden mit einer einmaligen Warnung statt mit einem Fehler verworfen. Für dichte Bilder wie Luftaufnahmen muss der Wert daher erhöht werden. Der Speicherbedarf der Label-Zuweisung folgt dem dichtesten Bild im Batch, nicht der Obergrenze.
Mosaic und MixUp sind beim Training orientierter Boxen unabhängig von den Einstellungen deaktiviert, da eine eckenbewusste Augmentation für gedrehte Boxen nicht implementiert ist.
Verwandte Themen
- Unter Hyperparameter findest du
no_aug_epochsals Schedule-Argument sowie die übrigen Argumente vontrain(). - Unter Datensätze findest du die von diesen Transformationen verwendeten Labelformate.