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/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 pro Gerät
imgsz640Bildgröße beim Training: 640 (quadratisch) oder 480x640 (HxB)
deviceautoGerät: 0, cpu, mps, auto
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
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

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
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
nameexpName des Experiments
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

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, SegFormer und NAFNet ignorieren diesen 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 bei den meisten Familien auf 0; RF-DETR kann die Validierung so nicht abschalten und protokolliert, dass es die Anfrage ignoriert hat.

Anderes Verhalten, das du kennen solltest

lora=true wird von RF-DETR, D-FINE, DEIM, DEIMv2, RT-DETR v1, v2 und v4, EC und ConvNeXt akzeptiert. Jede andere Familie beendet sich mit config_unsupported, statt ohne LoRA 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 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.5.0 verifiziert.