Ultralytics YOLO27: Trag dich in die Warteliste ein.
Get Started
Trainiere dein erstes YOLO-Modell·Trainieren·Lektion 6/10
LektionAnfänger

Trainiere dein erstes Modell

Passe YOLO26 mit einem einzigen Aufruf an deinen Datensatz an, lies das Trainingsprotokoll live Zeile für Zeile und finde best.pt sowie die wichtigen Diagramme im Ausführungsordner.

Das Training eines Detektors von Grund auf dauert Tage und erfordert riesige Datensätze. Das Anpassen eines vortrainierten YOLO26-Modells mit etwa hundert Bildern dauert auf einer Laptop-CPU ungefähr eine Minute, weil beim Transferlernen das Wissen des Modells über Kanten, Formen und Objekte wiederverwendet wird.

In dieser Lektion trainierst du mit dem Pillendatensatz, beobachtest, wie die mAP50-95 innerhalb von zehn Epochen von einem Wert nahe null auf 0.66 steigt, und lernst, frühzeitig am Protokoll zu erkennen, ob ein Trainingslauf gut verläuft oder deine Zeit verschwendet.

Lernergebnis

Du kannst einen YOLO26-Anpassungslauf starten, anhand des Protokolls für jede Epoche beurteilen, ob er gut verläuft, und den Checkpoint sowie die benötigten Diagramme im Ausführungsordner finden.

Schnellkurs
Wenn du dich bereits auskennst, findest du hier die Kurzfassung.
  1. YOLO('yolo26n.pt').train(data='my_dataset/data.yaml', epochs=10, imgsz=320, name='pills_v1') auf der CPU.

  2. Verwende auf einer GPU stattdessen die Standardwerte: epochs=100, imgsz=640.

  3. Ein gutes Protokoll zeigt sinkende Verluste, steigende mAP50-95 sowie ausgeglichene Präzision und Trefferquote.

  4. Öffne zuerst train_batch0.jpg; verwende für alles Weitere weights/best.pt.

Praxisnah

Beispiel: Pillendetektor trainieren#

Trainingsdialog der Ultralytics Platform, Cloud-Registerkarte mit Optionen für Modell, Datensatz, Epochen und GPU für einen Cloud-Trainingslauf

Der Dialog „Neues Modell trainieren“ der Ultralytics Platform fragt nach denselben Einstellungen wie der folgende Code — Basismodell, Datensatz, Epochen und Bildgröße — und führt den Trainingslauf entweder auf Cloud-GPUs aus oder erzeugt den passenden lokalen Befehl. Mit diesen Einstellungen dauert das Training auf einer Laptop-CPU ungefähr eine Minute:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # auf COCO vortrainiert
results = model.train(data="my_dataset/data.yaml", epochs=10, imgsz=320, name="pills_v1")
print(results.save_dir)

CLI und Python sind gleichwertig. epochs=10 und imgsz=320 halten Trainingsläufe auf der CPU kurz; mit einer GPU kannst du beide weglassen und die Standardwerte übernehmen (epochs=100, imgsz=640), denn mehr Epochen und Pixel sind fast immer hilfreich. Der Trainingsmodus führt diese Schleife für dich aus:

Das Protokoll Zeile für Zeile lesen#

Echte Ausgabe, gekürzt auf die ersten und letzten beiden Epochen:

optimizer: AdamW(lr=0.002, momentum=0.9) with parameter groups ...
Using 92 train, 23 val images for fraction=1.0 at imgsz=320
      Epoch    GPU_mem   box_loss   cls_loss    l1_loss  Instances       Size
       1/10         0G      1.818      3.899   0.008805        206        320: 100% 6/6 3.3s
                   all         23        399      0.957      0.805      0.927      0.548
       2/10         0G      1.434      3.291   0.006285        208        320: 100% 6/6 4.4s
                   all         23        399      0.953      0.911      0.964      0.592
       ...
       9/10         0G      1.121      1.103   0.005143        194        320: 100% 6/6 5.0s
                   all         23        399      0.949      0.957      0.975      0.656
      10/10         0G      1.174      1.125   0.005068        212        320: 100% 6/6 5.1s
                   all         23        399       0.97      0.957      0.977      0.659
