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

Fortsetzen und iterieren

Setze einen unterbrochenen Trainingslauf exakt fort, starte einen neuen Durchlauf mit best.pt und einer tatsächlich angewendeten Lernrate und vergleiche die Trainingsläufe direkt miteinander.

Echte Projekte bestehen aus einer Reihe von Trainings. Manche werden mittendrin abgebrochen – etwa durch einen geschlossenen Laptop, eine unterbrochene SSH-Verbindung oder eine vorzeitig beendete Cloud-GPU-Instanz. Von vorn zu beginnen bedeutet, stundenlange Arbeit wegzuwerfen. Andere Trainingsläufe werden abgeschlossen; der nächste Durchlauf sollte darauf aufbauen, statt wieder mit COCO zu starten.

In dieser Lektion unterbrichst du einen Trainingslauf und setzt ihn fort, startest den zweiten Durchlauf mit best.pt und einer tatsächlich angewendeten Lernrate und vergleichst alle Trainingsläufe in einer Tabelle. Außerdem lernst du zwei Verhaltensweisen von resume kennen, durch die Trainingsläufe unbemerkt verschwendet werden.

Lernergebnis

Du kannst korrekt zwischen Fortsetzen, Warmstart und einem Neustart wählen, jeden Ansatz ausführen und die Trainingsläufe in einer Tabelle vergleichen.

Schnellkurs
Wenn du dich bereits auskennst, findest du hier die Kurzfassung.
  1. Unterbrochen, nichts geändert? yolo train resume=True model=.../weights/last.pt.

  2. Abgeschlossen oder Daten bzw. Einstellungen geändert? Starte einen neuen Trainingslauf mit .../weights/best.pt.

  3. Um lr0 festzulegen, musst du auch optimizer festlegen; bei optimizer=auto wird lr0 ignoriert.

  4. Benenne die Trainingsläufe nach der jeweiligen Änderung und vergleiche anschließend ihre results.csv-Dateien.

Praxisnah

Die richtige Art von Trainingslauf wählen#

Trainingsdiagramme der Ultralytics Platform, die Verlust- und Metrikkurven über die Epochen eines Trainingslaufs darstellen

SituationArt des TrainingslaufsAusgangspunkt
Stromausfall, Verbindungsabbruch oder unzureichender Arbeitsspeicher während des TrainingsFortsetzenlast.pt mit seinem Optimiererzustand und Zeitplan
Trainingslauf abgeschlossen; mehr Daten, korrigierte Labels oder längeres TrainingWarmstartbest.pt als vortrainiertes Modell
Klassen hinzugefügt oder entfernt, viele Labels geändert oder imgsz stark verändertNeustartyolo26n.pt

Praxisbeispiel: Einen unterbrochenen Trainingslauf fortsetzen#

resume=True stellt das Modell, den Optimiererzustand, den Lernraten-Zeitplan und den Epochen-Zähler aus last.pt wieder her und setzt dann den ursprünglichen Plan fort:

yolo train resume=True model=runs/detect/pills_resume/weights/last.pt

Echte Ausgabe eines Trainingslaufs mit 5 Epochen, der nach Epoche 2 gestoppt wurde:

Resuming training runs/detect/pills_resume/weights/last.pt from epoch 3 to 5 total epochs
        3/5         0G      1.232      2.393   0.005478        206        320: 100% 6/6 4.5s
        4/5         0G      1.345      1.859   0.005833        208        320: 100% 6/6 4.5s
        5/5         0G       1.31      1.625   0.005854        191        320: 100% 6/6 4.4s
3 epochs completed in 0.004 hours.
  • from epoch 3 to 5 total epochs: Der Trainingslauf setzte exakt nach der letzten gespeicherten Epoche mit dem ursprünglichen Ziel fort.
  • Du hast weder data noch epochs übergeben: Alle Argumente stammten aus dem Prüfpunkt. Einige Laufzeiteinstellungen wie batch, device und workers können beim Fortsetzen überschrieben werden; alle anderen werden mit einer Resume ignores ...-Warnung ignoriert.

