Zum Inhalt springen

So nehmen Sie eine Feinabstimmung von YOLO eines benutzerdefinierten Datensatzes vor

Beim Fine-Tuning wird ein vortrainiertes Modell so angepasst, dass es neue Klassen erkennt, wobei von den erlernten Gewichten ausgegangen wird, anstatt eine zufällige Initialisierung vorzunehmen. Anstatt über Hunderte von Epochen hinweg von Grund auf neu zu trainieren, nutzt das Fine-Tuning vortrainierte COCO Merkmale und konvergiert in einem Bruchteil der Zeit auf benutzerdefinierte Daten.

Dieser Leitfaden behandelt die Feinabstimmung von YOLO26 auf benutzerdefinierten Datensätzen, von der grundlegenden Anwendung bis hin zu fortgeschrittenen Techniken wie dem Einfrieren von Schichten und dem zweistufigen Training.

Feineinstellung vs. Training von Grund auf

Ein vortrainiertes Modell hat bereits allgemeine visuelle Merkmale – Kantenerkennung, Texturerkennung, Formverständnis – anhand von Millionen von Bildern erlernt. Beim Transferlernen durch Feintuning wird dieses Wissen wiederverwendet, und dem Modell wird lediglich beigebracht, wie die neuen Klassen aussehen. Deshalb konvergiert es schneller und benötigt weniger Daten. Beim Training von Grund auf wird all dies verworfen, und das Modell muss alles von Grund auf neu lernen, angefangen bei Mustern auf Pixelebene, was deutlich mehr Ressourcen erfordert.

FeinabstimmungTraining von Grund auf
StartgewichteVortrainiert auf COCO 80 Klassen)Zufällige Initialisierung
BefehlYOLO("yolo26n.pt")YOLO("yolo26n.yaml")
KonvergenzSchneller – das Backbone ist bereits trainiertLangsamer – alle Ebenen lernen von Grund auf
DatenanforderungenWeniger – vortrainierte Merkmale gleichen den Mangel an Daten ausHöher – Das Modell muss alle Merkmale allein aus dem Datensatz lernen
Wann anzuwendenBenutzerdefinierte Klassen mit NaturbildernBereiche, die sich grundlegend von COCO unterscheiden COCO Medizin, Satelliten, Radar)

Für die Feinabstimmung ist kein zusätzlicher Code erforderlich

Wenn ein .pt Die Datei wird geladen mit YOLO("yolo26n.pt")werden die vortrainierten Gewichte im Modell gespeichert. Der Aufruf von .train(data="custom.yaml") Danach werden alle kompatiblen Gewichte automatisch in die neue Modellarchitektur übertragen, nicht übereinstimmende Schichten (wie beispielsweise der Erkennungskopf, wenn die Anzahl der Klassen abweicht) neu initialisiert und das Training gestartet. Es ist kein manuelles Laden von Gewichten, keine Bearbeitung von Schichten und kein benutzerdefinierter Code für das Transferlernen erforderlich.

So funktioniert der Transfer vortrainierter Gewichte

Wenn ein vortrainiertes Modell anhand eines Datensatzes mit einer anderen Anzahl von Klassen (beispielsweise von den 80 Klassen COCO auf 5 benutzerdefinierte Klassen) feinabgestimmt wird, Ultralytics eine formbewusste Gewichtsübertragung Ultralytics :

  1. Vollständige Übertragung von Backbone und Neck – diese Schichten extrahieren allgemeine visuelle Merkmale, und ihre Formen sind unabhängig von der Anzahl der Klassen.
  2. Der Erkennungskopf wird teilweise neu initialisiert - die Klassifizierungs-Ausgabeschichten (cv3, one2one_cv3) haben Formen, die an die Klassenanzahl gebunden sind (80 gegenüber 5), sodass sie nicht übertragen werden können und zufällig initialisiert werden. Box-Regressionsschichten (cv2, one2one_cv2) im Kopf haben feste Formen, unabhängig von der Anzahl der Klassen, sodass sie normal übertragen werden.
  3. Beim Ändern der Klassenanzahl wird der Großteil der Gewichte übernommen. Lediglich die klassenspezifischen Schichten im Erkennungskopf werden neu initialisiert – die Zweige für das Backbone, den Hals und die Box-Regression bleiben unverändert.

Bei Datensätzen mit derselben Anzahl an Klassen wie das vortrainierte Modell (beispielsweise beim Feintuning von COCO Gewichten auf einem anderen Datensatz mit 80 Klassen) werden 100 % der Gewichte übertragen, einschließlich des Erkennungsmoduls.

