التقطير المعرفي#
البدء السريع#
درّب نموذج طالب أصغر حجمًا بإرشاد من نموذج معلّم أكبر حجمًا، وذلك بإضافة الوسيطة distill_model:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt")ما التقطير المعرفي؟#
ينقل التقطير المعرفي المعرفة من نموذج معلّم كبير ودقيق إلى نموذج طالب أصغر. ويتعلم الطالب محاكاة تمثيلات السمات الداخلية للمعلّم، وغالبًا ما يحقق دقة أفضل من التدريب من الصفر.

استخدم التقطير عندما:
- تحتاج إلى نموذج أصغر وأسرع للنشر
- لديك نموذج معلّم عالي الدقة مدرَّب على البيانات نفسها
- تريد دقة أفضل مما يوفره التدريب القياسي
يُطبَّق التقطير المعرفي على مهام detect وsegment وpose وobb. ولم تُتحقَّق تجريبيًا من تحسينات الدقة حتى الآن إلا لمهمة detect.
الأداء#
يحسّن التقطير المعرفي قيمة 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 values are for single-model single-scale on the COCO val2017 dataset.
Reproduce a distilled row withyolo val detect model=yolo26n-distill.pt data=coco.yaml device=0; addnms=Falsefor the e2e column. - e2e values use the NMS-free inference path (
nms=False); non-e2e values use default NMS post-processing (nms=None). See End-to-End Detection for details.
المتطلبات الأساسية#
قبل البدء، تأكد من استيفاء المتطلبات التالية:
- نموذج معلّم مدرَّب: نقطة تحقق
.ptمن عائلة YOLO نفسها التي ينتمي إليها الطالب. - تطابق المهمة: استخدم معلّمًا للمهمة نفسها التي ينفذها الطالب، ودرّبه على بيانات ذات صلة.
- موارد GPU: ذاكرة كافية لاستيعاب النموذجين؛ إذ يعمل المعلّم في الاتجاه الأمامي فقط، من دون تدرجات أو حالة المحسّن.
أزواج النماذج الموصى بها#
| الطالب | المعلّم الموصى به |
|---|---|
yolo26n.pt | yolo26s.pt |
yolo26s.pt | yolo26m.pt |
yolo26m.pt | yolo26x.pt |
yolo26l.pt | yolo26x.pt |
لا يُدعم التقطير بين العائلات المختلفة (مثل استخدام معلّم YOLO11 مع طالب YOLO26).
المعلمات الأساسية#
| المعلمة | النوع | الافتراضي | الوصف |
|---|---|---|---|
distill_model | str | None | مسار ملف نموذج المعلّم (مثل yolo26x.pt). يؤدي تعيين هذه القيمة إلى تفعيل التقطير المعرفي. |
dis | float | 6.0 | وزن خسارة التقطير. يتحكم في مقدار مساهمة خسارة التقطير في خسارة التدريب الإجمالية. |
آلية العمل#
- يبقى نموذج المعلّم مجمّدًا في وضع
eval، وينفّذ الاستدلال على كل دفعة - يتدرّب نموذج الطالب باستخدام خسائر المهمة القياسية بالإضافة إلى إرشادات التقطير
- تُستخرج السمات من كلا النموذجين في طبقات العنق الثلاث التي تغذّي الرأس من عائلة Detect
- تُحاذي وحدة إسقاط مكوّنة من التفافين 1×1 مع ReLU كل خريطة سمات للطالب مع قنوات المعلّم
- تقارن خسارة L2 الموزونة بالدرجة بين سمات الطالب المسقطة وسمات المعلّم، مع ترجيحها وفقًا لثقة المعلّم في التصنيف
- تُدمج خسارة التقطير مع الخسائر القياسية باستخدام وزن
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دعم المهام#
يستخرج تطبيق التقطير السمات من طبقات العنق الثلاث التي تغذّي رأس النموذج من عائلة Detect. وبما أن رؤوس segment وpose وobb ترث من بنية Detect نفسها، فإن التقطير متوافق تقنيًا مع هذه المهام أيضًا.
لا تستخدم مهام التصنيف والتجزئة الدلالية وتقدير العمق وRT-DETR رأسًا متوافقًا من عائلة 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")التدريب#
التدريب الأساسي#
التدريب باستخدام التقطير مطابق للتدريب القياسي. حدّد مسار 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")ضبط وزن خسارة التقطير#
تتحكم المعلمة 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)استئناف تدريب التقطير#
يدعم تدريب التقطير الاستئناف من نقاط التحقق. ويُعاد إنشاء نموذج المعلّم تلقائيًا من المسار distill_model المسجّل في نقطة التحقق:
from ultralytics import YOLO
student = YOLO("runs/detect/train/weights/last.pt")
results = student.train(resume=True)مخرجات التدريب#
عند تفعيل التقطير، يظهر عمود إضافي باسم dis_loss في سجلات التدريب:
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يحتوي النموذج المُصدَّر على أوزان الطالب فقط—لذلك يتطابق حجم الملف وسرعة الاستدلال مع نموذج طالب مدرَّب تدريبًا عاديًا.
الأسئلة الشائعة#
- تحقق من أن المعلّم والطالب ينتميان إلى جيل YOLO نفسه
- تأكد من صحة مسار
distill_modelومن إمكانية تحميل الملف - جرّب زيادة
disإذا كانت قيمة الخسارة صغيرة جدًا - تأكد من تدريب نموذج المعلّم على مجموعة البيانات نفسها
أضف المعلمة
distill_model—ويعمل كل شيء آخر بالطريقة نفسها. تُحسب خسارة تقطير إضافية أثناء التدريب، لكن النموذج المحفوظ هو نموذج YOLO قياسي من دون أي عبء إضافي.نعم. يضيف المعلّم تمريرة أمامية لكل دفعة، ولذلك يعتمد العبء الإضافي في الوقت والذاكرة على زوج المعلّم والطالب. ويعمل المعلّم في وضع
evalمن دون تدرجات أو حالة المحسّن.يعمل التقطير المعرفي مع مهام detect وsegment وpose وobb لأنه يقطّر السمات من طبقات العنق الثلاث التي تغذّي الرأس من عائلة Detect. ولا تُدعم مهام Classify وsemantic وdepth وRT-DETR.
لم يُتحقَّق تجريبيًا من تحسينات الدقة إلا لمهمة detect. أما مهام segment وpose وobb فهي متوافقة تقنيًا، لكنها لم تخضع للاختبارات المعيارية بعد.
يجب أن ينتمي المعلّم والطالب إلى عائلة YOLO نفسها (مثل YOLOv8 أو YOLO11 أو YOLO26). ولا يُدعم التقطير بين العائلات المختلفة (مثل استخدام معلّم YOLO11 مع طالب YOLO26).