YOLO Vision 2026:

Destilação de Conhecimento#

Início rápido#

Treina um modelo de estudante menor com a orientação de um modelo de professor maior, adicionando o argumento distill_model:

Exemplo
from ultralytics import YOLO

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

O que é Destilação de Conhecimento?#

A Knowledge distillation transfere conhecimento de um teacher model grande e preciso para um student model menor. O estudante aprende a imitar as representações de características internas do professor, obtendo frequentemente melhor precisão do que treinando do zero.

Knowledge distillation workflow image

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
Nota

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.

Desempenho#

A destilação de conhecimento melhora o mAP do estudante em toda a família YOLO26 no COCO, sem custo de inferência adicional. A tabela abaixo compara os modelos YOLO26 padrão (linha de base) com os mesmos modelos treinados com destilação do seu professor recomendado.

Modelotamanho
(pixels)
mAPval
50-95

linha de base
mAPval
50-95

destilado
mAPval
50-95 (e2e)

linha de 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
  • Os valores de mAPval são para modelo único em escala única no conjunto de dados COCO val2017.
    Reproduza com yolo val detect data=coco.yaml device=0
  • Os valores e2e usam o caminho de inferência padrão sem NMS; valores não e2e usam o pós-processamento NMS tradicional (end2end=False). Consulte End-to-End Detection para obter detalhes.

Pré-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 GPU suficiente (VRAM) para carregar e executar ambos os modelos simultaneamente durante o treinamento (consulte o FAQ para sobrecarga de VRAM típica).

Pares de Modelos Recomendados#

AlunoProfessor Recomendado
yolo26n.ptyolo26s.pt
yolo26s.ptyolo26m.pt
yolo26m.ptyolo26x.pt
yolo26l.ptyolo26x.pt

A destilação entre famílias (por exemplo, professor YOLO11 com aluno YOLO26) não é suportada.

Parâmetros Principais#

ParâmetroTipoPredefiniçãoDescrição
distill_modelstrNoneCaminho para o arquivo do modelo de professor (por exemplo, yolo26x.pt). Definir isso ativa a destilação de conhecimento.
disfloat6.0Peso da perda de destilação. Controla o quanto a perda de destilação contribui para a perda total de treinamento.

Como Funciona#

  1. O teacher model permanece congelado no modo eval e executa a inferência em cada lote
  2. O modelo aluno treina com perdas de tarefa padrão mais orientação de destilação
  3. 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
  4. Uma rede projetora (MLP leve) alinha as dimensões das características do aluno para corresponder às do professor
  5. 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
  6. 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 + 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

Suporte de Tarefas#

A implementação da destilação extrai características das três camadas de pescoço que alimentam a cabeça da família Detect do modelo. Como as cabeças segment, pose e obb herdam da mesma arquitetura Detect, a destilação também é tecnicamente compatível com essas tarefas.

Aviso

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.

Destilação de Conhecimento para Outras Tarefas
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#

Treinamento Básico#

O treinamento com destilação é idêntico ao treinamento padrão. Fornece o caminho distill_model para ativá-lo:

Treinamento com Destilação de Conhecimento
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")

Ajustar o Peso da Perda de Destilação#

O parâmetro dis (padrão: 6.0) controla a contribuição da perda de destilação:

Peso de Destilação Personalizado
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 Treinamento com Destilação#

O treinamento de destilação suporta a retomada a partir de pontos de verificação. O modelo de professor é reconstruído automaticamente a partir do caminho distill_model:

Retomar o Treinamento com Destilação
from ultralytics import YOLO

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

Saída do Treinamento#

Quando a destilação está ativada, uma coluna adicional dis_loss aparece nos registros 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        640

O 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.

FAQ#

    • Verifica se o professor e o aluno são da mesma geração YOLO
    • Confirma que o caminho distill_model está correto e que o arquivo é carregado
    • Tenta aumentar dis se o valor da perda for muito pequeno
    • Garante que o modelo professor foi treinado no mesmo conjunto de dados
  • Adiciona o parâmetro distill_model—tudo o resto funciona de forma idêntica. Uma perda de destilação extra é computada durante o treinamento, mas o modelo salvo é um modelo YOLO padrão sem sobrecarga.

  • Sim. Espera um treinamento 1.2-1.5x mais lento e ~1.1x mais memória GPU porque o modelo de professor executa inferência em cada lote. O professor é executado no modo eval sem gradientes, mantendo a sobrecarga gerenciável. Usa amp=True para reduzir o impacto.

  • 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.

Comentários