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:
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 le conoscenze 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 e spesso raggiunge un'accuratezza maggiore rispetto all'addestramento da zero.

Usa la distillazione quando:
- Ti serve un modello più piccolo e veloce da distribuire
- Hai un modello insegnante ad alta accuratezza addestrato sugli stessi dati
- Vuoi ottenere un'accuratezza migliore rispetto all'addestramento standard
La distillazione della conoscenza è implementata per le attività detect, segment, pose e obb. Per ora, solo detect è stato verificato sperimentalmente per i miglioramenti di accuratezza.
Prestazioni#
La distillazione della conoscenza migliora la mAP dello studente per tutta la 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 tramite distillazione dal rispettivo insegnante consigliato.
| Modello | dimensione (pixel) | mAPval 50-95 baseline | mAPval 50-95 distillato | mAPval 50-95 (e2e) baseline | mAPval 50-95 (e2e) distillato |
|---|---|---|---|---|---|
| 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 |
- I valori mAPval si riferiscono a un singolo modello e a una singola scala sul dataset COCO val2017.
Riproduci una riga distillata conyolo val detect model=yolo26n-distill.pt data=coco.yaml device=0; aggiunginms=Falseper la colonna e2e. - I valori e2e usano il percorso di inferenza senza NMS (
nms=False); i valori non e2e usano la post-elaborazione NMS predefinita (nms=None). Per i dettagli, consulta Rilevamento end-to-end.
Prerequisiti#
Prima di iniziare, assicurati di soddisfare i seguenti requisiti:
- Modello insegnante addestrato: un checkpoint
.ptdella stessa famiglia YOLO del modello 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 la propagazione in avanti, senza gradienti né stato dell'ottimizzatore.
Coppie di modelli consigliate#
| Studente | Insegnante consigliato |
|---|---|
yolo26n.pt | yolo26s.pt |
yolo26s.pt | yolo26m.pt |
yolo26m.pt | yolo26x.pt |
yolo26l.pt | yolo26x.pt |
La distillazione tra famiglie diverse (ad es. un insegnante YOLO11 con uno studente YOLO26) non è supportata.
Parametri chiave#
| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
distill_model | str | None | Percorso del file del modello insegnante (ad es. yolo26x.pt). Impostando questo parametro abiliti la distillazione della conoscenza. |
dis | float | 6.0 | Peso della funzione di perdita di distillazione. Determina quanto questa perdita contribuisce alla perdita totale di addestramento. |
Come funziona#
- Il modello insegnante rimane congelato in modalità
evaled esegue l'inferenza su ogni batch - Il modello studente viene addestrato con le perdite standard dell'attività, oltre alla guida della distillazione
- Le caratteristiche vengono estratte da entrambi i modelli nei tre livelli neck che alimentano la testa della famiglia Detect
- Un proiettore composto da due convoluzioni 1×1 con ReLU allinea ciascuna mappa delle caratteristiche dello studente ai canali dell'insegnante
- Una perdita L2 ponderata per punteggio confronta le caratteristiche proiettate dello studente con quelle dell'insegnante, ponderandole in base alla confidenza di classificazione dell'insegnante
- La perdita di distillazione si combina con le perdite standard utilizzando 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:#fffSupporto delle attività#
L'implementazione della distillazione estrae le caratteristiche dai tre livelli neck che alimentano la testa della famiglia Detect del modello. Poiché le teste segment, pose e obb ereditano la stessa architettura Detect, la distillazione è tecnicamente compatibile anche con queste attività.
Classificazione, segmentazione semantica, stima della profondità e RT-DETR non utilizzano una testa compatibile della famiglia Detect e non sono supportati.
Solo detect è stato sottoposto a benchmark e verificato sperimentalmente. Puoi eseguire la distillazione per segment, pose o obb, ma i miglioramenti di accuratezza per queste attività non sono ancora stati convalidati.
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 distillazione è identico a quello standard. Specifica il percorso distill_model per abilitarla:
from ultralytics import YOLO
# Carica un modello studente
student = YOLO("yolo26m.pt")
# Addestra con la distillazione della conoscenza da un modello insegnante più grande
results = student.train(data="coco8.yaml", epochs=100, distill_model="yolo26x.pt")Regolare il peso della perdita di distillazione#
Il parametro dis (predefinito: 6.0) controlla il contributo della perdita di distillazione:
from ultralytics import YOLO
student = YOLO("yolo26n.pt")
results = student.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt", dis=10.0)Riprendere l'addestramento con distillazione#
L'addestramento con distillazione supporta la ripresa dai checkpoint. Il modello insegnante viene ricreato automaticamente a partire dal percorso distill_model registrato nel checkpoint:
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 di 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 640Il 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.
Domande frequenti#
- Verifica che l'insegnante e lo studente appartengano alla stessa generazione YOLO
- Controlla che il percorso
distill_modelsia corretto e che il file venga caricato - Prova ad aumentare
disse il valore della perdita è molto piccolo - 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 perdita di distillazione aggiuntiva, ma il modello salvato è un normale modello YOLO, senza costi aggiuntivi.Sì. L'insegnante aggiunge una propagazione in avanti per ogni batch, quindi i costi aggiuntivi in termini di tempo e memoria dipendono 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 testa della famiglia Detect. Classify, semantic, depth e RT-DETR non sono supportati.
Solo detect è stato verificato sperimentalmente per quanto riguarda i miglioramenti dell'accuratezza. Segmentazione, pose e OBB sono tecnicamente compatibili, ma non sono ancora stati sottoposti a benchmark.
L'insegnante e lo studente devono appartenere alla stessa famiglia YOLO (ad es. YOLOv8, YOLO11 o YOLO26). La distillazione tra famiglie diverse (ad es. un insegnante YOLO11 con uno studente YOLO26) non è supportata.