قراءة مقاييس الكشف بنزاهة
أجرِ التحقق، واقرأ الدقة والاستدعاء وmAP50-95 وAP لكل فئة ومصفوفة الالتباس معًا، واختر عتبة النشر استنادًا إلى هدف.
يبعث الرقم الواحد على الاطمئنان: mAP يساوي 0.83، وانتهى الأمر. لكن قيمة mAP نفسها قد تخفي فئة تفشل نصف الوقت، أو مربعات إحاطة فضفاضة باستمرار، أو عتبة تُرسل تنبيهًا إلى أحدهم كل دقيقة. ستجري تحققًا فعليًا وتقرأ نتائجه سطرًا سطرًا حتى توضح لك ما ينبغي إصلاحه والموضع الذي ينبغي ضبط العتبة عنده.
عملي
كيفية احتساب نتيجة كل تنبؤ#
يطابق التحقق كل مربع متنبأ به مع الحقيقة الأرضية. ويُعدّ التنبؤ إيجابيًا حقيقيًا (TP) عندما تكون فئته صحيحة ويتجاوز IoU مع مربع حقيقة أرضية لم يُطابق بعد عتبةً محددة؛ وإلا فهو إيجابي كاذب (FP). وكل كائن في الحقيقة الأرضية لا يقابله أي تنبؤ هو سلبي كاذب (FN).
| المقياس | الصيغة | السؤال الذي يجيب عنه |
|---|---|---|
| الدقة | TP / (TP + FP) | عندما يرسم النموذج مربعًا، كم مرة يكون صحيحًا؟ |
| الاستدعاء | TP / (TP + FN) | كم كائنًا حقيقيًا عثر عليه؟ |
| F1 | 2 × P × R / (P + R) | رقم واحد يوازن بين كليهما |
يؤدي خفض عتبة الثقة إلى إضافة مربعات: يرتفع الاستدعاء وتنخفض الدقة. ويبيّن منحنى الدقة والاستدعاء هذه المفاضلة عبر جميع العتبات، وتمثل المساحة تحته متوسط الدقة (AP) لفئة واحدة. يحسب mAP50 متوسط AP عبر الفئات عند IoU يساوي 0.5، حيث يُحتسب حتى مربع الإحاطة الفضفاض بوضوح. أما mAP50-95 فيحسب المتوسط عبر عشر عتبات IoU من 0.5 إلى 0.95، لذا يكافئ مربعات الإحاطة المحكمة؛ وهو الرقم الأبرز في جداول نماذج Ultralytics.
أجرِ عملية تحقق#
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
metrics = model.val(data="coco8.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}") Class Images Instances Box(P R mAP50 mAP50-95)
all 4 17 0.551 0.962 0.943 0.669
person 3 10 0.551 0.8 0.848 0.387
dog 1 1 0.36 1 0.995 0.597
horse 1 2 0.36 1 0.995 0.696
elephant 1 2 0.656 0.969 0.828 0.545
umbrella 1 1 0.543 1 0.995 0.895
potted plant 1 1 0.833 1 0.995 0.895اقرأ النتائج من الأعلى إلى الأسفل:
- Instances 17, Images 4. مجموعة COCO8 اختبار أولي سريع. لا تكفي أربع صور لاتخاذ قرار بالإطلاق؛ وتعامل مع كل رقم على أنه توضيحي.
- mAP50 0.943 مقابل mAP50-95 0.669. يُعثر على معظم الكائنات، لكن كثيرًا من مربعات الإحاطة فضفاضة. وتشير الفجوة الكبيرة إلى أن ضعف النموذج في تحديد المواقع، لا الكشف.
personAP50-95 0.387. الفئة الأكثر شيوعًا هي الأضعف. وهذه هي نقطة الاختناق لديك.- P 0.551، R 0.962. تُقرأ هذه الأعمدة عند عتبة الثقة الوحيدة التي تعظّم F1 عبر الفئات — وهي عتبة منخفضة هنا — لا عند 0.25 التي تستخدمها للتنبؤ. لا تقتبسها بوصفها «دقة النموذج».
AP لكل فئة وعتبة النشر#
يعرض التشغيل نفسه AP لكل فئة، والدقة والاستدعاء عند كل عتبة ثقة، لذا يمكنك اختيار العتبة بناءً على هدف بدلًا من التخمين:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
metrics = model.val(data="coco8.yaml", plots=False, verbose=False)
box = metrics.box
# Per-class AP from the same run: the average hides the weakest class
for i, c in enumerate(box.ap_class_index):
print(f"{model.names[int(c)]:13} AP50={box.ap50[i]:.3f} AP50-95={box.ap[i]:.3f}")
# Precision and recall at every confidence threshold for one class
row = list(box.ap_class_index).index(0) # class 0 = person
for conf in (0.1, 0.25, 0.5, 0.75):
j = int(conf * (len(box.px) - 1))
print(f"person @ conf {conf:.2f}: precision {box.p_curve[row, j]:.2f}, recall {box.r_curve[row, j]:.2f}") all 4 17 0.551 0.962 0.943 0.669
person AP50=0.848 AP50-95=0.387
dog AP50=0.995 AP50-95=0.597
horse AP50=0.995 AP50-95=0.696
elephant AP50=0.828 AP50-95=0.545
umbrella AP50=0.995 AP50-95=0.895
potted plant AP50=0.995 AP50-95=0.895
person @ conf 0.10: precision 0.63, recall 0.80
person @ conf 0.25: precision 1.00, recall 0.54
person @ conf 0.50: precision 1.00, recall 0.40
person @ conf 0.75: precision 1.00, recall 0.14وهكذا تصبح العتبة قاعدة لاتخاذ القرار، لا مجرد شعور:
| الهدف المستند إلى معيار القرار | الاختيار | في هذا التشغيل |
|---|---|---|
| يجب ألا تتجاوز التنبيهات الكاذبة 5% (الدقة ≥ 0.95) | أدنى عتبة تحقق ذلك، للحفاظ على أكبر قدر من الاستدعاء | 0.25: الدقة 1.00، والاستدعاء 0.54 |
| يجب ألا يفوتنا أكثر من شخص واحد من كل خمسة (الاستدعاء ≥ 0.80) | أعلى عتبة تحقق ذلك، للحفاظ على أكبر قدر من الدقة | 0.10: الدقة 0.63، والاستدعاء 0.80 |
لا يكفي أيٌّ منهما هنا: فالدقة العالية تكلّفنا فقدان نصف الأشخاص، والاستدعاء العالي يكلّفنا ثلث التنبيهات. وهذا دليل يدعم قرار «التكرار»، لا وجود مشكلة في العتبة. كما يحفظ التحقق BoxPR_curve.png وBoxP_curve.png وBoxR_curve.png وBoxF1_curve.png وconfusion_matrix.png في مجلد التشغيل، لتتمكن من قراءة المفاضلة نفسها من الرسوم البيانية؛ ويتناول دليل مقاييس الأداء كلًا منها.
ما الذي ينبغي إصلاحه تاليًا#
توضح لك مصفوفة الالتباس ما الذي يُخلط بينه وبين الفئة الضعيفة. إذا كان AP للفئة forklift منخفضًا وكانت الرافعات الشوكية تُصنّف على أنها pallet_jack، فالمشكلة هي التباس الفئات لا تحديد المواقع: أضف أمثلة تُظهر الفرق المرئي، أو ادمج الفئات إذا لم يكن أي كود لاحق بحاجة إلى إبقائها منفصلة. ويشرح دليل رؤى تقييم النموذج سير العمل.

