Link to this sectionتقطير المعرفة (Knowledge Distillation)#
Link to this sectionالبداية السريعة#
قم بتدريب نموذج طالب أصغر حجماً بتوجيه من نموذج معلم أكبر بإضافة المعامل distill_model:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt")Link to this sectionما هي تقطير المعرفة (Knowledge Distillation)؟#
تعمل تقطير المعرفة على نقل المعرفة من نموذج معلم كبير ودقيق إلى نموذج طالب أصغر. يتعلم الطالب محاكاة تمثيلات الميزات الداخلية للمعلم، وغالباً ما يحقق دقة أفضل من التدريب من الصفر.
استخدم التقطير عندما:
- تحتاج إلى نموذج أصغر وأسرع للنشر
- لديك نموذج معلم عالي الدقة مدرب على نفس البيانات
- تريد دقة أفضل مما يوفره التدريب القياسي
يتم تنفيذ تقطير المعرفة لمهام الكشف (detect)، التجزئة (segment)، تحديد الوضعية (pose)، و المربعات الموجهة (obb). حالياً، تم التحقق تجريبياً من تحسينات الدقة لمهمة الكشف (detect) فقط.
Link to this sectionالأداء#
تعمل تقطير المعرفة على تحسين mAP للطالب عبر عائلة YOLO26 بأكملها على COCO، دون تكلفة استنتاج إضافية. يقارن الجدول أدناه نماذج YOLO26 القياسية (الأساس) مقابل نفس النماذج المدربة باستخدام التقطير من المعلم الموصى به لها.
| النموذج | الحجم (بكسل) | mAPval 50-95 الأساس | mAPval 50-95 المقطر | mAPval 50-95 (e2e) الأساس | mAPval 50-95 (e2e) المقطر |
|---|---|---|---|---|---|
| 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 |
- قيم mAPval هي لنموذج واحد بمقياس واحد على مجموعة بيانات COCO val2017.
يمكنك إعادة إنتاج النتائج بواسطةyolo val detect data=coco.yaml device=0 - تستخدم قيم e2e مسار الاستنتاج الافتراضي الخالي من NMS؛ بينما تستخدم القيم غير e2e معالجة NMS التقليدية اللاحقة (
end2end=False). راجع الكشف الشامل (End-to-End Detection) للحصول على التفاصيل.
Link to this sectionالمتطلبات الأساسية#
قبل البدء، تأكد من استيفاء المتطلبات التالية:
- نموذج معلم مدرب: نموذج معلم مدرب مسبقاً وعالي الدقة من نفس عائلة YOLO مثل نموذج الطالب (مثلاً، YOLO26).
- تطابق مجموعة البيانات والمهمة: يجب أن يستخدم كل من نموذج المعلم والطالب نفس مجموعة البيانات وإعدادات المهمة تماماً.
- موارد GPU: ذاكرة GPU (VRAM) كافية لتحميل وتشغيل كلا النموذجين في وقت واحد أثناء التدريب (راجع الأسئلة الشائعة لمعرفة استهلاك VRAM المعتاد).
Link to this sectionأزواج النماذج الموصى بها#
| الطالب | المعلم الموصى به |
|---|---|
yolo26n.pt | yolo26s.pt |
yolo26s.pt | yolo26m.pt |
yolo26m.pt | yolo26x.pt |
yolo26l.pt | yolo26x.pt |
التقطير بين العائلات المختلفة (مثلاً، معلم YOLO11 مع طالب YOLO26) غير مدعوم.
Link to this sectionالمعاملات الرئيسية#
| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
distill_model | str | None | المسار إلى ملف نموذج المعلم (مثلاً، yolo26x.pt). ضبط هذا الخيار يفعّل تقطير المعرفة. |
dis | float | 6.0 | وزن خسارة التقطير. يتحكم في مدى مساهمة خسارة التقطير في إجمالي خسارة التدريب. |
Link to this sectionكيف يعمل#
- يظل نموذج المعلم مجمداً في وضع
evalويقوم بإجراء الاستنتاج على كل دفعة (batch) - يتم تدريب نموذج الطالب بخسائر المهمة القياسية بالإضافة إلى توجيه التقطير
- يتم استخراج الميزات من كلا النموذجين عند طبقات العنق الثلاث التي تغذي رأس عائلة Detect
- تعمل شبكة الإسقاط (projector network) (شبكة MLP خفيفة) على مواءمة أبعاد ميزات الطالب لتطابق المعلم
- تقارن خسارة L2 المرجحة بالنتيجة (score-weighted L2 loss) ميزات الطالب المسقطة بميزات المعلم، مرجحة بثقة التصنيف الخاصة بالمعلم
- تتحد خسارة التقطير مع الخسائر القياسية باستخدام وزن
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 sectionدعم المهام#
يستخرج تنفيذ التقطير الميزات من طبقات العنق الثلاث التي تغذي رأس عائلة Detect في النموذج. نظراً لأن رؤوس segment، pose، و obb ترث من نفس معمارية Detect، فإن التقطير متوافق تقنياً مع تلك المهام أيضاً.
تم اختبار detect تجريبياً والتحقق منه فقط. يمكنك تشغيل التقطير لمهام segment، pose، أو obb، ولكن تحسينات الدقة لتلك المهام لم يتم التحقق منها بعد.
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 sectionالتدريب#
Link to this sectionالتدريب الأساسي#
التدريب مع التقطير مطابق للتدريب القياسي. قم بتوفير مسار distill_model لتفعيله:
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ضبط وزن خسارة التقطير#
المعامل dis (الافتراضي: 6.0) يتحكم في مساهمة خسارة التقطير:
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 sectionاستئناف تدريب التقطير#
يدعم تدريب التقطير الاستئناف من نقاط التفتيش (checkpoints). يتم إعادة بناء نموذج المعلم تلقائياً من مسار distill_model:
from ultralytics import YOLO
student = YOLO("runs/detect/train/weights/last.pt")
results = student.train(resume=True)Link to this sectionمخرجات التدريب#
عند تفعيل التقطير، يظهر عمود إضافي dis_loss في سجلات التدريب:
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يحتوي النموذج المُصدر على أوزان الطالب فقط—يتطابق حجم الملف وسرعة الاستنتاج مع نموذج طالب مدرب بشكل طبيعي.
Link to this sectionالأسئلة الشائعة#
Link to this sectionلماذا لا تنخفض خسارة التقطير لدي؟#
- تحقق من أن المعلم والطالب من نفس جيل YOLO
- تأكد من أن مسار
distill_modelصحيح وأن الملف يتم تحميله - حاول زيادة
disإذا كانت قيمة الخسارة صغيرة جداً - تأكد من أن نموذج المعلم مدرب على نفس مجموعة البيانات
Link to this sectionكيف يختلف التقطير عن التدريب القياسي؟#
أضف معامل distill_model—كل شيء آخر يعمل بشكل متطابق. يتم حساب خسارة تقطير إضافية أثناء التدريب، لكن النموذج المحفوظ هو نموذج YOLO قياسي بدون أي حمل إضافي.
Link to this sectionهل تبطئ تقطير المعرفة التدريب؟#
نعم. توقع تدريباً أبطأ بمقدار 1.2-1.5 مرة وحوالي 1.1 مرة استهلاكاً أكبر لذاكرة GPU لأن نموذج المعلم يقوم بإجراء الاستنتاج في كل دفعة. يعمل المعلم في وضع eval بدون تدرجات، مما يجعل الحمل الإضافي قابلاً للإدارة. استخدم amp=True لتقليل التأثير.
Link to this sectionما هي المهام والنماذج المدعومة؟#
تعمل تقطير المعرفة مع مهام detect، segment، pose، و obb لأنها تقطر الميزات من طبقات العنق الثلاث التي تغذي رأس عائلة Detect. مهام classify و semantic غير مدعومة.
تم التحقق تجريبياً من تحسينات الدقة لمهمة detect فقط. مهام segment، و pose، و obb متوافقة تقنياً ولكن لم يتم عمل معايير قياسية لها بعد.
يجب أن ينتمي المعلم والطالب إلى نفس عائلة YOLO (مثلاً، YOLOv8، YOLO11، أو YOLO26). التقطير بين العائلات (مثلاً، معلم YOLO11 مع طالب YOLO26) غير مدعوم.