10 epochs completed in 0.015 hours.
  • optimizer: AdamW(lr=0.002 ...): Der Standardwert optimizer=auto hat Optimierer und Lernrate für dich ausgewählt.
  • Using 92 train, 23 val images: Prüfe, ob diese Werte mit deinem Datensatz übereinstimmen. Eine kleinere Zahl bedeutet, dass Bilder übersprungen wurden.
  • GPU_mem 0G: Das Training läuft auf der CPU. Auf einer GPU würdest du hier den Speicherverbrauch sehen; 0G auf einem Rechner mit GPU bedeutet, dass die GPU nicht verwendet wird.
  • Erste Zeile jeder Epoche: die drei Verluste für den Trainingssplit sowie die Anzahl der gelabelten Objekte im letzten Batch (Instances) und die Bildgröße.
  • Zeile all jeder Epoche: Präzision, Trefferquote, mAP50 und mAP50-95 für den Validierungssplit. Auf diese Zeile kommt es an.
SpalteBedeutungGuter Verlauf
box_lossAbstand der vorhergesagten Boxen zu den annotierten BoxenSinkt und flacht dann ab
cls_lossWie stark die Klassenwerte danebenliegenSinkt und flacht dann ab
l1_lossYOLO26s direkter Fehler bei den BoxkoordinatenSinkt
P, RPräzision und Trefferquote beim ValidierungssplitSteigen und bleiben ausgeglichen
mAP50, mAP50-95Erkennungsqualität; mAP50-95 belohnt auch eng anliegende BoxenSteigt und erreicht dann ein Plateau

Hier stieg die mAP50-95 vom Ausgangswert 0.0002 auf 0.548 nach einer Epoche und 0.659 nach zehn. Die Präzision sank in Epoche 4 auf 0.80 und erholte sich wieder: Bei 23 Validierungsbildern schwanken einzelne Epochen stark. Beurteile daher den Verlauf, nicht eine einzelne Zeile. Entscheidungshilfen für einen laufenden Trainingslauf:

  • Die Verluste sinken und die mAP steigt: Lass den Lauf weiterlaufen.
  • Die Verluste bleiben ab Epoche 1 unverändert: Beende den Lauf mit Ctrl+C und prüfe die Labels und die YAML-Datei.
  • Die Präzision ist viel höher als die Trefferquote: Das Modell ist vorsichtig und übersieht Objekte. Die Trefferquote ist viel höher als die Präzision: Das Modell erkennt Objekte, die gar nicht vorhanden sind.
  • Die mAP bleibt über viele Epochen unverändert: Weitere Epochen helfen nicht; ändere die Daten oder imgsz.

Die drei Verluste sind die Bestandteile der Verlustfunktion von YOLO26; der Leitfaden zu Leistungsmetriken erläutert jede Metrik ausführlich.

Ergebnisse des Trainingslaufs finden#

Alles landet in runs/detect/pills_v1/:

DateiVerwendungszweck
weights/best.ptCheckpoint mit der besten Validierungsleistung über alle Epochen; verwende ihn für Inferenz und Export
weights/last.ptNeuester Checkpoint; dient zum Fortsetzen eines unterbrochenen Trainingslaufs
args.yamlAlle Argumente des Trainingslaufs zur Reproduktion
results.csv, results.pngVerluste und Metriken für jede Epoche, als Daten und Diagramme
labels.jpgKlassenanzahlen sowie Histogramme zu Größe und Position der Boxen
train_batch*.jpgAugmentierte Trainings-Batches mit eingezeichneten Labels
val_batch*_labels.jpg, val_batch*_pred.jpgGround Truth und Vorhersagen auf Validierungsbildern
confusion_matrix*.png, Box*_curve.pngKonfusionsmatrix sowie Präzisions-, Trefferquoten-, F1- und PR-Kurven

Öffne zuerst train_batch0.jpg. Wenn die Boxen nicht auf den Objekten liegen, sind die Labels falsch, und keine Anzahl von Epochen kann das beheben.

Diese Argumente solltest du zuerst ändern#

ArgumentStandardÄndern, wenn
epochs100Kurze CPU-Experimente oder winzige Datensätze, bei denen Overfitting einsetzt (niedriger); große Datensätze, deren Leistung sich weiter verbessert (höher, 200–300)
imgsz640Kleine Objekte (auf 1024 oder 1280 erhöhen) oder CPU-Experimente (verringern)
batch16Batchgröße: Bei Speicherfehlern verringern oder -1 verwenden, um sie automatisch auf etwa 60 % des GPU-Speichers festzulegen
patience100Den Trainingslauf vorzeitig beenden, wenn sich die Validierungsleistung N Epochen lang nicht verbessert hat, z. B. mit patience=20
deviceautocpu, mps, einen GPU-Index wie 0 oder mehrere Indizes wie [0, 1] erzwingen
nametrainImmer: Trainingsläufe nach der jeweiligen Änderung benennen
model.train(data="my_dataset/data.yaml", epochs=200, imgsz=1024, batch=-1, patience=20, name="pills_v1_1024")

