اكتشاف الأجسام باستخدام YOLO: دليل عملي شامل للمطورين

دليل متكامل للمطور يشرح YOLO من المفاهيم والبيانات إلى التدريب والتقييم والنشر الآمن في الإنتاج مع أمثلة Python عملية.
ما هو اكتشاف الأجسام باستخدام YOLO؟
YOLO، اختصار لعبارة You Only Look Once، هو عائلة من نماذج اكتشاف الأجسام أحادية المرحلة. بخلاف تصنيف الصور الذي يعطي الصورة كلها اسماً واحداً، يعيد كاشف الأجسام قائمة من النتائج؛ لكل نتيجة فئة، ودرجة ثقة، وإحداثيات صندوق يحيط بالجسم.
تُستخدم YOLO في مراقبة المرور، وفحص الجودة في المصانع، والروبوتات، والزراعة، وتحليل الرياضة، وتطبيقات المتاجر، ومعالجة الصور والفيديو لحظياً. سبب شعبيتها هو التوازن بين الدقة والسرعة وحجم النموذج وسهولة النشر.
المفاهيم الأساسية
- Bounding Box: مستطيل يحدد مكان الجسم.
- Confidence: تقدير لاحتمال صحة النتيجة.
- IoU: نسبة مساحة تقاطع صندوقين إلى مساحة اتحادهما.
- Precision: نسبة النتائج الصحيحة من كل النتائج التي أعادها النموذج.
- Recall: نسبة الأجسام الحقيقية التي نجح النموذج في العثور عليها.
- mAP: مقياس شامل للأداء عبر الفئات ومستويات التداخل.
رفع حد الثقة يقلل الإنذارات الخاطئة غالباً، لكنه قد يجعل النموذج يفوّت أجساماً صعبة. لذلك يجب اختيار الحد وفق تكلفة الخطأ في المشروع.
كيف يعمل خط YOLO؟
- قراءة الصورة أو إطار الفيديو.
- تغيير الحجم والتطبيع بالطريقة التي يتوقعها النموذج.
- تمرير البيانات عبر الشبكة العصبية.
- تحويل المخرجات إلى صناديق وفئات ودرجات.
- إزالة النتائج الضعيفة والمتكررة باستخدام NMS.
- إعادة الإحداثيات إلى حجم الصورة الأصلي.
يتكوّن النموذج عادة من Backbone لاستخراج السمات، وNeck لدمج السمات متعددة المقاييس، وDetection Head لإنتاج النتائج.
تثبيت بيئة العمل
python -m venv .venv
source .venv/bin/activate
pip install ultralytics opencv-python
أول تجربة على صورة
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
result = model.predict("street.jpg", conf=0.35, imgsz=640)[0]
for box in result.boxes:
class_id = int(box.cls.item())
print({
"class": model.names[class_id],
"confidence": float(box.conf.item()),
"xyxy": box.xyxy[0].tolist(),
})
import cv2
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
camera = cv2.VideoCapture(0)
while camera.isOpened():
ok, frame = camera.read()
if not ok:
break
result = model.predict(frame, conf=0.4, verbose=False)[0]
cv2.imshow("YOLO", result.plot())
if cv2.waitKey(1) & 0xFF == ord("q"):
break
camera.release()
cv2.destroyAllWindows()
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
model.train(
data="dataset.yaml",
epochs=100,
imgsz=640,
batch=16,
device=0,
project="runs/safety",
name="baseline",
)
path: /absolute/path/to/dataset
train: images/train
val: images/val
test: images/test
names:
0: person
1: helmet
2: safety_vest
ابدأ بنموذج صغير للحصول على خط أساس للزمن واستهلاك الذاكرة، ثم انتقل إلى نموذج أكبر فقط إذا أثبت القياس أن تحسن الدقة يستحق التكلفة.
تجهيز البيانات والتعليقات
يحتوي كل سطر في ملف YOLO عادة على:
class_id x_center y_center width height
تكون الإحداثيات نسبية بين 0 و1. اجعل مجلدات الصور والملصقات منفصلة إلى train وval وtest. لا تقسّم إطارات فيديو متجاورة عشوائياً بين التدريب والتحقق؛ فهي شبه متطابقة وتؤدي إلى تسرب بيانات ونتائج مضللة.
قائمة فحص جودة البيانات
- ضع قاعدة موحدة للأجسام المحجوبة جزئياً.
- اجعل الصناديق محكمة ومتناسقة.
- علّم كل الأجسام المطلوبة، لا الحالات السهلة فقط.
- حدّد سياسة الانعكاسات والشاشات والصور المطبوعة.
- راجع توازن الفئات وأحجام الأجسام.
- دقّق عينة من عمل كل معلّق.
- رقّم إصدارات البيانات ودليل التعليم.
التدريب والتقييم
استخدم أوزاناً مدرّبة مسبقاً في معظم المشاريع. راقب منحنيات التدريب وصور التنبؤ الفعلية؛ زيادة عدد epochs لا تصلح بيانات خاطئة أو سيناريوهات ناقصة.
لا تعتمد على رقم mAP واحد. حلّل الأداء حسب الفئة، وحجم الجسم، والكاميرا، والإضاءة، والطقس، والضبابية، والحجب، والمسافة. أنشئ معرض أخطاء يضم false positives وfalse negatives وأخطاء تحديد الموقع والنتائج المكررة.
مشروع عملي ومعالجة دفعة صور
يمكنك المرور على صور مجلد، تشغيل model.predict لكل صورة، ثم حفظ class وconfidence وxyxy في JSON. في الإنتاج أضف التحقق من المدخلات، والسجلات المنظمة، وحدود الموارد، وتسخين النموذج، ومقاييس التشغيل.
بناء API باستخدام FastAPI
حمّل النموذج مرة واحدة عند بدء التطبيق، لا مع كل طلب. افحص حجم الملف ونوعه بعد فك الصورة، وضع حداً للأبعاد. أعد JSON منظم، واستخدم queue للصور الكبيرة والفيديو الطويل. الطلب المتزامن مناسب للصور الصغيرة فقط.
تحسين الأداء
قِس الزمن من البداية إلى النهاية، وليس inference فقط. فك الصورة، وتغيير الحجم، ونقل البيانات، وNMS، والرسم، والتسلسل، والشبكة كلها مهمة. جرّب FP16 على الأجهزة المدعومة، وحدد concurrency، وراقب p50 وp95 وp99 والذاكرة وطول الصف وعدد الإطارات المسقطة.
عند التصدير إلى ONNX أو TensorRT أو OpenVINO، نفّذ اختبار انحدار يقارن النتائج فئة بفئة مع النموذج الأصلي.
الأمان والخصوصية
قد تحتوي الصور على وجوه ولوحات مركبات وشاشات وعناوين وأماكن خاصة. طبّق تقليل البيانات، وحدود الاحتفاظ، والتحكم بالوصول، والتشفير. لا تثق بامتداد الملف وحده ولا تحمل ملف نموذج غير موثوق. مخرجات YOLO احتمالية، لذلك لا تجعلها القرار الوحيد في حالات طبية أو قانونية أو وظيفية أو سلامة عالية المخاطر.
أخطاء شائعة
- تسرب صور متشابهة بين مجموعات البيانات.
- قواعد تعليم غير متناسقة.
- تجاهل فشل فئة مهمة خلف mAP عام جيد.
- الاختبار على صور نظيفة فقط.
- حد ثقة واحد لكل الفئات دون قياس.
- تجاهل زمن p99.
- صف فيديو غير محدود.
- تصدير النموذج بلا اختبارات مقارنة.
- تسجيل الصور الخاصة افتراضياً.
- عدم مراقبة انجراف البيانات.
أسئلة مقابلات
لماذا تُعد YOLO أحادية المرحلة؟
لأنها تتنبأ بالمواقع والفئات مباشرة دون مرحلة مستقلة لاقتراح المناطق.
ما وظيفة IoU؟
قياس مقدار التداخل بين الصندوق المتوقع والصندوق الحقيقي.
أيهما أهم: Precision أم Recall؟
يعتمد على تكلفة الخطأ. اكتشاف مخاطر السلامة قد يفضل Recall، بينما الحظر الآلي يحتاج Precision مرتفعاً.
كيف تحسّن اكتشاف الأجسام الصغيرة؟
حسّن البيانات عالية الدقة والملصقات، واضبط حجم الإدخال والتعزيزات، واختبر التقسيم إلى بلاطات عند الحاجة.
الخلاصة
مشروع YOLO الناجح هو مشروع بيانات وأنظمة، وليس أمر تدريب فقط. ابدأ بخط أساس قابل للقياس، وابنِ بيانات موثوقة، وحلّل الأخطاء حسب السيناريو، ثم حسّن الأداء بعد قياس المسار كاملاً.
المراجع
مقالات مختارة

Kafka في الإنتاج: استراتيجية الأقسام وتأخر المستهلكين والاعتمادية وخطة الحوادث
نجاح تجربة إرسال واستقبال حدث لا يكفي للإنتاج. صمّم الأقسام والسعة والاحتفاظ والمراقبة وخطة تعافٍ قابلة للتنفيذ.

Laravel وKafka بلا أحداث مفقودة: Outbox والمعالجة الآمنة عند التكرار مع PostgreSQL
حفظ الطلب في قاعدة البيانات ونشر الحدث إلى Kafka عمليتان منفصلتان. تعلّم كيف يحمي Outbox من فقد الحدث وكيف يمنع المستهلك آثار التكرار.

شرح Apache Kafka: الموضوعات والأقسام ومجموعات المستهلكين وأول تدفق أحداث
اتبع حدث طلب من المنتج إلى عدة مستهلكين، ثم جرّب Kafka محلياً وافهم كيف تعمل الأقسام والترتيب وإعادة القراءة.
التعليقات
0 تعليقاتلا توجد تعليقات معتمدة بعد. قد تنتظر الردود الجديدة المراجعة.