Meet YOLO26: next-gen vision AI.

Link to this sectionSo optimierst du YOLO für einen benutzerdefinierten Datensatz#

Fine-tuning passt ein vortrainiertes Modell an die Erkennung neuer Klassen an, indem es von gelernten Gewichten ausgeht, statt zufällig zu initialisieren. Anstatt Hunderte von Epochen lang von Grund auf neu zu trainieren, nutzt Fine-tuning vortrainierte COCO-Merkmale und konvergiert bei benutzerdefinierten Daten in einem Bruchteil der Zeit.

Dieser Leitfaden behandelt das Fine-tuning von YOLO26 mit benutzerdefinierten Datensätzen, von der grundlegenden Verwendung bis hin zu fortgeschrittenen Techniken wie Layer-Einfrieren und zweistufigem Training.

Link to this sectionFine-tuning vs. Training von Grund auf#

Ein vortrainiertes Modell hat bereits allgemeine visuelle Merkmale – Kantenerkennung, Texturerkennung, Formverständnis – aus Millionen von Bildern gelernt. Transfer Learning durch Fine-tuning nutzt dieses Wissen wieder und bringt dem Modell nur bei, wie die neuen Klassen aussehen, weshalb es schneller konvergiert und weniger Daten benötigt. Das Training von Grund auf verwirft all das und zwingt das Modell, alles von Grund auf zu lernen, was deutlich mehr Ressourcen erfordert.

FeinabstimmungTraining von Grund auf
StartgewichteVortrainiert auf COCO (80 Klassen)Zufällige Initialisierung
BefehlYOLO("yolo26n.pt")YOLO("yolo26n.yaml")
KonvergenzSchneller – Backbone ist bereits trainiertLangsamer – alle Layer lernen bei null
DatenanforderungenGeringer – vortrainierte Merkmale kompensieren weniger DatenHöher – Modell muss alle Merkmale allein aus dem Datensatz lernen
Wann anwendenBenutzerdefinierte Klassen mit natürlichen BildernDomänen, die sich grundlegend von COCO unterscheiden (medizinisch, Satellit, Radar)
Fine-tuning erfordert keinen zusätzlichen Code

Wenn eine .pt-Datei mit YOLO("yolo26n.pt") geladen wird, sind die vortrainierten Gewichte im Modell gespeichert. Der anschließende Aufruf von .train(data="custom.yaml") überträgt automatisch alle kompatiblen Gewichte auf die neue Modellarchitektur, reinitialisiert alle Layer, die nicht übereinstimmen (wie den Detection Head bei einer abweichenden Klassenanzahl), und beginnt das Training. Manuelles Laden von Gewichten, Layer-Manipulation oder benutzerdefinierter Transfer-Learning-Code sind nicht erforderlich.

Link to this sectionWie der Transfer vortrainierter Gewichte funktioniert#

Wenn ein vortrainiertes Modell auf einem Datensatz mit einer anderen Anzahl an Klassen gefinetuned wird (zum Beispiel von den 80 COCO-Klassen auf 5 benutzerdefinierte Klassen), führt Ultralytics einen formbewussten Gewichtstransfer durch:

  1. Backbone und Neck werden vollständig übertragen – diese Layer extrahieren allgemeine visuelle Merkmale, und ihre Formen sind unabhängig von der Anzahl der Klassen.
  2. Detection Head wird teilweise reinitialisiert – die Klassifizierungsausgangsschichten (cv3, one2one_cv3) haben Formen, die an die Klassenanzahl gebunden sind (80 vs. 5), daher können sie nicht übertragen werden und werden zufällig initialisiert. Box-Regressions-Layer (cv2, one2one_cv2) im Head haben unabhängig von der Klassenanzahl feste Formen und werden daher normal übertragen.
  3. Die überwiegende Mehrheit der Gewichte wird übertragen, wenn sich die Klassenanzahl ändert. Zum Beispiel werden beim Fine-tuning von YOLO26n von COCO (80 Klassen) auf einen 5-Klassen-Datensatz 606 von 708 Gewichtstensoren übertragen: Nur die von der Klassenanzahl abhängigen Klassifizierungsschichten werden reinitialisiert, während der Backbone, der Neck und die Box-Regressionszweige intakt bleiben.

