Wissensdestillation#
Schnellstart#
Trainiere ein kleineres Schülermodell mit Unterstützung eines größeren Lehrermodells, 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")Was ist Wissensdestillation?#
Wissensdestillation überträgt Wissen von einem großen, präzisen Lehrermodell auf ein kleineres Schülermodell. Das Schülermodell lernt, die internen Merkmalsrepräsentationen des Lehrermodells nachzuahmen, und erzielt dabei oft eine höhere Genauigkeit als beim Training von Grund auf.

Verwende Destillation, wenn:
- Du ein kleineres, schnelleres Modell für den Einsatz benötigst
- Du ein hochpräzises Lehrermodell hast, das mit denselben Daten trainiert wurde
- Du eine höhere Genauigkeit erzielen möchtest, als sie das Standardtraining bietet
Wissensdestillation ist für die Aufgaben detect, segment, pose und obb implementiert. Bisher wurde nur detect experimentell auf Genauigkeitsverbesserungen überprüft.
Leistung#
Wissensdestillation verbessert die mAP des Schülermodells über die gesamte YOLO26-Familie hinweg auf COCO, ohne zusätzliche Inferenzkosten. Die folgende Tabelle vergleicht die standardmäßigen YOLO26-Modelle (Basislinie) mit denselben Modellen, die durch Destillation vom jeweils empfohlenen Lehrermodell trainiert wurden.
| Modell | Größe (Pixel) | mAPval 50-95 Basislinie | mAPval 50-95 destilliert | mAPval 50-95 (e2e) Basislinie | mAPval 50-95 (e2e) destilliert |
|---|---|---|---|---|---|
| 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 im Einzel-Skalen-Modus auf dem COCO val2017-Datensatz.
Reproduziere eine destillierte Zeile mityolo val detect model=yolo26n-distill.pt data=coco.yaml device=0; fügenms=Falsefür die e2e-Spalte hinzu. - e2e-Werte nutzen den NMS-freien Inferenzpfad (
nms=False); Nicht-e2e-Werte nutzen die standardmäßige NMS-Nachbearbeitung (nms=None). Siehe End-to-End Detection für Details.
Voraussetzungen#
Stelle vor Beginn sicher, dass du die folgenden Voraussetzungen erfüllst:
- Trainiertes Lehrermodell: ein Checkpoint
.ptaus derselben YOLO-Familie wie das Schülermodell. - Übereinstimmende Aufgabe: Verwende ein Lehrermodell für dieselbe Aufgabe wie das Schülermodell und trainiere es mit relevanten Daten.
- GPU-Ressourcen: genügend Speicher, um beide Modelle aufzunehmen; das Lehrermodell läuft nur im Vorwärtsdurchlauf, ohne Gradienten oder Optimierungszustand.
Empfohlene Modellpaare#
| Schülermodell | Empfohlenes Lehrermodell |
|---|---|
yolo26n.pt | yolo26s.pt |
yolo26s.pt | yolo26m.pt |
yolo26m.pt | yolo26x.pt |
yolo26l.pt | yolo26x.pt |
Destillation zwischen verschiedenen Familien (z. B. ein YOLO11-Lehrermodell mit einem YOLO26-Schülermodell) wird nicht unterstützt.
Wichtige Parameter#
| Parameter | Typ | Standardwert | Beschreibung |
|---|---|---|---|
distill_model | str | None | Pfad zur Modelldatei des Lehrermodells (z. B. yolo26x.pt). Durch das Setzen dieses Parameters wird die Wissensdestillation aktiviert. |
dis | float | 6.0 | Gewichtung des Destillationsverlusts. Steuert, wie stark der Destillationsverlust zum gesamten Trainingsverlust beiträgt. |
Funktionsweise#
- Das Lehrermodell bleibt im Modus
evaleingefroren und führt für jeden Batch eine Inferenz aus - Das Schülermodell wird mit den standardmäßigen Aufgabenverlusten sowie der Anleitung durch die Destillation trainiert
- Merkmale werden aus beiden Modellen an den drei Nackenschichten extrahiert, die den Kopf der Detect-Familie speisen
- Ein Projektor aus zwei 1×1-Faltungen mit ReLU passt jede Merkmalskarte des Schülermodells an die Kanäle des Lehrermodells an
- Ein nach Bewertungen gewichteter L2-Verlust vergleicht die projizierten Merkmale des Schülermodells mit den Merkmalen des Lehrermodells, gewichtet nach dessen Klassifikationskonfidenz
- Der Destillationsverlust wird mithilfe der Gewichtung
dismit den standardmäßigen Verlusten kombiniert
flowchart TD
A[Input Image Batch]:::start --> T[Teacher Model<br/>frozen, eval mode]:::extern
A --> S[Student Model<br/>trainable]:::proc
T --> |Detect head inputs| TF[Teacher Features]:::extern
S --> |Detect head inputs| SF[Student Features]:::proc
SF --> P[1×1 Conv Projector<br/>with ReLU]:::decide
P --> AF[Aligned Student Features]:::proc
TF --> SW[Score-weighted L2 Loss]:::proc
AF --> SW
S --> D[Detection Head]:::proc
D --> DL[box_loss + cls_loss + l1_loss]:::proc
SW --> |× dis| DIS[distillation loss]:::proc
DL --> TOTAL[Total Loss]:::out
DIS --> TOTAL
TOTAL --> BP[Backpropagate<br/>Student + Projector only]:::out
classDef start fill:#4CAF50,color:#fff
classDef proc fill:#2196F3,color:#fff
classDef decide fill:#FF9800,color:#fff
classDef out fill:#9C27B0,color:#fff
classDef extern fill:#607D8B,color:#fffUnterstützte Aufgaben#
Die Implementierung der Destillation extrahiert Merkmale aus den drei Nackenschichten, die den Kopf der Detect-Familie des Modells speisen. Da die Köpfe für segment, pose und obb von derselben Architektur Detect erben, ist die Destillation auch mit diesen Aufgaben technisch kompatibel.
Klassifikation, semantische Segmentierung, Tiefenschätzung und RT-DETR verwenden keinen kompatiblen Kopf der Detect-Familie und werden nicht unterstützt.
Bisher wurde nur detect experimentell getestet und verifiziert. Du kannst die Destillation 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")Training#
Grundlegendes Training#
Das Training mit Destillation ist identisch mit dem Standardtraining. Gib den Pfad distill_model an, um sie 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")Anpassen der Gewichtung des Destillationsverlusts#
Der Parameter dis (Standardwert: 6.0) steuert den Beitrag des Destillationsverlusts:
from ultralytics import YOLO
student = YOLO("yolo26n.pt")
results = student.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt", dis=10.0)Training mit Wissensdestillation fortsetzen#
Das Training mit Destillation unterstützt die Fortsetzung aus Checkpoints. Das Lehrermodell wird automatisch anhand des im Checkpoint gespeicherten Pfads distill_model neu erstellt:
from ultralytics import YOLO
student = YOLO("runs/detect/train/weights/last.pt")
results = student.train(resume=True)Trainingsergebnis#
Wenn die Destillation aktiviert ist, erscheint eine zusätzliche Spalte dis_loss in den Trainingsprotokollen:
Epoch GPU_mem box_loss cls_loss l1_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 Gewichte des Schülermodells – Dateigröße und Inferenzgeschwindigkeit entsprechen denen eines normal trainierten Schülermodells.
FAQ#
- Überprüfe, ob Lehrermodell und Schülermodell aus derselben YOLO-Generation stammen
- Bestätige, dass der Pfad
distill_modelkorrekt ist und die Datei geladen werden kann - Erhöhe
dis, wenn der Verlustwert sehr klein ist - Stelle sicher, dass das Lehrermodell mit dem selben Datensatz trainiert wurde
Füge den Parameter
distill_modelhinzu – alles andere funktioniert identisch. Während des Trainings wird ein zusätzlicher Destillationsverlust berechnet, aber das gespeicherte Modell ist ein standardmäßiges YOLO-Modell ohne zusätzlichen Aufwand.Ja. Das Lehrermodell fügt für jeden Batch einen Vorwärtsdurchlauf hinzu, daher hängen Zeit- und Speicheraufwand vom Lehrermodell-Schülermodell-Paar ab. Das Lehrermodell läuft im Modus
eval, ohne Gradienten oder Optimierungszustand.Wissensdestillation funktioniert mit den Aufgaben detect, segment, pose und obb, da sie Merkmale aus den drei Nackenschichten destilliert, die den Kopf der Detect-Familie speisen. Classify, semantic, depth und RT-DETR werden nicht unterstützt.
Bisher wurde nur detect experimentell auf Genauigkeitsverbesserungen überprüft. Segment, Pose und Obb sind technisch kompatibel, wurden aber noch nicht als Vergleichstest durchgeführt.
Lehrermodell und Schülermodell müssen derselben YOLO-Familie angehören (z. B. YOLOv8, YOLO11 oder YOLO26). Destillation zwischen verschiedenen Familien (z. B. ein YOLO11-Lehrermodell mit einem YOLO26-Schülermodell) wird nicht unterstützt.