Meet YOLO26: next-gen vision AI.

Link to this sectionDistillation de connaissances#

Link to this sectionDé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")

Link to this sectionQu'est-ce que la distillation de connaissances ?#

La distillation de connaissances transfère les connaissances d'un modèle enseignant large et précis vers un modèle étudiant plus petit. L'étudiant apprend à imiter les représentations internes des caractéristiques de l'enseignant, atteignant souvent une meilleure précision qu'en partant de zéro.

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.

Link to this sectionPerformance#

La distillation de connaissances améliore le mAP de l'étudiant sur toute la famille YOLO26 sur COCO, sans coût d'inférence supplémentaire. Le tableau ci-dessous compare les modèles YOLO26 standards (référence) avec les mêmes modèles entraînés avec la distillation depuis 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 de mAPval sont pour un modèle unique à échelle unique sur le jeu de données COCO val2017.
    Reproduis-le avec yolo val detect data=coco.yaml device=0
  • Les valeurs e2e utilisent le chemin d'inférence par défaut sans NMS ; les valeurs non-e2e utilisent le post-traitement NMS traditionnel (end2end=False). Voir Détection de bout en bout pour plus de détails.

Link to this sectionPré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 : Une mémoire GPU (VRAM) suffisante pour charger et exécuter les deux modèles simultanément pendant l'entraînement (consulte la FAQ pour la surcharge typique de VRAM).

Link to this sectionPaires 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.

Link to this sectionParamètres clés#

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

Link to this sectionComment ça marche#

  1. Le modèle enseignant reste gelé en mode eval et exécute 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 aux pertes standards en utilisant le poids 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 sectionPrise 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. Comme 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")

Link to this sectionEntraînement#

Link to this sectionEntraî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")

Link to this sectionAjustement 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)

Link to this sectionReprise de l'entraînement par distillation#

L'entraînement par distillation prend en charge la reprise depuis des 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)

Link to this sectionSortie 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   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.

Link to this sectionFAQ#

Link to this sectionPourquoi ma perte de distillation ne diminue-t-elle pas ?#

  • 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 petite
  • Assure-toi que le modèle enseignant est entraîné sur le même jeu de données

Link to this sectionEn quoi la distillation diffère-t-elle de l'entraînement standard ?#

Ajoute le paramètre distill_model—tout le reste fonctionne à l'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 frais généraux.

Link to this sectionLa distillation de connaissances ralentit-elle l'entraînement ?#

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

Link to this sectionQuelles tâches et quels modèles sont pris en charge ?#

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.

Contributeurs

Commentaires