YOLO Vision 2026:

Destilación de conocimiento (Knowledge Distillation)#

Inicio rápido#

Entrena un modelo de estudiante más pequeño con la orientación de un modelo de profesor más grande añadiendo el argumento distill_model:

Ejemplo
from ultralytics import YOLO

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

¿Qué es la destilación de conocimientos?#

Knowledge distillation transfiere conocimiento de un teacher model grande y preciso a un student model más pequeño. El estudiante aprende a imitar las representaciones de características internas del profesor, logrando a menudo una mejor precisión que entrenando desde cero.

Knowledge distillation workflow image

Utiliza la destilación cuando:

  • Necesites un modelo más pequeño y rápido para su despliegue
  • Tengas un modelo profesor de alta precisión entrenado con los mismos datos
  • Quieres una precisión mejor que la que ofrece el entrenamiento estándar
Nota

La destilación de conocimientos está implementada para tareas de detect, segment, pose y obb. Por ahora, solo detect ha sido verificado experimentalmente para obtener mejoras en la precisión.

Rendimiento#

La destilación de conocimiento mejora el mAP del estudiante en toda la familia YOLO26 en COCO, sin coste de inferencia adicional. La tabla siguiente compara los modelos YOLO26 estándar (línea base) frente a los mismos modelos entrenados con destilación de su profesor recomendado.

Modelotamaño
(píxeles)
mAPval
50-95

línea base
mAPval
50-95

destilado
mAPval
50-95 (e2e)

línea base
mAPval
50-95 (e2e)

destilado
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
  • Los valores de mAPval son para un solo modelo y una sola escala en el conjunto de datos COCO val2017.
    Reproduce con yolo val detect data=coco.yaml device=0
  • Los valores de e2e utilizan la ruta de inferencia predeterminada sin NMS; los valores que no son e2e utilizan el postprocesamiento NMS tradicional (end2end=False). Consulta End-to-End Detection para obtener detalles.

Requisitos previos#

Antes de empezar, asegúrate de cumplir los siguientes requisitos:

  • Modelo profesor entrenado: Un modelo profesor preentrenado de alta precisión de la misma familia YOLO que el modelo estudiante (por ejemplo, YOLO26).
  • Conjunto de datos y tarea coincidentes: Tanto el modelo profesor como el estudiante deben utilizar exactamente la misma configuración de conjunto de datos y tarea.
  • Recursos de GPU: Memoria de GPU (VRAM) suficiente para cargar y ejecutar ambos modelos simultáneamente durante el entrenamiento (consulta las FAQ para ver el uso típico de VRAM).

Pares de modelos recomendados#

EstudianteProfesor recomendado
yolo26n.ptyolo26s.pt
yolo26s.ptyolo26m.pt
yolo26m.ptyolo26x.pt
yolo26l.ptyolo26x.pt

La destilación entre familias (por ejemplo, profesor YOLO11 con estudiante YOLO26) no es compatible.

Parámetros clave#

ParámetroTipoPredeterminadoDescripción
distill_modelstrNoneRuta al archivo del modelo del profesor (por ejemplo, yolo26x.pt). Configurar esto habilita la destilación de conocimiento.
disfloat6.0Peso de la pérdida de destilación. Controla cuánto contribuye la pérdida de destilación a la pérdida total del entrenamiento.

Cómo funciona#

  1. El teacher model permanece congelado en el modo eval y ejecuta la inferencia en cada lote
  2. El modelo estudiante se entrena con las pérdidas de tarea estándar más la guía de destilación
  3. Las características se extraen de ambos modelos en las tres capas del cuello que alimentan a la cabeza de la familia Detect
  4. Una red proyectora (MLP ligero) alinea las dimensiones de las características del estudiante para que coincidan con las del profesor
  5. Una pérdida L2 ponderada por puntuación compara las características proyectadas del estudiante con las del profesor, ponderadas por la confianza de clasificación del profesor
  6. La pérdida de destilación se combina con las pérdidas estándar utilizando el peso 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

Soporte de tareas#

La implementación de la destilación extrae características de las tres capas del cuello que alimentan la cabeza de la familia Detect del modelo. Debido a que las cabezas de segment, pose y obb heredan de la misma arquitectura de Detect, la destilación es técnicamente compatible también con esas tareas.

Advertencia

Solo detect ha sido comparado y verificado experimentalmente. Puedes ejecutar la destilación para segment, pose u obb, pero las mejoras de precisión para esas tareas aún no han sido validadas.

Destilación de conocimientos para otras tareas
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")

Entrenamiento#

Entrenamiento básico#

El entrenamiento con destilación es idéntico al entrenamiento estándar. Proporciona la ruta de distill_model para habilitarlo:

Entrenamiento con destilación de conocimientos
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")

Ajuste del peso de la pérdida de destilación#

El parámetro dis (predeterminado: 6.0) controla la contribución de la pérdida de destilación:

Peso de destilación personalizado
from ultralytics import YOLO

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

Reanudación del entrenamiento de destilación#

El entrenamiento por destilación admite la reanudación desde puntos de control. El modelo del profesor se reconstruye automáticamente a partir de la ruta de distill_model:

Reanudar el entrenamiento de destilación
from ultralytics import YOLO

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

Salida del entrenamiento#

Cuando la destilación está habilitada, aparece una columna adicional dis_loss en los registros de entrenamiento:

      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

El modelo exportado contiene solo los pesos del estudiante: el tamaño del archivo y la velocidad de inferencia coinciden con un modelo estudiante entrenado normalmente.

FAQ#

    • Verifica que el profesor y el estudiante sean de la misma generación de YOLO
    • Confirma que la ruta de distill_model es correcta y que el archivo se carga
    • Prueba a aumentar dis si el valor de la pérdida es muy pequeño
    • Asegúrate de que el modelo profesor esté entrenado con el mismo conjunto de datos
  • Añade el parámetro distill_model; todo lo demás funciona de manera idéntica. Se calcula una pérdida de destilación adicional durante el entrenamiento, pero el modelo guardado es un modelo YOLO estándar sin coste adicional.

  • Sí. Espera un entrenamiento 1.2-1.5x más lento y ~1.1x más memoria de GPU porque el modelo del profesor ejecuta la inferencia en cada lote. El profesor se ejecuta en el modo eval sin gradientes, manteniendo el consumo bajo control. Utiliza amp=True para reducir el impacto.

  • La destilación de conocimientos funciona con tareas de detect, segment, pose y obb porque destila las características de las tres capas del cuello que alimentan a la cabeza de la familia Detect. Las tareas de classify y semantic no son compatibles.

    Solo detect ha sido verificado experimentalmente para mejorar la precisión. Segment, pose y obb son técnicamente compatibles pero aún no han sido evaluados.

    El profesor y el estudiante deben pertenecer a la misma familia YOLO (por ejemplo, YOLOv8, YOLO11 o YOLO26). La destilación entre familias (por ejemplo, profesor YOLO11 con estudiante YOLO26) no es compatible.

Comentarios