الرؤية الحاسوبية2015متوسط13 دقيقة قراءة
نظرة واحدة تكفي: نظام موحَّد لرصد الكائنات في الزمن الحقيقي
You Only Look Once: Unified, Real-Time Object Detection
Redmon, J. · Divvala, S. · Girshick, R. · Farhadi, A. — CVPR
المشكلة
بحلول عام 2015، كانت أنظمة رصد الكائنات مثل R-CNN تعتمد على توليد آلاف المناطق المرشّحة ثم كلٍّ منها على حدة. هذا المسار متعدد المراحل كان دقيقاً لكنه بطيء جداً — إذ كان R-CNN يحتاج نحو 47 ثانية لمعالجة صورة واحدة، وحتى Fast R-CNN ظلّ مقيّداً بخطوة مستقلة لتوليد المناطق المرشّحة شكّلت عنق الزجاجة في السرعة. لم تكن هذه الأنظمة قادرة على العمل في الزمن الحقيقي، وبالتالي لم تصلح لتطبيقات مثل القيادة الذاتية أو الروبوتات أو تحليل الفيديو المباشر.
الإسهام
يُعيد YOLO صياغة رصد الكائنات بوصفه مسألة انحدار واحدة: شبكة عصبية واحدة تتنبأ مباشرةً بمربعات الإحاطة واحتمالات الفئات انطلاقاً من الصورة الكاملة في تمريرة واحدة. تُقسَّم الصورة إلى شبكة بأبعاد S×S، وكل خلية تتنبأ بعدد B من مربعات الإحاطة مع درجات ثقة وعدد C من احتمالات الفئات. تعمل هذه البنية الموحَّدة بسرعة 45 إطاراً في الثانية (و155 إطاراً لنسخة Fast YOLO)، ما يتيح مع دقة تنافسية. ولأنّ YOLO ينظر إلى الصورة ككل، فإنه يخطئ في الخلفية أقل بكثير من الطرق القائمة على ترشيح المناطق.
الأثر
أطلق YOLO ثورة الكاشفات أحادية المرحلة، وأثبت أنّ السرعة والدقة ليسا بالضرورة على طرفيْ نقيض. ألهمَ SSD وسلسلة YOLOv2 حتى v8 وRetinaNet وكل كاشف حديث يعمل في الزمن الحقيقي. غيّرت فكرة أنّ الرصد يمكن أن يتم عبر شبكة واحدة قابلة للتمايز من البداية إلى النهاية الافتراضَ السائد في المجال — من «رشِّح ثم صنِّف» إلى «تنبّأ بكل شيء دفعة واحدة». واليوم تُشغِّل سلالة YOLO المركباتِ ذاتية القيادة وأنظمة المراقبة والتصوير الطبي وكاميرات الهواتف حول العالم.
تخيّل أنظمة التقليدية كحارس أمن يتفقّد غرف المبنى واحدة تلو الأخرى، يطرق كل باب ويسأل: «هل من شيء هنا؟». بحلول الوقت الذي ينتهي فيه من جولته، يكون الدخيل قد انتقل إلى مكان آخر.
YOLO يختلف تماماً — فهو أشبه بـكاميرا مراقبة مثبّتة في السقف: نظرة واسعة واحدة تكشف الطابق بأكمله — كل شخص وكل كائن وكل موقع — في لقطة واحدة. لا حاجة لفتح الأبواب باباً باباً، فهو يرى المشهد كاملاً دفعةً واحدة.
هذا هو الرهان الجوهري: بدلاً من البحث المتسلسل المتأني، يراهن YOLO على أنّ نظرة ذكية واحدة على المشهد بأكمله أسرع وكافية في الوقت نفسه.
المشكلة: مسارات الرصد بطيئة ومُجزَّأة
قبل ظهور YOLO، كان رصد الكائنات يمرّ بعدة مراحل منفصلة. المقاربة السائدة آنذاك — R-CNN وما تفرّع عنها — اتّبعت منهج «رشِّح ثم صنِّف»:
- توليد المناطق المرشّحة: خوارزميات مثل تمسح الصورة وتقترح نحو 2000 مستطيل قد يحتوي على كائنات.
- تصنيف كل منطقة: تستخلص السمات من كل منطقة مرشّحة، ثم يقرّر مصنِّف ما إذا كان فيها كائن وما نوعه.
- تنقيح المربعات: معالجة لاحقة تضبط إحداثيات وتُزيل التكرارات.
كل مرحلة كانت تُدرَّب باستقلال وبأهداف مختلفة. كان المسار دقيقاً لكنه يعاني من مشكلتين جوهريتين: أولاً كان بطيئاً (R-CNN يستغرق نحو 47 ثانية للصورة الواحدة، وحتى Fast R-CNN لم يبلغ سرعة الزمن الحقيقي)، وثانياً كل مكوّن كان يُحسَّن بمعزل عن بقية المسار — فمولّد المناطق لا يعرف ما يحتاجه المصنِّف، والمصنِّف لا يعرف ما يقترحه المولّد.
الفكرة: الرصد بوصفه مسألة انحدار
فكرة YOLO جذرية في بساطتها: عامل الرصد كمسألة واحدة. بدلاً من ترشيح مناطق ثم تصنيفها، تنبّأ بجميع مربعات الإحاطة واحتمالات الفئات للصورة بأكملها في آنٍ واحد — من البكسلات مباشرةً إلى النتائج النهائية في تمريرة واحدة عبر الشبكة.
الآلية كالتالي: تُقسَم الصورة إلى شبكة بأبعاد S × S (في الورقة الأصلية 7 × 7 = 49 خلية). كل مسؤولة عن رصد الكائنات التي يقع مركزها داخلها. تتنبأ كل خلية بما يلي:
- B من مربعات الإحاطة (B = 2 في الورقة)، ولكل مربع 5 قيم: إحداثيات المركز (x, y) والعرض والارتفاع (w, h) بالإضافة إلى
- C من احتمالات الفئات (C = 20 لمجموعة بيانات PASCAL VOC)
تعبّر درجة الثقة عن أمرين في آن واحد: احتمال وجود كائن داخل المربع، ومدى دقة المربع نفسه. رياضياً تساوي ، حيث يقيس معيار (IoU) درجة تطابق المربع المتنبَّأ به مع . إن لم يكن هناك كائن تكون درجة الثقة صفراً، وإن وُجد كائن فهي تساوي الـIoU بين المربع المتنبَّأ به والمربع الفعلي.
الخرج النهائي واحد بأبعاد S × S × (B × 5 + C). بالنسبة لـPASCAL VOC حيث S=7 وB=2 وC=20 يكون الناتج 7 × 7 × 30 = 1470 قيمة — عملية الرصد بأكملها مضغوطة في تنبؤ كثيف واحد.
قياس التطابق: معيار التقاطع على الاتحاد
كيف نحكم على مربع الإحاطة المتنبَّأ به: هل هو «صحيح» أم لا؟ نحتاج إلى مقياس يعطي 1.0 حين يتطابق المربع المتنبَّأ به تماماً مع الحقيقة المرجعية، ويعطي 0.0 حين لا يوجد أيّ تداخل بينهما. هذا المقياس هو (IoU).
الفكرة بسيطة كمخطط فِن: التقاطع هو المساحة المشتركة بين المربعين، والاتحاد هو المساحة الكلية التي يغطيها أيٌّ منهما. الـIoU = التقاطع ÷ الاتحاد. قيمة 0.5 فما فوق تُعدّ عادةً رصداً «صحيحاً».
يلعب الـIoU دوراً مزدوجاً في YOLO. أثناء يكون هو القيمة المستهدفة لـدرجة الثقة: تتعلّم الشبكة أن تتنبأ بمدى تطابق مربعاتها مع الكائنات الحقيقية. وأثناء التقييم يحدّد الـIoU ما إذا كان المربع يُحسب أم .
بنية الشبكة
بنية YOLO مستوحاة من شبكة GoogLeNet، لكنها تستبدل وحدات Inception بتركيب أبسط: طبقات تقليص 1×1 تليها 3×3. تتكوّن البنية من:
- 24 طبقة التفافية تستخلص بمستويات تجريد متصاعدة — من الحواف في الطبقات الأولى إلى أجزاء الكائنات والأشكال الكاملة في الطبقات الأعمق. يشبه ذلك مراحل الرؤية البشرية: العين ترى الخطوط أولاً ثم الدماغ يجمّعها في أشكال ذات معنى.
- تأخذان النهائية وتُنتجان الموتّر الناتج بأبعاد S × S × (B × 5 + C)
تستقبل الشبكة صورة بأبعاد 448 × 448 بكسل (أكبر من 224 × 224 المعتادة في المصنِّفات، لأنّ الرصد يحتاج دقة مكانية أعلى). تقلّص الطبقات الالتفافية الأبعاد المكانية تدريجياً مع زيادة عمق القنوات، فتبني تمثيلاً غنياً وهرمياً.
وهناك نسخة خفيفة — Fast YOLO — بتسع طبقات التفافية فقط وعدد أقل من . تُضحّي ببعض الدقة مقابل سرعة استثنائية: 155 إطاراً في الثانية، ما يجعلها من أسرع الكاشفات التي نُشرت على الإطلاق.
دالة الخسارة: معادلة واحدة لتدريب كل شيء
بما أنّ YOLO شبكة واحدة، فهو يحتاج واحدة تُعلّمه ثلاثة أشياء في الوقت نفسه: أين توجد الكائنات (التموضع)، وما مدى ثقة كل رصد (الكائنية)، وما نوع كل كائن (التصنيف).
تعتمد دالة الخسارة على مجموع مربعات الخطأ لأنه سريع الحساب، لكن مع ترجيح مدروس لمعالجة اختلال مهم: غالبية خلايا الشبكة لا تحتوي على كائنات. بدون تعديل، ستطغى إشارة «لا يوجد كائن» على عمليات الرصد الفعلية. يعالج YOLO هذا بوزنيْ موازنة:
- — يضخّم خسارة التموضع حتى تهتم الشبكة أكثر بضبط المربعات بدقة
- — يخفّض خسارة الثقة للخلايا الفارغة كي لا تهيمن على التدريب
هناك لمسة ذكية أخرى: تستخدم الدالة الجذر التربيعي للعرض والارتفاع بدل القيم المباشرة. السبب؟ خطأ مقداره بكسلان في مربع حجمه 10 بكسل يختلف كثيراً عن الخطأ نفسه في مربع حجمه 200 بكسل. الجذر التربيعي يضغط القيم الكبيرة، فيصبح المقياس أكثر حساسية لأخطاء الكائنات الصغيرة — حيلة تسوية بسيطة وفعّالة.
تنقية النتائج: الكبت غير الأعظمي
يُنتج YOLO 98 مربع إحاطة لكل صورة (7 × 7 خلية × مربعان لكل خلية). كثير من هذه المربعات يتداخل بشدة حول الكائن نفسه — فقد ترصد عدة خلايا متجاورة السيارة ذاتها وتُنتج مربعات مكرّرة.
يتولى (NMS) تنظيف هذه النتائج في ثلاث خطوات:
- تجاهل كل مربع درجة ثقته أقل من عتبة معيّنة (مثلاً 0.25)
- اختيار المربع الأعلى ثقة
- إزالة أي مربع متبقٍّ يتداخل مع المربع المختار بأكثر من عتبة IoU (مثلاً 0.5) — فهو على الأرجح يرصد الكائن نفسه
تتكرر الخطوتان 2 و3 حتى لا تبقى مربعات. النتيجة: مجموعة نظيفة من عمليات الرصد، عادةً مربع واحد لكل كائن.
تخيّل الأمر كفصل دراسي يرفع فيه عدة طلاب أيديهم للإجابة عن السؤال نفسه. الكبت غير الأعظمي يختار الطالب الأكثر ثقة بإجابته ويطلب من الباقين ذوي الإجابات المشابهة إنزال أيديهم.
استراتيجية التدريب وقرارات التصميم
ثمة تفاصيل عملية عدّة تجعل YOLO يعمل بكفاءة:
على ImageNet: أول 20 طبقة التفافية تُدرَّب مسبقاً على تصنيف ImageNet بأبعاد 224 × 224. هذا يمنح الشبكة قدرة قوية على العامة قبل أن تواجه أي مهمة رصد. بعد ذلك تُضاعَف الدقة إلى 448 × 448 عند للرصد، لأنّ تحديد مواقع الكائنات يتطلب تفاصيل مكانية أدق من مجرّد التصنيف.
تنشيطات : تستخدم جميع الطبقات دالة Leaky ReLU (بميل 0.1 للقيم السالبة) بدلاً من القياسية. الهدف منع ظاهرة «العصبونات الميتة» — وحدات تتوقف عن التعلّم لأنّ تدرّجها ينعدم عند كل المدخلات السالبة.
مكثّف: تغيير عشوائي في الحجم، وانزياحات تصل إلى 20% من أبعاد الصورة، وتعديلات في التعريض والتشبع ضمن فضاء الألوان HSV. هذه التعزيزات تُجبر الشبكة على التعامل مع أحجام مختلفة ومواقع متباينة وظروف إضاءة متنوعة.
تعيين : حين تُنتج خلية واحدة عدة مربعات إحاطة، يُعيَّن فقط المربع ذو أعلى IoU مع الحقيقة المرجعية بوصفه «المتنبئ المسؤول». هذا التخصص يدفع كل متنبئ نحو التحسّن في وأحجام كائنات معيّنة مع الوقت.
نقاط القوة والقيود
السرعة مقابل الدقة: حدود الزمن الحقيقي
يُفهم إسهام YOLO بوضوح حين ننظر إلى مشهد السرعة والدقة في تلك الحقبة. في أحد الطرفين كان نموذج الأجزاء القابلة للتشوّه (DPM) يحقق 33.7 بأقل من إطار واحد في الثانية. وفي الطرف المقابل حقق Fast YOLO دقة 52.7 mAP بسرعة 155 إطاراً في الثانية.
المقارنة المحورية هي مع Fast R-CNN: حقق 70.0 mAP لكن بسرعة 0.5 إطار/ثانية فحسب. في المقابل حقق YOLO دقة 63.4 mAP بسرعة 45 إطاراً/ثانية — تراجع طفيف في الدقة مقابل قفزة 90 ضعفاً في السرعة. والأهم أنّه عند دمج نتائج YOLO مع Fast R-CNN (باستخدام YOLO لحذف الإنذارات الكاذبة في الخلفية)، بلغ المزيج 75.0 mAP — أفضل نتيجة على مجموعة VOC 2007 حينها.
كشف ذلك عن أمر مهم: YOLO وR-CNN يرتكبان أخطاء متكاملة. R-CNN دقيق لكنّ الخلفية تخدعه، بينما YOLO سريع وينظر إلى الصورة بشمولية. معاً يصبحان أقوى من كلٍّ منهما بمفرده.
الفكرة في شيفرة برمجية
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def yolo_predict(image, model, S=7, B=2, C=20):
"""
شغّل YOLO على صورة واحدة.
يُرجع: موتّر بأبعاد S×S×(B*5 + C) من التنبؤات.
كل خلية: [x1,y1,w1,h1,conf1, x2,y2,w2,h2,conf2, p1,...,p20]
"""
# الصورة بأكملها ← تمريرة أمامية واحدة ← موتّر واحد
prediction = model(image) # الشكل: (S, S, B*5 + C) = (7, 7, 30)
return prediction
def decode_predictions(pred, S=7, B=2, C=20, conf_thresh=0.25):
"""فكّ ترميز خرج YOLO إلى مربعات إحاطة قابلة للاستخدام."""
boxes = []
for row in range(S):
for col in range(S):
cell = pred[row, col]
class_probs = cell[B*5:] # آخر C قيمة = احتمالات الفئات
for b in range(B):
offset = b * 5
x, y = cell[offset], cell[offset+1] # المركز (نسبي للخلية)
w, h = cell[offset+2], cell[offset+3] # الحجم (نسبي للصورة)
conf = cell[offset+4] # P(كائن) × IoU
# الدرجة النهائية = الثقة × احتمال الفئة
scores = conf * class_probs
best_class = np.argmax(scores)
best_score = scores[best_class]
if best_score > conf_thresh:
# تحويل الإحداثيات من نسبية للخلية إلى نسبية للصورة
abs_x = (col + x) / S
abs_y = (row + y) / S
boxes.append((abs_x, abs_y, w, h, best_score, best_class))
return boxes
def nms(boxes, iou_thresh=0.5):
"""الكبت غير الأعظمي: أبقِ فقط أفضل مربع لكل كائن."""
boxes = sorted(boxes, key=lambda b: b[4], reverse=True) # ترتيب تنازلي حسب الدرجة
keep = []
while boxes:
best = boxes.pop(0)
keep.append(best)
boxes = [b for b in boxes if iou(best, b) < iou_thresh]
return keep
# هذا هو المسار بأكمله:
# 1. تمريرة أمامية واحدة ← موتّر S×S×30
# 2. فكّ الترميز إلى مربعات مع درجات
# 3. كبت غير أعظمي لإزالة التكرارات
# لا مناطق مرشّحة. لا مسار متعدد المراحل. فقط انظر مرة واحدة.لماذا كان YOLO مهماً
2014
R-CNN — بداية الرصد القائم على المناطق المرشّحة
اقترح Girshick وفريقه استخلاص نحو 2000 منطقة مرشّحة، واستخراج سمات الشبكة الالتفافية من كل واحدة، ثم التصنيف بآلات المتجهات الداعمة. النتائج دقيقة لكنّ المعالجة تستغرق 47 ثانية لكل صورة.
2015
Faster R-CNN — ترشيح مناطق قابل للتعلّم
استبدل Ren وفريقه البحث الانتقائي بشبكة ترشيح المناطق (RPN)، فأصبح الترشيح جزءاً من الشبكة نفسها. أسرع، لكنه لا يزال ذا مرحلتين.
2015
YOLO — ثورة المرحلة الواحدة
أعاد Redmon وفريقه صياغة الرصد بوصفه مسألة انحدار. نظرة واحدة، شبكة واحدة، سرعة الزمن الحقيقي. غيّروا الافتراض السائد في المجال.
2016
SSD — رصد أحادي المرحلة متعدد المقاييس
أجرى Liu وفريقه التنبؤ من خرائط سمات متعددة بدقّات مختلفة، ما حسّن رصد الكائنات الصغيرة مع الحفاظ على سرعة الكاشف أحادي المرحلة.
2017
YOLOv2/YOLO9000 — أفضل وأسرع وأقوى
أُضيفت تسوية الدُفعات ومربعات المرساة والتدريب متعدد المقاييس وطبقات التمرير. استطاع YOLO9000 رصد أكثر من 9000 فئة عبر تصنيف هرمي.
2017
RetinaNet — الخسارة البؤرية تحلّ اختلال التوزيع بين الفئات
أظهر Lin وفريقه أنّ الكاشفات أحادية المرحلة تأخّرت في الدقة بسبب الاختلال الحاد بين المقدمة والخلفية. الخسارة البؤرية خفّضت وزن السلبيات السهلة، فسدّت الفجوة مع الكاشفات ذات المرحلتين
2018
YOLOv3 — تنبؤات متعددة المقاييس
أضاف Redmon تنبؤات على ثلاثة مقاييس باستخدام هرم السمات، ما حسّن رصد الكائنات الصغيرة بشكل ملحوظ مع الحفاظ على سرعة الزمن الحقيقي.
2023
YOLOv8 — إطار عمل حديث موحّد
أصدرت Ultralytics نسخة YOLOv8 بتصميم بدون مراسٍ ورؤوس رصد منفصلة وواجهة برمجية نظيفة. أصبح YOLO عائلة نماذج ومعياراً صناعياً ف
لم يجعل YOLO الرصد أسرع فحسب — بل أعاد تعريف ما يمكن أن يكون عليه الرصد. قبل YOLO كان الرصد في الزمن الحقيقي يُعدّ أمراً غير واقعي. بعد YOLO أصبح هو التوقع الأساسي. كل كاشف أحادي المرحلة — من SSD إلى YOLOv3 إلى RetinaNet — يعود في أصله إلى رهان هذه الورقة المركزي: نظرة واحدة تكفي.
المرجعRedmon, Divvala, Girshick, Farhadi. You Only Look Once: Unified, Real-Time Object Detection. CVPR, 2016.
مصطلحات هذه الورقة
- رصد وتحديد الكائناتObject Detection
- مربع الإحاطةBounding Box
- خلية الشبكةGrid Cell
- درجة الثقةConfidence Score
- كبت غير أعظميNon-Maximum Suppression
- التقاطع على الاتحادIntersection over Union
- الكاشف أحادي المرحلةSingle-Stage Detector
- الرصد في الزمن الحقيقيReal-Time Detection
- المتنبئ المسؤولResponsible Predictor
- الرصد من طرف إلى طرفEnd-to-End Detection