YOLO Vision 2026:

Chưng cất tri thức#

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 tham số distill_model:

Ví dụ
from ultralytics import YOLO

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

Chưng cất tri thức là gì?#

Chưng cất tri thức chuyển giao tri thức từ một teacher model lớn, có độ chính xác cao, sang một student model nhỏ hơn. Student model học cách bắt chước các biểu diễn đặc trưng nội tại của teacher model, thường đạt độ chính xác tốt hơn so với huấn luyện từ đầu.

Hình ảnh quy trình chưng cất tri thức

Sử dụng chưng cất 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 ý

Chưng cất tri thức được triển khai cho các tác vụ detect, segment, poseobb. Hiện tại, chỉ detect đã được xác minh thực nghiệm về cải thiện độ chính xác.

Hiệu năng#

Chưng cất tri thức cải thiện mAP của student trên toàn bộ dòng YOLO26 với COCO, mà không làm tăng chi phí suy luận. Bảng dưới đây so sánh các model YOLO26 tiêu chuẩn (baseline) với chính các model đó được huấn luyện bằng phương pháp chưng cất từ teacher model được khuyến nghị tương ứng.

Modelkích thước
(pixel)
mAPval
50-95

baseline
mAPval
50-95

đã chưng cất
mAPval
50-95 (e2e)

baseline
mAPval
50-95 (e2e)

đã chưng cất
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 tỷ lệ đơn trên tập dữ liệu COCO val2017.
    Tái tạo lại một hàng được chưng cất bằng yolo val detect model=yolo26n-distill.pt data=coco.yaml device=0; thêm nms=False cho cột e2e.
  • Các giá trị e2e sử dụng luồng suy luận không có NMS (nms=False); các giá trị phi e2e sử dụng quá trình hậu xử lý NMS mặc định (nms=None). 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:

  • Teacher model đã huấn luyện: một checkpoint .pt thuộc cùng dòng YOLO với student.
  • Tác vụ tương ứng: sử dụng teacher cho cùng tác vụ với student và huấn luyện teacher trên dữ liệu liên quan.
  • Tài nguyên GPU: đủ bộ nhớ để chứa cả hai model; teacher chỉ thực hiện forward mà không có gradient hoặc trạng thái optimizer.

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

StudentTeacher được khuyến nghị
yolo26n.ptyolo26s.pt
yolo26s.ptyolo26m.pt
yolo26m.ptyolo26x.pt
yolo26l.ptyolo26x.pt

Chưng cất xuyên dòng (ví dụ: teacher YOLO11 với student YOLO26) không được hỗ trợ.

Các tham số chính#

ParameterKiểuMặc địnhMô tả
distill_modelstrNoneĐường dẫn đến file model teacher (ví dụ: yolo26x.pt). Thiết lập tham số này sẽ bật chưng cất tri thức.
disfloat6.0Trọng số loss chưng cất. Kiểm soát mức độ đóng góp của loss chưng cất vào tổng loss huấn luyện.

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

  1. Teacher model được đóng băng trong chế độ eval và thực hiện suy luận trên mỗi batch
  2. Student model được huấn luyện với các loss tác vụ tiêu chuẩn cùng với hướng dẫn chưng cất
  3. Các đặc trưng được trích xuất từ cả hai model tại ba lớp neck cung cấp đầu vào cho head thuộc dòng Detect
  4. Một projector gồm hai phép tích chập 1×1 với ReLU căn chỉnh mỗi feature map của student với các channel của teacher
  5. Score-weighted L2 loss so sánh các đặc trưng của student sau phép chiếu với đặc trưng của teacher, được tính trọng số theo độ tin cậy phân loại của teacher
  6. Loss chưng cất được kết hợp với các loss 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 + 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

Hỗ trợ tác vụ#

Triển khai chưng cất trích xuất các đặc trưng từ ba lớp neck cung cấp đầu vào cho head thuộc dòng Detect của model. Vì các head segment, poseobb kế thừa cùng kiến trúc Detect, chưng cất về mặt kỹ thuật cũng tương thích với các tác vụ này.

Classification, semantic segmentation, depth estimation và RT-DETR không sử dụng head tương thích thuộc dòng Detect nên không được hỗ trợ.

Cảnh báo

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

Chưng cất tri thức 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")

Training#

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

Huấn luyện với chưng cất giống hệt 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 với chưng cất tri thức
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ố Loss chưng cất#

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

Trọng số chưng cất 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 với chưng cất#

Huấn luyện với chưng cất hỗ trợ tiếp tục từ checkpoint. Teacher model được tự động khởi tạo lại từ đường dẫn distill_model được ghi trong checkpoint:

Tiếp tục huấn luyện với chưng cất
from ultralytics import YOLO

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

Đầu ra huấn luyện#

Khi bật chưng cất, một cột dis_loss bổ sung sẽ xuất hiện trong log huấn luyện:

      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

Model đã xuất chỉ chứa trọng số của student—kích thước file và tốc độ suy luận tương đương với student được huấn luyện theo cách thông thường.

FAQ#

    • Xác minh teacher và student thuộc cùng một thế hệ YOLO
    • Xác nhận đường dẫn distill_model chính xác và file có thể được tải
    • 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 một tập dữ liệu
  • Thêm tham số distill_model—mọi thứ khác hoạt động giống hệt. Một loss chưng cất bổ sung được tính trong quá trình huấn luyện, nhưng model được lưu là một model YOLO tiêu chuẩn không có overhead.

  • Có. Teacher bổ sung một lượt forward cho mỗi batch, vì vậy overhead về thời gian và bộ nhớ phụ thuộc vào cặp teacher/student. Teacher chạy ở chế độ eval mà không có gradient hoặc trạng thái optimizer.

  • Chưng cất tri thức hoạt động với các tác vụ detect, segment, poseobb vì phương pháp này chưng cất các đặc trưng từ ba lớp neck cung cấp đầu vào cho head thuộc dòng Detect. Classify, semantic, depth và RT-DETR không được hỗ trợ.

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

    Teacher và student phải thuộc cùng một dòng YOLO (ví dụ: YOLOv8, YOLO11 hoặc YOLO26). Chưng cất xuyên dòng (ví dụ: teacher YOLO11 với student YOLO26) không được hỗ trợ.

Bình luận