تندرج معظم الإصلاحات ضمن اللوحتين الأولى والثالثة: بيانات أفضل وتسميات أفضل لفئة الاختناق. لا تغيّر النموذج أو إعدادات التدريب إلا بعد اجتياز فحوص البيانات الواردة في الدروس الثلاثة السابقة.
| الأدلة المستندة إلى مجموعة اختبار ثابتة | القرار |
|---|---|
| تحقق كل فئة مهمة للأعمال من هدفي الدقة والاستدعاء | أطلق وراقب |
| فئة أو حالة واحدة لا تحقق هدفها | كرّر: أضف بيانات وتسميات تستهدف هذه الفجوة |
| كل الفئات بعيدة عن أهدافها، أو تتداخل الفئات بصريًا | أعِد النظر في مواصفات المهمة أو الفئات أو إعداد الكاميرا |
مواطن الخلل#
قد تخفي قيمة mAP تبلغ 0.83 فئةً عند 0.40. إذا كانت هذه الفئة تحمل القيمة التجارية، فليس لديك نموذج بقيمة 0.83 — بل نموذج معطوب يخفي متوسطه المضلل ذلك.
العَرَض: نموذج «يحقق 0.94» لكنه يرسم مربعات فضفاضة أكثر من اللازم للقياس أو الاقتصاص. الحل: أبلغ عن mAP50-95، واقرأ الفرق عن mAP50 بوصفه مؤشرًا إلى دقة تحديد الموقع.
العَرَض: أرقام تبدو مثالية مستندة إلى بضع عشرات من الصور، أو إلى صور تكاد تكون مطابقة لمجموعة التدريب. الحل: زد مجموعة التحقق لتضم بضع مئات من الحالات لكل فئة مهمة، وشغّل فحص التكرارات شبه المتطابقة من الدرس السابق قبل قراءة أي مقياس.
عرض الحل
قراءة النتائج: عدّاد أشخاص على yolo26n.pt، والتحقق من COCO8
عنق الزجاجة هو person، عند AP50-95 يبلغ 0.387 مقابل 0.669 إجمالًا. وهو أيضًا الفئة ذات أكبر عدد من الحالات (10 من أصل 17)، لذا فهو الأضعف والأكثر أهمية لعدّاد الأشخاص. يبلغ AP50 لديه 0.848، ما يعني أن النموذج يعثر على معظم الأشخاص، لكنه يرسم مربعات إحاطة فضفاضة؛ وهذا أقل أهمية للعدّ مقارنةً بأي مهمة تقيس الموضع أو الحجم.
لتحقيق دقة ≥ 0.95، فإن أدنى عتبة مؤهلة هي conf 0.25، حيث تبلغ الدقة 1.00 لكن الاستدعاء لا يتجاوز 0.54: سيُفوّت العدّاد قرابة نصف الأشخاص. ولتحقيق استدعاء ≥ 0.80، سنحتاج إلى conf 0.10، حيث سيكون ثلث مرات العدّ خاطئًا.
القرار: التكرار. اجمع صور الأشخاص من كاميرا النشر وصنّفها، مع التركيز على الأشخاص الصغار والمحجوبين والواقعين عند حواف الإطار، ثم أعد التحقق على مجموعة اختبار مجمّدة تضم بضع مئات من الأشخاص. لا تكفي أربع صور للتحقق لاتخاذ قرار بالنشر أو عدمه.