YOLO Vision 2026:

Wissensdestillation#

Schnellstart#

Trainiere ein kleineres Schüler-Modell (Student) mit der Anleitung eines größeren Lehrer-Modells (Teacher), indem du das Argument distill_model hinzufügst:

Beispiel
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt")

Was ist Knowledge Distillation?#

Knowledge distillation überträgt Wissen von einem großen, präzisen Teacher-Modell auf ein kleineres Student-Modell. Der Student lernt, die internen Merkmalsdarstellungen des Teachers zu imitieren, wodurch oft eine bessere Genauigkeit als beim Training von Grund auf erreicht wird.

Knowledge distillation workflow image

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
Hinweis

Knowledge Distillation ist für detect-, segment-, pose- und obb-Aufgaben implementiert. Nur detect wurde bisher experimentell auf Genauigkeitsverbesserungen hin verifiziert.

Leistung#

Knowledge distillation verbessert das mAP des Students über die gesamte YOLO26-Familie auf COCO hinweg, ohne zusätzlichen Inferenzaufwand. Die folgende Tabelle vergleicht die Standard-YOLO26-Modelle (Baseline) mit denselben Modellen, die durch Distillation von ihrem empfohlenen Teacher trainiert wurden.

ModellGröße
(Pixel)
mAPval
50-95

Baseline
mAPval
50-95

distilliert
mAPval
50-95 (e2e)

Baseline
mAPval
50-95 (e2e)

distilliert
YOLO26n-distill64040.941.540.140.9
YOLO26s-distill64048.649.247.848.6
YOLO26m-distill64053.153.952.553.3
YOLO26l-distill64055.056.054.455.5
YOLO26x-distill64057.557.956.957.4
  • mAPval-Werte gelten für Einzelmodelle mit einzelner Skalierung auf dem Datensatz COCO val2017.
    Reproduzieren mit yolo val detect data=coco.yaml device=0
  • e2e-Werte verwenden den standardmäßigen NMS-freien Inferenzpfad; nicht-e2e-Werte verwenden die traditionelle NMS-Nachbearbeitung (end2end=False). Siehe End-to-End Detection für Details.

Voraussetzungen#

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-Mehraufwand).

Empfohlene Modellpaare#

SchülerEmpfohlener Lehrer
yolo26n.ptyolo26s.pt
yolo26s.ptyolo26m.pt
yolo26m.ptyolo26x.pt
yolo26l.ptyolo26x.pt

Cross-Family-Distillation (z. B. YOLO11-Lehrer mit YOLO26-Schüler) wird nicht unterstützt.

Hauptparameter#

ParameterTypStandardBeschreibung
distill_modelstrNonePfad zur Teacher-Modelldatei (z. B. yolo26x.pt). Das Festlegen dieses Pfads aktiviert die Knowledge distillation.
disfloat6.0Distillationsverlust-Gewichtung. Steuert, wie stark der Distillationsverlust zum gesamten Trainingsverlust beiträgt.

So funktioniert es#

  1. Das Teacher-Modell bleibt im Modus eval eingefroren und führt bei jedem Batch eine Inferenz aus
  2. Das Schülermodell trainiert mit Standard-Aufgabenverlusten plus Distillationsführung
  3. Merkmale werden von beiden Modellen an den drei Neck-Schichten extrahiert, die den Detect-Familien-Kopf speisen
  4. Ein Projektor-Netzwerk (leichtgewichtiges MLP) gleicht die Merkmalsdimensionen des Schülers an den Lehrer an
  5. Ein Score-gewichteter L2-Verlust vergleicht die projizierten Schülermerkmale mit den Lehrermerkmalen, gewichtet durch die Klassifikationskonfidenz des Lehrers
  6. Der Distillationsverlust wird mit den Standardverlusten unter Verwendung der Gewichtung dis 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 + dfl_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:#fff

Aufgabenunterstützung#

Die Implementierung der Distillation extrahiert Merkmale aus den drei Neck-Schichten, die den Detect-Family-Head des Modells speisen. Da die Heads segment, pose und obb von derselben Architektur Detect erben, ist die Distillation technisch gesehen auch mit diesen Aufgaben kompatibel.

Warnung

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.

Knowledge Distillation für andere Aufgaben
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 Distillation ist identisch mit dem Standardtraining. Gib den Pfad distill_model an, um es zu aktivieren:

Knowledge Distillation Training
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")

Anpassung der Distillationsverlust-Gewichtung#

Der Parameter dis (Standard: 6.0) steuert den Beitrag des Distillationsverlusts:

Benutzerdefinierte Distillationsgewichtung
from ultralytics import YOLO

student = YOLO("yolo26n.pt")
results = student.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt", dis=10.0)

Fortsetzen des Distillationstrainings#

Das Distillationstraining unterstützt das Fortsetzen von Checkpoints. Das Teacher-Modell wird automatisch aus dem Pfad distill_model neu erstellt:

Distillationstraining fortsetzen
from ultralytics import YOLO

student = YOLO("runs/detect/train/weights/last.pt")
results = student.train(resume=True)

Trainingsausgabe#

Wenn die Distillation aktiviert ist, erscheint eine zusätzliche Spalte dis_loss 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        640

Das exportierte Modell enthält nur die Schülergewichte – Dateigröße und Inferenzgeschwindigkeit entsprechen einem normal trainierten Schülermodell.

FAQ#

    • Überprüfe, ob Lehrer und Schüler aus derselben YOLO-Generation stammen
    • Bestätige, dass der Pfad distill_model korrekt ist und die Datei geladen wird
    • Versuche, dis zu erhöhen, wenn der Verlustwert sehr klein ist
    • Stelle sicher, dass das Lehrermodell auf demselben Datensatz trainiert wurde
  • Füge den Parameter distill_model hinzu – alles andere funktioniert identisch. Während des Trainings wird ein zusätzlicher Distillationsverlust berechnet, aber das gespeicherte Modell ist ein Standard-YOLO-Modell ohne Mehraufwand.

  • Ja. Erwarte ein 1,2-1,5x langsameres Training und ~1,1x mehr GPU-Speicher, da das Teacher-Modell bei jedem Batch eine Inferenz ausführt. Der Teacher läuft im Modus eval ohne Gradienten, wodurch der Mehraufwand überschaubar bleibt. Verwende amp=True, um die Auswirkungen zu reduzieren.

  • 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.

Kommentare