مقدمة عن YOLO (You Only Look Once)
تُعتبر تقنية YOLO (You Only Look Once) واحدة من أسرع وأشهر الخوارزميات المستخدمة في اكتشاف الأجسام (Object Detection). تم تصميم YOLO لتحديد مواقع وتصنيف الكائنات في الصور والفيديوهات بشكل فوري. تتميز هذه التقنية بسرعة ودقة كبيرة، مما يجعلها مناسبة لتطبيقات الرؤية الحاسوبية التي تتطلب معالجة في الوقت الحقيقي مثل السيارات الذاتية القيادة والمراقبة الذكية.

محتويات المقال:
- مقدمة عن YOLO
- مميزات YOLO
- كيفية عمل YOLO
- خطوات التدريب على YOLO
- مقارنة بين إصدارات YOLO
- استخدامات YOLO الشائعة
- الخلاصة والأسئلة الشائعة
مميزات YOLO
تتعدد مميزات YOLO مقارنةً بخوارزميات اكتشاف الأجسام الأخرى مثل R-CNN وFaster R-CNN. من أهم مميزاتها:
1. السرعة العالية:
تعمل YOLO بسرعة كبيرة حيث يتم الكشف عن الأجسام في الوقت الحقيقي من خلال معالجة الصورة مرة واحدة فقط، ما يميزها عن الخوارزميات الأخرى التي تحتاج إلى معالجة الصورة في عدة مراحل.
2. الدقة:
رغم السرعة العالية، فإن YOLO تقدم دقة جيدة في اكتشاف الأجسام، حيث تقسم الصورة إلى شبكة وتحدد المربعات المحيطة بالكائنات داخل الصورة مع تصنيفها.
3. نظرة شاملة للصورة:
YOLO تقوم بمعالجة الصورة بشكل كامل في خطوة واحدة، مما يعني أنها تنظر إلى الصورة بأكملها وتفهم العلاقة بين الأجسام المختلفة، وهذا يحسن من نتائج اكتشاف الأجسام المتداخلة أو المتقاربة.
كيفية عمل YOLO
تقوم YOLO بتقسيم الصورة إلى شبكة من الخلايا (Grid) وتحدد داخل كل خلية ما إذا كانت تحتوي على جسم أم لا. يتم ذلك عبر المراحل التالية:
- تقسيم الصورة: تقسم الصورة إلى شبكة مكونة من خلايا (مثلاً 13×13 أو 19×19 خلايا).
- توقع المربعات: كل خلية تقوم بتحديد عدة مربعات تمثل احتمالية وجود جسم بداخلها.
- تصنيف الأجسام: بعد تحديد المربعات، يتم تصنيف الكائنات الموجودة في تلك المربعات مثل السيارات، الأشخاص، الحيوانات، وغيرها.
- تصحيح النتائج: في حالة تداخل المربعات أو وجود عدة مربعات تمثل نفس الكائن، تستخدم YOLO تقنية Non-Maximum Suppression لتحديد المربع الأكثر دقة وإزالة التكرار.
خطوات التدريب على YOLO
لتدريب نموذج YOLO على بيانات جديدة، يجب اتباع الخطوات التالية:
1. جمع البيانات:
قم بجمع الصور التي تحتوي على الأجسام التي ترغب في اكتشافها وتصنيفها.
2. تحضير البيانات:
يجب أن تكون الصور مصحوبة بملفات التسمية (annotations) التي تحتوي على معلومات حول الأجسام في الصورة، مثل نوع الكائن وإحداثيات المربعات المحيطة به.
3. اختيار النموذج المناسب:
حدد الإصدار المناسب من YOLO (مثل YOLOv3، YOLOv4، أو YOLOv5) حسب احتياجاتك.
4. التدريب:
استخدم مكتبات مثل Darknet أو PyTorch لتدريب النموذج على البيانات الخاصة بك.
5. الاختبار والتحسين:
بعد التدريب، قم باختبار النموذج على مجموعة جديدة من البيانات لتحسين الدقة والسرعة.
مقارنة بين إصدارات YOLO
تم تطوير عدة إصدارات من YOLO مع مرور الوقت، وكل إصدار يأتي بتحسينات جديدة من حيث الدقة والسرعة. الجدول التالي يوضح مقارنة بين بعض هذه الإصدارات:
الإصدار | السرعة (FPS) | الدقة (mAP) | مميزات إضافية |
---|---|---|---|
YOLOv3 | 30 FPS | 57.9% | تحسينات في اكتشاف الأجسام الصغيرة |
YOLOv4 | 62 FPS | 65.7% | دعم أفضل للتدريب على بطاقات الرسومات |
YOLOv5 | 140 FPS | 66% | حجم أصغر وأداء أفضل على الأجهزة المحدودة |
استخدامات YOLO الشائعة
تم استخدام YOLO في العديد من التطبيقات التي تعتمد على اكتشاف الأجسام في الوقت الحقيقي، ومنها:
1. السيارات ذاتية القيادة:
تعتمد السيارات ذاتية القيادة على YOLO لاكتشاف المشاة، السيارات، والعوائق في الطرق بشكل فوري.
2. أنظمة المراقبة:
تستخدم كاميرات المراقبة الذكية YOLO لاكتشاف التهديدات مثل الأشخاص غير المصرح لهم أو الأجسام الخطيرة.
3. التجارة الإلكترونية:
يتم استخدام YOLO في تصنيف المنتجات في الصور بشكل تلقائي لتحسين تجربة البحث في المتاجر الإلكترونية.
كيفية استخدام YOLO مع Python
لتطبيق YOLO في بيئة Python، يتم استخدام مكتبات شهيرة مثل OpenCV أو مكتبة Darknet التي تدعم الخوارزمية بشكل مباشر. في هذا الجزء سنشرح كيفية استخدام YOLO لاكتشاف الأجسام عبر Python باستخدام OpenCV.
1. تثبيت المتطلبات:
أولاً، تحتاج إلى تثبيت مكتبة OpenCV ودعم YOLO من خلال تحميل ملفات التدريب المناسبة (مثل cfg، والـ weights) وملف الأسماء للأجسام (coco.names).
تثبيت مكتبة OpenCV:
pip install opencv-python
Python2. تحميل ملفات YOLO:
للاستخدام مع YOLOv3، ستحتاج إلى ثلاثة ملفات أساسية:
- yolov3.cfg: ملف تكوين الشبكة العصبية.
- yolov3.weights: الأوزان المدربة مسبقًا.
- coco.names: قائمة بأسماء الأجسام التي تم تدريب YOLO عليها.
3. كود لاكتشاف الأجسام باستخدام YOLO:
import cv2
import numpy as np
# تحميل ملفات YOLO
net = cv2.dnn.readNet('yolov3.weights', 'yolov3.cfg')
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]
classes = []
with open("coco.names", "r") as f:
classes = [line.strip() for line in f.readlines()]
# تحميل الصورة
img = cv2.imread("image.jpg")
height, width, channels = img.shape
# تجهيز الصورة لتمريرها إلى YOLO
blob = cv2.dnn.blobFromImage(img, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)
outs = net.forward(output_layers)
# تحليل نتائج YOLO
class_ids = []
confidences = []
boxes = []
for out in outs:
for detection in out:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5:
center_x = int(detection[0] * width)
center_y = int(detection[1] * height)
w = int(detection[2] * width)
h = int(detection[3] * height)
# إحداثيات المربع المحيط
x = int(center_x - w / 2)
y = int(center_y - h / 2)
boxes.append([x, y, w, h])
confidences.append(float(confidence))
class_ids.append(class_id)
# استخدام Non-Maximum Suppression لتجنب المربعات المتداخلة
indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
# رسم المربعات حول الأجسام المكتشفة
for i in range(len(boxes)):
if i in indexes:
x, y, w, h = boxes[i]
label = str(classes[class_ids[i]])
color = (0, 255, 0)
cv2.rectangle(img, (x, y), (x + w, y + h), color, 2)
cv2.putText(img, label, (x, y + 30), cv2.FONT_HERSHEY_PLAIN, 2, color, 2)
# عرض الصورة النهائية
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
Pythonشرح الكود:
- تحميل ملفات YOLO: يتم تحميل ملفات التدريب (cfg، و weights) وأسماء الأجسام.
- معالجة الصورة: يتم تجهيز الصورة لتمريرها إلى نموذج YOLO وتحليلها.
- اكتشاف الأجسام: يتم تحليل النتائج لتحديد الأجسام ورسم المربعات المحيطة بها.
- Non-Maximum Suppression: تستخدم لتجنب رسم مربعات متداخلة على نفس الجسم.
مقارنة بين YOLO وخوارزميات أخرى لاكتشاف الأجسام
يوضح الجدول التالي مقارنة بين YOLO وبعض الخوارزميات الأخرى المستخدمة في اكتشاف الأجسام:
الخوارزمية | السرعة (FPS) | الدقة (mAP) | الميزات |
---|---|---|---|
YOLO | عالي | جيد | مناسب للوقت الحقيقي |
R-CNN | منخفضة | عالية جدًا | دقيق لكن بطيء |
Faster R-CNN | متوسطة | عالية | تحسين السرعة مع دقة جيدة |
SSD | عالي | متوسط | سريع لكن يقلل من دقة الأجسام الصغيرة |
الخلاصة
تقنية YOLO تمثل ثورة في مجال اكتشاف الأجسام بفضل سرعتها العالية وكفاءتها في الوقت الحقيقي. تعتبر مناسبة لتطبيقات الرؤية الحاسوبية التي تتطلب اكتشاف سريع للأجسام مثل المراقبة الذكية والسيارات ذاتية القيادة. مع التحسين المستمر في الإصدارات الجديدة مثل YOLOv5، أصبحت التقنية أسرع وأكثر دقة، مما يجعلها الخيار الأمثل للكثير من المطورين.
الأسئلة الشائعة (FAQ)
1. ما هو YOLO؟
YOLO هي خوارزمية لاكتشاف الأجسام تعتمد على تحليل الصورة مرة واحدة فقط، وتعمل بسرعة عالية لاكتشاف وتصنيف الأجسام في الوقت الحقيقي.
2. ما هي الاستخدامات الشائعة لـ YOLO؟
تستخدم YOLO في أنظمة المراقبة، السيارات ذاتية القيادة، تحليل الفيديوهات، وغيرها من التطبيقات التي تتطلب اكتشاف الأجسام في الوقت الحقيقي.
3. هل YOLO مناسب للاستخدام على الأجهزة محدودة الموارد؟
نعم، خاصة مع الإصدارات الجديدة مثل YOLOv5 التي توفر أداء عالي حتى على الأجهزة ذات الموارد المحدودة.