Destilação de conhecimento#
Início rápido#
Treina um modelo aluno mais pequeno com a orientação de um modelo professor maior, adicionando o argumento distill_model:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt")O que é a destilação de conhecimento?#
A destilação de conhecimento transfere conhecimento de um modelo professor grande e preciso para um modelo aluno mais pequeno. O aluno aprende a imitar as representações internas de características do professor, alcançando muitas vezes uma exatidão superior à do treino desde o início.

Usa a destilação quando:
- Precisas de um modelo mais pequeno e rápido para implementação
- Tens um modelo professor com elevada exatidão, treinado com os mesmos dados
- Queres obter uma exatidão superior à do treino normal
A destilação de conhecimento está implementada para as tarefas detect, segment, pose e obb. Por enquanto, apenas detect foi verificada experimentalmente quanto a melhorias de exatidão.
Desempenho#
A destilação de conhecimento melhora o mAP do modelo aluno em toda a família YOLO26 no COCO, sem custos adicionais de inferência. A tabela abaixo compara os modelos YOLO26 padrão (referência) com os mesmos modelos treinados por destilação a partir do respetivo professor recomendado.
| Modelo | tamanho (pixels) | mAPval 50-95 referência | mAPval 50-95 destilado | mAPval 50-95 (e2e) referência | 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 |
- Os valores de mAPval correspondem à avaliação de escala única e modelo único no conjunto de dados COCO val2017.
Reproduz uma linha destilada comyolo val detect model=yolo26n-distill.pt data=coco.yaml device=0; adicionanms=Falsepara a coluna e2e. - Os valores e2e usam o percurso de inferência sem NMS (
nms=False); os valores não e2e usam o pós-processamento NMS padrão (nms=None). Consulta Deteção de ponta a ponta para mais detalhes.
Pré-requisitos#
Antes de começares, certifica-te de que cumpres os seguintes requisitos:
- Modelo professor treinado: um ponto de verificação
.ptda mesma família YOLO que o aluno. - Tarefa correspondente: usa um professor para a mesma tarefa do aluno e treina-o com dados relevantes.
- Recursos de GPU: memória suficiente para alojar ambos os modelos; o professor apenas executa a passagem para a frente, sem gradientes nem estado do otimizador.
Pares de modelos recomendados#
| Aluno | Professor recomendado |
|---|---|
yolo26n.pt | yolo26s.pt |
yolo26s.pt | yolo26m.pt |
yolo26m.pt | yolo26x.pt |
yolo26l.pt | yolo26x.pt |
A destilação entre famílias (por exemplo, professor YOLO11 com aluno YOLO26) não é suportada.
Parâmetros principais#
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
distill_model | str | None | Caminho para o ficheiro do modelo professor (por exemplo, yolo26x.pt). Definir este parâmetro ativa a destilação de conhecimento. |
dis | float | 6.0 | Peso da perda de destilação. Controla a contribuição da perda de destilação para a perda total do treino. |
Como funciona#
- O modelo professor permanece congelado no modo
evale executa inferência em cada lote - O modelo aluno é treinado com perdas padrão da tarefa e orientação da destilação
- São extraídas características de ambos os modelos nas três camadas neck que alimentam a cabeça da família Detect
- Um projetor com duas convoluções 1×1 com ReLU alinha cada mapa de características do aluno com os canais do professor
- Uma perda L2 ponderada pela pontuação compara as características projetadas do aluno com as características do professor, ponderadas pela confiança de classificação do professor
- A perda de destilação combina-se com as perdas padrão usando o 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:#fffSuporte de tarefas#
A implementação da destilação extrai características das três camadas neck que alimentam a cabeça da família Detect do modelo. Como as cabeças segment, pose e obb herdam a mesma arquitetura Detect, a destilação também é tecnicamente compatível com essas tarefas.
A classificação, a segmentação semântica, a estimativa de profundidade e o RT-DETR não usam uma cabeça compatível da família Detect e não são suportados.
Apenas detect foi avaliada e verificada experimentalmente. Podes executar a destilação para segment, pose ou obb, mas as melhorias de exatidão nessas tarefas ainda não foram 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")Treinamento#
Treino básico#
O treino com destilação é idêntico ao treino padrão. Fornece o caminho distill_model para ativá-lo:
from ultralytics import YOLO
# Carrega um modelo aluno
student = YOLO("yolo26m.pt")
# Treina com destilação de conhecimento a partir de um modelo professor maior
results = student.train(data="coco8.yaml", epochs=100, distill_model="yolo26x.pt")Ajustar o peso da perda de destilação#
O parâmetro dis (predefinição: 6.0) controla a contribuição da perda de destilação:
from ultralytics import YOLO
student = YOLO("yolo26n.pt")
results = student.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt", dis=10.0)Retomar o treino com destilação#
O treino com destilação permite retomar a partir de pontos de verificação. O modelo professor é reconstruído automaticamente a partir do caminho distill_model registado no ponto de verificação:
from ultralytics import YOLO
student = YOLO("runs/detect/train/weights/last.pt")
results = student.train(resume=True)Resultado do treino#
Quando a destilação está ativada, surge uma coluna adicional dis_loss nos registos de treino:
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 640O modelo exportado contém apenas os pesos do aluno — o tamanho do ficheiro e a velocidade de inferência correspondem aos de um modelo aluno treinado normalmente.
Perguntas frequentes#
- Verifica se o professor e o aluno pertencem à mesma geração YOLO
- Confirma que o caminho
distill_modelestá correto e que o ficheiro é carregado - Experimenta aumentar
disse o valor da perda for muito pequeno - Certifica-te de que o modelo professor foi treinado com o mesmo conjunto de dados
Adiciona o parâmetro
distill_model— tudo o resto funciona da mesma forma. Durante o treino, calcula-se uma perda de destilação adicional, mas o modelo guardado é um modelo YOLO padrão, sem sobrecarga.Sim. O professor acrescenta uma passagem para a frente em cada lote, pelo que a sobrecarga de tempo e memória depende do par professor/aluno. O professor funciona no modo
eval, sem gradientes nem estado do otimizador.A destilação de conhecimento funciona com as tarefas detect, segment, pose e obb, porque destila características das três camadas neck que alimentam a cabeça da família Detect. Classify, semantic, depth e RT-DETR não são suportados.
Apenas detect teve melhorias de precisão verificadas experimentalmente. Segment, pose e obb são tecnicamente compatíveis, mas ainda não foram avaliados em benchmarks.
O professor e o aluno devem pertencer à mesma família YOLO (por exemplo, YOLOv8, YOLO11 ou YOLO26). A destilação entre famílias (por exemplo, um professor YOLO11 com um aluno YOLO26) não é compatível.