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

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
Chưng cất tri thức được triển khai cho các tác vụ detect, segment, pose và obb. 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.
| Model | kí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-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 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ằngyolo val detect model=yolo26n-distill.pt data=coco.yaml device=0; thêmnms=Falsecho 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
.ptthuộ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ị#
| Student | Teacher được khuyến nghị |
|---|---|
yolo26n.pt | yolo26s.pt |
yolo26s.pt | yolo26m.pt |
yolo26m.pt | yolo26x.pt |
yolo26l.pt | yolo26x.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#
| Parameter | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
distill_model | str | None | Đườ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. |
dis | float | 6.0 | Trọ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#
- Teacher model được đóng băng trong chế độ
evalvà thực hiện suy luận trên mỗi batch - 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
- 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
- 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
- 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
- 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:#fffHỗ 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, pose và obb 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ợ.
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.
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:
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:
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:
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 640Model đã 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_modelchính xác và file có thể được tải - 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 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ế độ
evalmà 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, pose và obb 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ợ.