Praxisbeispiel: Den zweiten Durchlauf mit einem Warmstart beginnen#

Bei den meisten Experimenten für den „nächsten Durchlauf“ handelt es sich nicht um Fortsetzungen, sondern um neue Trainingsläufe, die mit deinem letzten guten Modell starten – schlichtes Transferlernen innerhalb deines eigenen Projekts. Verwende eine niedrigere Lernrate, damit das Modell verfeinert wird, statt erneut zu lernen:

from ultralytics import YOLO

model = YOLO("runs/detect/pills_v1/weights/best.pt")  # # Warmstart mit Durchlauf 1
model.train(
    data="my_dataset/data.yaml",
    epochs=5,
    imgsz=320,
    optimizer="AdamW",  # # Explizit festlegen: optimizer="auto" ignoriert lr0
    lr0=0.0005,  # # Zurückhaltender als der in Durchlauf 1 automatisch gewählte Wert 0.002
    name="pills_v2_warm",
)

Das Protokoll bestätigt, dass die Einstellung wirksam war: optimizer: AdamW(lr=0.0005, momentum=0.937). Der Leitfaden zur Feinabstimmung behandelt das Einfrieren von Schichten und das zweistufige Training; der Leitfaden zur Hyperparameteroptimierung behandelt Suchläufe.

Praxisbeispiel: Trainingsläufe vergleichen#

Benenne jeden Trainingslauf nach der jeweiligen Änderung – pills_v2_warm, pills_v3_imgsz640, pills_v4_edge_frames –, niemals train2 oder final. Jeder Trainingslauf schreibt eine results.csv; ein Vergleich ist daher mit wenigen Zeilen erledigt:

from pathlib import Path

import pandas as pd

for csv in sorted(Path("runs/detect").glob("*/results.csv")):
    df = pd.read_csv(csv)
    best = df["metrics/mAP50-95(B)"].max()
    print(f"{csv.parent.name:<14} epochs={len(df):<3} best mAP50-95={best:.3f}")
pills_resume   epochs=5   best mAP50-95=0.579
pills_v1       epochs=10  best mAP50-95=0.659
pills_v2_warm  epochs=5   best mAP50-95=0.694

Fünf Epochen mit Warmstart steigerten mAP50-95 von 0.659 auf 0.694, während fünf Epochen mit COCO-Gewichten (pills_resume) nur 0.579 erreichten. Ein Warmstart bringt Fortschritte mit weniger Aufwand – sofern sich Klassen und Labels nicht geändert haben. Ab einer Handvoll Trainingsläufe lohnt sich ein Tracking-Werkzeug: Die Ultralytics Platform (siehe Trainingsläufe vergleichen und den besten auswählen) oder die Integrationen von Comet und Weights & Biases protokollieren jeden Trainingslauf automatisch.

Jeden Durchlauf mit geringem Aufwand halten#

Die meisten Durchläufe beantworten eine Frage, etwa: „Haben die neuen Bilder geholfen?“. Mit diesen Argumenten erhältst du beim Erkunden schneller Antworten:

ArgumentBeispielAuswirkung
fractionfraction=0.5Trainiert mit der ersten Hälfte der Trainingsbilder (nach Dateiname sortiert)
timetime=0.25Bricht nach 0.25 Stunden ab und überschreibt epochs
patiencepatience=10Bricht ab, wenn sich die Validierungsleistung über 10 Epochen nicht verbessert hat
imgszimgsz=320Ein Viertel der Pixelanzahl bei 640; vergleiche Trainingsläufe nur bei gleicher Größe
cachecache=TrueBehält dekodierte Bilder im Arbeitsspeicher, damit sie in späteren Epochen schneller geladen werden