Beispiel für eine grundlegende Feinabstimmung

Beispiel

from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # load pretrained model
model.train(data="path/to/data.yaml", epochs=50, imgsz=640)
yolo detect train model=yolo26n.pt data=path/to/data.yaml epochs=50 imgsz=640

Auswahl einer Modellgröße

Größere Modelle verfügen über mehr Kapazität, erfordern jedoch auch die Aktualisierung einer größeren Anzahl von Parametern, was bei begrenzten Trainingsdaten das Risiko einer Überanpassung erhöhen kann. Ein praktischer Ansatz besteht darin, mit einem kleineren Modell (YOLO26n oder YOLO26s) zu beginnen und erst dann zu skalieren, wenn die Validierungsmetriken ein Plateau erreichen. Die optimale Modellgröße hängt von der Komplexität der Aufgabe, der Anzahl der Klassen, der Vielfalt des Datensatzes und der für den Einsatz verfügbaren Hardware ab. Die verfügbaren Größen und Leistungsbenchmarks finden Sie auf der vollständigen YOLO26-Modellseite.

Auswahl des Optimierers und der Lernrate

Die Standardeinstellung optimizer=auto Diese Einstellung wählt den Optimierer und die Lernrate auf der Grundlage der Gesamtzahl der Trainingsiterationen aus:

  • < 10,000 iterations (small datasets or few epochs): AdamW with a low, auto-calculated learning rate
  • > 10.000 Iterationen (große Datensätze): MuSGD (ein hybriderSGD ) mit lr=0,01

Für die meisten Feinabstimmungsaufgaben funktioniert die Standardeinstellung gut, ohne dass eine manuelle Anpassung erforderlich ist. Sie sollten den Optimierer explizit festlegen, wenn:

  • Das Training ist unbeständig (Verlustspitzen oder -abweichungen): Versuchen Sie optimizer=AdamW, lr0=0.001 für eine stabilere Konvergenz
  • Feinstimmung eines großen Modells anhand eines kleinen Datensatzes: eine niedrigere Lernrate wie lr0=0.001 trägt dazu bei, vortrainierte Merkmale zu erhalten

Der automatische Optimierer überschreibt die manuelle Einstellung „lr0“

Wenn optimizer=autowird die lr0 und momentum Werte werden ignoriert. Um die Lernrate manuell zu steuern, legen Sie den Optimierer explizit fest: optimizer=SGD, lr0=0.005.

Eisige Schichten

Durch das Einfrieren wird verhindert, dass bestimmte Schichten während des Trainings aktualisiert werden. Dies beschleunigt das Training und verringert das Überanpassen, wenn der Datensatz im Verhältnis zur Modellkapazität klein ist.

Die freeze Der Parameter akzeptiert entweder eine Ganzzahl oder eine Liste. Eine Ganzzahl freeze=10 friert die ersten 10 Schichten ein (0 bis 9, was dem Backbone in YOLO26 entspricht). Eine Liste kann Schichtenindizes enthalten wie freeze=[0, 3, 5] für das teilweise Einfrieren des Backbones oder Modulnamen-Zeichenfolgen wie freeze=["23.cv2"] für eine detaillierte Steuerung bestimmter Verzweigungen innerhalb einer Ebene.

Beispiel

model.train(data="custom.yaml", epochs=50, freeze=10)
model.train(data="custom.yaml", epochs=50, freeze=[0, 1, 2, 3, 4])
# Freeze the box regression branch of the detection head
model.train(data="custom.yaml", epochs=50, freeze=["23.cv2"])

Die richtige Einfriertiefe hängt davon ab, wie ähnlich die Zieldomäne den vortrainierten Daten ist und wie viele Trainingsdaten zur Verfügung stehen:

SzenarioEmpfehlungBegründung
Großer Datensatz, ähnlicher Bereichfreeze=None (Standard)Genügend Daten, um alle Schichten anzupassen, ohne dass es zu einem Überanpassung kommt
Kleiner Datensatz, ähnlicher Bereichfreeze=10Behält die wesentlichen Merkmale bei und reduziert die Anzahl der trainierbaren Parameter
Sehr kleiner Datensatzfreeze=23Es werden nur die Datensätze des Erkennungskopfes trainiert, wodurch das Risiko des Überanpassens minimiert wird
Domain weit entfernt von COCOfreeze=NoneDie Kernkompetenzen lassen sich möglicherweise nicht gut übertragen und erfordern eine Umschulung

