Ultralytics YOLO27:

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:

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

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

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

Modelotamanho
(pixels)
mAPval
50-95

referência
mAPval
50-95

destilado
mAPval
50-95 (e2e)

referência
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 correspondem à avaliação de escala única e modelo único no conjunto de dados COCO val2017.
    Reproduz uma linha destilada com yolo val detect model=yolo26n-distill.pt data=coco.yaml device=0; adiciona nms=False para 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 .pt da 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.
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âmetroTipoPadrãoDescrição
distill_modelstrNoneCaminho para o ficheiro do modelo professor (por exemplo, yolo26x.pt). Definir este parâmetro ativa a destilação de conhecimento.
disfloat6.0Peso da perda de destilação. Controla a contribuição da perda de destilação para a perda total do treino.

Como funciona#

  1. O modelo professor permanece congelado no modo eval e executa inferência em cada lote
  2. O modelo aluno é treinado com perdas padrão da tarefa e orientação da destilação
  3. São extraídas características de ambos os modelos nas três camadas neck que alimentam a cabeça da família Detect
  4. Um projetor com duas convoluções 1×1 com ReLU alinha cada mapa de características do aluno com os canais do professor
  5. 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
  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 + 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 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.

Aviso

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.

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#

Treino básico#

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

Treino com destilação de conhecimento
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:

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 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:

Retomar o treino com destilaçã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        640

O 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_model está correto e que 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. 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.

Comentários