YOLO Vision 2026:

Wissensdestillation#

Schnellstart#

Trainiere ein kleineres Schülermodell mit Unterstützung eines größeren Lehrermodells, 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 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.

Bild des Ablaufs der Wissensdestillation

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
Hinweis

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.

ModellGröße
(Pixel)
mAPval
50-95

Basislinie
mAPval
50-95

destilliert
mAPval
50-95 (e2e)

Basislinie
mAPval
50-95 (e2e)

destilliert
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 im Einzel-Skalen-Modus auf dem COCO val2017-Datensatz.
    Reproduziere eine destillierte Zeile mit yolo val detect model=yolo26n-distill.pt data=coco.yaml device=0; füge nms=False fü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 .pt aus 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ülermodellEmpfohlenes Lehrermodell
yolo26n.ptyolo26s.pt
yolo26s.ptyolo26m.pt
yolo26m.ptyolo26x.pt
yolo26l.ptyolo26x.pt

Destillation zwischen verschiedenen Familien (z. B. ein YOLO11-Lehrermodell mit einem YOLO26-Schülermodell) wird nicht unterstützt.

Wichtige Parameter#

ParameterTypStandardwertBeschreibung
distill_modelstrNonePfad zur Modelldatei des Lehrermodells (z. B. yolo26x.pt). Durch das Setzen dieses Parameters wird die Wissensdestillation aktiviert.
disfloat6.0Gewichtung des Destillationsverlusts. Steuert, wie stark der Destillationsverlust zum gesamten Trainingsverlust beiträgt.

Funktionsweise#

  1. Das Lehrermodell bleibt im Modus eval eingefroren und führt für jeden Batch eine Inferenz aus
  2. Das Schülermodell wird mit den standardmäßigen Aufgabenverlusten sowie der Anleitung durch die Destillation trainiert
  3. Merkmale werden aus beiden Modellen an den drei Nackenschichten extrahiert, die den Kopf der Detect-Familie speisen
  4. Ein Projektor aus zwei 1×1-Faltungen mit ReLU passt jede Merkmalskarte des Schülermodells an die Kanäle des Lehrermodells an
  5. Ein nach Bewertungen gewichteter L2-Verlust vergleicht die projizierten Merkmale des Schülermodells mit den Merkmalen des Lehrermodells, gewichtet nach dessen Klassifikationskonfidenz
  6. Der Destillationsverlust wird mithilfe der Gewichtung dis mit 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:#fff

Unterstü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.

Warnung

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.

Wissensdestillation 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 Destillation ist identisch mit dem Standardtraining. Gib den Pfad distill_model an, um sie zu aktivieren:

Training mit Wissensdestillation
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:

Benutzerdefinierte Destillationsgewichtung
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:

Training mit Wissensdestillation fortsetzen
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        640

Das 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_model korrekt 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_model hinzu – 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.

Kommentare