Die Freeze-Tiefe kann auch als Hyperparameter betrachtet werden – das Ausprobieren einiger Werte (0, 5, 10) und der Vergleich mAP eine praktische Methode, um die beste Einstellung für einen bestimmten Datensatz zu finden.

Wichtige Hyperparameter für die Feinabstimmung

Die Feinabstimmung erfordert in der Regel weniger Anpassungen der Hyperparameter als ein Training von Grund auf. Die wichtigsten Parameter sind:

  • epochs: Die Feinabstimmung konvergiert schneller als ein Training von Grund auf. Beginnen Sie mit einem moderaten Wert und verwenden Sie patience frühzeitig aufzuhören, wenn sich die Validierungskennzahlen nicht mehr verändern.
  • patience: Der Standardwert von 100 ist für lange Trainingsläufe ausgelegt. Eine Reduzierung auf 10–20 verhindert, dass Zeit für Läufe verschwendet wird, die bereits konvergiert sind.
  • warmup_epochs: Beim standardmäßigen Warmup (3 Epochen) wird die Lernrate schrittweise von Null an erhöht, wodurch verhindert wird, dass große Gradientenaktualisierungen die vortrainierten Merkmale in den frühen Iterationen beeinträchtigen. Es wird empfohlen, die Standardeinstellung auch für das Fine-Tuning beizubehalten.

Eine vollständige Liste der Trainingsparameter finden Sie in der Referenz zur Trainingskonfiguration.

Zweistufige Feinabstimmung

Bei der zweistufigen Feinabstimmung wird das Training in zwei Phasen unterteilt. In der ersten Phase wird das Backbone eingefroren und nur der Hals und der Kopf trainiert, sodass sich die Erkennungsschichten an die neuen Klassen anpassen können, ohne die vortrainierten Merkmale zu beeinträchtigen. In der zweiten Phase werden alle Schichten entsperrt und das gesamte Modell mit einer niedrigeren Lernrate trainiert, um das Backbone für den Zielbereich zu verfeinern.

Dieser Ansatz ist besonders nützlich, wenn sich die Zieldomäne erheblich von COCO unterscheidet COCO medizinische Bilder, Luftbilder, Mikroskopie), wo das Backbone zwar angepasst werden muss, ein gleichzeitiges Training aller Komponenten jedoch zu Instabilität führt. Informationen zum automatischen Aufheben des Freezing bei einem Callback-basierten Ansatz finden Sie unter „Freezing und Aufheben des Freezing des Backbones“.

Zweistufige Feinabstimmung

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)

Häufige Fallstricke

Das Modell liefert keine Vorhersagen

  • Unzureichende Trainingsdaten: Das Training mit sehr wenigen Beispielen ist die häufigste Ursache – das Modell kann bei zu geringen Datenmengen weder lernen noch verallgemeinern. Stellen Sie sicher, dass pro Klasse genügend vielfältige Beispiele vorhanden sind, bevor Sie andere Ursachen untersuchen.
  • Datenpfade überprüfen: falsche Pfade in data.yaml Erzeugt stillschweigend keine Beschriftungen. Ausführen yolo detect val model=yolo26n.pt data=your_data.yaml vor dem Training, um sicherzustellen, dass die Labels korrekt geladen werden.
  • Niedrigere Konfidenzschwelle: Wenn Vorhersagen vorhanden sind, aber herausgefiltert werden, versuche conf=0.1 während der Inferenz.
  • Anzahl der Klassen überprüfen: sicherstellen nc in data.yaml entspricht der tatsächlichen Anzahl der Klassen in den Label-Dateien.

