Meet YOLO26: next-gen vision AI.

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:

Esempio
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
Nota

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.

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
  • I valori di mAPval si riferiscono a un singolo modello e singola scala sul dataset COCO val2017.
    Riproducibile tramite yolo 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#

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

La distillazione tra famiglie diverse (es. insegnante YOLO11 con studente YOLO26) non è supportata.

Link to this sectionParametri chiave#

ParametroTipoPredefinitoDescrizione
distill_modelstrNonePercorso del file del modello insegnante (es. yolo26x.pt). Impostarlo abilita la knowledge distillation.
disfloat6.0Peso della loss di distillazione. Controlla quanto la loss di distillazione contribuisce alla loss totale di addestramento.

Link to this sectionCome funziona#

  1. Il modello insegnante rimane bloccato in modalità eval ed esegue l'inferenza su ogni batch
  2. Il modello studente si addestra con le loss standard del task più la guida della distillazione
  3. Le feature vengono estratte da entrambi i modelli presso i tre strati neck che alimentano la head della famiglia Detect
  4. Una rete projector (MLP leggero) allinea le dimensioni delle feature dello studente per corrispondere a quelle dell'insegnante
  5. Una loss L2 pesata per il punteggio confronta le feature proiettate dello studente con quelle dell'insegnante, pesate dalla confidenza di classificazione dell'insegnante
  6. 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.

Avviso

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.

Knowledge Distillation per altri task
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:

Addestramento con Knowledge Distillation
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:

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)

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:

Riprendi l'addestramento con distillazione
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        640

Il 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_model sia corretto e che il file venga caricato
  • Prova ad aumentare dis se 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.

Collaboratori

Commenti