YOLO Vision 2026:

Chưng cất tri thức (Knowledge Distillation)#

Bắt đầu nhanh#

Huấn luyện một student model nhỏ hơn với sự hướng dẫn từ một teacher model lớn hơn bằng cách thêm đối số distill_model:

Ví dụ
from ultralytics import YOLO

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

Knowledge distillation là gì?#

Knowledge distillation truyền tải kiến thức từ một teacher model lớn và chính xác sang một student model nhỏ hơn. Student học cách mô phỏng các biểu diễn đặc trưng bên trong của teacher, thường đạt được độ chính xác tốt hơn so với việc huấn luyện từ đầu.

Knowledge distillation workflow image

Sử dụng distillation khi:

  • Bạn cần một model nhỏ hơn, nhanh hơn để triển khai
  • Bạn có một teacher model độ chính xác cao được huấn luyện trên cùng dữ liệu
  • Bạn muốn độ chính xác tốt hơn so với huấn luyện tiêu chuẩn
Lưu ý

Knowledge distillation được triển khai cho các tác vụ detect, segment, pose, và obb. Hiện tại chỉ có detect đã được kiểm chứng thực nghiệm về việc cải thiện độ chính xác.

Hiệu suất#

Knowledge distillation cải thiện student mAP trên toàn bộ dòng YOLO26 trên COCO, không có chi phí suy luận bổ sung. Bảng dưới đây so sánh các mô hình YOLO26 tiêu chuẩn (baseline) với cùng các mô hình được huấn luyện bằng distillation từ teacher được khuyến nghị của chúng.

Mô hìnhkích thước
(pixel)
mAPval
50-95

baseline
mAPval
50-95

distilled
mAPval
50-95 (e2e)

baseline
mAPval
50-95 (e2e)

distilled
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
  • Các giá trị mAPval dành cho mô hình đơn quy mô đơn trên tập dữ liệu COCO val2017.
    Tái tạo bằng yolo val detect data=coco.yaml device=0
  • Các giá trị e2e sử dụng đường dẫn suy luận không có NMS mặc định; các giá trị phi e2e sử dụng quá trình hậu xử lý NMS truyền thống (end2end=False). Xem End-to-End Detection để biết chi tiết.

Điều kiện tiên quyết#

Trước khi bắt đầu, hãy đảm bảo bạn đáp ứng các yêu cầu sau:

  • Trained Teacher Model: Một teacher model đã được huấn luyện trước, độ chính xác cao từ cùng dòng họ YOLO với student model (ví dụ: YOLO26).
  • Matching Dataset and Task: Cả teacher và student model phải sử dụng chính xác cùng cấu hình tập dữ liệu và tác vụ.
  • Tài nguyên GPU: Đủ bộ nhớ GPU (VRAM) để tải và chạy đồng thời cả hai mô hình trong quá trình huấn luyện (tham khảo FAQ về mức sử dụng VRAM điển hình).

Các cặp Model khuyến nghị#

StudentTeacher khuyến nghị
yolo26n.ptyolo26s.pt
yolo26s.ptyolo26m.pt
yolo26m.ptyolo26x.pt
yolo26l.ptyolo26x.pt

Distillation chéo dòng họ (ví dụ: teacher YOLO11 với student YOLO26) không được hỗ trợ.

Các tham số chính#

Tham sốLoạiMặc địnhMô tả
distill_modelstrNoneĐường dẫn đến tệp teacher model (ví dụ: yolo26x.pt). Việc thiết lập này sẽ bật knowledge distillation.
disfloat6.0Trọng số loss của distillation. Kiểm soát mức độ đóng góp của distillation loss vào tổng loss huấn luyện.

