YOLO Vision 2026:

Destilação de Conhecimento#

Início rápido#

Treina um modelo estudante mais pequeno com orientação de um modelo 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 é a destilação de conhecimento?#

A destilação de conhecimento transfere conhecimento de um modelo professor grande e preciso para um modelo estudante mais pequeno. O estudante aprende a imitar as representações internas de características do professor, obtendo frequentemente uma precisão superior à do treino desde o início.

Imagem do fluxo de trabalho da destilação de conhecimento

Utiliza a destilação quando:

  • Precisas de um modelo mais pequeno e rápido para implementação
  • Tens um modelo professor de elevada precisão treinado com os mesmos dados
  • Queres uma precisão superior à proporcionada pelo treino padrão
Nota

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 precisão.

Desempenho#

A destilação de conhecimento melhora o mAP do estudante em toda a família YOLO26 no COCO, sem custos adicionais 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 respetivo professor recomendado.

Modelotamanho
(píxeis)
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
  • 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.

Pré-requisitos#

Antes de começares, certifica-te de que cumpres os seguintes requisitos:

  • Modelo professor treinado: um checkpoint .pt da mesma família YOLO que o estudante.
  • Tarefa correspondente: utiliza um professor para a mesma tarefa do estudante e treina-o com dados relevantes.
  • Recursos de GPU: memória suficiente para conter ambos os modelos; o professor executa apenas a propagação para a frente, sem gradientes nem estado do otimizador.

Pares de modelos recomendados#

EstudanteProfessor recomendado
yolo26n.ptyolo26s.pt
yolo26s.ptyolo26m.pt
yolo26m.ptyolo26x.pt
yolo26l.ptyolo26x.pt

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

Parâmetros principais#

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

Como funciona#

  1. O modelo professor permanece congelado no modo eval e executa a inferência em cada lote
  2. O modelo estudante é treinado com perdas de tarefa padrão e orientação da destilação
  3. As características são extraídas de ambos os modelos nas três camadas neck que alimentam a cabeça da família Detect
  4. Um projetor de duas convoluções 1×1 com ReLU alinha cada mapa de características do estudante com os canais do professor
  5. Uma perda L2 ponderada pela pontuação compara as características projetadas do estudante com as características do professor, ponderadas pela confiança de classificação do professor
  6. A perda de destilação combina-se com as perdas padrão utilizando 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:#fff

Suporte 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 da 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 utilizam uma cabeça da família Detect compatível e não são suportados.

Aviso

Apenas detect foi avaliada 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")

Treino#

Treino básico#

O treino com destilação é idêntico ao treino padrão. Indica o caminho distill_model para a ativar:

Treino 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 (predefiniçã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 treino com destilação#

O treino com destilação suporta a retoma a partir de checkpoints. O modelo professor é reconstruído automaticamente a partir do caminho distill_model registado no checkpoint:

Retomar o treino com destilação
from ultralytics import YOLO

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

Saída do treino#

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

O modelo exportado contém apenas os pesos do estudante — o tamanho do ficheiro e a velocidade de inferência correspondem aos de um modelo estudante treinado normalmente.

Perguntas frequentes#

    • Verifica se o professor e o estudante pertencem à mesma geração YOLO
    • Confirma se o caminho distill_model está correto e se o ficheiro é carregado
    • Experimenta aumentar dis se 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. Uma perda de destilação adicional é calculada durante o treino, mas o modelo guardado é um modelo YOLO padrão sem sobrecarga.

  • Sim. O professor adiciona uma passagem para a frente em cada lote, pelo que o custo adicional de tempo e memória depende do par professor/estudante. O professor é executado 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 foi verificada experimentalmente quanto a melhorias de precisão. Segment, pose e obb são tecnicamente compatíveis, mas ainda não foram avaliadas.

    O professor e o estudante têm de pertencer à mesma família YOLO (por exemplo, YOLOv8, YOLO11 ou YOLO26). A destilação entre famílias (por exemplo, um professor YOLO11 com um estudante YOLO26) não é suportada.

Comentários