Als Markdown anzeigen

libreyolo train

Trainiert ein Modell auf einem Datensatz und schreibt Checkpoints, Metriken und Logs in ein Run-Verzeichnis. Jedes Argument unten hat einen Default aus der Befehlsdefinition, den die eigene Trainingskonfiguration einer Modellfamilie ersetzen kann.

Befehl
libreyolo train
Erforderlich
data
Ausgabe
Checkpoints, Metriken und Logs unter runs/train/<name>; ohne name= der eigene Run-Name der Familie, etwa yolo9_exp

Synopsis

bash
libreyolo train data=<dataset.yaml> [model=<name|path>] [key=value ...]

Argumente sind key=value-Paare, und die POSIX-Form funktioniert ebenfalls, epochs=50 und --epochs 50 sind also dasselbe Argument. Booleans akzeptieren true und false: amp=false wird zu --no-amp, wo das Flag eine negative Form hat.

Argumente

Modell und Daten

ArgumentDefaultBedeutung
dataPfad zur Datensatz-YAML (YOLO-Format, etwa coco8.yaml). Erforderlich
modelyolox-sModellname oder Pfad zu Gewichten
taskSetzt den Task explizit: detect, segment, semantic, pose, classify, gaze, obb, point, depth
pretrainedtrueVortrainierte Gewichte nutzen. false baut die Architektur auf und trainiert von Grund auf neu
allow_download_scriptsfalseErlaubt eingebettetes Python in den Download-Blöcken der Datensatz-YAML

Trainingsschleife

ArgumentDefaultBedeutung
epochs300Trainings-Epochen
batch16Batch-Größe. Bei mehreren GPUs ist es der globale Batch, gleichmäßig auf sie verteilt
imgsz640Bildgröße beim Training: 640 (quadratisch) oder 480x640 (HxB)
deviceautoGerät: 0, cpu, mps, auto. Eine GPU-Liste wie 0,1 oder [0,1] trainiert auf diesen GPUs
workers4Worker für den Dataloader
cachefalseBilder cachen, um das Laden zu beschleunigen: ram, disk, true, false
seed0Zufalls-Seed
resumeTraining fortsetzen: true oder ein Pfad zu einem Checkpoint
amptrueAutomatic Mixed Precision
amp_dtypefloat16CUDA-AMP-Dtype: float16 oder bfloat16
cuda_graphfalseNimmt Forward- und Backward-Pass des Trainings in CUDA-Graphs auf. Nur eine GPU, nur unterstützte Familien; der Rest läuft eager
compilefalseDas Trainingsnetz mit torch.compile kompilieren: true, false, default, reduce-overhead, max-autotune, max-autotune-no-cudagraphs. Nur eine CUDA-GPU; andere Runs trainieren eager mit einer Warnung
lorafalseLoRA-Fine-Tuning, für die unter Hinweise gelisteten Transformer-Familien
freezeSchichten einfrieren: eine Anzahl als Integer, eine Liste von Indizes oder Modulnamen

Distillation

ArgumentDefaultBedeutung
distill_modelTeacher: ein Detektor-Checkpoint oder die ID eines Foundation-Teachers wie dinov2 für die Distillation von Backbone-Features
disGewicht des Distillation-Loss. Ohne Angabe der veröffentlichte Default für den Loss-Typ
distill_loss_typemgdFeature-Loss für Detektor-Teacher: mgd, cwd. Foundation-Teacher nutzen immer feat_mse

Optimizer

ArgumentDefaultBedeutung
optimizersgdOptimizer: sgd, adam, adamw
lr00.01Initiale Lernrate
momentum0.937SGD-Momentum, und der Koeffizient des ersten Moments für die Adam-Optimizer
weight_decay0.0005L2-Regularisierung
nesterovtrueNesterov-Momentum
clip_max_normKappt die L2-Norm des Gradienten vor jedem Optimizer-Schritt auf diesen Wert; 0 schaltet das Kappen ab. Ohne Angabe gilt der Wert der Familie

Scheduler

ArgumentDefaultBedeutung
scheduleryoloxwarmcosTyp des LR-Schedules
warmup_epochs5Dauer des Warmups
warmup_lr_start0.0Initiale Warmup-LR
min_lr_ratio0.05Minimales LR-Verhältnis
lr_drop100Epoche des Step-LR-Drops bei RF-DETR

