التنبؤ بالنموذج باستخدام Ultralytics YOLO
المقدمة
في عالم التعلم الآلي ورؤية الحاسوب، يُطلق على عملية استخلاص المعنى من البيانات البصرية اسم "الاستدلال" أو "التنبؤ". يوفر YOLOv8 من Ultralytics ميزة قوية تُعرف بـوضع التنبؤ والتي تم تصميمها خصيصًا للاستدلال في الوقت الحقيقي وبأداء عال على مجموعة واسعة من مصادر البيانات.
شاهد: كيفية استخراج النتائج من نموذج Ultralytics YOLOv8 لمشاريع مخصصة.
التطبيقات في العالم الحقيقي
التصنيع | الرياضة | السلامة |
---|---|---|
كشف قطع غيار المركبات | كشف لاعبي كرة القدم | كشف سقوط الأشخاص |
لماذا يجب استخدام Ultralytics YOLO لعمليات التنبؤ؟
فيما يلي الأسباب التي يجب أخذها في الاعتبار عند الاستفادة من وضع التنبؤ YOLOv8 لاحتياجات التنبؤ المختلفة:
- التنوع: قادر على التنبؤ على الصور ومقاطع الفيديو، وحتى التدفقات الحية.
- الأداء: مصمم للتطبيقات في الوقت الحقيقي والمعالجة عالية السرعة دون التضحية بالدقة.
- سهولة الاستخدام: واجهات Python والواجهة السطرية لتسريع النشر والاختبار.
- قابلية التخصيص العالية: إعدادات ومعلمات مختلفة لضبط سلوك التنبؤ النموذج وفقًا لمتطلباتك المحددة.
الميزات الرئيسية لوضع التنبؤ
تم تصميم وضع التنبؤ الخاص بـ YOLOv8 ليكون قويًا ومتعدد الاستخدامات، ويتميز بما يلي:
- توافق متعدد مصادر البيانات: سواء كانت بياناتك عبارة عن صور فردية أو مجموعة من الصور أو ملفات فيديو أو تدفقات فيديو في الوقت الحقيقي، سيتمكن وضع التنبؤ من التعامل معها جميعًا.
- وضع التدفق الحي: استخدم ميزة التدفق لإنشاء مولد فعّال لكائنات "النتائج" باستخدام الذاكرة. قم بتمكين هذا بتعيين
stream=True
في طريقة استدعاء المتنبئ. - معالجة دُفعات: القدرة على معالجة العديد من الصور أو إطارات الفيديو في دُفعة واحدة، مما يزيد أكثر من سرعة التنبؤ.
- سهل التكامل: يسهل الدمج مع خطوط الأنابيب البيانية الحالية ومكونات البرامج الأخرى بفضل واجهة برمجة التطبيقات المرنة.
تُرجع نماذج Ultralytics YOLO إما قائمة Python من كائنات "النتائج" أو مُنشئ برمجياً فعّال لكائنات الـ "النتائج" في حال تم تمرير stream=True
إلى النموذج أثناء عملية التنبؤ:
التنبؤ
from ultralytics import YOLO
# تحميل نموذج
model = YOLO('yolov8n.pt') # نموذج YOLOv8n المُدرَّب مسبقًا
# تشغيل التنبؤ بدُفعة على قائمة من الصور
results = model(['im1.jpg', 'im2.jpg']) # العودة بقائمة من كائنات 'النتائج'
# معالجة قائمة النتائج
for result in results:
boxes = result.boxes # كائن Boxes لمخرجات bbox
masks = result.masks # كائن Masks لمخرجات قنوات الفصل العنقودي
keypoints = result.keypoints # كائن Keypoints لمخرجات الاتجاهات
probs = result.probs # كائن Probs لمخرجات التصنيف
from ultralytics import YOLO
# تحميل نموذج
model = YOLO('yolov8n.pt') # نموذج YOLOv8n المُدرَّب مسبقًا
# تشغيل التنبؤ بدُفعة على قائمة من الصور
results = model(['im1.jpg', 'im2.jpg'], stream=True) # العودة بمُنشئ فعال لكائنات 'النتائج'
# معالجة المُنشئ الفعال
for result in results:
boxes = result.boxes # كائن Boxes لمخرجات bbox
masks = result.masks # كائن Masks لمخرجات قنوات الفصل العنقودي
keypoints = result.keypoints # كائن Keypoints لمخرجات الاتجاهات
probs = result.probs # كائن Probs لمخرجات التصنيف
مصادر التنبؤ
يمكن لـ YOLOv8 معالجة أنواع مختلفة من مصادر الإدخال لعملية الاستدلال، على النحو الموضح في الجدول أدناه. تشمل المصادر الصور الثابتة وتيارات الفيديو وتنسيقات مختلفة للبيانات. يشير الجدول أيضًا إلى ما إذا كان يمكن استخدام كل مصدر في وضع التدفق باستخدام الوسيط stream=True
✅. يعتبر وضع التدفق مفيدًا لمعالجة مقاطع الفيديو أو التدفقات الحية حيث يقوم بإنشاء مُنشئ للنتائج بدلاً من تحميل جميع الإطارات في الذاكرة.
طراز
استخدم stream=True
لمعالجة مقاطع الفيديو الطويلة أو مجموعات البيانات الكبيرة لإدارة الذاكرة بكفاءة. عندما تكون القيمة مساوية لـ stream=False
، يتم تخزين النتائج لجميع الإطارات أو نقاط البيانات في الذاكرة، والتي يمكن أن تتراكم بسرعة وتُسبِّب أخطاء الذاكرة غير الكافية للمدخلات الكبيرة. على النقيض من ذلك، يستخدم التدفق stream=True
مولدًا يُبقي نتائج الإطار الحالي أو نقطة البيانات الحالية في الذاكرة فقط، مما يقلل بشكل كبير من استهلاك الذاكرة ويمنع مشكلات عدم كفاية الذاكرة.
مصدر | الوسيط | النوع | الملاحظات |
---|---|---|---|
صورة | 'صورة.jpg' |
str or Path |
ملف صورة واحدة. |
رابط URL | 'https://ultralytics.com/images/bus.jpg' |
str |
رابط URL لصورة ما. |
لقطة شاشة برمجية | 'الشاشة' |
str |
قم بالتقاط لقطة شاشة برمجية. |
PIL | Image.open('im.jpg') |
PIL.Image |
الصيغة HWC مع قنوات RGB. |
OpenCV | cv2.imread('im.jpg') |
np.ndarray |
الصيغة HWC مع قنوات BGR uint8 (0-255) . |
numpy | np.zeros((640,1280,3)) |
np.ndarray |
الصيغة HWC مع قنوات BGR uint8 (0-255) . |
torch | torch.zeros(16,3,320,640) |
torch.Tensor |
الصيغة BCHW مع قنوات RGB float32 (0.0-1.0) . |
CSV | 'المصادر.csv' |
str or Path |
ملف CSV يحتوي على مسارات الصور أو مقاطع الفيديو أو المجلدات. |
فيديو ✅ | 'الفيديو.mp4' |
str or Path |
ملف فيديو بتنسيقات مثل MP4 و AVI وما إلى ذلك. |
الدليل ✅ | 'المسار/' |
str or Path |
مسار إلى مجلد يحتوي على صور أو مقاطع فيديو. |
glob ✅ | 'المسار/*.jpg' |
str |
نمط glob لمطابقة عدة ملفات. استخدم حرف * كحرطوم. |
يوتيوب ✅ | 'https://youtu.be/LNwODJXcvt4' |
str |
رابط URL إلى فيديو يوتيوب. |
تدفق ✅ | 'rtsp://example.com/media.mp4' |
str |
عنوان URL لبروتوكولات التدفق مثل RTSP و RTMP و TCP أو عنوان IP. |
تدفق متعدد ✅ | 'list.streams' |
str or Path |
ملف نصي *.streams مع عنوان تدفق URL في كل صف، على سبيل المثال 8 تدفقات ستعمل بحجم دُفعة 8. |
فيما يلي أمثلة تعليمات برمجية لاستخدام كل نوع من مصدر:
مصادر التنبؤ
قم بأجراء عملية التنبؤ على ملف صورة.
قم بأجراء عملية التنبؤ على محتوى الشاشة الحالي كلقطة شاشة.
قم بأجراء عملية التنبؤ على صورة موجودة على الإنترنت أو فيديو.
قم بأجراء عملية التنبؤ على صورة مفتوحة بواسطة مكتبة Python Imaging Library (PIL).
قم بأجراء عملية التنبؤ على صورة مُقروءة بواسطة OpenCV.
قم بأجراء عملية التنبؤ على صورة مُمثلة كمصفوفة numpy.
import numpy as np
from ultralytics import YOLO
# تحميل نموذج YOLOv8n المدرب مسبقًا
model = YOLO('yolov8n.pt')
# إنشاء مصفوفة numpy عشوائية في صيغة HWC (640, 640, 3) بقيم بين [0, 255] ونوع uint8
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype='uint8')
# الجمع بين التنبؤ على المصدر
results = model(source) # قائمة كائنات النتائج