Link to this sectionWissensdestillation#
Link to this sectionSchnellstart#
Trainiere ein kleineres Schülermodell mit Anleitung durch ein größeres Lehrermodell, indem du das Argument distill_model hinzufügst:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt")Link to this sectionWas ist Knowledge Distillation?#
Knowledge Distillation überträgt Wissen von einem großen, präzisen Lehrermodell auf ein kleineres Schülermodell. Der Schüler lernt, die internen Merkmalsrepräsentationen des Lehrers nachzuahmen, wodurch er oft eine bessere Genauigkeit erzielt als beim Training von Grund auf.
Nutze Distillation, wenn:
- Du ein kleineres, schnelleres Modell für die Bereitstellung benötigst
- Du ein hochpräzises Lehrermodell hast, das mit denselben Daten trainiert wurde
- Du eine bessere Genauigkeit als beim Standardtraining erreichen möchtest
Knowledge Distillation ist für detect-, segment-, pose- und obb-Aufgaben implementiert. Nur detect wurde bisher experimentell auf Genauigkeitsverbesserungen hin verifiziert.
Link to this sectionLeistung#
Knowledge Distillation verbessert das mAP des Schülers über die gesamte YOLO26-Familie auf COCO hinweg, ohne zusätzliche Inferenzkosten. Die folgende Tabelle vergleicht die Standard-YOLO26-Modelle (Baseline) mit denselben Modellen, die durch Distillation von ihrem empfohlenen Lehrer trainiert wurden.
| Modell | Größe (Pixel) | mAPval 50-95 Baseline | mAPval 50-95 distilliert | mAPval 50-95 (e2e) Baseline | mAPval 50-95 (e2e) distilliert |
|---|---|---|---|---|---|
| YOLO26n-distill | 640 | 40,9 | 41.5 | 40,1 | 40.9 |
| YOLO26s-distill | 640 | 48,6 | 49.2 | 47,8 | 48.6 |
| YOLO26m-distill | 640 | 53,1 | 53.9 | 52,5 | 53.3 |
| YOLO26l-distill | 640 | 55,0 | 56.0 | 54,4 | 55.5 |
| YOLO26x-distill | 640 | 57,5 | 57.9 | 56,9 | 57.4 |
- mAPval-Werte gelten für Einzelmodelle mit einer Skala auf dem COCO val2017-Datensatz.
Reproduziere dies mityolo val detect data=coco.yaml device=0 - e2e-Werte verwenden den standardmäßigen NMS-freien Inferenzpfad; Nicht-e2e-Werte verwenden die traditionelle NMS-Nachverarbeitung (
end2end=False). Siehe End-to-End Detection für Details.
Link to this sectionVoraussetzungen#
Bevor du beginnst, stelle sicher, dass du die folgenden Anforderungen erfüllst:
- Trainiertes Lehrermodell: Ein vortrainiertes, hochpräzises Lehrermodell aus derselben YOLO-Familie wie das Schülermodell (z. B. YOLO26).
- Passender Datensatz und Aufgabe: Sowohl das Lehrer- als auch das Schülermodell müssen exakt denselben Datensatz und dieselbe Aufgabenkonfiguration verwenden.
- GPU-Ressourcen: Ausreichend GPU-Speicher (VRAM), um beide Modelle während des Trainings gleichzeitig zu laden und auszuführen (siehe FAQ für den typischen VRAM-Overhead).
Link to this sectionEmpfohlene Modellpaare#
| Schüler | Empfohlener Lehrer |
|---|---|
yolo26n.pt | yolo26s.pt |
yolo26s.pt | yolo26m.pt |
yolo26m.pt | yolo26x.pt |
yolo26l.pt | yolo26x.pt |
Cross-Family-Distillation (z. B. YOLO11-Lehrer mit YOLO26-Schüler) wird nicht unterstützt.
Link to this sectionHauptparameter#
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
distill_model | str | None | Pfad zur Lehrermodell-Datei (z. B. yolo26x.pt). Das Setzen dieses Parameters ermöglicht Knowledge Distillation. |
dis | float | 6.0 | Distillationsverlust-Gewichtung. Steuert, wie stark der Distillationsverlust zum gesamten Trainingsverlust beiträgt. |
Link to this sectionSo funktioniert es#
- Das Lehrermodell bleibt im
eval-Modus eingefroren und führt bei jedem Batch eine Inferenz aus - Das Schülermodell trainiert mit Standard-Aufgabenverlusten plus Distillationsführung
- Merkmale werden von beiden Modellen an den drei Neck-Schichten extrahiert, die den Detect-Familien-Kopf speisen
- Ein Projektor-Netzwerk (leichtgewichtiges MLP) gleicht die Merkmalsdimensionen des Schülers an den Lehrer an
- Ein Score-gewichteter L2-Verlust vergleicht die projizierten Schülermerkmale mit den Lehrermerkmalen, gewichtet durch die Klassifikationskonfidenz des Lehrers
- Der Distillationsverlust wird mit Standardverlusten unter Verwendung des
dis-Gewichts kombiniert
flowchart TD
A[Input Image Batch] --> T[Teacher Model<br/>frozen, eval mode]
A --> S[Student Model<br/>trainable]
T --> |Detect head inputs| TF[Teacher Features]
S --> |Detect head inputs| SF[Student Features]
SF --> P[1×1 Conv Projector<br/>with ReLU]
P --> AF[Aligned Student Features]
TF --> SW[Score-weighted L2 Loss]
AF --> SW
S --> D[Detection Head]
D --> DL[box_loss + cls_loss + dfl_loss]
SW --> |× dis| DIS[distillation loss]
DL --> TOTAL[Total Loss]
DIS --> TOTAL
TOTAL --> BP[Backpropagate<br/>Student + Projector only]Link to this sectionAufgabenunterstützung#
Die Distillationsimplementierung extrahiert Merkmale aus den drei Neck-Schichten, die den Detect-Familien-Kopf des Modells speisen. Da die segment-, pose- und obb-Köpfe von derselben Detect-Architektur erben, ist Distillation technisch auch mit diesen Aufgaben kompatibel.
Nur detect wurde experimentell gebenchmarkt und verifiziert. Du kannst Distillation für segment, pose oder obb ausführen, aber Genauigkeitsverbesserungen für diese Aufgaben sind noch nicht validiert.
from ultralytics import YOLO
# Segment
model = YOLO("yolo26n-seg.pt")
model.train(data="coco8-seg.yaml", epochs=100, distill_model="yolo26s-seg.pt")
# Pose
model = YOLO("yolo26n-pose.pt")
model.train(data="coco8-pose.yaml", epochs=100, distill_model="yolo26s-pose.pt")
# OBB
model = YOLO("yolo26n-obb.pt")
model.train(data="dota8.yaml", epochs=100, distill_model="yolo26s-obb.pt")Link to this sectionTraining#
Link to this sectionGrundlegendes Training#
Das Training mit Distillation ist identisch mit dem Standardtraining. Gib den distill_model-Pfad an, um es zu aktivieren:
from ultralytics import YOLO
# Load a student model
student = YOLO("yolo26m.pt")
# Train with knowledge distillation from a larger teacher model
results = student.train(data="coco8.yaml", epochs=100, distill_model="yolo26x.pt")Link to this sectionAnpassung der Distillationsverlust-Gewichtung#
Der dis-Parameter (Standard: 6.0) steuert den Beitrag des Distillationsverlusts:
from ultralytics import YOLO
student = YOLO("yolo26n.pt")
results = student.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt", dis=10.0)Link to this sectionFortsetzen des Distillationstrainings#
Das Distillationstraining unterstützt das Fortsetzen von Checkpoints. Das Lehrermodell wird automatisch aus dem distill_model-Pfad neu erstellt:
from ultralytics import YOLO
student = YOLO("runs/detect/train/weights/last.pt")
results = student.train(resume=True)Link to this sectionTrainingsausgabe#
Wenn Distillation aktiviert ist, erscheint eine zusätzliche dis_loss-Spalte in den Trainingsprotokollen:
Epoch GPU_mem box_loss cls_loss dfl_loss dis_loss Instances Size
1/80 46.2G 1.566 5.404 0.003249 6.658 231 640Das exportierte Modell enthält nur die Schülergewichte – Dateigröße und Inferenzgeschwindigkeit entsprechen einem normal trainierten Schülermodell.
Link to this sectionFAQ#
Link to this sectionWarum sinkt mein Distillationsverlust nicht?#
- Überprüfe, ob Lehrer und Schüler aus derselben YOLO-Generation stammen
- Bestätige, dass der
distill_model-Pfad korrekt ist und die Datei geladen wird - Versuche,
diszu erhöhen, wenn der Verlustwert sehr klein ist - Stelle sicher, dass das Lehrermodell auf demselben Datensatz trainiert wurde
Link to this sectionWie unterscheidet sich Distillation vom Standardtraining?#
Füge den distill_model-Parameter hinzu – alles andere funktioniert identisch. Ein zusätzlicher Distillationsverlust wird während des Trainings berechnet, aber das gespeicherte Modell ist ein Standard-YOLO-Modell ohne Overhead.
Link to this sectionVerlangsamt Knowledge Distillation das Training?#
Ja. Erwarte ein 1,2- bis 1,5-mal langsameres Training und etwa 1,1-mal mehr GPU-Speicher, da das Lehrermodell bei jedem Batch eine Inferenz ausführt. Der Lehrer läuft im eval-Modus ohne Gradienten, was den Overhead handhabbar hält. Verwende amp=True, um die Auswirkungen zu reduzieren.
Link to this sectionWelche Aufgaben und Modelle werden unterstützt?#
Knowledge Distillation funktioniert mit detect-, segment-, pose- und obb-Aufgaben, da sie Merkmale aus den drei Neck-Schichten destilliert, die den Detect-Familien-Kopf speisen. Classify- und semantic-Aufgaben werden nicht unterstützt.
Nur detect wurde experimentell auf Genauigkeitsverbesserungen verifiziert. Segment, Pose und Obb sind technisch kompatibel, aber noch nicht gebenchmarkt.
Der Lehrer und der Schüler müssen derselben YOLO-Familie angehören (z. B. YOLOv8, YOLO11 oder YOLO26). Cross-Family-Distillation (z. B. ein YOLO11-Lehrer mit einem YOLO26-Schüler) wird nicht unterstützt.