YOLO Vision 2026 :

Distillation des connaissances#

Démarrage rapide#

Entraîne un modèle étudiant plus petit avec les conseils d’un modèle enseignant plus grand en ajoutant l’argument distill_model :

Exemple
from ultralytics import YOLO

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

Qu’est-ce que la distillation des connaissances ?#

La distillation des connaissances transfère les connaissances d’un modèle enseignant volumineux et précis vers un modèle étudiant plus petit. L’étudiant apprend à reproduire les représentations internes des caractéristiques de l’enseignant et obtient souvent une meilleure précision qu’avec un entraînement à partir de zéro.

Illustration du processus de distillation des connaissances

Utilise la distillation quand :

  • Tu as besoin d’un modèle plus petit et plus rapide pour le déploiement
  • Tu disposes d’un modèle enseignant très précis entraîné sur les mêmes données
  • Tu veux une meilleure précision que celle fournie par l’entraînement standard
Remarque

La distillation des connaissances est implémentée pour les tâches detect, segment, pose et obb. Pour l’instant, seule la tâche detect a été vérifiée expérimentalement pour confirmer les améliorations de précision.

Performances#

La distillation des connaissances améliore le mAP de l’étudiant sur toute la famille YOLO26 avec COCO, sans coût d’inférence supplémentaire. Le tableau ci-dessous compare les modèles YOLO26 standard (référence) aux mêmes modèles entraînés par distillation à partir de leur enseignant recommandé.

Modèletaille
(pixels)
mAPval
50-95

référence
mAPval
50-95

distillé
mAPval
50-95 (e2e)

référence
mAPval
50-95 (e2e)

distillé
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.

Prérequis#

Avant de commencer, vérifie que tu remplis les conditions suivantes :

  • Modèle enseignant entraîné : un checkpoint .pt issu de la même famille YOLO que l’étudiant.
  • Tâche correspondante : utilise un enseignant pour la même tâche que l’étudiant et entraîne-le sur des données pertinentes.
  • Ressources GPU : suffisamment de mémoire pour contenir les deux modèles ; l’enseignant effectue uniquement une propagation avant, sans gradients ni état de l’optimiseur.

Paires de modèles recommandées#

ÉtudiantEnseignant recommandé
yolo26n.ptyolo26s.pt
yolo26s.ptyolo26m.pt
yolo26m.ptyolo26x.pt
yolo26l.ptyolo26x.pt

La distillation entre familles (par exemple, un enseignant YOLO11 avec un étudiant YOLO26) n’est pas prise en charge.

Paramètres clés#

ParamètreTypeValeur par défautDescription
distill_modelstrNoneChemin vers le fichier du modèle enseignant (par exemple, yolo26x.pt). Ce paramètre active la distillation des connaissances.
disfloat6.0Poids de la perte de distillation. Contrôle la contribution de la perte de distillation à la perte totale d’entraînement.

Fonctionnement#

  1. Le modèle enseignant reste figé en mode eval et effectue une inférence sur chaque lot
  2. Le modèle étudiant s’entraîne avec les pertes de tâche standard et les conseils de distillation
  3. Les caractéristiques sont extraites des trois couches du neck qui alimentent la tête de la famille Detect des deux modèles
  4. Un projecteur composé de deux convolutions 1×1 avec ReLU aligne chaque carte de caractéristiques de l’étudiant sur les canaux de l’enseignant
  5. Une perte L2 pondérée par le score compare les caractéristiques projetées de l’étudiant à celles de l’enseignant, avec une pondération basée sur la confiance de classification de l’enseignant
  6. La perte de distillation est combinée aux pertes standard à l’aide du poids 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

Prise en charge des tâches#

L’implémentation de la distillation extrait les caractéristiques des trois couches du neck qui alimentent la tête de la famille Detect du modèle. Comme les têtes segment, pose et obb héritent de la même architecture Detect, la distillation est également compatible techniquement avec ces tâches.

La classification, la segmentation sémantique, l’estimation de profondeur et RT-DETR n’utilisent pas de tête compatible de la famille Detect et ne sont pas pris en charge.

Avertissement

Seule la tâche detect a été évaluée et vérifiée expérimentalement. Tu peux exécuter la distillation pour segment, pose ou obb, mais les améliorations de précision pour ces tâches n’ont pas encore été validées.

Distillation des connaissances pour d’autres tâches
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")

Entraînement#

Entraînement de base#

L’entraînement avec distillation est identique à l’entraînement standard. Fournis le chemin distill_model pour l’activer :

Entraînement avec distillation des connaissances
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")

Ajustement du poids de la perte de distillation#

Le paramètre dis (valeur par défaut : 6.0) contrôle la contribution de la perte de distillation :

Poids de distillation personnalisé
from ultralytics import YOLO

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

Reprise de l’entraînement avec distillation#

L’entraînement avec distillation prend en charge la reprise depuis des checkpoints. Le modèle enseignant est automatiquement reconstruit à partir du chemin distill_model enregistré dans le checkpoint :

Reprendre l’entraînement avec distillation
from ultralytics import YOLO

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

Sortie de l’entraînement#

Lorsque la distillation est activée, une colonne dis_loss supplémentaire apparaît dans les journaux d’entraînement :

      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

Le modèle exporté contient uniquement les poids de l’étudiant : la taille du fichier et la vitesse d’inférence correspondent à celles d’un modèle étudiant entraîné normalement.

FAQ#

    • Vérifie que l’enseignant et l’étudiant proviennent de la même génération YOLO
    • Vérifie que le chemin distill_model est correct et que le fichier se charge
    • Essaie d’augmenter dis si la valeur de la perte est très faible
    • Vérifie que le modèle enseignant est entraîné sur le même jeu de données
  • Ajoute le paramètre distill_model — tout le reste fonctionne de manière identique. Une perte de distillation supplémentaire est calculée pendant l’entraînement, mais le modèle enregistré est un modèle YOLO standard sans surcharge.

  • Oui. L’enseignant ajoute une propagation avant pour chaque lot, donc la surcharge en temps et en mémoire dépend de la paire enseignant/étudiant. L’enseignant fonctionne en mode eval, sans gradients ni état de l’optimiseur.

  • La distillation des connaissances fonctionne avec les tâches detect, segment, pose et obb, car elle distille les caractéristiques des trois couches du neck qui alimentent la tête de la famille Detect. Classify, semantic, depth et RT-DETR ne sont pas pris en charge.

    Seule la tâche detect a été vérifiée expérimentalement pour confirmer les améliorations de précision. Segment, pose et obb sont techniquement compatibles, mais n’ont pas encore fait l’objet d’une évaluation comparative.

    L’enseignant et l’étudiant doivent appartenir à la même famille YOLO (par exemple, YOLOv8, YOLO11 ou YOLO26). La distillation entre familles (par exemple, un enseignant YOLO11 avec un étudiant YOLO26) n’est pas prise en charge.

Commentaires