Modelltraining mit Ultralytics YOLO#
Einführung#
Das Trainieren eines deep learning-Modells beinhaltet die Zufuhr von Daten und die Anpassung seiner Parameter, damit es präzise Vorhersagen treffen kann. Der Train-Modus in Ultralytics YOLO26 ist darauf ausgelegt, Objekterkennungsmodelle effektiv und effizient zu trainieren und dabei die modernen Hardware-Fähigkeiten voll auszuschöpfen. Dieser Leitfaden soll alle Details abdecken, die du benötigst, um mit dem Training deiner eigenen Modelle über den robusten Funktionsumfang von YOLO26 zu beginnen. Wenn du Ultralytics noch nicht installiert hast, beginne mit der Quickstart guide.
Watch: How to Train a YOLO model on Your Custom Dataset in Google Colab.
Warum Ultralytics YOLO für das Training wählen?#
Hier sind einige überzeugende Gründe, sich für den Train-Modus von YOLO26 zu entscheiden:
- Effizienz: Hole das Beste aus deiner Hardware heraus, egal ob du ein System mit einer einzelnen GPU nutzt oder auf mehrere GPUs skalierst.
- Vielseitigkeit: Trainiere auf benutzerdefinierten Datensätzen zusätzlich zu leicht verfügbaren wie COCO, VOC und ImageNet.
- Benutzerfreundlichkeit: Einfache und dennoch leistungsstarke CLI- und Python-Schnittstellen für eine unkomplizierte Trainingserfahrung.
- Hyperparameter-Flexibilität: Eine breite Palette an anpassbaren Hyperparametern zur Feinabstimmung der Modellleistung. Für eine tiefere Kontrolle kannst du den Trainer anpassen.
- Cloud-Training: Trainiere auf Cloud-GPUs über Ultralytics Platform mit Echtzeitmetriken und automatischer Checkpoint-Speicherung.
Hauptfunktionen des Train-Modus#
Dies sind einige bemerkenswerte Funktionen des Train-Modus von YOLO26:
- Automatisierter Datensatz-Download: Datensatzkonfigurationen mit einer Download-Quelle werden bei der ersten Verwendung automatisch heruntergeladen, z. B.
yolo train data=coco8.yaml. Siehe die Datasets overview für unterstützte Formate und Datensätze. - Multi-GPU-Unterstützung: Skaliere deine Trainingsbemühungen nahtlos über mehrere GPUs, um den Prozess zu beschleunigen.
- Hyperparameter-Konfiguration: Die Möglichkeit, Hyperparameter über YAML-Konfigurationsdateien oder CLI-Argumente zu ändern.
- Visualisierung und Überwachung: Echtzeit-Verfolgung der Trainingsmetriken und Visualisierung des Lernprozesses für bessere Einblicke.
Anwendungsbeispiele#
Trainiere YOLO26n auf dem COCO8-Datensatz für 100 epochs bei einer Bildgröße von 640. Das Trainingsgerät kann über das Argument device angegeben werden. Wenn kein Argument übergeben wird, wird GPU device=0 verwendet, sofern verfügbar; andernfalls wird device='cpu' verwendet. Eine vollständige Liste der Trainingsargumente findest du im Abschnitt „Argumente“ weiter unten.
Unter Windows erhältst du möglicherweise ein RuntimeError, wenn du das Training als Skript startest. Füge vor deinem Trainingscode einen if __name__ == "__main__":-Block hinzu, um dies zu beheben.
Das Gerät wird automatisch bestimmt. Wenn eine GPU verfügbar ist, wird sie verwendet (Standard CUDA-Gerät 0); ansonsten beginnt das Training auf der CPU.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.yaml") # build a new model from YAML
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n.yaml").load("yolo26n.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Multi-GPU-Training#
Multi-GPU-Training ermöglicht eine effizientere Nutzung der verfügbaren Hardware-Ressourcen, indem die Trainingslast auf mehrere GPUs verteilt wird. Diese Funktion ist sowohl über die Python-API als auch über die Befehlszeilenschnittstelle verfügbar. Um das Multi-GPU-Training zu aktivieren, gib die GPU-Geräte-IDs an, die du verwenden möchtest.
Um mit 2 GPUs zu trainieren, verwenden die CUDA-Geräte 0 und 1 die folgenden Befehle. Erweitere dies nach Bedarf auf weitere GPUs.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model with 2 GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])
# Train the model with the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])Multi-GPU-Training funktioniert unter Windows mit den offiziellen PyTorch-Paketen für torch>=2.4 nicht. Ultralytics startet DDP über torch.distributed.run, dessen Rendezvous-Schritt ein TCPStore erstellt, das seit PyTorch 2.4 standardmäßig das libuv-Backend verwendet, und die offiziellen Windows-Pakete sind ohne libuv erstellt. Das Training bricht sofort ab mit:
RuntimeError: use_libuv was requested but PyTorch was built without libuv support
Das Setzen von USE_LIBUV=0 behebt dies nicht, da das Rendezvous das TCPStore direkt konstruiert und dieser Codepfad die Variable niemals liest. Trainiere unter Linux oder WSL2, um mehrere GPUs zu nutzen, oder trainiere auf einer einzelnen GPU mit device=0 unter Windows.
Wenn du mehrere Geräte angibst (z. B. device=[0, 1]), startet Ultralytics intern eine neue Trainer-Instanz und führt im Hintergrund torch.distributed.run aus. Dies funktioniert nahtlos bei der Standard-CLI-Nutzung und unveränderten Python-Skripten.
Wenn dein Skript jedoch benutzerdefinierte Komponenten enthält – wie einen benutzerdefinierten Trainer, Validator, Datensatz oder eine Augmentierungs-Pipeline –, können diese Objekte nicht automatisch serialisiert und an die DDP-Subprozesse übertragen werden. In diesem Fall musst du dein Skript direkt mit torch.distributed.run starten:
python -m torch.distributed.run --nproc_per_node 2 your_training_script.pyDas AMD-GPU-Training verwendet einen PyTorch-ROCm-Build mit der Standard-Syntax device=0 oder device=cuda:0. Siehe den
AMD integration guide für die Installation und den aktuellen Status der Unterstützung von MIGraphX, DirectML und Ryzen AI NPU.
Das Intel-GPU-Training verwendet device=xpu:0 oder mehrere XPU-IDs mit einem PyTorch-Build, der XCCL bereitstellt.
Training auf Huawei Ascend NPU#
Ultralytics unterstützt Training und Validierung auf Huawei Ascend NPUs durch
torch_npu. Installiere zueinander kompatible Versionen von CANN, PyTorch und torch_npu
gemäß dem Ascend Extension for PyTorch installation guide
und lade anschließend die CANN-Umgebung, bevor du Ultralytics startest:
source /usr/local/Ascend/ascend-toolkit/set_env.shfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Train on one Ascend NPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0")
# Train across two Ascend NPUs with HCCL
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0,1")Die Standard-Trainingsfunktionen, einschließlich AMP, Validierung, Checkpointing und Fortsetzen, verwenden die aktive NPU. AutoBatch ist für das Training mit einer einzelnen NPU verfügbar, während mehrere NPU-IDs das verteilte Training über HCCL starten. Siehe den Huawei Ascend integration guide für den Modellexport und die Bereitstellung nach dem Training.
Training mit freien GPUs (Idle GPU Training)#
Das Training mit freien GPUs ermöglicht die automatische Auswahl der am wenigsten genutzten GPUs in Multi-GPU-Systemen und optimiert so die Ressourcennutzung ohne manuelle GPU-Auswahl. Diese Funktion identifiziert verfügbare GPUs anhand von Auslastungsmetriken und VRAM-Verfügbarkeit.
Um die am wenigsten ausgelastete(n) GPU(s) für das Training automatisch auszuwählen und zu verwenden, nutze den Geräteparameter -1. Dies ist besonders nützlich in gemeinsam genutzten Umgebungen oder auf Servern mit mehreren Benutzern.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train using the single most idle GPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=-1)
# Train using the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])Der Algorithmus zur automatischen Auswahl priorisiert GPUs mit:
- Niedrigeren aktuellen Auslastungsprozentsätzen
- Höherem verfügbaren Speicher (freier VRAM)
- Niedrigerer Temperatur und geringerem Stromverbrauch
Diese Funktion ist besonders wertvoll in gemeinsamen Rechenumgebungen oder wenn mehrere Trainingsjobs für verschiedene Modelle ausgeführt werden. Sie passt sich automatisch an sich ändernde Systembedingungen an und stellt so eine optimale Ressourcenzuweisung ohne manuellen Eingriff sicher.
Training mit Apple Silicon MPS#
Mit der in die Ultralytics YOLO-Modelle integrierten Unterstützung für Apple Silicon-Chips ist es nun möglich, deine Modelle auf Geräten zu trainieren, die das leistungsstarke Framework Metal Performance Shaders (MPS) nutzen. MPS bietet eine hochperformante Möglichkeit zur Ausführung von Rechen- und Bildverarbeitungsaufgaben auf dem benutzerdefinierten Silicon von Apple.
Um das Training auf Apple Silicon-Chips zu aktivieren, solltest du beim Starten des Trainingsprozesses 'mps' als dein Gerät angeben. Unten findest du ein Beispiel, wie du dies in Python und über die Befehlszeile tun kannst:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model with MPS
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")Durch die Nutzung der Rechenleistung der Apple-Silicon-Chips ermöglicht dies eine effizientere Verarbeitung der Trainingsaufgaben. Ausführlichere Anleitungen und Optionen für fortgeschrittene Konfigurationen findest du in der PyTorch MPS documentation.
Unterbrochene Trainings fortsetzen#
Das Fortsetzen des Trainings von einem zuvor gespeicherten Zustand ist eine entscheidende Funktion bei der Arbeit mit Deep-Learning-Modellen. Dies ist in verschiedenen Szenarien nützlich, z. B. wenn der Trainingsprozess unerwartet unterbrochen wurde oder wenn du das Training eines Modells mit neuen Daten oder für weitere Epochen fortsetzen möchtest.
Wenn das Training fortgesetzt wird, lädt Ultralytics YOLO die Gewichte des zuletzt gespeicherten Modells und stellt außerdem den Zustand des Optimierers, den learning rate-Scheduler und die Epochennummer wieder her. Dadurch kannst du den Trainingsprozess nahtlos dort fortsetzen, wo er unterbrochen wurde.
Du kannst das Training in Ultralytics YOLO ganz einfach fortsetzen, indem du beim Aufrufen der Methode train das Argument resume auf True setzt und den Pfad zur Datei .pt angibst, die die teilweise trainierten Modellgewichte enthält.
Unten findest du ein Beispiel, wie du ein unterbrochenes Training mit Python und über die Befehlszeile fortsetzen kannst:
from ultralytics import YOLO
# Load a model
model = YOLO("path/to/last.pt") # load a partially trained model
# Resume training
results = model.train(resume=True)Durch das Setzen von resume=True setzt die Funktion train das Training dort fort, wo es unterbrochen wurde, und verwendet dabei den in der Datei „path/to/last.pt“ gespeicherten Zustand. Wenn das Argument resume weggelassen oder auf False gesetzt wird, startet die Funktion train eine neue Trainingseinheit.
Denke daran, dass Checkpoints standardmäßig am Ende jeder Epoche oder in festen Intervallen mithilfe des Arguments save_period gespeichert werden. Du musst also mindestens 1 Epoche abschließen, um einen Trainingslauf fortzusetzen.
Trainingseinstellungen#
Die Trainingseinstellungen für YOLO-Modelle umfassen verschiedene Hyperparameter und Konfigurationen, die während des Trainingsprozesses verwendet werden. Diese Einstellungen beeinflussen die Leistung, Geschwindigkeit und accuracy des Modells. Zu den wichtigsten Trainingseinstellungen gehören Batch-Größe, Lernrate, Momentum und Gewichtungsabfall (Weight Decay). Darüber hinaus können die Wahl des Optimizers, der loss function und die Zusammensetzung des Trainingsdatensatzes den Trainingsprozess beeinflussen. Eine sorgfältige Abstimmung und Experimente mit diesen Einstellungen sind entscheidend für die Leistungsoptimierung.
MuSGD-Optimierer#
In YOLO26 ist MuSGD ein hybrider Optimierer, der Standard-SGD-Updates mit orthogonalisierten Muon-Updates kombiniert.
Er wird für längere YOLO26-Trainingsläufe und größere Datensätze empfohlen, bei denen orthogonalisierte Muon-Updates zur Stabilisierung der Optimierung beitragen können.
Nur lineare 2D-Gewichte und 4D-Faltungskilter (umgeformt zu 2D) erhalten zusammen mit SGD das Update im Muon-Stil, während alle anderen Parameter wie Batch-Normalisierungsgewichte und Bias-Terme beim Standard-SGD verbleiben.
Wenn optimizer=auto verwendet wird, wählt Ultralytics automatisch MuSGD für längere Trainingsläufe (typischerweise bei mehr als 10.000 Iterationen). Bei kürzeren Läufen greift der Trainer auf AdamW zurück.
Beispiel für die Verwendung:
yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGDSiehe die Implementierung in ultralytics/optim/muon.py und die Logik zur automatischen Optimiererauswahl in BaseTrainer.build_optimizer.
| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
model | str | None | Gibt die Modelldatei für das Training an. Akzeptiert entweder den Pfad zu einem vortrainierten .pt-Modell oder einer .yaml-Konfigurationsdatei. Ist essenziell, um die Modellstruktur zu definieren oder Gewichte zu initialisieren. |
data | str | None | Pfad zum Dataset-YAML (z. B. coco8.yaml), das die Pfade zu Trainings- und Validierungsdaten, Klassennamen und die Anzahl der Klassen enthält. Bei der Klassifizierung wird stattdessen ein Dataset-Verzeichnis oder ein integrierter Dataset-Name angegeben (z. B. imagenet10). |
epochs | int | 100 | Gesamtanzahl der Trainingsepochen. Jede Epoche stellt einen vollständigen Durchlauf über das gesamte Dataset dar. Die Anpassung dieses Wertes kann die Trainingsdauer und die Modellleistung beeinflussen. |
time | float | None | Maximale Trainingszeit in Stunden. Falls festgelegt, überschreibt dies das epochs-Argument, wodurch das Training nach der angegebenen Dauer automatisch gestoppt wird. Nützlich für zeitkritische Trainingsszenarien. |
patience | int | 100 | Anzahl der Epochen, die ohne Verbesserung der Validierungsmetriken gewartet wird, bevor das Training frühzeitig abgebrochen wird. Hilft, Overfitting zu verhindern, indem das Training gestoppt wird, wenn sich die Leistung einpegelt. |
batch | int oder float | 16 | Batch-Größe mit drei Modi: als Ganzzahl festgelegt (z. B. batch=16), Automatikmodus für 60 % GPU-Speicherauslastung (batch=-1) oder Automatikmodus mit einem angegebenen Auslastungsanteil (batch=0.70). |
imgsz | int | 640 | Zielbildgröße für das Training. Bilder werden auf Quadrate mit Seitenlängen entsprechend dem angegebenen Wert skaliert (falls rect=False), wobei das Seitenverhältnis für YOLO-Modelle beibehalten wird, jedoch nicht für RT-DETR. Beeinflusst die Modellgenauigkeit und die Rechenkomplexität. |
save | bool | True | Aktiviert das Speichern von Trainings-Checkpoints und finalen Modellgewichten. Nützlich zum Fortsetzen des Trainings oder für die Modellbereitstellung. |
save_period | int | -1 | Häufigkeit des Speicherns von Modell-Checkpoints, angegeben in Epochen. Ein Wert von -1 deaktiviert diese Funktion. Nützlich zum Speichern von Zwischenmodellen während langer Trainingssitzungen. |
cache | bool | False | Aktiviert das Caching von Dataset-Bildern im Arbeitsspeicher (True/ram), auf der Festplatte (disk) oder deaktiviert es (False). Verbessert die Trainingsgeschwindigkeit durch Reduzierung von Festplatten-E/A auf Kosten eines erhöhten Speicherbedarfs. |
device | int oder str oder list | None | Gibt das bzw. die Rechengeräte für das Training an: eine einzelne GPU (device=0), mehrere GPUs (device=[0,1]), CPU (device=cpu), MPS für Apple Silicon (device=mps), Huawei Ascend NPU (device=npu:0 oder device=npu:0,1) oder die automatische Auswahl einer freien GPU (device=-1) bzw. mehrerer freier GPUs (device=[-1,-1]). |
workers | int | 8 | Anzahl der Worker-Threads für das Laden von Daten (pro RANK beim Multi-GPU-Training). Beeinflusst die Geschwindigkeit der Datenvorverarbeitung und -zufuhr zum Modell, was besonders bei Multi-GPU-Setups nützlich ist. |
project | str | None | Name des Projektverzeichnisses, in dem die Trainingsausgaben gespeichert werden. Ermöglicht eine organisierte Speicherung verschiedener Experimente. |
name | str | None | Name des Trainingslaufs. Wird verwendet, um ein Unterverzeichnis im Projektordner zu erstellen, in dem Trainingsprotokolle und Ausgaben gespeichert werden. |
exist_ok | bool | False | Wenn True, erlaubt das Überschreiben eines existierenden Projekt-/Namensverzeichnisses. Nützlich für iterative Experimente, ohne vorherige Ausgaben manuell löschen zu müssen. |
save_dir | str | None | Gibt das genaue Verzeichnis an, in dem die Ausgaben des Laufs gespeichert werden, und überschreibt dabei die Kombination aus project und name. Der Pfad wird ohne automatisches Inkrementieren unverändert verwendet, sodass aufeinanderfolgende Läufe dasselbe Verzeichnis wiederverwenden. |
pretrained | bool oder str | True | Bestimmt, ob das Training mit vortrainierten Gewichten gestartet werden soll. Kann ein boolescher Wert oder ein String-Pfad zu den zu ladenden Gewichten sein. pretrained=False trainiert mit zufällig initialisierten Gewichten unter Beibehaltung der Modellarchitektur. |
cls_remap | bool | True | Wenn du das Fine-Tuning über Datensätze hinweg durchführst, werden Zeilen des vortrainierten Klassifizierungskopfs immer dann in das neue Modell kopiert, wenn die Klassennamen übereinstimmen. Dadurch behalten sich überschneidende Klassen ihren gelernten Bias sowie ihre Gewichte, sofern die Kopfbreite unverändert bleibt. Dies gilt unabhängig davon, ob sich die Anzahl der Klassen unterscheidet oder ob sie bei einer anderen Reihenfolge übereinstimmt. |
optimizer | str | 'auto' | Auswahl des Optimierers für das Training. Zu den Optionen gehören SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp oder auto, um AdamW oder MuSGD basierend auf der Anzahl der Trainingsiterationen auszuwählen. Beeinflusst die Konvergenzgeschwindigkeit und -stabilität. |
seed | int | 0 | Legt den Zufallswert (Seed) für das Training fest, was die Reproduzierbarkeit der Ergebnisse über Durchläufe mit denselben Konfigurationen hinweg sicherstellt. |
deterministic | bool | True | Erzwingt die Verwendung deterministischer Algorithmen, was die Reproduzierbarkeit sicherstellt, aber die Leistung und Geschwindigkeit aufgrund der Beschränkung auf nicht-deterministische Algorithmen beeinträchtigen kann. |
verbose | bool | True | Aktiviert die ausführliche Ausgabe während des Trainings und zeigt Fortschrittsbalken, Metriken pro Epoche sowie zusätzliche Trainingsinformationen in der Konsole an. |
single_cls | bool | False | Behandelt alle Klassen in Datensätzen mit mehreren Klassen als eine einzige Klasse während des Trainings. Nützlich für binäre Klassifizierungsaufgaben oder wenn der Fokus eher auf dem Vorhandensein von Objekten als auf der Klassifizierung liegt. |
classes | list[int] | None | Gibt eine Liste von Klassen-IDs an, die trainiert werden sollen. Nützlich zum Filtern und zur Konzentration auf bestimmte Klassen während des Trainings. |
rect | bool | False | Aktiviert die minimale Padding-Strategie – Bilder in einem Batch werden minimal gepaddet, um eine gemeinsame Größe zu erreichen, wobei die längste Seite gleich imgsz ist. Kann die Effizienz und Geschwindigkeit verbessern, beeinträchtigt jedoch möglicherweise die Modellgenauigkeit. |
multi_scale | float | 0.0 | Variiert imgsz in jedem Batch zufällig um +/- multi_scale (z. B. 0.25 -> 0.75x bis 1.25x), gerundet auf Vielfache der Modell-Stride; 0.0 deaktiviert das Multiskalen-Training. |
cos_lr | bool | False | Verwendet einen Cosinus-Planer für die Lernrate, der die Lernrate über Epochen hinweg entlang einer Cosinus-Kurve anpasst. Hilft bei der Verwaltung der Lernrate für eine bessere Konvergenz. |
close_mosaic | int | 10 | Deaktiviert die Mosaik-Datenaugmentation in den letzten N Epochen, um das Training vor dem Abschluss zu stabilisieren. Die Einstellung auf 0 deaktiviert diese Funktion. |
resume | bool | False | Setzt das Training vom zuletzt gespeicherten Checkpoint fort. Lädt automatisch Modellgewichte, Optimiererzustand und Epochenanzahl, um das Training nahtlos fortzusetzen. |
amp | bool oder str | True | Legt die Trainingspräzision fest: True oder "fp16" verwendet FP16, "bf16" verwendet BF16 auf unterstützten CUDA-Geräten, und False oder "fp32" verwendet FP32. |
fraction | float, int oder list | 1.0 | Dataset-Subset als Verhältnis/Anzahl oder [train, val, test]-Liste. Listen mit zwei Elementen halten test vollständig, und test 0 überspringt den NDJSON-Download. Ein Integer 1 ist ein Bild, während 1.0 alle sind. |
profile | bool | False | Aktiviert die Profilierung von ONNX- und TensorRT-Geschwindigkeiten während des Trainings, was für die Optimierung des Modelleinsatzes nützlich ist. |
freeze | int oder list | None | Friert die ersten N Schichten des Modells oder bestimmte Schichten nach Index oder Modulname ein (23.cv2, ohne führendes model.), wodurch die Anzahl der trainierbaren Parameter reduziert wird. Nützlich für Fine-Tuning oder Transfer-Lernen. |
lr0 | float | 0.01 | Initiale Lernrate (d. h. SGD=1E-2, Adam=1E-3). Die Anpassung dieses Wertes ist entscheidend für den Optimierungsprozess und beeinflusst, wie schnell die Modellgewichte aktualisiert werden. |
lrf | float | 0.01 | Finale Lernrate als Bruchteil der initialen Rate = (lr0 * lrf), wird in Verbindung mit Planern verwendet, um die Lernrate im Laufe der Zeit anzupassen. |
momentum | float | 0.937 | Momentum-Faktor für SGD oder Beta1 für Adam-Optimierer, der die Einbeziehung vergangener Gradienten in das aktuelle Update beeinflusst. |
weight_decay | float | 0.0005 | L2-Regularisierungsterm, der große Gewichte bestraft, um Overfitting zu verhindern. |
warmup_epochs | float | 3.0 | Anzahl der Epochen für das Lernraten-Warmup, wobei die Lernrate schrittweise von einem niedrigen Wert auf die anfängliche Lernrate erhöht wird, um das Training frühzeitig zu stabilisieren. |
warmup_momentum | float | 0.8 | Anfängliches Momentum für die Warmup-Phase, das sich über den Warmup-Zeitraum hinweg schrittweise an das eingestellte Momentum anpasst. |
warmup_bias_lr | float | 0.1 | Lernrate für Bias-Parameter während der Warmup-Phase, die dazu beiträgt, das Modelltraining in den ersten Epochen zu stabilisieren. Wird bei Standard-optimizer='auto' automatisch auf 0.0 gesetzt, gib also einen Optimierer explizit an, um ihn zu verwenden. |
distill_model | str | None | Pfad zu einem Checkpoint des Lehrermodells (z. B. yolo26x.pt) für die Wissensdestillation (Knowledge Distillation). Wenn gesetzt, wird das Schülermodell mit einem zusätzlichen Destillations-Loss trainiert, der durch das eingefrorene Lehrermodell angeleitet wird. |
dis | float | 6.0 | Gewichtung des Destillationsverlusts, der zu den Standard-Erkennungsverlusten hinzugefügt wird. Höhere Werte erhöhen den Einfluss der Merkmalsführung durch den Lehrer. |
box | float | 7.5 | Gewichtung der Box-Loss-Komponente in der Loss-Funktion, die beeinflusst, wie stark der Schwerpunkt auf die genaue Vorhersage von Bounding-Box-Koordinaten gelegt wird. |
cls | float | 0.5 | Gewichtung des Klassifizierungsverlusts in der gesamten Verlustfunktion, was die Bedeutung einer korrekten Klassenvorhersage im Verhältnis zu anderen Komponenten beeinflusst. |
cls_pw | float | 0.0 | Exponent für die Klassengewichtung zur Behandlung von Klassenunbalancen unter Verwendung der inversen Klassenhäufigkeit. 0.0 deaktiviert die Klassengewichtung, 1.0 wendet die vollständige Gewichtung mit der inversen Häufigkeit an. Werte zwischen 0 und 1 bieten eine partielle Gewichtung. |
dfl | float | 1.5 | Gewichtung des Regressionserms für den Box-Abstand: Distribution Focal Loss (DFL), wenn der Detektionskopf reg_max > 1 verwendet, oder ein L1-Verlust für normalisierte Box-Abstände bei DFL-freiem YOLO26 (reg_max: 1). |
pose | float | 12.0 | Gewichtung des Pose-Loss in Modellen, die für die Pose-Schätzung trainiert wurden, was den Fokus auf die genaue Vorhersage von Pose-Keypoints beeinflusst. |
kobj | float | 1.0 | Gewichtung des Keypoint-Objectness-Loss in Pose-Schätzungsmodellen, um das Vertrauen der Erkennung mit der Pose-Genauigkeit abzugleichen. |
rle | float | 1.0 | Gewichtung des Residual-Log-Likelihood-Estimation-Loss in Pose-Schätzungsmodellen, was die Präzision der Keypoint-Lokalisierung beeinflusst. |
angle | float | 1.0 | Gewichtung des Winkel-Loss in OBB-Modellen, was die Präzision der Vorhersagen für den Winkel von orientierten Bounding-Boxen beeinflusst. |
dlog | float | 1.0 | Gewichtung des skaleninvarianten logarithmischen Verlusts (SILog-Loss) in Tiefenschätzungsmodellen, dem primären Faktor für die Tiefengenauigkeit. |
dgrad | float | 0.5 | Gewichtung des Gradientenverlusts in Tiefenschätzungsmodellen, die Fehler an Tiefenkanten bestraft und schärfere Oberflächengrenzen fördert. |
dlam | float | 1.0 | Varianzfokus-Faktor des SILog-Loss in Tiefenschätzungsmodellen. 1.0 macht den Loss vollständig skaleninvarianter, während 0.0 ihn auf einen einfachen log-RMSE reduziert. |
nbs | int | 64 | Nominale Batch-Größe für die Normalisierung des Verlusts. |
overlap_mask | bool | True | Bestimmt, ob Objektmasken für das Training zu einer einzigen Maske zusammengeführt oder für jedes Objekt separat gehalten werden sollen. Bei einer Überlappung wird die kleinere Maske beim Zusammenführen über die größere Maske gelegt. |
mask_ratio | int | 4 | Downsampling-Verhältnis für Segmentierungsmasken, was die Auflösung der während des Trainings verwendeten Masken beeinflusst. |
dropout | float | 0.0 | Dropout-Rate zur Regularisierung bei Klassifizierungsaufgaben, um Overfitting durch zufälliges Auslassen von Einheiten während des Trainings zu verhindern. |
val | bool | True | Aktiviert die Validierung während des Trainings, was eine regelmäßige Bewertung der Modellleistung auf einem separaten Datensatz ermöglicht. |
plots | bool | True | Generiert und speichert Diagramme von Trainings- und Validierungsmetriken sowie Vorhersagebeispiele, die visuelle Einblicke in die Modellleistung und den Lernfortschritt bieten. |
compile | bool oder str | False | Aktiviert die PyTorch-2.x-torch.compile-Graphenkompilierung mit backend='inductor'. Akzeptiert True → "default", False → deaktiviert, oder einen String-Modus wie "default", "reduce-overhead", "max-autotune-no-cudagraphs". Fällt bei Nichtunterstützung unter Warnung auf Eager-Modus zurück. |
channels_last | bool | False | Verwendet das Speicherformat channels_last (NHWC) für Faltungen beim Training, wodurch CUDA Tensor Core GPUs ohne Ergebnisänderung beschleunigt werden. Wird auf CPU und MPS, wo es keinen Nutzen bringt, automatisch ignoriert. |
max_det | int | 300 | Gibt die maximale Anzahl von Objekten an, die während der Validierungsphase des Trainings beibehalten werden. |
Das Argument batch kann auf drei Arten konfiguriert werden:
- Feste Batch Size: Lege einen Ganzzahlwert fest (z. B.
batch=16), der die Anzahl der Bilder pro Batch direkt angibt. - Auto-Modus (60 % GPU-Speicher): Verwende
batch=-1, um die Batch-Größe automatisch für eine CUDA-Speicherauslastung von etwa 60 % anzupassen. - Auto-Modus mit Auslastungsanteil: Lege einen Bruchwert fest (z. B.
batch=0.70), um die Batch-Größe basierend auf dem angegebenen Bruchteil der GPU-Speichernutzung anzupassen. - OOM Auto-Retry: Wenn während der ersten Epoche ein CUDA-Speichermangel-Fehler auftritt, halbiert der Trainer automatisch die Batch-Größe und versucht es erneut (bis zu 3 Mal). Dies gilt nur für das Single-GPU-Training; beim Multi-GPU-Training (DDP) wird der Fehler sofort ausgelöst.
- No Fit Found: Wenn keine Kandidaten-Batchgröße ein verwendbares Profil liefert, löst AutoBatch ein klares
RuntimeErroraus, anstatt stillschweigend auf einen unzusammenhängenden Standardwert zurückzufallen.
Augmentierungs-Einstellungen und Hyperparameter#
Augmentierungstechniken sind unerlässlich, um die Robustheit und Leistung von YOLO-Modellen zu verbessern, indem sie Variabilität in die training data einbringen und dem Modell helfen, besser auf ungesehene Daten zu verallgemeinern. Die folgende Tabelle beschreibt den Zweck und die Auswirkung der einzelnen Augmentierungsargumente:
| Argument | Typ | Standard | Unterstützte Aufgaben | Bereich | Beschreibung |
|---|---|---|---|---|---|
hsv_h | float | 0.015 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Passt den Farbton des Bildes um einen Bruchteil des Farbkreises an und führt so Farbvariabilität ein. Hilft dem Modell, sich über verschiedene Lichtverhältnisse hinweg zu verallgemeinern. Bei classify gilt dies nur, wenn auto_augment=None. |
hsv_s | float | 0.7 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Verändert die Sättigung des Bildes um einen Bruchteil, was sich auf die Intensität der Farben auswirkt. Nützlich zur Simulation verschiedener Umweltbedingungen. Bei classify gilt dies nur, wenn auto_augment=None. |
hsv_v | float | 0.4 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Modifiziert den Wert (Helligkeit) des Bildes um einen Bruchteil, wodurch das Modell unter verschiedenen Lichtverhältnissen gute Leistungen erbringen kann. Bei classify gilt dies nur, wenn auto_augment=None. |
degrees | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 180 | Dreht das Bild zufällig innerhalb des angegebenen Gradbereichs, was die Fähigkeit des Modells verbessert, Objekte in verschiedenen Ausrichtungen zu erkennen. |
translate | float | 0.1 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | Verschiebt das Bild horizontal und vertikal um einen Bruchteil der Bildgröße, was dabei hilft, teilweise sichtbare Objekte erkennen zu lernen. |
scale | float | tuple | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0 - 1 oder ein explizites (min, max)-Tupel (nicht für classify) | Skaliert das Bild um einen Verstärkungsfaktor und simuliert so Objekte in unterschiedlichen Entfernungen von der Kamera. |
shear | float | 0 | detect, segment, semantic, depth, pose, obb | -180 - +180 | Schert das Bild um einen angegebenen Grad, was den Effekt nachahmt, dass Objekte aus verschiedenen Winkeln betrachtet werden. |
perspective | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 0.001 | Wendet eine zufällige perspektivische Transformation auf das Bild an und verbessert so das Verständnis des Modells für Objekte im 3D-Raum. |
flipud | float | 0 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Spiegelt das Bild mit der angegebenen Wahrscheinlichkeit vertikal, was die Datenvariabilität erhöht, ohne die Eigenschaften des Objekts zu beeinflussen. |
fliplr | float | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Spiegelt das Bild mit der angegebenen Wahrscheinlichkeit horizontal, was nützlich ist, um symmetrische Objekte zu erlernen und die Vielfalt des Datensatzes zu erhöhen. |
bgr | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | Tauscht die Bildkanäle mit der angegebenen Wahrscheinlichkeit von RGB auf BGR, was nützlich ist, um die Robustheit gegenüber falscher Kanalreihenfolge zu erhöhen. |
mosaic | float | 1 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Kombiniert vier Trainingsbilder zu einem und simuliert verschiedene Szenenzusammensetzungen und Objektinteraktionen. Sehr effektiv für das Verständnis komplexer Szenen. |
mixup | float | 0 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Mischt zwei Bilder und deren Labels zu einem zusammengesetzten Bild. Verbessert die Generalisierungsfähigkeit des Modells durch die Einführung von Label-Rauschen und visueller Variabilität. |
cutmix | float | 0 | detect, segment, pose, obb | 0.0 - 1.0 | Kombiniert Teile von zwei Bildern, was eine teilweise Vermischung unter Beibehaltung klarer Regionen erzeugt. Erhöht die Modellrobustheit durch die Schaffung von Verdeckungsszenarien. |
copy_paste | float | 0 | segment, obb | 0.0 - 1.0 | Anteil der berechtigten Objekte, die eingefügt werden; flip spiegelt sie innerhalb des Bildes wider, während mixup den Wert zusätzlich als Wahrscheinlichkeit für die Anwendung über verschiedene Bilder hinweg nutzt. |
copy_paste_mode | str | flip | segment, obb | - | Gibt die zu verwendende copy-paste-Strategie an. Zu den Optionen gehören 'flip' und 'mixup'. |
auto_augment | str | randaugment | classify | - | Wendet eine vordefinierte Augmentierungsrichtlinie ('randaugment', 'autoaugment' oder 'augmix') an, um die Modellleistung durch visuelle Diversität zu verbessern. |
erasing | float | 0.4 | classify | 0.0 - 1.0 | Löscht während des Trainings zufällig Regionen im Bild, um das Modell dazu zu ermutigen, sich auf weniger offensichtliche Merkmale zu konzentrieren. |
augmentations | list | None | detect, segment, semantic, depth, pose, obb | - | Benutzerdefinierte Albumentations-Transformationen für fortgeschrittene Datenaugmentierung (nur Python API). Akzeptiert eine Liste von Transformations-Objekten für spezielle Augmentierungsanforderungen. |
Diese Einstellungen können angepasst werden, um den spezifischen Anforderungen des Datensatzes und der anstehenden Aufgabe gerecht zu werden. Das Experimentieren mit verschiedenen Werten kann dabei helfen, die optimale Augmentierungsstrategie zu finden, die zur besten Modellleistung führt.
Weitere Informationen zu Trainings-Augmentierungsvorgängen findest du im Referenzabschnitt.
Protokollierung#
Beim Training eines YOLO26-Modells kann es nützlich sein, die Leistung des Modells im Laufe der Zeit zu verfolgen. Hier kommt das Logging ins Spiel. Ultralytics YOLO bietet Unterstützung für drei Arten von Loggern – Comet, ClearML und TensorBoard.
Um einen Logger zu verwenden, wähle ihn im Dropdown-Menü im obigen Code-Snippet aus und führe ihn aus. Der gewählte Logger wird installiert und initialisiert.
Comet#
Comet ist eine Plattform, die es Data Scientists und Entwicklern ermöglicht, Experimente und Modelle zu verfolgen, zu vergleichen, zu erklären und zu optimieren. Sie bietet Funktionen wie Echtzeitmetriken, Code-Diffs und die Verfolgung von Hyperparametern.
So verwendest du Comet:
# pip install comet_ml
import comet_ml
comet_ml.init()Denke daran, dich auf deren Website bei deinem Comet-Konto anzumelden und deinen API-Schlüssel zu erhalten. Du musst diesen zu deinen Umgebungsvariablen oder deinem Skript hinzufügen, um deine Experimente zu protokollieren.
ClearML#
ClearML ist eine Open-Source-Plattform, die die Verfolgung von Experimenten automatisiert und bei der effizienten gemeinsame Nutzung von Ressourcen hilft. Sie wurde entwickelt, um Teams dabei zu unterstützen, ihre ML-Arbeit effizienter zu verwalten, auszuführen und zu reproduzieren.
So verwendest du ClearML:
# pip install clearml
import clearml
clearml.browser_login()Nachdem du dieses Skript ausgeführt hast, musst du dich im Browser bei deinem ClearML-Konto anmelden und deine Sitzung authentifizieren.
TensorBoard#
TensorBoard ist ein Visualisierungs-Toolkit für TensorFlow. Es ermöglicht dir, deinen TensorFlow-Graphen zu visualisieren, quantitative Metriken über die Ausführung deines Graphen zu plotten und zusätzliche Daten wie Bilder anzuzeigen, die ihn durchlaufen.
So verwendest du TensorBoard in Google Colab:
load_ext tensorboard
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryUm TensorBoard lokal zu verwenden, führe den folgenden Befehl aus und betrachte die Ergebnisse unter localhost:6006.
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryDadurch wird TensorBoard geladen und auf das Verzeichnis verwiesen, in dem deine Trainingsprotokolle gespeichert sind.
Nachdem du deinen Logger eingerichtet hast, kannst du mit dem Training deines Modells fortfahren. Alle Trainingsmetriken werden automatisch auf deiner gewählten Plattform protokolliert, und du kannst auf diese Protokolle zugreifen, um die Leistung deines Modells im Zeitverlauf zu überwachen, verschiedene Modelle zu vergleichen und Verbesserungsbereiche zu identifizieren.
Wie geht es weiter?#
Validiere dein trainiertes Modell anhand von Validierungsdaten (Held-out Data), um seine Genauigkeit in der Praxis zu überprüfen, und exportiere es dann nach ONNX, TensorRT oder in ein anderes Bereitstellungsformat. Trainierst du mit deinen eigenen Daten statt COCO8? Formatiere diese zuerst mit dem Datasets guide.
FAQ#
Ja. Das Ultralytics Platform cloud training beinhaltet kostenlose Startguthaben. Lade deinen Datensatz hoch, wähle ein Modell und eine GPU aus und trainiere direkt im Browser.
Um ein Objekterkennungsmodell mit Ultralytics YOLO26 zu trainieren, kannst du entweder die Python API oder das CLI verwenden. Nachfolgend findest du ein Beispiel für beides:
Beispiel für Single-GPU- und CPU-Trainingfrom ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training) # Train the model results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Weitere Details findest du im Abschnitt Train Settings.
Die Hauptmerkmale des Trainingsmodus von Ultralytics YOLO26 umfassen:
- Automatischer Datensatz-Download: Lädt automatisch Standard-Datensätze wie COCO, VOC und ImageNet herunter.
- Multi-GPU-Unterstützung: Skaliere das Training über mehrere GPUs hinweg für eine schnellere Verarbeitung.
- Hyperparameter-Konfiguration: Passe Hyperparameter über YAML-Dateien oder CLI-Argumente an.
- Visualisierung und Überwachung: Echtzeit-Verfolgung von Trainingsmetriken für bessere Einblicke.
Diese Funktionen machen das Training effizient und an deine Bedürfnisse anpassbar. Weitere Details findest du im Abschnitt Key Features of Train Mode.
Um das Training nach einer unterbrochenen Sitzung fortzusetzen, setze das Argument
resumeaufTrueund gib den Pfad zum zuletzt gespeicherten Checkpoint an.Beispiel zum Fortsetzen des Trainingsfrom ultralytics import YOLO # Load the partially trained model model = YOLO("path/to/last.pt") # Resume training results = model.train(resume=True)Weitere Informationen findest du im Abschnitt über das Resuming Interrupted Trainings.
Klassenimbalance tritt auf, wenn einige Klassen in deinen Trainingsdaten deutlich weniger Beispiele als andere aufweisen. Dies kann dazu führen, dass das Modell bei seltenen Klassen eine schlechte Leistung erbringt. Ultralytics YOLO unterstützt Klassenwichtung über das Argument
cls_pw, um dieses Problem zu lösen.Das Argument
cls_pwsteuert die Stärke der Klassenwichtung basierend auf der inversen Klassenhäufigkeit:cls_pw=0.0(Standard): Deaktiviert die Klassenwichtungcls_pw=1.0: Wendet eine vollständige Wichtung nach inverser Häufigkeit an- Werte zwischen
0.0und1.0: Bieten eine partielle Wichtung bei mäßiger Imbalance
Die Klassengewichte werden als
(1.0 / class_counts) ^ cls_pwberechnet und so normalisiert, dass ihr Mittelwert 1,0 ergibt.Training auf einem unausgewogenen Datensatzfrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n.pt") # Train with full class weighting for severely imbalanced data results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=1.0) # Or use partial weighting (0.25) for moderate imbalance results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=0.25)TippBeginne mit
cls_pw=0.25für mäßig unausgeglichene Datensätze und erhöhe den Wert auf1.0, wenn die seltenen Klassen weiterhin eine schlechte Leistung zeigen. Du kannst die berechneten Klassengewichte in den Trainingsprotokollen überprüfen, um die Gewichtungsverteilung zu verifizieren.Ja, Ultralytics YOLO26 unterstützt das Training auf Apple Silicon Chips unter Nutzung des Metal Performance Shaders (MPS) Frameworks. Gib 'mps' als dein Trainingsgerät an.
Beispiel für MPS-Trainingfrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n.pt") # Train the model on Apple silicon chip (M1/M2/M3/M4) results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")Weitere Details findest du im Abschnitt Apple Silicon MPS Training.
Ultralytics YOLO26 ermöglicht es dir, eine Vielzahl von Trainingseinstellungen wie Batch-Größe, Lernrate, Epochen und mehr über Argumente zu konfigurieren. Hier ist ein kurzer Überblick:
Argument Standard Beschreibung modelNonePfad zur Modelldatei für das Training. dataNonePfad zum Datensatz-YAML (z. B. coco8.yaml) oder ein Datensatzverzeichnis oder Name (z. B.imagenet10) für die Klassifizierung.epochs100Gesamtzahl der Trainingsepochen. batch16Batch-Größe, einstellbar als Ganzzahl oder Auto-Modus. imgsz640Zielbildgröße für das Training. deviceNoneRechengerät(e) für das Training wie cpu,0,0,1odermps.saveTrueAktiviert das Speichern von Trainings-Checkpoints und endgültigen Modellgewichten. Einen ausführlichen Leitfaden zu den Trainingseinstellungen findest du im Abschnitt Train Settings.