Link to this sectionDestilação de Conhecimento#
Link to this sectionInício rápido#
Treina um modelo aluno menor 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")Link to this sectionO que é Destilação de Conhecimento?#
Destilação de conhecimento transfere o conhecimento de um modelo professor grande e preciso para um modelo aluno menor. O aluno aprende a imitar as representações internas de características do professor, frequentemente alcançando uma precisão melhor do que o treinamento do zero.
Usa a destilação quando:
- Precisas de um modelo mais pequeno e rápido para implementação
- Tens um modelo professor de alta precisão treinado nos mesmos dados
- Queres uma precisão melhor do que a que o treino padrão proporciona
A destilação de conhecimento está implementada para tarefas de detect, segment, pose e obb. Apenas a tarefa detect foi verificada experimentalmente quanto a melhorias de precisão até ao momento.
Link to this sectionDesempenho#
A destilação de conhecimento melhora o mAP do aluno em toda a família YOLO26 no COCO, sem custo adicional de inferência. A tabela abaixo compara os modelos YOLO26 padrão (linha de base) com os mesmos modelos treinados com destilação a partir do seu professor recomendado.
| Modelo | tamanho (pixels) | mAPval 50-95 linha de base | mAPval 50-95 destilado | mAPval 50-95 (e2e) linha de 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 |
- Os valores de mAPval são para modelo único em escala única no conjunto de dados COCO val2017.
Reproduz comyolo val detect data=coco.yaml device=0 - Os valores e2e utilizam o caminho de inferência padrão sem NMS; os valores não e2e utilizam o pós-processamento NMS tradicional (
end2end=False). Consulta End-to-End Detection para detalhes.
Link to this sectionPré-requisitos#
Antes de começares, garante que cumpres os seguintes requisitos:
- Modelo Professor Treinado: Um modelo professor pré-treinado de alta precisão da mesma família YOLO que o modelo aluno (por exemplo, YOLO26).
- Conjunto de Dados e Tarefa Correspondentes: Tanto o modelo professor como o aluno devem usar a mesma configuração exata de conjunto de dados e tarefa.
- Recursos de GPU: Memória de GPU (VRAM) suficiente para carregar e executar ambos os modelos simultaneamente durante o treinamento (consulta as FAQ para a sobrecarga típica de VRAM).
Link to this sectionPares 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.
Link to this sectionParâmetros Principais#
| Parâmetro | Tipo | Predefinição | Descrição |
|---|---|---|---|
distill_model | str | None | Caminho para o ficheiro do modelo professor (por exemplo, yolo26x.pt). Definir isto ativa a destilação de conhecimento. |
dis | float | 6.0 | Peso da perda de destilação. Controla o quanto a perda de destilação contribui para a perda total de treinamento. |
Link to this sectionComo Funciona#
- O modelo professor permanece congelado em modo
evale executa a inferência em cada lote - O modelo aluno treina com perdas de tarefa padrão mais orientação de destilação
- As características são extraídas de ambos os modelos nas três camadas do pescoço (neck) que alimentam a cabeça da família Detect
- Uma rede projetora (MLP leve) alinha as dimensões das características do aluno para corresponder às do professor
- Uma perda L2 ponderada pela pontuação compara as características projetadas do aluno com as 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] --> 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 sectionSuporte de Tarefas#
A implementação da destilação extrai características das três camadas do pescoço que alimentam a cabeça da família Detect do modelo. Como as cabeças de segment, pose e obb herdam a mesma arquitetura Detect, a destilação é tecnicamente compatível com essas tarefas também.
Apenas a tarefa detect foi testada e verificada experimentalmente. Podes executar a destilação para segment, pose ou obb, mas as melhorias de precisão para essas 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")Link to this sectionTreinamento#
Link to this sectionTreinamento Básico#
O treinamento com destilação é idêntico ao treinamento padrão. Fornece o caminho distill_model para o ativar:
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 sectionAjustar o Peso da Perda de Destilação#
O parâmetro dis (padrã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)Link to this sectionRetomar o Treinamento com Destilação#
O treinamento com destilação suporta a retomada a partir de pontos de verificação. O modelo professor é reconstruído automaticamente a partir do caminho distill_model:
from ultralytics import YOLO
student = YOLO("runs/detect/train/weights/last.pt")
results = student.train(resume=True)Link to this sectionSaída do Treinamento#
Quando a destilação está ativada, uma coluna adicional dis_loss aparece nos registos de treinamento:
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 640O modelo exportado contém apenas os pesos do aluno — o tamanho do ficheiro e a velocidade de inferência correspondem a um modelo aluno treinado normalmente.
Link to this sectionFAQ#
Link to this sectionPor que a minha perda de destilação não está a diminuir?#
- Verifica se o professor e o aluno são da mesma geração YOLO
- Confirma se o caminho
distill_modelestá correto e se o ficheiro carrega - Tenta aumentar
disse o valor da perda for muito pequeno - Garante que o modelo professor foi treinado no mesmo conjunto de dados
Link to this sectionComo é que a destilação difere do treinamento padrão?#
Adiciona o parâmetro distill_model — tudo o resto funciona de forma idêntica. Uma perda de destilação extra é calculada durante o treino, mas o modelo guardado é um modelo YOLO padrão sem sobrecarga.
Link to this sectionA destilação de conhecimento abranda o treinamento?#
Sim. Espera um treinamento 1.2-1.5x mais lento e cerca de 1.1x mais memória de GPU porque o modelo professor executa a inferência em cada lote. O professor corre em modo eval sem gradientes, mantendo a sobrecarga gerível. Usa amp=True para reduzir o impacto.
Link to this sectionQuais tarefas e modelos são suportados?#
A destilação de conhecimento funciona com tarefas de detect, segment, pose e obb porque destila características das três camadas do pescoço que alimentam a cabeça da família Detect. As tarefas de classify e semantic não são suportadas.
Apenas a tarefa detect foi verificada experimentalmente quanto a melhorias de precisão. Segment, pose e obb são tecnicamente compatíveis, mas ainda não foram avaliados.
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 é suportada.