كشف الأجسام
Object Detection
تحديد الأجسام ومواقعها: المربعات المحيطة وIoU وNMS ومقياس mAP، والكاشفات ذات المرحلة والمرحلتين.
المخرج
لكل جسم: \((x_1, y_1, x_2, y_2)\) أو \((c_x, c_y, w, h)\)، وفئة، ودرجة ثقة.
IoU
$$\text{IoU}(A, B) = \frac{|A \cap B|}{|A \cup B|}$$
def iou(a, b):
x1, y1 = max(a[0], b[0]), max(a[1], b[1])
x2, y2 = min(a[2], b[2]), min(a[3], b[3])
inter = max(0, x2 - x1) * max(0, y2 - y1)
area = lambda r: (r[2] - r[0]) * (r[3] - r[1])
return inter / (area(a) + area(b) - inter)
print(round(iou((0, 0, 10, 10), (5, 0, 15, 10)), 3)) # 0.333NMS
- رتب الكشوفات حسب الثقة.
- خذ الأعلى وأضفه للنتائج.
- احذف كل ما يتجاوز تداخله معه عتبة (مثلاً 0.5).
- كرر حتى تنتهي القائمة.
تتوفر جاهزة في torchvision.ops.nms.
التقييم: mAP
- يُعد الكشف صحيحاً (TP) إذا كانت فئته صحيحة وIoU مع جسم حقيقي فوق عتبة.
- يُرسم منحنى الدقة-الاستدعاء لكل فئة وتُحسب مساحته (AP)، ثم المتوسط على الفئات (mAP).
- معيار COCO الأساسي يأخذ المتوسط على عتبات IoU من 0.50 إلى 0.95 بخطوة 0.05.
عائلات الكاشفات
| العائلة | أمثلة | السمات |
|---|---|---|
| مرحلتان | R-CNN، Fast R-CNN، Faster R-CNN | دقة عالية، أبطأ |
| مرحلة واحدة | YOLO، SSD، RetinaNet | سرعة عالية، مناسبة للزمن الحقيقي |
| قائمة على المحوّلات | DETR وتطويراته | دون مراسٍ ولا NMS يدوي |
تجربة سريعة
import torch
from torchvision.models.detection import fasterrcnn_resnet50_fpn, FasterRCNN_ResNet50_FPN_Weights
from torchvision.io import read_image
weights = FasterRCNN_ResNet50_FPN_Weights.DEFAULT
model = fasterrcnn_resnet50_fpn(weights=weights).eval()
img = read_image("street.jpg")
with torch.no_grad():
pred = model([weights.transforms()(img)])[0]
keep = pred["scores"] > 0.7
labels = [weights.meta["categories"][i] for i in pred["labels"][keep]]
print(labels, pred["boxes"][keep])مصطلحات الدرس
- التقاطع على الاتحاد Intersection over Union
- نسبة مساحة تقاطع مربعين إلى مساحة اتحادهما، وتقيس مدى تطابق المربع المتنبأ مع الحقيقي.
- الكبت غير الأقصى Non-Maximum Suppression
- إزالة المربعات المتداخلة بشدة مع مربع أعلى ثقة للجسم نفسه.
- متوسط الدقة المتوسطة mean Average Precision
- متوسط مساحة منحنى الدقة-الاستدعاء عبر الفئات، وأحياناً عبر عتبات IoU متعددة.
الملخص
كشف الأجسام يحدد لكل جسم في الصورة فئته ومربعاً محيطاً به. يقاس تطابق المربعات بمقياس التقاطع على الاتحاد (IoU)، وتُزال الكشوفات المكررة بالكبت غير الأقصى (NMS)، ويُقيَّم الأداء بمتوسط الدقة المتوسطة (mAP). تنقسم الكاشفات إلى ذات مرحلتين مثل Faster R-CNN (اقتراح مناطق ثم تصنيفها) وذات مرحلة واحدة مثل YOLO وSSD (تنبؤ مباشر وأسرع)، إضافة إلى كاشفات قائمة على المحوّلات مثل DETR.
أسئلة مراجعة
-
احسب IoU لمربعين مساحة كل منهما 100 وتقاطعهما 50.
الاتحاد = 100 + 100 − 50 = 150، وIoU = 50/150 ≈ 0.33.
-
ما الفرق الأساسي بين كاشف بمرحلتين وكاشف بمرحلة واحدة؟
ذو المرحلتين يقترح مناطق مرشحة ثم يصنفها ويحسنها، وذو المرحلة الواحدة يتنبأ بالمربعات والفئات مباشرة في تمريرة واحدة فيكون أسرع غالباً.
المصادر والمراجع
إكمال الدرس
أكملت كل دروس المسار! يمكنك الآن طلب شهادة إكمال المسار.
اطلب الشهادة