Ändere pro Durchlauf nur eine Sache und bestätige das beste Ergebnis mit einem vollständigen Trainingslauf bei voller Bildgröße, bevor du es einsetzt. Wenn du tatsächlich neu starten musst, verwendest du denselben Aufruf mit den vortrainierten Gewichten:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # zurück zu den mit COCO vortrainierten Gewichten
model.train(data="my_dataset/data.yaml", epochs=10, imgsz=320, name="pills_v3_relabeled")

Diese Fehler vermeiden#

Einen abgeschlossenen Lauf fortsetzen

Symptom: WARNING ⚠️ model '.../last.pt' is not a resumable training checkpoint ... Starting new training instead, gefolgt von einem völlig neuen Lauf – auf dem standardmäßigen Datensatz coco8, sofern du nicht data übergeben hast. Ursache: resume=True setzt nur Läufe fort, die vorzeitig abgebrochen wurden. Lösung: Beende den Vorgang und starte bewusst einen neuen Lauf mit best.pt.

lr0 wird stillschweigend ignoriert

Symptom: optimizer: 'optimizer=auto' found, ignoring 'lr0=0.0005' and determining best 'optimizer' and 'lr0' automatically... Ursache: Der Standardwert optimizer=auto wählt die Lernrate selbst. Lösung: Setze optimizer ausdrücklich (zum Beispiel "AdamW" oder "SGD"), wenn du lr0 festlegst, und prüfe die Protokollzeile optimizer:.

Wiederverwendete Namen überschreiben nichts

Wenn du ein zweites Mal mit name="pills_v1" trainierst, wird in pills_v1-2 geschrieben, was später leicht zu Verwechslungen führt. Verwende für jeden Lauf einen neuen, aussagekräftigen Namen.

Ausprobieren

Übe alle drei Lauftypen. Starte einen Lauf mit 5 Epochen namens pills_resume, stoppe ihn nach Epoche 2 (mit Ctrl+C oder dem Callback in der Lösung) und setze ihn fort. Trainiere pills_v2_warm mit den besten Gewichten aus pills_v1 und den Einstellungen optimizer="AdamW" und lr0=0.0005. Gib die Tabelle compare_runs.py und einen Satz dazu ab, mit welchem Lauf du weitermachen würdest und warum.

Abgeschlossen, wenn
Du hast die Lektion abgeschlossen, wenn alle folgenden Punkte zutreffen.
  • Dein fortgesetzter Lauf hat Resuming training ... from epoch 3 ausgegeben und alle 5 Epochen abgeschlossen.

  • Das Protokoll pills_v2_warm zeigt AdamW(lr=0.0005, ...) und nicht die Meldung zur automatischen Optimiererauswahl.

  • Du hast eine ausgegebene Vergleichstabelle mit aussagekräftigen Namen für jeden Lauf und eine Entscheidung in einem Satz.

Lösung anzeigen

Wenn es auf einem schnellen Rechner schwierig ist, Ctrl+C rechtzeitig zu drücken, kann ein Callback den Lauf nach Epoche 2 für dich stoppen:

from ultralytics import YOLO

def power_cut(trainer):
    if trainer.epoch == 1:  # 0-indiziert: nach dem Speichern von Epoche 2 stoppen
        raise KeyboardInterrupt

model = YOLO("yolo26n.pt")
model.add_callback("on_model_save", power_cut)
model.train(data="my_dataset/data.yaml", epochs=5, imgsz=320, name="pills_resume")
yolo train resume=True model=runs/detect/pills_resume/weights/last.pt
python round2.py
python compare_runs.py
pills_v2_warm has the best mAP50-95 (0.694 vs 0.659 for pills_v1), with the same
classes and labels, so round three warm-starts from pills_v2_warm/weights/best.pt.
Wie es weitergeht

Du kannst trainieren, Fehler diagnostizieren und iterieren. Als Nächstes bringst du Modelle von Einzelbildern auf Videos, auf denen die meisten realen Anwendungen basieren.