Ultralytics YOLO27: انضم إلى قائمة الانتظار.
Get Started
درّب أول نموذج YOLO لديك·التدريب·الدرس 7/10
الدرسمبتدئ

التحقق والتشخيص

تحقق من best.pt بمقارنته بقيمة أساسية، واقرأ مصفوفة الالتباس والأرقام لكل فئة وصور التنبؤ، وحوّلها إلى قائمة إصلاحات محددة.

يخبرك رقم واحد لـmAP بمدى أخطاء النموذج، لا بماهيتها. فالكائنات الصغيرة التي لم تُكتشف، والفئتان اللتان يخلط النموذج بينهما، والصناديق غير المحكمة، كلها تخفض mAP، ولكل منها إصلاح مختلف. إذا أخطأت في التشخيص، فقد تقضي أسبوعًا في جمع بيانات غير مناسبة.

في هذا الدرس، ستشغّل وضع التحقق على best.pt، وتقارنه بالقيمة الأساسية، وتقرأ مصفوفة الالتباس وصور التنبؤ حتى تتمكن من كتابة قائمة إصلاحات الجولة التالية. ويُعد دليل مقاييس الأداء مرجعًا تفصيليًا مكملًا.

النتيجة

يمكنك التحقق من نموذج باستخدام إعدادات متطابقة، وقراءة مصفوفة الالتباس وجدول الفئات لتحديد أضعف فئة ونمط الإخفاق، وكتابة ثلاثة تغييرات محددة للجولة التالية.

المسار السريع
إذا كنت تعرف الأساسيات بالفعل، فإليك النسخة المختصرة.
  1. شغّل yolo val model=runs/detect/pills_v1/weights/best.pt data=my_dataset/data.yaml.

  2. قارن mAP50 وmAP50-95 بالقيمة الأساسية: تشير الفجوة الكبيرة بينهما إلى صناديق غير محكمة.

  3. اقرأ confusion_matrix_normalized.png: الفئات الحقيقية في الأعمدة، والتنبؤات في الصفوف.

  4. قارن val_batch0_labels.jpg مع val_batch0_pred.jpg وسجّل أنماط الإخفاق.

عملي

مثال تطبيقي: التحقق من best.pt#

from ultralytics import YOLO

model = YOLO("runs/detect/pills_v1/weights/best.pt")
metrics = model.val(data="my_dataset/data.yaml")

print(f"precision {metrics.box.mp:.3f}  recall {metrics.box.mr:.3f}")
print(f"mAP50 {metrics.box.map50:.3f}  mAP50-95 {metrics.box.map:.3f}")

مخرجات فعلية من val.py:

precision 0.970  recall 0.957
mAP50 0.977  mAP50-95 0.659

تُحفظ المخططات في مجلد جديد runs/detect/val (ثم val-2، ...). ضع الأرقام إلى جانب القيمة الأساسية:

النموذجmAP50mAP50-95
yolo26n.pt مُسبق التدريب (من دون فئة للأقراص)0.0010.0002
pills_v1 (10 حقب، imgsz 320، CPU)0.9770.659

ما الذي تقوله الأرقام:

  • الدقة الإيجابية 0.970، والاستدعاء 0.957: أداء متوازن؛ إنذارات كاذبة قليلة، وحالات فائتة قليلة.
  • mAP50‏ 0.977: مع اشتراط تداخل متساهل، يعثر النموذج على كل قرص دوائي تقريبًا.
  • mAP50-95‏ 0.659: مع اشتراط تداخل صارم، لا تكون كثير من الصناديق محكمة. وتشير فجوة بهذا الحجم إلى مشكلة في تحديد المواضع — ويمكن معالجتها بزيادة عدد العصور التدريبية، أو باستخدام imgsz أكبر، أو بتحسين دقة الوسوم — لا إلى نقص البيانات.

للاطلاع على كيفية المفاضلة بين الدقة الإيجابية والاستدعاء وmAP، راجع قراءة مقاييس الكشف بموضوعية.

اعرف الملف الذي يجيب عن كل سؤال#

السؤالالملف
ما الفئات التي يحدث بينها التباس، وما الفئات التي لا يُعثر عليها؟confusion_matrix_normalized.png
كيف توازن كل فئة بين الدقة الإيجابية والاستدعاء؟BoxPR_curve.png
ما عتبة الثقة التي ينبغي استخدامها عند النشر؟BoxF1_curve.png: تمثل ذروته نقطة انطلاق جيدة لـconf
كيف تبدو حالات الإخفاق؟val_batch0_labels.jpg مقابل val_batch0_pred.jpg
هل يعاني النموذج من فرط التكيّف؟results.png في مجلد التدريب

اقرأ مصفوفة الالتباس#

