فهم كشف الكائنات
اقرأ مخرجات الكاشف — الفئة والصندوق والثقة — واضبط عتبتَي الثقة وIoU بناءً على كلفة كل خطأ.
معظم أنظمة الرؤية الإنتاجية هي أنظمة كشف تُضاف إليها منطقية تشغيلية: عدّادات ومتتبّعات وتنبيهات المناطق وتمويه الخصوصية. وعندما يختل أداء أحدها، يكون السبب عادةً ليس النموذج، بل عتبة لم يخترها أحد عن قصد. إذا عرفت بدقة ما يعيده الكاشف وأي مقبضين يتحكمان بهذه القائمة، فستتمكن من تصحيح أخطاء أي شيء مبني عليه تقريبًا.
عملي
ما الذي يعيده الكاشف#

كل وسم في تلك الصورة يمثّل صفًا واحدًا من المخرجات: اسم فئة وثقة وصندوقًا يحيط بالكائن. يعيد نموذج الكشف تلك القائمة تحديدًا:
- الفئة — فهرس صحيح يُربط باسم عبر
result.names(0هوperson، و5هوbus). - الصندوق — أربعة أرقام تحدد موقع الكائن؛ يعطي
xyxyإحداثيات الزاويتين العلوية اليسرى والسفلية اليمنى بالبكسل. - الثقة — درجة من 0 إلى 1 تُستخدم لترتيب الاكتشافات وتصفيتها.
العدّ وإرسال التنبيهات والتتبّع والتمويه أمور تنفّذها بالكود فوق هذه الصفوف.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
result = model("https://ultralytics.com/images/bus.jpg", verbose=False)[0]
for box in result.boxes:
name = result.names[int(box.cls)]
x1, y1, x2, y2 = box.xyxy[0].tolist()
print(f"{name:8} conf={float(box.conf):.2f} box=({x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f})")bus conf=0.88 box=(0, 230, 803, 751)
person conf=0.87 box=(49, 398, 240, 902)
person conf=0.86 box=(223, 405, 345, 861)
person conf=0.85 box=(670, 395, 810, 880)
person conf=0.65 box=(0, 553, 60, 871)سطرًا بسطر: يبدأ صندوق الحافلة عند x=0 لأن الحافلة تمتد خارج الحافة اليسرى؛ وتسجل ثلاثة أشخاص درجات بين 0.85 و0.87؛ أما الشخص الرابع، المقطوع عند الحد الأيسر، فلا يسجل سوى 0.65 — إذ لا يرى النموذج سوى نصف جسم. انخفاض الثقة في الكائنات المقطوعة أمر طبيعي، وهي أول ما تتأثر به العتبة.
يأتي كل صندوق بأربعة تنسيقات؛ استخدم التنسيق الذي يتوقعه الكود اللاحق:
| السمة | التنسيق | الاستخدام المعتاد |
|---|---|---|
boxes.xyxy | إحداثيات الزوايا بالبكسل (x1, y1, x2, y2) | القص والرسم وقواعد التداخل |
boxes.xywh | المركز بالبكسل، مع العرض والارتفاع | مرشحات الحجم والحركة |
boxes.xyxyn | إحداثيات الزوايا مطبّعة إلى 0–1 | قواعد تصمد أمام تغيّر الدقة |
boxes.xywhn | المركز والحجم مطبّعان إلى 0–1 | ملفات تسميات YOLO |
من المرشّحات إلى القائمة النهائية#
يسجّل النموذج داخليًا درجات للعديد من الصناديق المرشّحة لكل كائن. ويحوّل مرشّحان هذه الصناديق إلى القائمة التي تراها:
مرشّح الثقة. يحذف conf الصناديق التي تقل عن العتبة؛ والقيمة الافتراضية للتنبؤ هي 0.25. يتغير العدد بسرعة في صورة الحافلة:
conf | الصناديق في bus.jpg |
|---|---|
| 0.10 | 7 |
| 0.25 | 5 |
| 0.50 | 5 |
| 0.75 | 4 |
مرشّح التكرار. يحتفظ كبح غير الأعظميات (NMS) بالصندوق الأعلى ثقةً، ويحذف الصناديق الأخرى من الفئة نفسها إذا تجاوز تداخلها معه iou (القيمة الافتراضية 0.7). ويُقاس التداخل باستخدام التقاطع على الاتحاد: المساحة المشتركة مقسومةً على المساحة المجمّعة.

