YOLO Vision 2026:

Distillazione della conoscenza#

Guida rapida#

Addestra un modello studente più piccolo con la guida di un modello insegnante più grande aggiungendo l'argomento distill_model:

Esempio
from ultralytics import YOLO

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

Che cos'è la distillazione della conoscenza?#

La distillazione della conoscenza trasferisce la conoscenza da un modello insegnante grande e accurato a un modello studente più piccolo. Lo studente impara a imitare le rappresentazioni interne delle caratteristiche dell'insegnante, ottenendo spesso una precisione migliore rispetto all'addestramento da zero.

Immagine del flusso di lavoro della distillazione della conoscenza

Usa la distillazione quando:

  • Ti serve un modello più piccolo e veloce per la distribuzione
  • Hai un modello insegnante ad alta precisione addestrato sugli stessi dati
  • Vuoi una precisione migliore di quella offerta dall'addestramento standard
Nota

La distillazione della conoscenza è implementata per le attività detect, segment, pose e obb. Al momento, solo detect è stata verificata sperimentalmente per i miglioramenti della precisione.

Prestazioni#

La distillazione della conoscenza migliora il mAP dello studente nell'intera famiglia YOLO26 su COCO, senza costi aggiuntivi in fase di inferenza. La tabella seguente confronta i modelli YOLO26 standard (baseline) con gli stessi modelli addestrati mediante distillazione dal rispettivo insegnante consigliato.

Modellodimensione
(pixel)
mAPval
50-95

baseline
mAPval
50-95

distillato
mAPval
50-95 (e2e)

baseline
mAPval
50-95 (e2e)

distillato
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 values are for single-model single-scale on the COCO val2017 dataset.
    Reproduce a distilled row with yolo val detect model=yolo26n-distill.pt data=coco.yaml device=0; add nms=False for the e2e column.
  • e2e values use the NMS-free inference path (nms=False); non-e2e values use default NMS post-processing (nms=None). See End-to-End Detection for details.

Prerequisiti#

Prima di iniziare, assicurati di soddisfare i seguenti requisiti:

  • Modello insegnante addestrato: un checkpoint .pt della stessa famiglia YOLO dello studente.
  • Attività corrispondente: usa un insegnante per la stessa attività dello studente e addestralo su dati pertinenti.
  • Risorse GPU: memoria sufficiente per contenere entrambi i modelli; l'insegnante esegue solo il forward, senza gradienti né stato dell'ottimizzatore.

Coppie di modelli consigliate#

StudenteInsegnante consigliato
yolo26n.ptyolo26s.pt
yolo26s.ptyolo26m.pt
yolo26m.ptyolo26x.pt
yolo26l.ptyolo26x.pt

La distillazione tra famiglie diverse (ad esempio, un insegnante YOLO11 con uno studente YOLO26) non è supportata.

Parametri principali#

ParametroTipoPredefinitoDescrizione
distill_modelstrNonePercorso del file del modello insegnante (ad esempio, yolo26x.pt). L'impostazione di questo parametro abilita la distillazione della conoscenza.
disfloat6.0Peso della loss di distillazione. Controlla il contributo della loss di distillazione alla loss totale dell'addestramento.

Come funziona#

  1. Il modello insegnante rimane congelato nella modalità eval ed esegue l'inferenza su ogni batch
  2. Il modello studente viene addestrato con le loss standard dell'attività e la guida della distillazione
  3. Le caratteristiche vengono estratte da entrambi i modelli nei tre livelli neck che alimentano la head della famiglia Detect
  4. Un proiettore composto da due convoluzioni 1×1 con ReLU allinea ogni mappa delle caratteristiche dello studente ai canali dell'insegnante
  5. Una loss L2 pesata per il punteggio confronta le caratteristiche proiettate dello studente con quelle dell'insegnante, pesate in base alla confidenza di classificazione dell'insegnante
  6. La loss di distillazione viene combinata con le loss standard usando il peso dis
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

Supporto delle attività#

L'implementazione della distillazione estrae le caratteristiche dai tre livelli neck che alimentano la head della famiglia Detect del modello. Poiché le head segment, pose e obb ereditano dalla stessa architettura Detect, la distillazione è tecnicamente compatibile anche con queste attività.

La classificazione, la segmentazione semantica, la stima della profondità e RT-DETR non usano una head compatibile della famiglia Detect e non sono supportate.

Attenzione

Solo detect è stata sottoposta a benchmark e verificata sperimentalmente. Puoi eseguire la distillazione per segment, pose o obb, ma i miglioramenti della precisione per queste attività non sono ancora stati convalidati.

Distillazione della conoscenza per altre attività
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")

Addestramento#

Addestramento di base#

L'addestramento con la distillazione è identico a quello standard. Specifica il percorso distill_model per abilitarla:

Addestramento con distillazione della conoscenza
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")

Regolazione del peso della loss di distillazione#

Il parametro dis (predefinito: 6.0) controlla il contributo della loss di distillazione:

Peso di distillazione personalizzato
from ultralytics import YOLO

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

Ripresa dell'addestramento con distillazione#

L'addestramento con distillazione supporta la ripresa dai checkpoint. Il modello insegnante viene ricostruito automaticamente dal percorso distill_model registrato nel checkpoint:

Ripresa dell'addestramento con distillazione
from ultralytics import YOLO

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

Output dell'addestramento#

Quando la distillazione è abilitata, nei log dell'addestramento compare una colonna aggiuntiva dis_loss:

      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

Il modello esportato contiene solo i pesi dello studente: le dimensioni del file e la velocità di inferenza corrispondono a quelle di un modello studente addestrato normalmente.

FAQ#

    • Verifica che insegnante e studente appartengano alla stessa generazione YOLO
    • Conferma che il percorso distill_model sia corretto e che il file venga caricato
    • Prova ad aumentare dis se il valore della loss è molto basso
    • Assicurati che il modello insegnante sia addestrato sullo stesso dataset
  • Aggiungi il parametro distill_model: tutto il resto funziona nello stesso modo. Durante l'addestramento viene calcolata una loss di distillazione aggiuntiva, ma il modello salvato è un modello YOLO standard senza overhead.

  • Sì. L'insegnante aggiunge un forward pass per ogni batch, quindi il sovraccarico in termini di tempo e memoria dipende dalla coppia insegnante/studente. L'insegnante opera in modalità eval, senza gradienti né stato dell'ottimizzatore.

  • La distillazione della conoscenza funziona con le attività detect, segment, pose e obb, perché distilla le caratteristiche dai tre livelli neck che alimentano la head della famiglia Detect. Classify, semantic, depth e RT-DETR non sono supportati.

    Solo detect è stata verificata sperimentalmente per i miglioramenti della precisione. Segment, pose e obb sono tecnicamente compatibili, ma non sono ancora state sottoposte a benchmark.

    L'insegnante e lo studente devono appartenere alla stessa famiglia YOLO (ad esempio, YOLOv8, YOLO11 o YOLO26). La distillazione tra famiglie diverse (ad esempio, un insegnante YOLO11 con uno studente YOLO26) non è supportata.

Commenti