Bei Datensätzen mit der gleichen Anzahl an Klassen wie beim vortrainierten Modell (zum Beispiel beim Fine-tuning von COCO-vortrainierten Gewichten auf einem anderen 80-Klassen-Datensatz) werden 100 % der Gewichte übertragen, einschließlich des Detection Head.

Link to this sectionGrundlegendes Beispiel für Fine-tuning#

Beispiel
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # load pretrained model
model.train(data="custom.yaml", epochs=50, imgsz=640)

Link to this sectionWahl einer Modellgröße#

Größere Modelle haben mehr Kapazität, aber auch mehr Parameter, die aktualisiert werden müssen, was das Risiko von Overfitting bei begrenzten Trainingsdaten erhöhen kann. Mit einem kleineren Modell (YOLO26n oder YOLO26s) zu beginnen und nur dann zu skalieren, wenn die Validierungsmetriken stagnieren, ist ein praktischer Ansatz. Die optimale Modellgröße hängt von der Komplexität der Aufgabe, der Anzahl der Klassen, der Vielfalt des Datensatzes und der für die Bereitstellung verfügbaren Hardware ab. Siehe die vollständige YOLO26-Modellseite für verfügbare Größen und Leistungsbenchmarks.

Link to this sectionAuswahl von Optimizer und Lernrate#

Die Standardeinstellung optimizer=auto wählt den Optimizer und die Lernrate basierend auf der Gesamtzahl der Trainingsiterationen aus:

  • < 10.000 Iterationen (kleine Datensätze oder wenige Epochen): AdamW mit einer niedrigen, automatisch berechneten Lernrate
  • > 10.000 Iterationen (große Datensätze): MuSGD (ein hybrider Muon+SGD-Optimizer) mit lr=0.01

Für die meisten Fine-tuning-Aufgaben funktioniert die Standardeinstellung gut ohne manuelle Anpassung. Ziehe eine explizite Einstellung des Optimizers in Betracht, wenn:

  • Das Training instabil ist (Loss-Spikes oder Divergenz): Versuche optimizer=AdamW, lr0=0.001 für eine stabilere Konvergenz
  • Fine-tuning eines großen Modells auf einem kleinen Datensatz: eine niedrigere Lernrate wie lr0=0.001 hilft, vortrainierte Merkmale zu bewahren
Auto-Optimizer überschreibt manuelle lr0

Wenn optimizer=auto gesetzt ist, werden die Werte für lr0 und momentum ignoriert. Um die Lernrate manuell zu steuern, setze den Optimizer explizit: optimizer=SGD, lr0=0.005.

Link to this sectionLayer einfrieren#

Einfrieren verhindert, dass bestimmte Layer während des Trainings aktualisiert werden. Dies beschleunigt das Training und reduziert Overfitting, wenn der Datensatz im Verhältnis zur Modellkapazität klein ist.

Der Parameter freeze akzeptiert entweder eine Ganzzahl oder eine Liste. Eine Ganzzahl wie freeze=10 friert die ersten 10 Layer ein (Indizes 0-9), was den größten Teil des YOLO26-Backbone abdeckt. Der Backbone umfasst die Layer 0-10, daher lässt freeze=10 den letzten C2PSA-Block (Layer 10) trainierbar; verwende freeze=11, um den gesamten Backbone einzufrieren. Eine Liste kann Layer-Indizes wie freeze=[0, 3, 5] für teilweises Backbone-Einfrieren enthalten oder Modulnamens-Strings wie freeze=["23.cv2", "23.one2one_cv2"] für eine fein abgestimmte Kontrolle über bestimmte Zweige innerhalb eines Layers (hier beide Box-Regressionszweige des Detection Head).

Beispiel
model.train(data="custom.yaml", epochs=50, freeze=10)

Die richtige Einfriertiefe hängt davon ab, wie ähnlich die Zieldomäne den vortrainierten Daten ist und wie viele Trainingsdaten verfügbar sind:

SzenarioEmpfehlungBegründung
Großer Datensatz, ähnliche Domänefreeze=None (Standard)Genug Daten, um alle Layer ohne Overfitting anzupassen
Kleiner Datensatz, ähnliche Domänefreeze=10Bewahrt Backbone-Merkmale, reduziert trainierbare Parameter
Sehr kleiner Datensatzfreeze=23Nur der Detection Head trainiert, minimiert Overfitting-Risiko
Domäne weit weg von COCOfreeze=NoneBackbone-Merkmale übertragen sich möglicherweise nicht gut und müssen neu trainiert werden