صفحة نموذج Ultralytics Platform تعرض مصفوفة التباس مُطبّعة، حيث تمثل الأعمدة الفئات الحقيقية والصفوف الفئات المتنبأ بها

تُعد مصفوفة الالتباس أداة التشخيص الأهم. في مخططات Ultralytics، تمثل الأعمدة الفئة الحقيقية والصفوف الفئة المتنبأ بها، مع إضافة صف وعمود background. يقسم الإصدار المُطبّع كل عمود على مجموعه، ليبيّن كل عمود الوجهة التي انتهت إليها كائنات تلك الفئة. يحتوي نموذج الأقراص الدوائية على فئة واحدة، لذا تدرّب على هذا المثال التوضيحي ذي الفئات الثلاث لمستودع (الأرقام للتوضيح):

المتنبأ به ↓ / الحقيقي →رافعة شوكيةشخصمنصة تحميلالخلفية
رافعة شوكية0.780.030.180.45
شخص0.040.910.000.20
منصة تحميل0.100.000.650.35
الخلفية0.080.060.17—
  • القطر الرئيسي: نسبة كل فئة التي كُشفت على نحو صحيح. منصة التحميل، بقيمة 0.65، هي الفئة الأضعف.
  • خارج القطر الرئيسي: حالات الالتباس. تنبأ النموذج بأن 18% من منصات التحميل الحقيقية رافعات شوكية، وبأن 10% من الرافعات الشوكية منصات تحميل.
  • صف الخلفية: حالات الإخفاق في الكشف. لم يُكتشف 17% من منصات التحميل مطلقًا.
  • عمود الخلفية: الإيجابيات الكاذبة، أي الصناديق المرسومة في مساحة خالية. صُنّف 45% منها على أنها رافعات شوكية.

يرتبط كل نوع من الخلايا بإجراء تصحيحي:

النمطالحل
التباس بين فئتينأضف أمثلة تميّز بينهما: رافعات شوكية تحمل منصات تحميل، ومنصات تحميل مكدسة بجوار رافعات شوكية.
ارتفاع قيمة صف الخلفية (حالات الإخفاق في الكشف)أضف مزيدًا من الأمثلة على تلك الفئة، في الظروف التي لا يُكتشف فيها الكائن.
ارتفاع قيمة عمود الخلفية (الإنذارات الكاذبة)أضف صورًا للخلفية من المشاهد التي تُحفّز هذه الإنذارات، مثل الممرات الخالية.

اقرأ الأرقام لكل فئة#

عند وجود عدة فئات، يسجل سجل التحقق صفًا لكل فئة، ويحتوي metrics.box.maps على قيم mAP50-95 لكل فئة لاستخدامها في الشيفرة. نتابع مثال المستودع:

                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)
                   all         50        102       0.78       0.71       0.74       0.51
              forklift         30         45       0.85       0.78       0.81       0.58
                person         40         50       0.92       0.88       0.91       0.64
                pallet          5          7       0.58       0.48       0.51       0.31

قيمة pallet أقل بكثير من قيم الفئات الأخرى، ولا تضم مجموعة التحقق سوى 7 حالات منها. فإما أن أداء النموذج ضعيف في كشف منصات التحميل، أو أن بيانات التحقق قليلة جدًا للحكم. وفي الحالتين، الخطوة نفسها مطلوبة: اجمع مزيدًا من صور منصات التحميل للتدريب والتحقق.

افحص حالات الإخفاق#

افتح val_batch0_labels.jpg وval_batch0_pred.jpg جنبًا إلى جنب. تعرض الفروق حالات الإخفاق على هيئة صور، وتكشف الأنماط بينها عن أسبابها: حالات إخفاق عند حافة الصورة، أو كائنات صغيرة، أو ظروف إضاءة معينة، أو كائنات متشابهة يسهل الخلط بينها. غالبًا ما يكون أثر أنماط مجموعة البيانات هذه أكبر من أثر ضبط المعلمات الفائقة.

في صور التحقق لنموذج الأقراص الدوائية، تحصل الأقراص الظاهرة بوضوح على درجات تقارب 1.0. أما الصناديق منخفضة الثقة، التي تتراوح درجاتها بين 0.3 و0.5 تقريبًا، فتتركز حول الأقراص المحجوبة جزئيًا تحت عبوة نفطة أخرى، وحول الأقراص المقطوعة عند حافة الصورة. لا يمكن معالجة ذلك بالضبط باستخدام conf؛ فهذه مسألة تتعلق بسياسة وضع الوسوم. هل ينبغي احتساب القرص المحجوب جزئيًا؟ حدّد القاعدة، وسجّلها، وطبّقها بالطريقة نفسها على كل صورة.