Augmentierung

ArgumentDefaultBedeutung
mosaic1.0Mosaic-Wahrscheinlichkeit
mixup1.0Mixup-Wahrscheinlichkeit
hsv_prob1.0Wahrscheinlichkeit für HSV-Jitter
flip_prob0.5Wahrscheinlichkeit für horizontales Spiegeln
degrees10.0Rotationsbereich, plus und minus, in Grad
translate0.1Anteil der Verschiebung
shear2.0Scherwinkel
mosaic_scale(0.1,2.0)Skalierungsbereich für Mosaic
mixup_scale(0.5,1.5)Skalierungsbereich für Mixup
no_aug_epochs15Augmentierung für die letzten N Epochen abschalten

EMA

ArgumentDefaultBedeutung
ematrueExponential Moving Average
ema_decay0.9998EMA-Decay-Faktor

Validierung während des Trainings

ArgumentDefaultBedeutung
valtrueWährend des Trainings validieren
eval_interval10Alle N Epochen validieren, und nach der letzten Epoche
max_det300Maximale Anzahl Vorhersagen pro Bild nach der Validierungs-NMS
eval_max_detObergrenze für den COCO-Evaluator. Ohne Angabe die AP@100-Konvention von pycocotools
faster_coco_evaltrueNutzt das C++-Backend faster-coco-eval für COCO-Metriken, wenn es installiert ist; fällt sonst auf pycocotools zurück
save_plotsfalseFinale Validierungs-Plots während des Trainings speichern
patience50Patience für das Early Stopping. 0 schaltet es ab

Ausgabe

ArgumentDefaultBedeutung
projectruns/trainWurzelverzeichnis der Ausgabe
nameName des Experiments. Ohne Angabe bekommt der Run den Namen, den train() der Familie verwendet, etwa yolo9_exp oder dfine_exp
exist_okfalseBestehendes Ausgabeverzeichnis wiederverwenden
save_period10Alle N Epochen einen Checkpoint speichern
log_interval10Alle N Batches den Loss loggen

Agent-Flags

ArgumentDefaultBedeutung
jsonfalseJSON-Ausgabe auf stdout
quietfalsestderr unterdrücken
dry_runfalseKonfiguration auflösen und ausgeben, ohne sie auszuführen
help_jsonfalseBefehlsschema als JSON ausgeben und beenden
ArgumentStandardBedeutung
min_samples0Mindestlänge einer Epoche für kleine Datensätze: Hat der Datensatz weniger Bilder, werden je Epoche so viele Stichproben mit Zurücklegen gezogen (0 = aus)
class_balancedFalseRepeat-Factor-Sampling im LVIS-Stil für ungleich verteilte Datensätze (Standard: aus)
cls_pw0.0Exponent der inversen Häufigkeitsgewichtung für Klassifikation: 0 aus, 1 vollständig (Klassengewichte mit Mittelwert 1; nicht mit class_weights=True kombinierbar)
class_weightsFalseBisherige stichprobennormierte Loss-Gewichte für Klassifikation (Standard: aus)
single_clsFalseEinen unterstützten Detektor mit allen Labels auf Klasse 0 trainieren
classesNoneEinen unterstützten Detektor nur auf diesen ursprünglichen Datensatz-Klassen-IDs trainieren, kommagetrennt (z. B. '0,3,5'); andere Klassen werden wie unbeschriftet verworfen. IDs bleiben unverändert und werden nicht verdichtet
average_best0Die N besten Checkpoints nach der überwachten Metrik am Trainingsende gleichgewichtet zu weights/average.pt mitteln (0 = aus)
export_checkFalseONNX vor Epoche 1 exportieren und den Lauf bei Exportfehler abbrechen (Standard: aus)
precise_bn0Laufende BatchNorm-Statistiken nach der letzten Epoche aus so vielen Trainingsbildern neu berechnen (0 = aus)
aux_weightNur YOLO9: Loss-Gewicht des PGI-Hilfszweigs. Ein Wert hängt einen neuen Zweig mit diesem Gewicht an, und 0 trainiert nur den Haupt-Head. Ohne Angabe wird der Zweig nur dann mit 0.25 angehängt, wenn die Gewichte PGI-Tensoren enthalten oder der Run von Grund auf neu trainiert
fliplrNoneWahrscheinlichkeit horizontaler Spiegelung (Ökosystem-Alias für flip_prob)
flipud0.0Wahrscheinlichkeit vertikaler Spiegelung
auto_augmentNoneAuto-Augmentierungsregel für Klassifikation: randaugment, autoaugment, augmix (Standard: keine)
erasing0.0RandomErasing-Wahrscheinlichkeit für Klassifikation, 0 <= erasing < 1
cutmix0.0CutMix-Wahrscheinlichkeit für Klassifikation (weiche Labels)
scale0.5RandomResizedCrop-Flächenbereich für Klassifikation: Gleitkomma-Untergrenze oder explizites (min,max)
crop_pctNoneSkalierungsverhältnis vor dem mittigen Ausschnitt bei der Klassifikationsauswertung (Standard: nativer Wert der Modellfamilie)
plot_samples8Bilder in der Validierungsbeispieldarstellung: 0 für keine, -1 für jedes validierte Bild (ändert die Metriken nicht)

