Meet YOLO26: next-gen vision AI.

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-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) للحصول على التفاصيل.

Link to this sectionالمتطلبات الأساسية#

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

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

Link to this sectionأزواج النماذج الموصى بها#

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

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

Link to this sectionالمعاملات الرئيسية#

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

Link to this sectionكيف يعمل#

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

المساهمون

التعليقات