Cách thức hoạt động#

  1. Teacher model vẫn đóng băng ở chế độ eval và chạy suy luận trên mỗi batch
  2. Student model huấn luyện với các task loss tiêu chuẩn cộng với sự hướng dẫn từ distillation
  3. Các đặc trưng được trích xuất từ cả hai model tại ba tầng neck cung cấp dữ liệu cho đầu ra Detect-family
  4. Một projector network (MLP nhẹ) căn chỉnh kích thước đặc trưng của student để khớp với teacher
  5. Một score-weighted L2 loss so sánh các đặc trưng đã project của student với các đặc trưng của teacher, được trọng số hóa theo độ tin cậy phân loại của teacher
  6. Distillation loss kết hợp với các hàm mất mát tiêu chuẩn bằng trọng số 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

Hỗ trợ tác vụ#

Việc triển khai distillation trích xuất các đặc trưng từ ba tầng neck cấp liệu cho head thuộc họ Detect của mô hình. Do các head segment, poseobb kế thừa từ cùng kiến trúc Detect, distillation cũng tương thích về mặt kỹ thuật với các tác vụ đó.

Cảnh báo

Chỉ có detect là đã được benchmark và kiểm chứng thực nghiệm. Bạn có thể chạy distillation cho segment, pose, hoặc obb, nhưng những cải thiện độ chính xác cho các tác vụ đó vẫn chưa được xác nhận.

Knowledge Distillation cho các tác vụ khác
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")

Huấn luyện#

Huấn luyện cơ bản#

Huấn luyện với distillation giống hệt như huấn luyện tiêu chuẩn. Cung cấp đường dẫn distill_model để bật tính năng này:

Huấn luyện Knowledge Distillation
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")

Điều chỉnh trọng số Distillation Loss#

Tham số dis (mặc định: 6.0) kiểm soát đóng góp của distillation loss:

Trọng số Distillation tùy chỉnh
from ultralytics import YOLO

student = YOLO("yolo26n.pt")
results = student.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt", dis=10.0)

Tiếp tục huấn luyện Distillation#

Huấn luyện distillation hỗ trợ tiếp tục từ các checkpoint. Teacher model được xây dựng lại tự động từ đường dẫn distill_model:

Tiếp tục huấn luyện Distillation
from ultralytics import YOLO

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

Kết quả huấn luyện#

Khi distillation được bật, một cột dis_loss bổ sung xuất hiện trong nhật ký huấn luyện:

      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

Model đã xuất chỉ chứa trọng số student—kích thước tệp và tốc độ suy luận khớp với một student model được huấn luyện bình thường.

Câu hỏi thường gặp#

    • Xác minh teacher và student thuộc cùng thế hệ YOLO
    • Xác nhận đường dẫn distill_model là chính xác và tệp tải thành công
    • Thử tăng dis nếu giá trị loss rất nhỏ
    • Đảm bảo teacher model được huấn luyện trên cùng tập dữ liệu
  • Thêm tham số distill_model—mọi thứ khác hoạt động hoàn toàn giống nhau. Một distillation loss bổ sung được tính toán trong quá trình huấn luyện, nhưng mô hình được lưu là một mô hình YOLO tiêu chuẩn không có thêm chi phí phát sinh.

  • Có. Dự kiến thời gian huấn luyện chậm hơn 1,2-1,5 lần và sử dụng nhiều bộ nhớ GPU hơn ~1,1 lần vì teacher model chạy suy luận trên mỗi batch. Teacher chạy ở chế độ eval không có gradient, giúp kiểm soát chi phí tài nguyên ở mức hợp lý. Sử dụng amp=True để giảm thiểu tác động.

  • Knowledge distillation hoạt động với các tác vụ detect, segment, pose, và obb vì nó chưng cất các đặc trưng từ ba tầng neck cung cấp dữ liệu cho đầu ra Detect-family. Các tác vụ Classifysemantic không được hỗ trợ.

    Chỉ có detect là đã được kiểm chứng thực nghiệm về cải thiện độ chính xác. Segment, pose, và obb về mặt kỹ thuật là tương thích nhưng chưa được benchmark.

    Teacher và student phải thuộc cùng dòng họ YOLO (ví dụ: YOLOv8, YOLO11, hoặc YOLO26). Distillation chéo dòng họ (ví dụ: teacher YOLO11 với student YOLO26) không được hỗ trợ.

Bình luận