Link to this sectionChưng cất tri thức (Knowledge Distillation)#
Link to this sectionBắ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:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt")Link to this sectionKnowledge distillation là gì?#
Knowledge distillation chuyển giao tri thức từ một teacher model lớn, chính xác sang một student model nhỏ hơn. Student học cách bắt chước các biểu diễn đặc trưng nội tại 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.
Link to this sectionHiệu suất#
Knowledge distillation cải thiện mAP của student trên toàn bộ dòng họ YOLO26 trên 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 cùng các model đó được huấn luyện với distillation từ teacher được khuyến nghị.
| 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 single-model single-scale trên tập dữ liệu COCO val2017.
Tái tạo bằng lệnhyolo val detect data=coco.yaml device=0 - Các giá trị e2e sử dụng đường dẫn suy luận mặc định không cần NMS; các giá trị không phải e2e sử dụng hậu xử lý NMS truyền thống (
end2end=False). Xem End-to-End Detection để biết thêm chi tiết.
Link to this sectionĐ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ụ.
- GPU Resources: Đủ bộ nhớ GPU (VRAM) để tải và chạy cả hai model đồng thời trong quá trình huấn luyện (tham khảo FAQ để biết mức tiêu thụ VRAM điển hình).
Link to this sectionCá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ợ.
Link to this sectionCá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). Thiết lập tham số này sẽ kích hoạ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. |
Link to this sectionCách thức hoạt động#
- Teacher model vẫn ở trạng thái đóng băng trong chế độ
evalvà thực hiện 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 loss tiêu chuẩn bằng cách sử dụng trọng số
dis
flowchart TD
A[Input Image Batch] --> T[Teacher Model<br/>frozen, eval mode]
A --> S[Student Model<br/>trainable]
T --> |Detect head inputs| TF[Teacher Features]
S --> |Detect head inputs| SF[Student Features]
SF --> P[1×1 Conv Projector<br/>with ReLU]
P --> AF[Aligned Student Features]
TF --> SW[Score-weighted L2 Loss]
AF --> SW
S --> D[Detection Head]
D --> DL[box_loss + cls_loss + dfl_loss]
SW --> |× dis| DIS[distillation loss]
DL --> TOTAL[Total Loss]
DIS --> TOTAL
TOTAL --> BP[Backpropagate<br/>Student + Projector only]Link to this sectionHỗ trợ tác vụ#
Việc triển khai distillation trích xuất các đặc trưng từ ba tầng neck cung cấp dữ liệu cho đầu ra Detect-family của model. Vì các đầu ra segment, pose, và obb kế thừa từ cùng cấu trúc Detect, nên distillation về mặt kỹ thuật cũng tương thích 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")Link to this sectionHuấn luyện#
Link to this sectionHuấ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 để kích hoạt nó:
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")Link to this sectionĐiều chỉnh trọng số Distillation Loss#
Tham số dis (mặc định: 6.0) kiểm soát mức độ đó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)Link to this sectionTiế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)Link to this sectionKết quả huấn luyện#
Khi distillation được kích hoạt, một cột dis_loss bổ sung sẽ 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.
Link to this sectionCâu hỏi thường gặp#
Link to this sectionTại sao distillation loss của tôi không giảm?#
- 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 được 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
Link to this sectionDistillation khác với huấn luyện tiêu chuẩn như thế nào?#
Thêm tham số distill_model—mọi thứ khác hoạt động giống hệt. Một distillation loss bổ sung được tính toán trong quá trình huấn luyện, nhưng model được lưu là một YOLO model tiêu chuẩn không có thêm overhead.
Link to this sectionKnowledge distillation có làm chậm quá trình huấn luyện không?#
Có. Dự kiến huấn luyện chậm hơn 1.2-1.5 lần và tốn thêm ~1.1 lần bộ nhớ GPU vì teacher model chạy suy luận trên mỗi batch. Teacher chạy ở chế độ eval không có gradient, giữ cho overhead ở mức quản lý được. Sử dụng amp=True để giảm tác động.
Link to this sectionNhững tác vụ và model nào được hỗ trợ?#
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ợ.