Mean Average Precision (mAP)
يقيس متوسط الدقة المتوسطة (mAP) أداء كواشف الأجسام عبر حساب متوسط الدقة على مستوى الاستدعاء والفئات وعتبات IoU. تعرّف على كيفية حساب mAP50 وmAP50-95.
متوسط الدقة المتوسط (mAP) هو مقياس التقييم القياسي لـاكتشاف الأجسام، وتُستخدم الطريقة نفسها لتقييم تقسيم المثيلات وتقدير الوضعية واكتشاف الأجسام الموجّهة. ويكافئ المقياس النموذج على اكتشاف كل الأجسام وتجنب الاكتشافات الكاذبة وإحكام وضع كل صندوق إحاطة، ثم يجمع هذه الجوانب الثلاثة في رقم واحد بين 0 و1، وغالبًا ما يُكتب كنسبة مئوية. ويمثل متوسط الدقة (AP) المساحة تحت منحنى الدقة والاستدعاء لفئة واحدة، بينما يمثّل mAP متوسط AP عبر الفئات، ويحسب الشكل الأكثر شيوعًا في التقارير، mAP50-95، متوسطًا إضافيًا عبر عشرة حدود لقيمة التقاطع على الاتحاد (IoU).
اللبنات الأساسية#
- IoU: مقدار التداخل بين صندوق متنبأ به وصندوق موسوم، من 0 إلى 1. ولا يُعد التنبؤ إيجابيًا حقيقيًا إلا إذا بلغت قيمة IoU بينه وبين وسم غير مطابق سابقًا من الفئة نفسها الحد المطلوب، مثل 0.5.
- الدقة: نسبة التنبؤات الصحيحة إلى جميع التنبؤات، TP / (TP + FP).
- الاستدعاء: نسبة الأجسام الموسومة التي يكتشفها النموذج، TP / (TP + FN).
- الثقة: الدرجة التي ترتب الاكتشافات. ويعطي كل حد للثقة زوجًا واحدًا من قيمتي الدقة والاستدعاء، بينما ترسم الحدود كلها معًا منحنى الدقة والاستدعاء.
كيفية حساب mAP#
يجمع التقييم كل اكتشافات فئة واحدة عبر مجموعة البيانات بأكملها، ثم يرتبها حسب الثقة. وعند المرور بالقائمة، إما أن يطابق كل اكتشاف الوسم غير المطابق ذي أكبر تداخل من فئته ويُعد إيجابيًا حقيقيًا، أو يُعد إيجابيًا كاذبًا. ولا يمكن مطابقة الوسم إلا مرة واحدة، لذا يُحتسب الصندوق الثاني على جسم سبق اكتشافه ضد الدقة. وبعد كل خطوة، يُعاد حساب الدقة والاستدعاء، ما يرسم منحنى الدقة والاستدعاء من الاكتشاف الأعلى ثقة إلى الأقل ثقة.
AP هي المساحة تحت ذلك المنحنى. وقبل حساب المساحة، يُستبدل المنحنى بغلافه، أي أعلى قيمة للدقة عند كل مستوى من مستويات الاستدعاء أو بعده، كيلا تؤثر التعرجات الصغيرة في النتيجة. ويأخذ تقييم COCO عينات من الغلاف عند 101 نقطة للاستدعاء بين 0 و1، في حين استخدم معيار PASCAL VOC الأصلي 11 نقطة. وتُسجّل قيمة دقة صفرية لمستويات الاستدعاء التي لا يبلغها النموذج، لذا يخفض كل جسم لم يُكتشف قيمة AP.
import numpy as np
# One class: 8 detections sorted by confidence (1 = matched a label, 0 = false positive)
tp = np.array([1, 1, 0, 1, 0, 1, 0, 0])
num_labels = 5 # ground-truth objects of this class in the dataset
# Precision and recall after each detection in the ranked list
tp_cum = np.cumsum(tp)
precision = tp_cum / np.arange(1, len(tp) + 1)
recall = tp_cum / num_labels
# Precision envelope: best precision at this recall or any higher recall
envelope = np.maximum.accumulate(precision[::-1])[::-1]
# COCO-style AP: average the envelope at 101 recall points (0 beyond the highest recall reached)
points = np.linspace(0, 1, 101)
idx = np.searchsorted(recall, points, side="left")
ap = np.mean([envelope[i] if i < len(envelope) else 0.0 for i in idx])
print(f"Max recall: {recall[-1]:.1f}, AP: {ap:.3f}")يطبع البرنامج النصي Max recall: 0.8, AP: 0.686. ولا يُكتشف أحد الأجسام الخمسة الموسومة مطلقًا، لذا لا يضيف الخُمس الأخير من محور الاستدعاء شيئًا إلى المساحة، وتظل قيمة AP عند 0.686 رغم صحة الاكتشافين الأعلى ثقة.
mAP مقارنةً بالمقاييس ذات الصلة#
- الدقة الإجمالية هي عدد التنبؤات الصحيحة مقسومًا على عدد التنبؤات كلها، ما يتطلب احتساب السلبيات الحقيقية. وفي اكتشاف الأجسام، ستكون السلبيات الحقيقية كل رقعة خلفية فارغة، لذا لا تكون للدقة الإجمالية قيمة ذات معنى في هذا المجال.
- درجة F1 تجمع الدقة والاستدعاء عند حد ثقة واحد، وتصف نقطة تشغيل منفردة، مثل الحد الذي يعمل عنده النموذج المنشور.
- مصفوفة الالتباس تحصي الفئات التي يخلط بينها الكاشف عند حد واحد، وهي التفاصيل التي يخفيها رقم mAP منفرد.
mAP50 وmAP75 وmAP50-95#
بما أن mAP هو متوسط حسابي بسيط عبر الفئات، فإن الفئة النادرة تُحسب بقدر الفئة الشائعة. وتحدد عتبة IoU مدى إحكام الصندوق المطلوب لاحتسابه:
- mAP50: يكون الكشف صحيحًا عند IoU يساوي 0.5، وفق قاعدة PASCAL VOC.
- mAP75: ترتفع العتبة إلى 0.75، ما يشكل اختبارًا صارمًا لدقة تحديد الموقع.
- mAP50-95: متوسط mAP عبر عشر عتبات، من 0.50 إلى 0.95 بزيادات قدرها 0.05. وتسمّي COCO هذه القيمة «AP» ببساطة، ولا تميز بين AP وmAP، وتعتمدها مقياسها الأساسي في التحدي.
يحفظ التدريب في Ultralytics YOLO26 best.pt من حقبة التدريب التي تحقق أعلى mAP50-95 على بيانات التحقق، ويعرض التحقق المتغيرات الثلاثة جميعها في كل تشغيل.
from ultralytics import YOLO
# Load a pretrained YOLO26 nano detector
model = YOLO("yolo26n.pt")
# Validate on the small COCO8 dataset to compute mAP
metrics = model.val(data="coco8.yaml")
# The same detections scored at three IoU thresholds
print(f"mAP50: {metrics.box.map50:.3f}")
print(f"mAP75: {metrics.box.map75:.3f}")
print(f"mAP50-95: {metrics.box.map:.3f}")كلما انخفضت عتبة IoU، زاد عدد عمليات الكشف التي تُحتسب صحيحة، لذا تكون قيمة mAP50 هي الأعلى وتأتي قيمة mAP50-95 أدنى منها. وتقسم COCO قيمة AP أيضًا حسب حجم الأجسام: إذ تغطي الأجسام الصغيرة مساحة تقل عن 32 × 32 بكسل، والأجسام المتوسطة مساحة تصل إلى 96 × 96، أما الأجسام الكبيرة فتغطي مساحة أكبر من ذلك.