Beispiele

Basis
# coco8.yaml liegt dem Paket bei und lädt seine 8 Bilder beim ersten Mal.libreyolo train model=LibreYOLO9s.pt data=coco8.yaml epochs=10 imgsz=640 batch=8
Zuerst die aufgelöste Konfiguration prüfen
# Gibt aus, was der Run nutzen würde, inklusive Familien-Defaults, und# beendet sich, ohne zu trainieren oder Daten zu laden.libreyolo train model=LibreDFINEn.pt data=coco8.yaml epochs=10 dry_run=true
Benannter Run mit explizitem Rezept
libreyolo train model=LibreYOLO9s.pt data=coco8.yaml \  epochs=50 batch=8 optimizer=adamw lr0=0.001 weight_decay=0.0001 \  patience=20 save_period=5 project=runs/train name=yolo9s-coco8 exist_ok=true

Hinweise

Die Defaults oben sind nicht immer die genutzten Werte

Jede Modellfamilie bringt ihre eigene Trainingskonfiguration mit, und wo diese von der Basiskonfiguration abweicht, ersetzt ihr Wert den Default des Befehls für jedes Argument, das du nicht explizit gesetzt hast. Setzt du das Argument selbst, gewinnt das immer. libreyolo cfg gibt die Basis-Defaults und die Overrides je Familie aus, und das ist der Weg, um zu sehen, was eine bestimmte Familie tatsächlich nutzt.

imgsz ist das Argument, bei dem das am meisten zählt. Der Default des Befehls ist 640, und das ist nicht bei jedem Checkpoint die native Eingabe: die veröffentlichten RF-DETR-Größen für die Erkennung sind 384, 512, 576 und 704, und die YOLOX-Checkpoints n und t liegen bei 416. RF-DETR und DEIMv2 werden so behandelt, dass imgsz nur weitergereicht wird, wenn es explizit gesetzt wurde, sonst bleibt ihre eigene Größe in Kraft. Andere Familien bekommen den Wert so, wie er angegeben wurde, und trainieren damit. FOMO ist der strenge Fall: jede Größe akzeptiert nur ihre native Eingabe (96, 192 und 224), eine FOMO-Ausführung braucht also ein passend gesetztes imgsz, sonst bricht sie mit einem Fehler ab. RF-DETR verlangt zusätzlich, dass der Wert durch seine Patch-Größe mal seine Fensteranzahl teilbar ist, und meldet die beiden nächstgelegenen zulässigen Größen, wenn er es nicht ist.

Argumente, die eine Familie ignoriert

