Ultralytics YOLO27: انضم إلى قائمة الانتظار.
Get Started
أساسيات الرؤية الحاسوبية·اختر مهمة·الدرس 3/10
الدرسمبتدئ

فهم كشف الكائنات

اقرأ مخرجات الكاشف — الفئة والصندوق والثقة — واضبط عتبتَي الثقة وIoU بناءً على كلفة كل خطأ.

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

النتيجة

اقرأ اكتشافات YOLO26 في الكود، واختر conf وiou بناءً على كلفة تفويت كائن مقارنةً بإنذار كاذب.

المسار السريع
إذا كنت تعرف الأساسيات بالفعل، فإليك النسخة المختصرة.
  1. يتكوّن كل اكتشاف من فئة وصندوق ودرجة ثقة.

  2. يحذف conf الصناديق الضعيفة (القيمة الافتراضية 0.25)؛ ويحدد iou متى تعدّ NMS صندوقين مكررين (القيمة الافتراضية 0.7).

  3. هل تفويت الكائنات مكلف؟ خفّض conf. هل الإنذارات الكاذبة ظاهرة؟ ارفعها.

  4. هل تختفي الكائنات المتجاورة؟ ارفع iou.

  5. ترتّب الثقة الصناديق؛ لكنها ليست احتمالًا مُعايرًا.

عملي

ما الذي يعيده الكاشف#

ممشى على الواجهة البحرية تظهر فيه اكتشافات Ultralytics YOLO: أشخاص، وراكبا دراجتين، وكلب، وسيارتان، مع وسم كل صندوق بالفئة ودرجة الثقة

كل وسم في تلك الصورة يمثّل صفًا واحدًا من المخرجات: اسم فئة وثقة وصندوقًا يحيط بالكائن. يعيد نموذج الكشف تلك القائمة تحديدًا:

  • الفئة — فهرس صحيح يُربط باسم عبر 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.107
0.255
0.505
0.754

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

التقاطع على الاتحاد على طائر: صناديق متداخلة متوقعة وصناديق الحقيقة الأرضية، وأقنعة متطابقة، مع قياس IoU كتداخلها مقسومًا على اتحادها

iouالصناديق في bus.jpgالتأثير
0.35صارم: تُدمج الصناديق المتداخلة
0.75افتراضي
0.958متساهل: تبقى العناصر شبه المتطابقة

اختر العتبات بناءً على تكلفة الأخطاء#

إذا…فإن…
تفويت اكتشاف مكلف (تنبيهات السلامة، العيوب)اخفض conf وتقبّل بعض الإنذارات الكاذبة
يلاحظ المستخدمون الإنذار الكاذب (البحث، وضع العلامات)ارفع conf
أنت تسجّل الأعدادجرّب قيم conf على صور التحقق، واختر القيمة التي تحقق أقل خطأ في العدّ
تختفي العناصر المجاورة الحقيقية وسط الحشودارفع iou، مثلًا من 0.7 إلى 0.8
يُحدَّد الكائن نفسه بصندوقيناخفض iou
تختلف صعوبة الفئاتاستخدم أدنى قيمة تحتاج إليها من conf، ثم صفِّ النتائج حسب الفئة في التعليمات البرمجية

تُعد مراقبة السلامة في المستودعات الحالة التقليدية لاستخدام عتبة منخفضة؛ ويسرد وضع التنبؤ كل وسيطات الاستدلال.

مواطن الخلل#

اعتبار الثقة احتمالًا

العَرَض: «النموذج متأكد بنسبة 88% من أن هذه حافلة»، مع اختيار العتبات بالحدس. الحل: تعامل مع الثقة على أنها درجة ترتيب. في YOLO26، تغطي درجة واحدة كلاً من «وجود كائن» و«كونه من هذه الفئة»، وهي غير معايرة — اختر العتبة من بيانات التحقق، لا بناءً على معنى الرقم.

هل اختفى أحد شخصين متجاورين؟ تحقّق من NMS

عندما يقف شخصان كتفًا إلى كتف، تتداخل مربعاتهما كثيرًا، وقد يحذف NMS شخصًا حقيقيًا باعتباره «مكررًا». ارفع iou وسيعود المربع الثاني. يتضمن YOLO26 أيضًا رأسًا شاملًا لا يحتاج إلى NMS إطلاقًا؛ مرّر nms=False لاستخدامه.

الضبط على صورة واحدة

العَرَض: عتبة تبدو مثالية على صورة العرض التوضيحي لكنها تفشل مع الكاميرا الفعلية. الحل: اختبر مجموعة من العتبات على مجموعة تحقق مأخوذة من كاميرا النشر؛ فالصورة الواحدة لا تُريك سوى تأثير عناصر الضبط.

أربع طرق لارتكاب الأخطاء#

الإخفاقما الخلل؟الإصلاح المعتاد
الفئة صحيحة، لكن الصندوق فضفاضتحديد الموقعقواعد صناديق أكثر إحكامًا واتساقًا؛ وقيمة أكبر لـ imgsz للكائنات الصغيرة
الصندوق صحيح، لكن الفئة خاطئةالتصنيفأضف أمثلة أكثر للزوج الذي يحدث الالتباس بين فئتيه، أو ادمج الفئتين
لا يوجد صندوق على الإطلاقالاستدعاءأضف أمثلة أكثر على تلك الحالة: الإضاءة، والحجم، والحجب
صندوق على الخلفيةالدقةصور ذات أمثلة سلبية صعبة لما خدع النموذج

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

جرّبه

شغّل الحل باستخدام conf=0.05 وافتح الصورة المحفوظة. صنّف كل صندوق تقل قيمته عن 0.5 على أنه إيجابي حقيقي أو إيجابي كاذب، وسجّل سبب كل إيجابي كاذب. ثم دوّن قيمة conf التي ستعتمدها لعدّ المشاة في هذه الكاميرا، مع جملة واحدة تبرر اختيارك.

متى يُعدّ مكتملًا
تكون قد أتممت الدرس عند تحقق جميع الشروط التالية.
  • لديك قائمة بكل صندوق تقل قيمته عن 0.5 في bus.jpg، وقد صُنّف كل منها على أنه إيجابي حقيقي أو إيجابي كاذب مع ذكر السبب.

  • دوّنت قيمة conf لعداد المشاة والخطأ الذي تحمي منه هذه القيمة.

  • يمكنك أن تشرح، بالاستعانة بجدول iou، لماذا تؤدي زيادة iou إلى استعادة عنصر مجاور جرى تثبيطه.

عرض الحل
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 يوضح مدى اقتراب الكائنات الحقيقية من العتبة.

ما الخطوة التالية

التالي: عندما لا يكفي المستطيل وتحتاج إلى الشكل الدقيق للكائن.

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