YOLO Vision 2026:

التقطير المعرفي#

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

درّب نموذج طالب أصغر حجمًا بإرشاد من نموذج معلّم أكبر حجمًا، وذلك بإضافة الوسيطة 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-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 values are for single-model single-scale on the COCO val2017 dataset.
    Reproduce a distilled row with yolo val detect model=yolo26n-distill.pt data=coco.yaml device=0; add nms=False for 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.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. تُحاذي وحدة إسقاط مكوّنة من التفافين 1×1 مع ReLU كل خريطة سمات للطالب مع قنوات المعلّم
  5. تقارن خسارة L2 الموزونة بالدرجة بين سمات الطالب المسقطة وسمات المعلّم، مع ترجيحها وفقًا لثقة المعلّم في التصنيف
  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 + 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).

التعليقات