YOLO Vision 2026 :

Distillation de 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 de connaissances ?#

Knowledge distillation transfère les connaissances d'un modèle enseignant grand et précis vers un modèle étudiant plus petit. L'étudiant apprend à imiter les représentations de caractéristiques internes de l'enseignant, obtenant souvent une meilleure précision qu'un entraînement à partir de zéro.

Image du flux de distillation des connaissances

Utilise la distillation lorsque :

  • Tu as besoin d'un modèle plus petit et plus rapide pour le déploiement
  • Tu possèdes un modèle enseignant de haute précision entraîné sur les mêmes données
  • Tu souhaites une meilleure précision que celle fournie par l'entraînement standard
Remarque

La distillation de connaissances est implémentée pour les tâches detect, segment, pose et obb. Seule la tâche detect a été vérifiée expérimentalement pour des améliorations de précision pour le moment.

Performance#

La distillation des connaissances améliore le mAP de l'étudiant pour toute la famille YOLO26 sur 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 avec la distillation 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
  • Les valeurs mAPval concernent un modèle unique à échelle unique sur le jeu de données COCO val2017.
    Reproduis avec yolo val detect data=coco.yaml device=0
  • Les valeurs e2e utilisent le chemin d'inférence sans NMS par défaut ; les valeurs non-e2e utilisent le post-traitement NMS traditionnel (end2end=False). Consulte End-to-End Detection pour plus de détails.

Prérequis#

Avant de commencer, assure-toi de remplir les conditions suivantes :

  • Modèle enseignant entraîné : Un modèle enseignant pré-entraîné de haute précision issu de la même famille YOLO que le modèle étudiant (par ex. YOLO26).
  • Jeu de données et tâche correspondants : Les modèles enseignant et étudiant doivent utiliser exactement la même configuration de jeu de données et de tâche.
  • Ressources GPU : Assez de mémoire GPU (VRAM) pour charger et exécuter les deux modèles simultanément pendant l'entraînement (réfère-toi à la FAQ pour la surcharge VRAM typique).

Paires de modèles recommandées#

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

La distillation inter-familles (par ex. enseignant YOLO11 avec étudiant YOLO26) n'est pas prise en charge.

Paramètres clés#

ParamètreTypeDéfautDescription
distill_modelstrNoneChemin vers le fichier du modèle enseignant (par exemple, yolo26x.pt). Définir ceci active la distillation des connaissances.
disfloat6.0Poids de la perte de distillation. Contrôle dans quelle mesure la perte de distillation contribue à la perte totale d'entraînement.

Comment ça marche#

  1. Le modèle enseignant reste figé en mode eval et effectue l'inférence sur chaque lot
  2. Le modèle étudiant s'entraîne avec les pertes de tâche standards plus les conseils de distillation
  3. Les caractéristiques sont extraites des deux modèles au niveau des trois couches du cou qui alimentent la tête de la famille Detect
  4. Un réseau projecteur (MLP léger) aligne les dimensions des caractéristiques de l'étudiant pour correspondre à celles de l'enseignant
  5. Une perte L2 pondérée par le score compare les caractéristiques projetées de l'étudiant avec celles de l'enseignant, pondérées par la confiance de classification de l'enseignant
  6. La perte de distillation se combine avec les pertes standard en utilisant le 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 + dfl_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 cou qui alimentent la tête de la famille Detect du modèle. Étant donné que les têtes segment, pose et obb héritent de la même architecture Detect, la distillation est techniquement compatible avec ces tâches également.

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 ne sont pas encore validées.

Distillation de 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 de 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 (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 par distillation#

L'entraînement par distillation prend en charge la reprise à partir de points de contrôle. Le modèle enseignant est reconstruit automatiquement à partir du chemin distill_model :

Reprendre l'entraînement par 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 supplémentaire dis_loss apparaît dans les journaux d'entraînement :

      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

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

FAQ#

    • Vérifie que l'enseignant et l'étudiant sont de la même génération YOLO
    • Confirme 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
    • Assure-toi 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 sauvegardé est un modèle YOLO standard sans surcharge.

  • Oui. Attends-toi à un entraînement 1,2-1,5x plus lent et à environ 1,1x plus de mémoire GPU car le modèle enseignant effectue l'inférence sur chaque lot. L'enseignant s'exécute en mode eval sans gradients, ce qui maintient la surcharge gérable. Utilise amp=True pour réduire l'impact.

  • La distillation de connaissances fonctionne avec les tâches detect, segment, pose et obb car elle distille les caractéristiques des trois couches du cou qui alimentent la tête de la famille Detect. Les tâches classify et semantic ne sont pas prises en charge.

    Seule la tâche detect a été vérifiée expérimentalement pour des améliorations de précision. Segment, pose et obb sont techniquement compatibles mais pas encore évalués.

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

Commentaires