Die Einfriertiefe kann auch als Hyperparameter behandelt werden – das Ausprobieren einiger Werte (0, 5, 10) und das Vergleichen des Validierungs-mAP ist ein praktischer Weg, die beste Einstellung für einen spezifischen Datensatz zu finden.

Link to this sectionWichtige Hyperparameter für das Fine-tuning#

Fine-tuning erfordert im Allgemeinen weniger Hyperparameter-Anpassungen als das Training von Grund auf. Die Parameter, die am meisten zählen, sind:

  • epochs: Fine-tuning konvergiert schneller als das Training von Grund auf. Beginne mit einem moderaten Wert und verwende patience, um vorzeitig zu stoppen, wenn die Validierungsmetriken stagnieren.
  • patience: Der Standardwert von 100 ist für lange Trainingsläufe ausgelegt. Eine Reduzierung auf 10-20 vermeidet Zeitverschwendung bei Läufen, die bereits konvergiert sind.
  • warmup_epochs: Der Standard-Warmup (3 Epochen) erhöht die Lernrate allmählich von null, was verhindert, dass große Gradienten-Updates in frühen Iterationen vortrainierte Merkmale beschädigen. Es wird empfohlen, den Standard auch beim Fine-tuning beizubehalten.

Für die vollständige Liste der Trainingsparameter, siehe die Trainingskonfigurationsreferenz.

Link to this sectionZweistufiges Fine-tuning#

Zweistufiges Fine-tuning unterteilt das Training in zwei Phasen. Die erste Stufe friert den Backbone ein und trainiert nur den Neck und Head, wodurch sich die Detektionsschichten an die neuen Klassen anpassen können, ohne vortrainierte Merkmale zu zerstören. Die zweite Stufe taut alle Layer auf und trainiert das gesamte Modell mit einer niedrigeren Lernrate, um den Backbone für die Zieldomäne zu verfeinern.

Dieser Ansatz ist besonders nützlich, wenn sich die Zieldomäne erheblich von COCO unterscheidet (medizinische Bilder, Luftaufnahmen, Mikroskopie), wobei der Backbone möglicherweise eine Anpassung benötigt, das gleichzeitige Training von allem jedoch zu Instabilität führt. Für automatisches Auftauen mit einem Callback-basierten Ansatz, siehe Backbone einfrieren und auftauen.

Zweistufiges Fine-tuning
from ultralytics import YOLO

# Stage 1: freeze backbone, train head and neck
model = YOLO("yolo26n.pt")
model.train(data="custom.yaml", epochs=20, freeze=10, name="stage1", exist_ok=True)

# Stage 2: unfreeze all, fine-tune with lower lr
model = YOLO("runs/detect/stage1/weights/best.pt")
model.train(data="custom.yaml", epochs=30, lr0=0.001, name="stage2", exist_ok=True)

Link to this sectionHäufige Fehlerquellen#

Link to this sectionModell liefert keine Vorhersagen#

  • Unzureichende Trainingsdaten: Das Training mit sehr wenigen Proben ist die häufigste Ursache – das Modell kann aus zu wenigen Daten nicht lernen oder generalisieren. Stelle sicher, dass genug vielfältige Beispiele pro Klasse vorhanden sind, bevor du andere Ursachen untersuchst.
  • Datensatzpfade überprüfen: Falsche Pfade in data.yaml führen stillschweigend zu null Labels. Führe yolo detect val model=yolo26n.pt data=custom.yaml vor dem Training aus, um zu bestätigen, dass Labels korrekt geladen werden.
  • Niedrigerer Konfidenz-Schwellenwert: Wenn Vorhersagen existieren, aber herausgefiltert werden, versuche conf=0.1 während der Inferenz.
  • Klassenanzahl verifizieren: Stelle sicher, dass nc in data.yaml mit der tatsächlichen Anzahl der Klassen in den Label-Dateien übereinstimmt.

