Link to this sectionDistillazione della conoscenza#
Link to this sectionAvvio rapido#
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")Link to this sectionCos'è la Knowledge Distillation?#
La Knowledge distillation trasferisce la conoscenza da un modello insegnante grande e preciso a un modello studente più piccolo. Lo studente impara a mimare le rappresentazioni interne delle feature dell'insegnante, ottenendo spesso una precisione migliore rispetto all'addestramento da zero.
Usa la distillazione quando:
- Hai bisogno di un modello più piccolo e veloce per il deployment
- Hai un modello insegnante ad alta precisione addestrato sugli stessi dati
- Desideri una precisione migliore di quella offerta dall'addestramento standard
La knowledge distillation è implementata per i task detect, segment, pose e obb. Solo detect è stato verificato sperimentalmente per i miglioramenti di precisione per il momento.
Link to this sectionPerformance#
La knowledge distillation migliora la mAP dello studente nell'intera famiglia YOLO26 su COCO, senza costi di inferenza aggiuntivi. La tabella seguente confronta i modelli standard YOLO26 (baseline) con gli stessi modelli addestrati con la distillazione dal loro insegnante raccomandato.
| 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 di mAPval si riferiscono a un singolo modello e singola scala sul dataset COCO val2017.
Riproducibile tramiteyolo val detect data=coco.yaml device=0 - I valori e2e utilizzano il percorso di inferenza predefinito senza NMS; i valori non e2e utilizzano il post-processing NMS tradizionale (
end2end=False). Vedi End-to-End Detection per i dettagli.
Link to this sectionPrerequisiti#
Prima di iniziare, assicurati di soddisfare i seguenti requisiti:
- Modello insegnante addestrato: Un modello insegnante pre-addestrato ad alta precisione della stessa famiglia YOLO del modello studente (es. YOLO26).
- Dataset e task corrispondenti: Sia il modello insegnante che quello studente devono utilizzare esattamente la stessa configurazione di dataset e task.
- Risorse GPU: Memoria GPU (VRAM) sufficiente per caricare ed eseguire entrambi i modelli contemporaneamente durante l'addestramento (fai riferimento alle FAQ per il tipico overhead di VRAM).
Link to this sectionCoppie di modelli raccomandate#
| Studente | Insegnante raccomandato |
|---|---|
yolo26n.pt | yolo26s.pt |
yolo26s.pt | yolo26m.pt |
yolo26m.pt | yolo26x.pt |
yolo26l.pt | yolo26x.pt |
La distillazione tra famiglie diverse (es. insegnante YOLO11 con studente YOLO26) non è supportata.
Link to this sectionParametri chiave#
| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
distill_model | str | None | Percorso del file del modello insegnante (es. yolo26x.pt). Impostarlo abilita la knowledge distillation. |
dis | float | 6.0 | Peso della loss di distillazione. Controlla quanto la loss di distillazione contribuisce alla loss totale di addestramento. |
Link to this sectionCome funziona#
- Il modello insegnante rimane bloccato in modalità
evaled esegue l'inferenza su ogni batch - Il modello studente si addestra con le loss standard del task più la guida della distillazione
- Le feature vengono estratte da entrambi i modelli presso i tre strati neck che alimentano la head della famiglia Detect
- Una rete projector (MLP leggero) allinea le dimensioni delle feature dello studente per corrispondere a quelle dell'insegnante
- Una loss L2 pesata per il punteggio confronta le feature proiettate dello studente con quelle dell'insegnante, pesate dalla confidenza di classificazione dell'insegnante
- La loss di distillazione si combina con le loss standard utilizzando il peso
dis
flowchart TD
A[Input Image Batch] --> T[Teacher Model<br/>frozen, eval mode]
A --> S[Student Model<br/>trainable]
T --> |Detect head inputs| TF[Teacher Features]
S --> |Detect head inputs| SF[Student Features]
SF --> P[1×1 Conv Projector<br/>with ReLU]
P --> AF[Aligned Student Features]
TF --> SW[Score-weighted L2 Loss]
AF --> SW
S --> D[Detection Head]
D --> DL[box_loss + cls_loss + dfl_loss]
SW --> |× dis| DIS[distillation loss]
DL --> TOTAL[Total Loss]
DIS --> TOTAL
TOTAL --> BP[Backpropagate<br/>Student + Projector only]Link to this sectionSupporto ai task#
L'implementazione della distillazione estrae le feature dai tre strati 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 quei task.
Solo detect è stato sottoposto a benchmark e verificato sperimentalmente. Puoi eseguire la distillazione per segment, pose o obb, ma i miglioramenti di precisione per quei task non sono ancora stati validati.
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")Link to this sectionAddestramento#
Link to this sectionAddestramento di base#
L'addestramento con distillazione è identico all'addestramento standard. Fornisci il percorso distill_model per abilitarlo:
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")Link to this sectionRegolazione del peso della loss di distillazione#
Il parametro dis (predefinito: 6.0) controlla il contributo della loss 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)Link to this sectionRiprendere l'addestramento con distillazione#
L'addestramento con distillazione supporta il ripristino dai checkpoint. Il modello insegnante viene ricostruito automaticamente dal percorso distill_model:
from ultralytics import YOLO
student = YOLO("runs/detect/train/weights/last.pt")
results = student.train(resume=True)Link to this sectionOutput di addestramento#
Quando la distillazione è abilitata, appare una colonna aggiuntiva dis_loss nei log di addestramento:
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 640Il modello esportato contiene solo i pesi dello studente—la dimensione del file e la velocità di inferenza corrispondono a un modello studente addestrato normalmente.
Link to this sectionFAQ#
Link to this sectionPerché la mia loss di distillazione non diminuisce?#
- Verifica che insegnante e studente appartengano alla stessa generazione YOLO
- Conferma che il percorso
distill_modelsia corretto e che il file venga caricato - Prova ad aumentare
disse il valore della loss è molto piccolo - Assicurati che il modello insegnante sia addestrato sullo stesso dataset
Link to this sectionIn cosa differisce la distillazione dall'addestramento standard?#
Aggiungi il parametro distill_model: tutto il resto funziona in modo identico. Una loss di distillazione extra viene calcolata durante l'addestramento, ma il modello salvato è un modello YOLO standard senza alcun overhead.
Link to this sectionLa knowledge distillation rallenta l'addestramento?#
Sì. Aspettati un addestramento da 1,2 a 1,5 volte più lento e circa 1,1 volte più memoria GPU perché il modello insegnante esegue l'inferenza su ogni batch. L'insegnante viene eseguito in modalità eval senza gradienti, mantenendo l'overhead gestibile. Usa amp=True per ridurre l'impatto.
Link to this sectionQuali task e modelli sono supportati?#
La knowledge distillation funziona con i task detect, segment, pose e obb perché distilla le feature dai tre strati neck che alimentano la head della famiglia Detect. I task classify e semantic non sono supportati.
Solo detect è stato verificato sperimentalmente per i miglioramenti di precisione. Segment, pose e obb sono tecnicamente compatibili ma non ancora sottoposti a benchmark.
L'insegnante e lo studente devono appartenere alla stessa famiglia YOLO (es. YOLOv8, YOLO11 o YOLO26). La distillazione tra famiglie diverse (es. un insegnante YOLO11 con uno studente YOLO26) non è supportata.