Bei der Validierung mAP frühzeitig mAP

  • Weitere Daten hinzufügen: Die Feinabstimmung profitiert erheblich von zusätzlichen Trainingsdaten, insbesondere von vielfältigen Beispielen mit unterschiedlichen Blickwinkeln, Beleuchtungsverhältnissen und Hintergründen.
  • Klassenbilanz prüfen: Unterrepräsentierte Gruppen werden AP niedrigen AP haben. Verwenden Sie cls_pw um eine Gewichtung nach umgekehrter Häufigkeitsklasse anzuwenden (beginnen mit cls_pw=0.25 Bei mäßiger Unausgewogenheit erhöhen Sie die Dosis auf 1.0 (bei starkem Ungleichgewicht).
  • Vergrößerung reduzieren: Bei sehr kleinen Datensätzen kann eine umfangreiche Datenvergrößerung mehr schaden als nützen. Versuchen Sie mosaic=0.5 oder mosaic=0.0.
  • Auflösung erhöhen: Bei Datensätzen mit kleinen Objekten versuchen Sie imgsz=1280 um Details zu bewahren.

Nach der Feinabstimmung verschlechtert sich die Leistung bei den ursprünglichen Klassen

Dies wird als „katastrophales Vergessen“ bezeichnet – das Modell verliert zuvor erworbenes Wissen, wenn es ausschließlich auf neue Daten trainiert wird. Dieses Vergessen lässt sich meist nicht vermeiden, wenn die Bilder des ursprünglichen Datensatzes nicht zusammen mit den neuen Daten einbezogen werden. Um dies zu mildern:

  • Datensätze zusammenführen: Beziehen Sie bei der Feinabstimmung Beispiele der ursprünglichen Klassen neben den neuen Klassen mit ein. Dies ist die einzige zuverlässige Methode, um ein Vergessen zu verhindern.
  • Rückenknochen und Hals einfrieren: Das Einfrieren sowohl des Rückenknochens als auch des Halses, sodass nur der Erkennungskopf trainiert wird, ist hilfreich für kurze Feinabstimmungsläufe mit einer sehr niedrigen Lernrate.
  • Trainieren Sie das Modell über weniger Epochen: Je länger das Modell ausschließlich mit neuen Daten trainiert wird, desto stärker nimmt der Vergessensprozess zu.

FAQ

Wie viele Bilder benötige ich, um YOLO zu trainieren?

Es gibt keine festgelegte Mindestanzahl – die Ergebnisse hängen von der Komplexität der Aufgabe, der Anzahl der Klassen und davon ab, wie ähnlich die Domäne COCO ist. Vielfältigere Bilder (unterschiedliche Lichtverhältnisse, Blickwinkel, Hintergründe) sind wichtiger als die reine Menge. Beginnen Sie mit dem, was Sie haben, und erweitern Sie den Umfang, falls die Validierungsmetriken unzureichend sind.

Wie kann ich YOLO26 anhand eines benutzerdefinierten Datensatzes feinabstimmen?

Ein vortrainiertes Modell laden .pt Datei speichern und aufrufen .train() mit dem Pfad zu einer benutzerdefinierten data.yaml. Ultralytics übernimmt dies Ultralytics Gewichtsverlagerung, die Neuinitialisierung des Erkennungskopfes und die Auswahl des Optimierers. Siehe die Grundlegende Feinabstimmung Abschnitt mit dem vollständigen Code-Beispiel.

Warum erkennt mein feinabgestimmtes YOLO nichts?

Die häufigsten Ursachen sind falsche Pfade in data.yaml (was stillschweigend keine Beschriftungen erzeugt), eine Diskrepanz zwischen nc in der YAML-Datei und den eigentlichen Label-Dateien oder einen zu hohen Konfidenzschwellenwert. Siehe Häufige Fallstricke für eine vollständige Checkliste zur Fehlerbehebung.

Welche YOLO sollte ich für das Fine-Tuning einfrieren?

Das hängt von der Größe des Datensatzes und der Domänenähnlichkeit ab. Bei kleinen Datensätzen mit einer Domäne, die der von COCO ähnelt, führt das Einfrieren des Backbones (freeze=10) verhindert ein Überanpassen. Bei Domänen, die sich stark von COCO unterscheiden, sollten alle Schichten ungefroren bleiben (freeze=None) ermöglicht es dem Backbone, sich anzupassen. Siehe Eisige Schichten für detaillierte Empfehlungen.

Wie kann ich „katastrophales Vergessen“ verhindern, wenn ich YOLO neue Klassen abstimme?

Fügen Sie den Trainingsdaten neben den neuen Klassen auch Beispiele der ursprünglichen Klassen hinzu. Falls dies nicht möglich ist, frieren Sie weitere Schichten ein (freeze=10 oder höher) und die Verwendung einer niedrigeren Lernrate trägt dazu bei, das vortrainierte Wissen zu erhalten. Siehe Bei den ursprünglichen Klassen verschlechtert sich die Leistung für weitere Details.



📅 Erstellt vor 0 Tagen ✏️ Aktualisiert vor 0 Tagen
raimbekovm

Kommentare