Frühes Beenden: Der Validierungsfehler erreicht seinen Tiefpunkt und die Validierungsgenauigkeit ihren Höchststand, während der Trainingsfehler weiter sinkt. Das kennzeichnet den Zeitpunkt zum Beenden.

Der Standardwert 100 für patience bedeutet, dass ein Lauf mit 100 Epochen nie vorzeitig beendet wird. Ein niedrigerer Wert beendet einen stagnierenden Lauf an dem Punkt, den die obigen Kurven anzeigen; best.pt wird in jedem Fall gespeichert.

Bei mehreren GPUs übergibst du eine Liste wie device=[0, 1, 2, 3]: Ultralytics startet für dich das verteilte Training mit datenparalleler Verarbeitung (DDP), batch bezeichnet die Gesamtzahl über alle GPUs, und standardmäßig wird beim Training gemischte Präzision verwendet (amp=True). Wenn dein Laptop für einen Trainingslauf nicht mehr ausreicht, kannst du denselben Datensatz und dieselben Argumente auf Cloud-GPUs der Ultralytics Platform ausführen, wie unter Trainingsläufe trainieren, auswerten und anpassen beschrieben.

Diese Fehler vermeiden#

Versehentlich von Grund auf trainieren

Symptom: mAP nahe null nach vielen Epochen auf einem kleinen Datensatz. Ursache: Das Modell stammt aus yolo26n.yaml (zufällige Gewichte) statt aus yolo26n.pt. Lösung: Beginne immer mit einem vortrainierten .pt. Training von Grund auf lohnt sich nur für Forschung an Backbones oder sehr große Datensätze.

GPU-Speicher erschöpft

Symptom: CUDA out of memory in der ersten Epoche. Lösung: Halbiere batch oder setze batch=-1, damit AutoBatch eine passende Größe auswählt. Ein niedrigerer Wert für imgsz hilft ebenfalls, verändert aber, was das Modell sehen kann.

best.pt statt last.pt bereitstellen

last.pt ist die letzte Epoche, die schlechter als eine frühere sein kann. best.pt ist die Epoche mit der besten Validierungsleistung; genau diese solltest du validieren, exportieren und bereitstellen.

Der Leitfaden mit Tipps zum Modelltraining behandelt die übrigen Argumente; der Leitfaden zur Hyperparameteroptimierung erläutert Lernraten-Suchläufe und den genetischen Optimierer. Der Leitfaden zur Modellanpassung behandelt das Einfrieren von Schichten.

Ausprobieren

Trainiere yolo26n.pt mit my_dataset/data.yaml und epochs=10, imgsz=320, name='pills_v1' (oder verwende auf einer GPU die Standardwerte). Gib einen kurzen Bericht zum Trainingslauf ab: die endgültige mAP50 und mAP50-95 neben den Ausgangswerten aus der vorherigen Lektion, die Epoche, ab der sich die mAP50-95 kaum noch verbessert hat, und eine Ja- oder Nein-Antwort dazu, ob die Boxen in train_batch0.jpg auf den Pillen liegen.

Commit
git add -A && git commit -m "feat(model): trained first pill detector"
Abgeschlossen, wenn
Du hast die Lektion abgeschlossen, wenn alle folgenden Punkte zutreffen.
  • runs/detect/pills_v1/weights/best.pt ist vorhanden.

  • Dein Bericht zeigt eine endgültige mAP50-95, die deutlich über dem Ausgangswert des vortrainierten Modells liegt.

  • Du hast train_batch0.jpg und results.png überprüft und notiert, wo die mAP ein Plateau erreicht.

Lösung anzeigen
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
results = model.train(data="my_dataset/data.yaml", epochs=10, imgsz=320, name="pills_v1")
print(results.save_dir)  # runs/detect/pills_v1
Baseline (yolo26n.pt, no pill class): mAP50 0.001, mAP50-95 0.0002
pills_v1 (10 epochs, imgsz 320, CPU, ~1 min): mAP50 0.977, mAP50-95 0.659
Plateau: mAP50-95 gains shrink after epoch 8 (0.649 -> 0.656 -> 0.659)
train_batch0.jpg: yes, boxes sit on the pills

Die genauen Werte variieren leicht je nach Hardware und Paketversion.

Wie es weitergeht

Du hast ein trainiertes Modell und eine zentrale Kennzahl. Als Nächstes validierst du es gründlich und findest heraus, wo es versagt.