بعد ذلك، افتح results.png. ينبغي أن تنخفض خسارتا التدريب والتحقق معًا. إذا واصلت خسارة التدريب الانخفاض بينما ارتفعت خسارة التحقق، فالنموذج يعاني من فرط التكيّف؛ وإذا بقيت الخسارتان مرتفعتين، فهذا قصور في التكيّف. ويُعد التوازن بين الانحياز والتباين إطارًا لفهم الحالتين.

ثلاثة نماذج ملائمة للبيانات نفسها جنبًا إلى جنب: خط مستقيم ضعيف الملاءمة، ومنحنى ملائم جيدًا، ومنحنى مفرط الملاءمة يمر بكل نقطة

لعلاج فرط التكيّف، جرّب الحلول بهذا الترتيب وفقًا لمدى نجاحها: بيانات أكثر تنوعًا؛ أو عصور تدريبية أقل أو patience أكثر إحكامًا؛ أو زيادة البيانات (hsv_h، degrees، translate، scale، fliplr، mosaic، ...). إعدادات زيادة البيانات الافتراضية قوية بالفعل؛ فلا تغيّرها إلا لسبب، مثل تعطيل fliplr عندما يكون التمييز بين اليسار واليمين مهمًا.

حوّل النتائج إلى قائمة إجراءات تصحيحية#

عالج البيانات قبل ضبط المعلمات الفائقة، وغيّر شيئًا واحدًا في كل جولة لتعرف ما الذي أفاد. يتناول الضبط الدقيق الأول وحلقة التكرار جانب مجموعة البيانات من هذه الحلقة.

تجنّب هذه الأخطاء#

التحقق باستخدام حجم صورة مختلف

العَرَض: يحقق نموذج قيمة 0.659 في mAP50-95 ثم تنخفض فجأة إلى 0.403. السبب: دُرّب pills_v1 على imgsz=320 وتم التحقق منه باستخدام imgsz=640؛ فتظهر الأجسام أكبر بمرتين مما تعلمه النموذج. الحل: تحقّق وانشر باستخدام imgsz الذي استُخدم في التدريب، ولا تقارن التشغيلات إلا عند الحجم نفسه.

اعتبار اكتشافات التحقق اكتشافات النشر

يُشغَّل التحقق باستخدام conf=0.001 ليتسنى تتبّع منحنى الدقة والاستدعاء كاملًا، ولهذا يعرض val_batch0_pred.jpg صناديق لن يعرضها تطبيقك مطلقًا. اختر عتبة النشر من BoxF1_curve.png، ثم افحصها باستخدام predict.

نتائج مجموعات التحقق الصغيرة متقلبة

مع 23 صورة، تذبذبت دقة أحد عصور التدريب من 0.93 إلى 0.80 ثم عادت. قيّم الاتجاهات عبر العصور والتشغيلات، وزِد مجموعة التحقق قبل الوثوق بالفروق التي لا تتجاوز نقطة أو نقطتين.

جرّبه

تحقّق من pills_v1/weights/best.pt. وقدّم تشخيصًا من صفحة واحدة يتضمن جدولًا يقارن خط الأساس بالنموذج المدرّب، مع mAP50 وmAP50-95؛ وحالتي إخفاق محددتين وجدتهما بمقارنة val_batch0_labels.jpg بـval_batch0_pred.jpg (ما هما وأين حدثتا)؛ وملاحظة عن فرط التكيّف استنادًا إلى results.png؛ وثلاثة تغييرات محددة للجولة الثانية.

متى يُعدّ مكتملًا
تكون قد أتممت الدرس عند تحقق جميع الشروط التالية.
  • لديك جدول يقارن خط الأساس بالنموذج المدرّب، ويعرض mAP50 وmAP50-95، وكلاهما عند حجم imgsz المستخدم في التدريب.

  • حددتَ حالتي إخفاق ملموستين على الأقل في صور التحقق.

  • دوّنتَ ثلاثة تغييرات محددة على البيانات أو التدريب للجولة التالية.

عرض الحل
Baseline mAP50-95 0.0002 -> pills_v1 0.659 (mAP50 0.977), both at imgsz=320

Failures:
- Low-confidence boxes (about 0.3-0.5) on pills half-hidden under another pack.
- Low-confidence or missing boxes on pills cut off at the image edge.

Overfitting: none. val/box_loss flattened near 1.05; val/cls_loss spiked at epochs 4-6
and then fell to its lowest value (1.08) at epoch 10.

Fix list:
1. Write a labeling rule for partly hidden and edge pills, then relabel the val set to match.
2. Train longer and larger: epochs=50, imgsz=640 (mAP50-95 lags mAP50, so box tightness is the gap).
3. Add 20 frames with overlapping packs, labeled under the new rule.
ما الخطوة التالية

أصبحت تعرف ما ينبغي تغييره. حان وقت تنفيذ الجولة التالية بكفاءة: استأنف عمليات التشغيل التي انقطعت، وابدأ من أفضل أوزانك.

سجّل الدخول لحفظ التقدم