Link to this sectionDestilación de conocimiento (Knowledge Distillation)#
Link to this sectionInicio 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:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt")Link to this section¿Qué es la destilación de conocimientos?#
La destilación de conocimientos transfiere los conocimientos de un modelo profesor grande y preciso a un modelo estudiante más pequeño. El estudiante aprende a imitar las representaciones internas de las características del profesor, logrando a menudo una mejor precisión que entrenando desde cero.
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
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.
Link to this sectionRendimiento#
La destilación de conocimientos mejora el mAP del estudiante en toda la familia YOLO26 en COCO, sin coste adicional de inferencia. La siguiente tabla compara los modelos estándar YOLO26 (línea base) frente a los mismos modelos entrenados con destilación de su profesor recomendado.
| Modelo | tamañ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-distill | 640 | 40.9 | 41.5 | 40.1 | 40.9 |
| YOLO26s-distill | 640 | 48.6 | 49.2 | 47.8 | 48.6 |
| YOLO26m-distill | 640 | 53.1 | 53.9 | 52.5 | 53.3 |
| YOLO26l-distill | 640 | 55.0 | 56.0 | 54.4 | 55.5 |
| YOLO26x-distill | 640 | 57.5 | 57.9 | 56.9 | 57.4 |
- Los valores mAPval son para modelo único y escala única en el conjunto de datos COCO val2017.
Reproduce conyolo val detect data=coco.yaml device=0 - Los valores e2e utilizan la ruta de inferencia sin NMS por defecto; los valores que no son e2e utilizan el post-procesamiento tradicional NMS (
end2end=False). Consulta End-to-End Detection para más detalles.
Link to this sectionRequisitos 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 conocer el consumo típico de VRAM).
Link to this sectionPares de modelos recomendados#
| Estudiante | Profesor recomendado |
|---|---|
yolo26n.pt | yolo26s.pt |
yolo26s.pt | yolo26m.pt |
yolo26m.pt | yolo26x.pt |
yolo26l.pt | yolo26x.pt |
La destilación entre familias (por ejemplo, profesor YOLO11 con estudiante YOLO26) no es compatible.
Link to this sectionParámetros clave#
| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
distill_model | str | None | Ruta al archivo del modelo profesor (por ejemplo, yolo26x.pt). Establecer esto activa la destilación de conocimientos. |
dis | float | 6.0 | Peso de la pérdida de destilación. Controla cuánto contribuye la pérdida de destilación a la pérdida total del entrenamiento. |
Link to this sectionCómo funciona#
- El modelo profesor permanece congelado en modo
evaly ejecuta la inferencia en cada lote - El modelo estudiante se entrena con las pérdidas de tarea estándar más la guía de destilación
- Las características se extraen de ambos modelos en las tres capas del cuello que alimentan a la cabeza de la familia Detect
- Una red proyectora (MLP ligero) alinea las dimensiones de las características del estudiante para que coincidan con las del profesor
- 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
- La pérdida de destilación se combina con las pérdidas estándar usando el peso
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 sectionSoporte 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 segment, pose y obb heredan de la misma arquitectura Detect, la destilación es técnicamente compatible con esas tareas también.
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.
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 sectionEntrenamiento#
Link to this sectionEntrenamiento básico#
El entrenamiento con destilación es idéntico al entrenamiento estándar. Proporciona la ruta distill_model para activarlo:
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 sectionAjuste del peso de la pérdida de destilación#
El parámetro dis (por defecto: 6.0) controla la contribución de la pérdida de destilación:
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 sectionReanudación del entrenamiento de destilación#
El entrenamiento de destilación admite la reanudación desde puntos de control. El modelo profesor se reconstruye automáticamente a partir de la ruta distill_model:
from ultralytics import YOLO
student = YOLO("runs/detect/train/weights/last.pt")
results = student.train(resume=True)Link to this sectionSalida 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 dfl_loss dis_loss Instances Size
1/80 46.2G 1.566 5.404 0.003249 6.658 231 640El 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.
Link to this sectionFAQ#
Link to this section¿Por qué mi pérdida de destilación no disminuye?#
- Verifica que el profesor y el estudiante sean de la misma generación de YOLO
- Confirma que la ruta
distill_modeles correcta y que el archivo se carga - Intenta aumentar
dissi el valor de pérdida es muy pequeño - Asegúrate de que el modelo profesor esté entrenado con el mismo conjunto de datos
Link to this section¿En qué se diferencia la destilación del entrenamiento estándar?#
Añade el parámetro distill_model: todo lo demás funciona igual. Durante el entrenamiento se calcula una pérdida de destilación extra, pero el modelo guardado es un modelo YOLO estándar sin sobrecarga adicional.
Link to this section¿Ralentiza la destilación de conocimientos el entrenamiento?#
Sí. Espera un entrenamiento entre 1.2 y 1.5 veces más lento y aproximadamente 1.1 veces más memoria de GPU porque el modelo profesor ejecuta la inferencia en cada lote. El profesor funciona en modo eval sin gradientes, manteniendo la sobrecarga manejable. Usa amp=True para reducir el impacto.
Link to this section¿Qué tareas y modelos son compatibles?#
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.