رؤية YOLO لعام 2026:

تقطير المعرفة (Knowledge Distillation)#

البداية السريعة#

تدريب نموذج طالب أصغر بتوجيه من نموذج معلم أكبر عن طريق إضافة الوسيط distill_model:

مثال
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt")

ما هي تقطير المعرفة (Knowledge Distillation)؟#

التطفير المعرفي (Knowledge distillation) ينقل المعرفة من نموذج معلم كبير وعالي الدقة إلى نموذج طالب أصغر. يتعلم الطالب محاكاة تمثيلاتها الداخلية للسمات الخاصة بالمعلم، وغالباً ما يحقق دقة أفضل من التدريب من الصفر.

صورة سير عمل التطفير المعرفي

استخدم التقطير عندما:

  • تحتاج إلى نموذج أصغر وأسرع للنشر
  • لديك نموذج معلم عالي الدقة مدرب على نفس البيانات
  • تريد دقة أفضل مما يوفره التدريب القياسي
ملاحظة

يتم تنفيذ تقطير المعرفة لمهام الكشف (detect)، التجزئة (segment)، تحديد الوضعية (pose)، و المربعات الموجهة (obb). حالياً، تم التحقق تجريبياً من تحسينات الدقة لمهمة الكشف (detect) فقط.

الأداء#

يحسن التطفير المعرفي mAP للطالب عبر عائلة YOLO26 بأكملها على COCO، دون أي تكلفة استنتاج إضافية. يقارن الجدول أدناه نماذج YOLO26 القياسية (الخط الأساسي) مقابل نفس النماذج المدربة باستخدام التطفير من معلمها الموصى به.

النموذجالحجم
(بكسل)
mAPval
50-95

الأساس
mAPval
50-95

المقطر
mAPval
50-95 (e2e)

الأساس
mAPval
50-95 (e2e)

المقطر
YOLO26n-distill64040.941.540.140.9
YOLO26s-distill64048.649.247.848.6
YOLO26m-distill64053.153.952.553.3
YOLO26l-distill64055.056.054.455.5
YOLO26x-distill64057.557.956.957.4
  • قيم mAPval تخص نموذجاً واحداً ومقياساً واحداً على مجموعة بيانات COCO val2017.
    يمكنك إعادة الإنتاج بواسطة yolo val detect data=coco.yaml device=0
  • قيم e2e تستخدم مسار الاستنتاج الافتراضي الخالي من NMS؛ بينما تستخدم القيم غير الخالية من e2e معالجة NMS اللاحقة التقليدية (end2end=False). راجع كشف من البداية إلى النهاية (End-to-End Detection) للحصول على التفاصيل.

المتطلبات الأساسية#

قبل البدء، تأكد من استيفاء المتطلبات التالية:

  • نموذج معلم مدرب: نموذج معلم مدرب مسبقاً وعالي الدقة من نفس عائلة YOLO مثل نموذج الطالب (مثلاً، YOLO26).
  • تطابق مجموعة البيانات والمهمة: يجب أن يستخدم كل من نموذج المعلم والطالب نفس مجموعة البيانات وإعدادات المهمة تماماً.
  • موارد وحدة معالجة الرسومات (GPU): ذاكرة GPU كافية (VRAM) لتحميل وتشغيل كلا النموذجين في نفس الوقت أثناء التدريب (راجع الأسئلة الشائعة (FAQ) لمعرفة استهلاك VRAM الإضافي النموذجي).

أزواج النماذج الموصى بها#

الطالبالمعلم الموصى به
yolo26n.ptyolo26s.pt
yolo26s.ptyolo26m.pt
yolo26m.ptyolo26x.pt
yolo26l.ptyolo26x.pt

التقطير بين العائلات المختلفة (مثلاً، معلم YOLO11 مع طالب YOLO26) غير مدعوم.

المعاملات الرئيسية#

المعاملالنوعالافتراضيالوصف
distill_modelstrNoneمسار ملف نموذج المعلم (على سبيل المثال، yolo26x.pt). يؤدي تعيين هذا إلى تمكين التطفير المعرفي.
disfloat6.0وزن خسارة التقطير. يتحكم في مدى مساهمة خسارة التقطير في إجمالي خسارة التدريب.

كيف يعمل#

  1. يظل نموذج المعلم مجمداً في وضع eval ويقوم بتشغيل الاستنتاج على كل دفعة
  2. يتم تدريب نموذج الطالب بخسائر المهمة القياسية بالإضافة إلى توجيه التقطير
  3. يتم استخراج الميزات من كلا النموذجين عند طبقات العنق الثلاث التي تغذي رأس عائلة Detect
  4. تعمل شبكة الإسقاط (projector network) (شبكة MLP خفيفة) على مواءمة أبعاد ميزات الطالب لتطابق المعلم
  5. تقارن خسارة L2 المرجحة بالنتيجة (score-weighted L2 loss) ميزات الطالب المسقطة بميزات المعلم، مرجحة بثقة التصنيف الخاصة بالمعلم
  6. تندمج خسارة التطفير مع الخسائر القياسية باستخدام وزن 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:#fff

دعم المهام#

يستخرج تنفيذ التطفير الميزات من طبقات العنق الثلاث التي تغذي رأس نموذج عائلة 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")

التدريب#

التدريب الأساسي#

التدريب مع التطفير مطابق للتدريب القياسي. قم بتوفير مسار 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)

استئناف تدريب التقطير#

يدعم تدريب التطفير استئناف التدريب من نقاط التحقق (Checkpoints). يتم إعادة بناء نموذج المعلم تلقائياً من مسار 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   dfl_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 قياسي بدون أي عبء إضافي.

  • نعم. توقع تدريباً أبطأ بمقدار 1.2-1.5x وذاكرة GPU أكثر بنحو ~1.1x نظراً لأن نموذج المعلم يقوم بتشغيل الاستنتاج على كل دفعة. يعمل المعلم في وضع eval بدون تدرجات (gradients)، مما يحافظ على العبء الإضافي قابلاً للإدارة. استخدم amp=True لتقليل التأثير.

  • تعمل تقطير المعرفة مع مهام detect، segment، pose، و obb لأنها تقطر الميزات من طبقات العنق الثلاث التي تغذي رأس عائلة Detect. مهام classify و semantic غير مدعومة.

    تم التحقق تجريبياً من تحسينات الدقة لمهمة detect فقط. مهام segment، و pose، و obb متوافقة تقنياً ولكن لم يتم عمل معايير قياسية لها بعد.

    يجب أن ينتمي المعلم والطالب إلى نفس عائلة YOLO (مثلاً، YOLOv8، YOLO11، أو YOLO26). التقطير بين العائلات (مثلاً، معلم YOLO11 مع طالب YOLO26) غير مدعوم.

التعليقات