Link to this sectionValidierungs-mAP stagniert früh#

  • Mehr Daten hinzufügen: Fine-tuning profitiert signifikant von zusätzlichen Trainingsdaten, insbesondere von vielfältigen Beispielen mit unterschiedlichen Winkeln, Beleuchtungen und Hintergründen.
  • Klassengleichgewicht prüfen: Unterrepräsentierte Klassen haben ein niedriges AP. Verwende cls_pw, um eine inverse Frequenzklassen-Gewichtung anzuwenden (beginne mit cls_pw=0.25 für moderate Ungleichgewichte, erhöhe auf 1.0 für schwerwiegende Ungleichgewichte).
  • Augmentierung reduzieren: Bei sehr kleinen Datensätzen kann eine starke Augmentierung mehr schaden als nutzen. Versuche mosaic=0.5 oder mosaic=0.0.
  • Auflösung erhöhen: Bei Datensätzen mit kleinen Objekten versuche imgsz=1280, um Details zu bewahren.

Link to this sectionLeistung verschlechtert sich bei Originalklassen nach dem Fine-tuning#

Dies ist als katastrophales Vergessen bekannt – das Modell verliert zuvor gelerntes Wissen, wenn es ausschließlich auf neuen Daten gefinetuned wird. Vergessen ist größtenteils unvermeidlich, ohne Original-Datensatzbilder neben den neuen Daten einzubeziehen. Um dies abzumildern:

  • Datensätze zusammenführen: Füge Beispiele der Originalklassen neben den neuen Klassen während des Fine-tunings hinzu. Dies ist der einzige zuverlässige Weg, Vergessen zu verhindern.
  • Backbone und Neck einfrieren: Das Einfrieren von Backbone und Neck, sodass nur der Detection Head trainiert wird, hilft bei kurzen Fine-tuning-Läufen mit einer sehr niedrigen Lernrate.
  • Weniger Epochen trainieren: Je länger das Modell ausschließlich auf neuen Daten trainiert, desto mehr nimmt das Vergessen zu.

Link to this sectionFAQ#

Link to this sectionWie viele Bilder benötige ich, um YOLO zu finetunen?#

Es gibt kein festes Minimum – die Ergebnisse hängen von der Komplexität der Aufgabe, der Anzahl der Klassen und der Ähnlichkeit der Domäne zu COCO ab. Vielfältigere Bilder (unterschiedliche Beleuchtung, Winkel, Hintergründe) sind wichtiger als die bloße Menge. Beginne mit dem, was du hast, und skaliere hoch, wenn die Validierungsmetriken unzureichend sind.

Link to this sectionWie finetune ich YOLO26 auf einem benutzerdefinierten Datensatz?#

Lade eine vortrainierte .pt-Datei und rufe .train() mit dem Pfad zu einer benutzerdefinierten data.yaml auf. Ultralytics übernimmt automatisch den Gewichtstransfer, die Reinitialisierung des Detection Head und die Auswahl des Optimizers. Siehe den Abschnitt Grundlegendes Fine-tuning für das vollständige Code-Beispiel.

Link to this sectionWarum erkennt mein gefinetuntes YOLO-Modell nichts?#

Die häufigsten Ursachen sind falsche Pfade in data.yaml (was stillschweigend zu null Labels führt), eine Diskrepanz zwischen nc im YAML und den tatsächlichen Label-Dateien oder ein zu hoher Konfidenz-Schwellenwert. Siehe Häufige Fehlerquellen für eine vollständige Checkliste zur Fehlerbehebung.

Link to this sectionWelche YOLO-Layer sollte ich zum Fine-tuning einfrieren?#

Das hängt von der Datensatzgröße und der Domänenähnlichkeit ab. Bei kleinen Datensätzen mit einer Domäne, die COCO ähnelt, verhindert das Einfrieren des Backbone (freeze=10) Overfitting. Für Domänen, die weit von COCO entfernt sind, erlaubt das Offenlassen aller Layer (freeze=None), dass sich der Backbone anpasst. Siehe Layer einfrieren für detaillierte Empfehlungen.

Link to this sectionWie verhindere ich katastrophales Vergessen beim Fine-tuning von YOLO auf neuen Klassen?#

Füge Beispiele der Originalklassen in die Trainingsdaten neben den neuen Klassen ein. Wenn das nicht möglich ist, hilft das Einfrieren von mehr Layern (freeze=10 oder höher) und die Verwendung einer niedrigeren Lernrate, um das vortrainierte Wissen zu bewahren. Siehe Leistung verschlechtert sich bei Originalklassen für weitere Details.

Mitwirkende

Kommentare