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

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
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ình | kích thước (pixel) | mAPval 50-95 baseline | mAPval 50-95 distilled | mAPval 50-95 (e2e) baseline | mAPval 50-95 (e2e) distilled |
|---|---|---|---|---|---|
| YOLO26n-distill | 640 | 40.9 | 41.5 | 40.1 | 40.9 |
| YOLO26s-distill | 640 | 48.6 | 49.2 | 47.8 | 48.6 |
| YOLO26m-distill | 640 | 53.1 | 53.9 | 52.5 | 53.3 |
| YOLO26l-distill | 640 | 55.0 | 56.0 | 54.4 | 55.5 |
| YOLO26x-distill | 640 | 57.5 | 57.9 | 56.9 | 57.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ằngyolo 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ị#
| Student | Teacher khuyến nghị |
|---|---|
yolo26n.pt | yolo26s.pt |
yolo26s.pt | yolo26m.pt |
yolo26m.pt | yolo26x.pt |
yolo26l.pt | yolo26x.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ại | Mặc định | Mô tả |
|---|---|---|---|
distill_model | str | None | Đườ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. |
dis | float | 6.0 | Trọ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#
- Teacher model vẫn đóng băng ở chế độ
evalvà chạy suy luận trên mỗi batch - 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
- 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
- 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
- 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
- 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:#fffHỗ 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, pose và obb 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ụ đó.
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.
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:
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:
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:
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 640Model đã 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_modellà chính xác và tệp tải thành công - Thử tăng
disnế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ế độ
evalkhông có gradient, giúp kiểm soát chi phí tài nguyên ở mức hợp lý. Sử dụngamp=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ụ Classify và semantic 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ợ.