Nicht jede Familie liest jedes Argument, und bei den Augmentierungs-Argumenten zeigt sich das am deutlichsten. RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETRv4 und DINOv2 trainieren über Pass-through-Pipelines ohne Mosaic, ohne Mixup und ohne affine Verzerrung, mosaic, mixup, hsv_prob, degrees, translate, shear, mosaic_scale und mixup_scale laufen dort also ins Leere. EC teilt sich diese Pipeline, liest aber hsv_prob, degrees und translate, wenn sein Task Pose ist. Die Klassifikationsfamilien ignorieren diesen Satz bis auf mixup, das bei ihnen Batch-MixUp ist, und sie lesen flip_prob. SegFormer, LingBot-Vision und NAFNet ignorieren den ganzen Satz und flip_prob gleich mit, weil ihr Spiegeln mit einer festen statt einer konfigurierbaren Wahrscheinlichkeit läuft. YOLO-NAS ignoriert allein mosaic, da es stattdessen mit einer immer aktiven affinen Transformation pro Sample augmentiert. RF-DETR ignoriert über diese Liste hinaus drei weitere: optimizer, momentum und nesterov.

Eines davon zu setzen ist kein Fehler. Der Run schreibt eine Zeile auf stderr, die die Familie und die Argumente nennt, die sie ignorieren wird, trainiert dann und diese Zeile ist die verbindliche Liste für die installierte Version. Sie ist außerdem das einzige Signal, ein geskripteter Run mit quiet=true unterdrückt die Warnung also zusammen mit allem anderen auf stderr.

val=false ist ein verwandter Fall. Es setzt eval_interval auf 0, was die Validierung während des Trainings abschaltet, die letzte Epoche eingeschlossen, und der Run schreibt kein best.pt.

Anderes Verhalten, das du kennen solltest

lora=true wird von RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETR v1, v2 und v4, EC, GTR und ConvNeXt akzeptiert. Jede andere Familie beendet sich mit config_unsupported, statt ohne LoRA zu trainieren.

clip_max_norm wird von den Familien akzeptiert, deren Trainingskonfiguration es deklariert: YOLOv9, YOLOv9-E2E und YOLOv9-P2, wo es standardmäßig 10 ist, sowie D-FINE, Dome-DETR, DEIM, DEIMv2, TinyFormer, RT-DETR, RT-DETRv2, RT-DETRv4, RF-DETR, DINOv2 und GTR, wo es standardmäßig 0.1 ist. Jede andere Familie beendet sich mit config_unsupported, und ein negativer oder nicht endlicher Wert beendet sich mit config_type_error.

device=0,1 baut das Modell auf der ersten aufgeführten GPU und übergibt die Liste an train(), das einen Prozess pro GPU startet. Siehe Multi-GPU-Training.

RF-DETR hat keinen Transfer von Detect zu Segment. task=segment mit einem RF-DETR-Segment-Checkpoint lädt diesen Checkpoint unabhängig von seinem Dateinamen, weil die Metadaten des Checkpoints über den Task entscheiden, während ein Detektions-Checkpoint mit einem Fehler abbricht, statt einen untrainierten Masken-Head zu trainieren.

pretrained=false zusammen mit resume wird bei den Familien abgelehnt, die Training von Grund auf neu unterstützen, denn die beiden verlangen Gegensätzliches.

mosaic und mixup sind die Schreibweisen der Konfigurationsfelder mosaic_prob und mixup_prob auf der Kommandozeile; bei einem Klassifikationsmodell ist mixup stattdessen Batch-MixUp. Bei Familien, deren Mixup nur auf Mosaic-Samples wirkt, greift mixup über null bei mosaic auf null nie, und der Run sagt das auch.

dry_run=true löst die Modellreferenz auf, wendet die Defaults der Familie an und gibt die Konfiguration aus, mit der trainiert würde. Der Datensatz wird dabei nicht geladen, das ist also der billige Weg, um zu bestätigen, dass ein Argument den Wert erreicht hat, den du erwartet hast.

stdout trägt das finale Ergebnisobjekt; Fortschritt und Warnungen gehen auf stderr. Der Exit-Code ist 0 bei Erfolg, 2 bei einem Bedienungs- oder Konfigurationsfehler, 3 wenn der Datensatz nicht gefunden oder gelesen werden kann, 4 wenn das Modell nicht geladen werden kann, und 1 bei sonstigen Laufzeitfehlern.

Verwandt: libreyolo doctor, um einen Datensatz zu prüfen, bevor du dich auf einen Run festlegst, libreyolo monitor, um einen Run im Browser zu verfolgen, libreyolo val, um das Ergebnis zu messen.

Mit LibreYOLO v1.6.0 verifiziert.