iou | الصناديق في bus.jpg | التأثير |
|---|---|---|
| 0.3 | 5 | صارم: تُدمج الصناديق المتداخلة |
| 0.7 | 5 | افتراضي |
| 0.95 | 8 | متساهل: تبقى العناصر شبه المتطابقة |
اختر العتبات بناءً على تكلفة الأخطاء#
| إذا… | فإن… |
|---|---|
| تفويت اكتشاف مكلف (تنبيهات السلامة، العيوب) | اخفض conf وتقبّل بعض الإنذارات الكاذبة |
| يلاحظ المستخدمون الإنذار الكاذب (البحث، وضع العلامات) | ارفع conf |
| أنت تسجّل الأعداد | جرّب قيم conf على صور التحقق، واختر القيمة التي تحقق أقل خطأ في العدّ |
| تختفي العناصر المجاورة الحقيقية وسط الحشود | ارفع iou، مثلًا من 0.7 إلى 0.8 |
| يُحدَّد الكائن نفسه بصندوقين | اخفض iou |
| تختلف صعوبة الفئات | استخدم أدنى قيمة تحتاج إليها من conf، ثم صفِّ النتائج حسب الفئة في التعليمات البرمجية |
تُعد مراقبة السلامة في المستودعات الحالة التقليدية لاستخدام عتبة منخفضة؛ ويسرد وضع التنبؤ كل وسيطات الاستدلال.
مواطن الخلل#
العَرَض: «النموذج متأكد بنسبة 88% من أن هذه حافلة»، مع اختيار العتبات بالحدس. الحل: تعامل مع الثقة على أنها درجة ترتيب. في YOLO26، تغطي درجة واحدة كلاً من «وجود كائن» و«كونه من هذه الفئة»، وهي غير معايرة — اختر العتبة من بيانات التحقق، لا بناءً على معنى الرقم.
عندما يقف شخصان كتفًا إلى كتف، تتداخل مربعاتهما كثيرًا، وقد يحذف NMS شخصًا حقيقيًا باعتباره «مكررًا». ارفع iou وسيعود المربع الثاني. يتضمن YOLO26 أيضًا رأسًا شاملًا لا يحتاج إلى NMS إطلاقًا؛ مرّر nms=False لاستخدامه.
العَرَض: عتبة تبدو مثالية على صورة العرض التوضيحي لكنها تفشل مع الكاميرا الفعلية. الحل: اختبر مجموعة من العتبات على مجموعة تحقق مأخوذة من كاميرا النشر؛ فالصورة الواحدة لا تُريك سوى تأثير عناصر الضبط.
أربع طرق لارتكاب الأخطاء#
| الإخفاق | ما الخلل؟ | الإصلاح المعتاد |
|---|---|---|
| الفئة صحيحة، لكن الصندوق فضفاض | تحديد الموقع | قواعد صناديق أكثر إحكامًا واتساقًا؛ وقيمة أكبر لـ imgsz للكائنات الصغيرة |
| الصندوق صحيح، لكن الفئة خاطئة | التصنيف | أضف أمثلة أكثر للزوج الذي يحدث الالتباس بين فئتيه، أو ادمج الفئتين |
| لا يوجد صندوق على الإطلاق | الاستدعاء | أضف أمثلة أكثر على تلك الحالة: الإضاءة، والحجم، والحجب |
| صندوق على الخلفية | الدقة | صور ذات أمثلة سلبية صعبة لما خدع النموذج |
تُسرّع قائمتان عملية التشخيص: الإيجابيات الحقيقية ذات الثقة المنخفضة (إذ لا يكون النموذج واثقًا من الكائنات الحقيقية) والإيجابيات الكاذبة ذات الثقة العالية (إذ يكون واثقًا من الشيء الخطأ). وتشير القائمتان إلى إصلاحات مختلفة.
عرض الحل
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
result = model("https://ultralytics.com/images/bus.jpg", conf=0.05, save=True, verbose=False)[0]
for box in sorted(result.boxes, key=lambda b: -float(b.conf)):
name, conf = result.names[int(box.cls)], float(box.conf)
x1, y1, x2, y2 = box.xyxy[0].tolist()
print(f"{conf:.2f} {name:10} ({x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f})")0.88 bus (0, 230, 803, 751)
0.87 person (49, 398, 240, 902)
0.86 person (223, 405, 345, 861)
0.85 person (670, 395, 810, 880)
0.65 person (0, 553, 60, 871)
0.18 person (0, 600, 40, 871)
0.12 stop sign (0, 252, 35, 326)
0.08 handbag (43, 732, 78, 812)
0.07 skateboard (669, 822, 808, 881)
0.06 handbag (225, 634, 291, 705)كل صندوق تقل قيمته عن 0.5 هو إيجابي كاذب. يتداخل صندوق الشخص ذي القيمة 0.18 في person مع صندوق الشخص ذي القيمة 0.65، المقطوع عند الحافة اليسرى. وتشير قيمة stop sign البالغة 0.12 إلى إشارة طريق حقيقية صُنّفت بفئة خاطئة. أما حقائب اليد ولوح التزلج فتقع على الأيدي والأحذية. تحصل كل الكائنات الحقيقية على قيمة أعلى من 0.6، لذا فإن conf=0.5 يحتفظ بالأشخاص الأربعة جميعًا ويحذف كل العناصر غير المرغوبة لعداد المشاة — وبذلك يحمي من العدّ المزدوج. تحقّق من ذلك على مجموعة تحقق من الكاميرا الفعلية قبل الاعتماد: فالشخص المقطوع ذو القيمة 0.65 يوضح مدى اقتراب الكائنات الحقيقية من العتبة.