YOLO Vision 2026:

Destilación de conocimiento#

Inicio rápido#

Entrena un modelo estudiante más pequeño con la guía de un modelo 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 conocimiento?#

La destilación de conocimiento transfiere conocimiento de un modelo profesor grande y preciso a un modelo estudiante más pequeño. El estudiante aprende a imitar las representaciones internas de características del profesor y, a menudo, logra una precisión superior a la del entrenamiento desde cero.

Imagen del flujo de trabajo de la destilación de conocimiento

Usa la destilación cuando:

  • Necesites un modelo más pequeño y rápido para su implementación
  • Tengas un modelo profesor de alta precisión entrenado con los mismos datos
  • Quieras obtener una precisión superior a la que proporciona el entrenamiento estándar
Nota

La destilación de conocimiento está implementada para las tareas detect, segment, pose y obb. Por ahora, solo se ha verificado experimentalmente que detect mejora la precisión.

Rendimiento#

La destilación de conocimiento mejora el mAP del estudiante en toda la familia YOLO26 en COCO, sin añadir costes de inferencia. La tabla siguiente compara los modelos YOLO26 estándar (línea base) con los mismos modelos entrenados mediante destilación a partir 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
  • 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.

Requisitos previos#

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

  • Modelo profesor entrenado: un checkpoint .pt de la misma familia YOLO que el estudiante.
  • Tarea coincidente: usa un profesor para la misma tarea que el estudiante y entrénalo con datos relevantes.
  • Recursos de GPU: memoria suficiente para alojar ambos modelos; el profesor se ejecuta únicamente hacia delante, sin gradientes ni estado del optimizador.

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, un profesor YOLO11 con un estudiante YOLO26) no es compatible.

Parámetros clave#

ParámetroTipoPredeterminadoDescripción
distill_modelstrNoneRuta al archivo del modelo profesor (por ejemplo, yolo26x.pt). Al establecerla, se activa 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 de entrenamiento.

Cómo funciona#

  1. El modelo profesor 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. Se extraen características de ambos modelos en las tres capas neck que alimentan la cabeza de la familia Detect
  4. Un proyector de dos convoluciones 1×1 con ReLU alinea cada mapa de características del estudiante con los canales 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 + 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

Compatibilidad con tareas#

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

La clasificación, la segmentación semántica, la estimación de profundidad y RT-DETR no utilizan una cabeza compatible de la familia Detect y no son compatibles.

Advertencia

Solo detect se ha sometido a pruebas comparativas y se ha verificado experimentalmente. Puedes ejecutar la destilación para segment, pose u obb, pero las mejoras de precisión para esas tareas aún no están validadas.

Destilación de conocimiento 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 distill_model para activarlo:

Entrenamiento con destilación de conocimiento
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 (valor 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 con destilación#

El entrenamiento con destilación permite reanudar la ejecución desde checkpoints. El modelo profesor se reconstruye automáticamente a partir de la ruta distill_model registrada en el checkpoint:

Reanudar el entrenamiento con 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á activada, aparece una columna adicional dis_loss en los registros de entrenamiento:

      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

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

Preguntas frecuentes#

    • Verifica que el profesor y el estudiante pertenezcan a la misma generación de YOLO
    • Confirma que la ruta 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 se ha entrenado con el mismo conjunto de datos
  • Añade el parámetro distill_model; todo lo demás funciona de forma idéntica. Durante el entrenamiento se calcula una pérdida de destilación adicional, pero el modelo guardado es un modelo YOLO estándar sin sobrecoste.

  • Sí. El profesor añade una pasada hacia delante por cada lote, por lo que el sobrecoste de tiempo y memoria depende del par profesor/estudiante. El profesor se ejecuta en el modo eval, sin gradientes ni estado del optimizador.

  • La destilación de conocimiento funciona con las tareas detect, segment, pose y obb porque destila características de las tres capas neck que alimentan la cabeza de la familia Detect. Classify, semantic, depth y RT-DETR no son compatibles.

    Solo se ha verificado experimentalmente que detect mejora la precisión. Segment, pose y obb son técnicamente compatibles, pero aún no se han sometido a pruebas comparativas.

    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, un profesor YOLO11 con un estudiante YOLO26) no es compatible.

Comentarios