YOLO Vision 2026:

التنبؤ بالنماذج باستخدام Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

مقدمة#

في عالم تعلّم الآلة ورؤية الحاسوب، تُسمّى عملية فهم البيانات المرئية غالبًا الاستدلال أو التنبؤ. يقدّم Ultralytics YOLO26 ميزة قوية تُعرف باسم وضع التنبؤ، ومصمّمة للاستدلال عالي الأداء وفي الوقت الفعلي عبر مجموعة واسعة من مصادر البيانات.



Watch: How to Extract Results from Ultralytics YOLO26 Tasks for Custom Projects 🚀

التطبيقات الواقعية#

التصنيعالرياضةالسلامة
اكتشاف قطع غيار المركباتاكتشاف لاعبي كرة القدماكتشاف سقوط الأشخاص

لماذا تستخدم Ultralytics YOLO للاستدلال؟#

إليك أسبابًا تدفعك إلى التفكير في استخدام وضع التنبؤ في YOLO26 لتلبية احتياجاتك المختلفة من الاستدلال:

  • تعدد الاستخدامات: قادر على تنفيذ الاستدلال على الصور ومقاطع الفيديو وحتى التدفقات المباشرة.
  • الأداء: مُصمَّم للمعالجة الفورية وعالية السرعة دون التضحية بـالدقة.
  • سهولة الاستخدام: واجهات Python وCLI سهلة الاستخدام للنشر والاختبار السريعين.
  • قابلية تخصيص عالية: إعدادات ومعلمات متنوعة لضبط سلوك الاستدلال في النموذج وفقًا لمتطلباتك المحددة.
  • جاهز للإنتاج: انشر النماذج كنقاط نهاية للاستدلال على Ultralytics Platform مع التوسع التلقائي والمراقبة، أو نفّذ الاستدلال محليًا.

الميزات الأساسية لوضع التنبؤ#

صُمّم وضع التنبؤ في YOLO26 ليكون متينًا ومتعدد الاستخدامات، ويتميز بما يلي:

  • التوافق مع مصادر بيانات متعددة: سواء كانت بياناتك على شكل صور منفردة أو مجموعة صور أو ملفات فيديو أو تدفقات فيديو فورية، فإن وضع التنبؤ يلبي احتياجاتك.
  • وضع البث: استخدم ميزة البث لإنشاء مولّد موفّر للذاكرة من كائنات Results. فعّل ذلك من خلال ضبط stream=True في طريقة استدعاء المتنبئ. بخلاف السلوك الافتراضي (stream=False) الذي يعيد قائمة تحتوي على جميع النتائج، ينتج stream=True النتائج واحدة تلو الأخرى، ما يجعله مفيدًا خصوصًا لمقاطع الفيديو الطويلة والتدفقات المباشرة.
  • المعالجة الدفعية: عالج صورًا متعددة أو إطارات فيديو متعددة في دفعة واحدة، مما يقلل زمن الاستدلال الإجمالي بدرجة أكبر.
  • سهولة التكامل: يمكنك التكامل بسهولة مع مسارات البيانات الحالية ومكونات البرامج الأخرى بفضل واجهة API المرنة.

تعيد نماذج Ultralytics YOLO إما قائمة Python من كائنات Results أو مولّدًا موفّرًا للذاكرة من كائنات Results عند تمرير stream=True إلى النموذج أثناء الاستدلال:

التنبؤ
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # pretrained YOLO26n model

# Run batched inference on a list of images
results = model(["image1.jpg", "image2.jpg"])  # return a list of Results objects

# Process results list
for result in results:
    boxes = result.boxes  # Boxes object for bounding box outputs
    masks = result.masks  # Masks object for segmentation masks outputs
    keypoints = result.keypoints  # Keypoints object for pose outputs
    probs = result.probs  # Probs object for classification outputs
    obb = result.obb  # Oriented boxes object for OBB outputs
    result.show()  # display to screen
    result.save(filename="result.jpg")  # save to disk

مصادر الاستدلال#

يمكن لـ YOLO26 معالجة أنواع مختلفة من مصادر الإدخال للاستدلال، كما هو موضح في الجدول أدناه. تشمل المصادر الصور الثابتة وتدفقات الفيديو وتنسيقات البيانات المتنوعة. يوضح الجدول أيضًا ما إذا كان يمكن استخدام كل مصدر في وضع البث باستخدام الوسيطة stream=True ✅. يُعد وضع البث مفيدًا لمعالجة مقاطع الفيديو أو التدفقات المباشرة، إذ ينشئ مولّدًا للنتائج بدلًا من تحميل جميع الإطارات إلى الذاكرة.

نصيحة

استخدم stream=True لمعالجة مقاطع الفيديو الطويلة أو مجموعات البيانات الكبيرة لإدارة الذاكرة بكفاءة. عند استخدام stream=False، تُخزَّن نتائج جميع الإطارات أو نقاط البيانات في الذاكرة، ما قد يتراكم سريعًا ويتسبب في أخطاء نفاد الذاكرة للمدخلات الكبيرة. في المقابل، يستخدم stream=True مولّدًا يحتفظ في الذاكرة بنتائج الإطار الحالي أو نقطة البيانات الحالية فقط، مما يقلل استهلاك الذاكرة بدرجة كبيرة ويمنع مشكلات نفاد الذاكرة.

المصدرمثالالنوعملاحظات
صورة'image.jpg'str أو Pathملف صورة واحد.
عنوان URL'https://ultralytics.com/images/bus.jpg'strعنوان URL لصورة.
لقطة شاشة'screen'strالتقاط لقطة شاشة.
PILImage.open('image.jpg')PIL.Imageتنسيق HWC مع قنوات RGB.
OpenCVcv2.imread('image.jpg')np.ndarrayتنسيق HWC مع قنوات BGR uint8 (0-255).
NumPynp.zeros((640,1280,3))np.ndarrayتنسيق HWC مع قنوات BGR uint8 (0-255).
torchtorch.zeros(16,3,320,640)torch.Tensorتنسيق BCHW مع قنوات RGB float32 (0.0-1.0).
CSV'sources.csv'str أو Pathملف CSV يحتوي على مسارات الصور أو مقاطع الفيديو أو الأدلة.
فيديو ✅'video.mp4'str أو Pathملف فيديو بتنسيقات مثل MP4 وAVI وغيرهما.
دليل ✅'path/'str أو Pathمسار إلى دليل يحتوي على صور أو مقاطع فيديو.
glob ✅'path/*.jpg'strنمط Glob لمطابقة ملفات متعددة. استخدم الحرف * كحرف بدل.
YouTube ✅'https://youtu.be/LNwODJXcvt4'strعنوان URL لمقطع فيديو على YouTube.
تدفق ✅'rtsp://example.com/media.mp4'strعنوان URL لبروتوكولات البث مثل RTSP أو RTMP أو TCP، أو لعنوان IP.
تدفقات متعددة ✅'list.streams'str أو Pathملف نصي *.streams يحتوي على عنوان URL لتدفق واحد في كل صف؛ أي إن 8 تدفقات ستعمل بحجم دفعة يساوي 8.
كاميرا الويب ✅0intفهرس جهاز الكاميرا المتصل الذي سيُجرى عليه الاستدلال.

فيما يلي أمثلة برمجية لاستخدام كل نوع من المصادر:

مصادر التنبؤ

تنفيذ الاستدلال على ملف صورة.

from ultralytics import YOLO

# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Define path to the image file
source = "path/to/image.jpg"

# Run inference on the source
results = model(source)  # list of Results objects

وسيطات الاستدلال#

يقبل model.predict() عدة وسائط يمكن تمريرها في وقت الاستدلال لتجاوز القيم الافتراضية:

الشكل الثابت مقابل المستطيل الأدنى (rect)#

يستخدم predict افتراضيًا rect=True، الذي يفعّل حشو المستطيل الأدنى عند الإمكان. تُقاس الصورة لتلائم داخل imgsz وتُحشى فقط إلى أقرب مضاعف للخطوة، لذلك قد يكون الموتر النهائي أصغر من imgsz. لا يُستخدم حشو المستطيل الأدنى إلا عندما تكون جميع الصور في الدفعة بالشكل نفسه ويدعمه الخلفي (PyTorch .pt، أو ONNX / Triton الديناميكي). بخلاف ذلك، تُحشى الصور إلى الهدف الكامل imgsz.

استخدم rect=False للحشو دائمًا إلى الهدف imgsz الكامل. ويوصى بذلك عند الحاجة إلى حجم إدخال ثابت لمطابقة النماذج المُصدَّرة (ONNX وTensorRT وغيرهما).

عدد صحيح مقابل صفيفة imgsz

  • يصبح imgsz=640 العدد الصحيح هدفًا مربعًا (640, 640) بعد التقريب وفق الخطوة.
  • تعيّن imgsz=(384, 672) الصفيفة هدفًا مستطيلًا. ومع rect=True وauto=True، يمكن أن يكون الموتر الفعلي أصغر من هذا الهدف.

التدريب مقابل التنبؤ/التصدير

يقبل التدريب imgsz كعدد صحيح واحد فقط (وتُحوَّل قائمة [h, w] إلى أكبر قيمة). ويقبل التنبؤ والتصدير إما عددًا صحيحًا أو صفيفة (height, width).

مثال
from ultralytics import YOLO

# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Run inference on 'bus.jpg' with arguments
model.predict("https://ultralytics.com/images/bus.jpg", save=True, imgsz=320, conf=0.25)

وسيطات الاستدلال:

الوسيطةالنوعالافتراضيالوصف
sourcestr أو int أو NoneNoneيحدد مصدر البيانات للاستدلال. ويمكن أن يكون مسار صورة أو ملف فيديو أو دليلًا أو عنوان URL أو معرّف جهاز للبث المباشر. إذا حُذف، يُسجَّل تحذير ويعود النموذج إلى أصول العرض التوضيحي المضمّنة (ultralytics/assets أو عنوان URL تجريبي لـ OBB). ويدعم نطاقًا واسعًا من التنسيقات والمصادر، ما يتيح تطبيقًا مرنًا عبر أنواع الإدخال المختلفة.
conffloat0.25يحدد الحد الأدنى لعتبة الثقة لعمليات الاكتشاف. وسيُتجاهل أي كائن يُكتشف بثقة أقل من هذه العتبة. ويمكن أن يساعد ضبط هذه القيمة في تقليل الإيجابيات الكاذبة.
ioufloat0.7عتبة التقاطع على الاتحاد ‏(IoU) لقمع القيمة غير العظمى ‏(NMS). تؤدي القيم الأقل إلى عدد أقل من عمليات الاكتشاف عبر إزالة المربعات المتداخلة، ما يفيد في تقليل التكرارات.
imgszint أو tuple640الهدف الخاص بـ Letterbox. يعطي العدد الصحيح N×N مربعًا، بينما يعطي الزوج (height, width). ومع rect=True، قد يكون الموتر الفعلي أصغر من هذا الهدف بسبب الحشو بالحد الأدنى للمستطيل. استخدم rect=False لحجم ثابت. راجع الشكل الثابت مقابل الحد الأدنى للمستطيل.
rectboolTrueإذا كان True، فاستخدم الحشو بالحد الأدنى للمستطيل متى أمكن (دفعة ذات الشكل نفسه وخلفية مدعومة). وإذا كان False، فاحشو دائمًا إلى imgsz الكامل. راجع الشكل الثابت مقابل الحد الأدنى للمستطيل.
quantizeint أو strNoneدقة الاستدلال: 16/"fp16" و 32/"fp32"/غير المحدد تحدد حساب FP16 أو FP32 لنماذج PyTorch و TorchScript؛ بينما تحسب التنسيقات الأخرى بالدقة التي تحددها ملفاتها ووقت تشغيلها. عند 16 تقوم OpenVINO بتقريب المدخلات إلى FP16 على العميل وتوسيعها مرة أخرى إلى FP32، دون تغيير ما يحسبه وقت التشغيل. يتم تكوين الكمي INT8/PTQ أثناء التصدير، ثم يُستخدَم عن طريق تحميل النموذج المصدر. يحل محل علامة half المهملة.
devicestrNoneيحدد الجهاز المستخدم للاستدلال (مثل cpu أو cuda:0 أو 0 أو npu أو npu:0). ويتيح للمستخدمين الاختيار بين CPU أو GPU محدد أو Huawei Ascend NPU أو أجهزة حوسبة أخرى لتنفيذ النموذج.
dnnboolFalseإذا كان True، فاستخدم وحدة DNN في OpenCV بدلًا من ONNX Runtime لاستدلال نموذج ONNX.
datastrNoneمسار YAML لمجموعة بيانات (مثل coco8.yaml) يُقرأ فقط من أجل names، وفقط عندما لا يحمل النموذج المحمّل أسماء فئات خاصة به: أي تصدير من جهة خارجية أو تصدير من Ultralytics منفصل عن البيانات الوصفية المرفقة به. ويُبلغ هذا النموذج بخلاف ذلك عن class0 وclass1 وما إلى ذلك.
batchint1يحدد حجم الدفعة للاستدلال (ولا يعمل إلا عندما يكون المصدر دليلًا أو ملف فيديو أو ملف .txt). ويمكن أن يوفر حجم الدفعة الأكبر معدل نقل أعلى، ما يقلل إجمالي الوقت المطلوب للاستدلال.
max_detint300الحد الأقصى لعدد عمليات الاكتشاف المسموح بها لكل صورة. ويحد إجمالي عدد الكائنات التي يمكن للنموذج اكتشافها في استدلال واحد، ما يمنع المخرجات المفرطة في المشاهد الكثيفة.
vid_strideint1خطوة الإطارات لمدخلات الفيديو. تتيح تخطي الإطارات في مقاطع الفيديو لتسريع المعالجة على حساب الدقة الزمنية. تعالج القيمة 1 كل إطار، بينما تتخطى القيم الأعلى بعض الإطارات.
stream_bufferboolFalseيحدد ما إذا كان ينبغي وضع الإطارات الواردة في قائمة انتظار لبث الفيديو. إذا كان False، تُسقط الإطارات القديمة لاستيعاب الإطارات الجديدة (وهو محسن للتطبيقات في الوقت الفعلي). وإذا كان True، تُوضع الإطارات الجديدة في مخزن مؤقت، ما يضمن عدم تخطي أي إطار، لكنه يسبب زمن استجابة إذا كان معدل إطارات الاستدلال أقل من معدل إطارات البث.
visualizeboolFalseيحفظ خريطة حرارية لتنشيط الفئة بجانب كل تنبؤ، موضحًا وحدات البكسل التي رفعت درجات الفئة المتنبأ بها. ويراعي conf وclasses، ولذلك يعيّن classes=[0] تلك الفئة فقط. ولا يتوفر إلا لنماذج Ultralytics PyTorch.
augmentboolFalseيمكّن زيادة البيانات وقت الاختبار (TTA) للتنبؤات، ما قد يحسن متانة الاكتشاف على حساب سرعة الاستدلال. ولا يتوفر إلا لنماذج Ultralytics PyTorch.
agnostic_nmsboolFalseيمكن عملية القمع غير المرتبط بالفئة (NMS)، حيث يتم قمع المربعات المتداخلة الأقل تسجيلًا عبر الفئات المختلفة بدلاً من الفئة نفسها فقط. مفيد في سيناريوهات الكشف متعدد الفئات حيث يكون تداخل الفئات شائعًا. مع الاستدلال الخالي من NMS (nms=False على YOLO26 أو YOLOv10)، يمنع هذا فقط نفس الاكتشاف من الظهور بتسميات فئات متعددة (تكرارات IoU=1.0) ولا يقوم بقمع يعتمد على عتبة IoU بين المربعات المتميزة.
classeslist[int]Noneيصفّي التنبؤات إلى مجموعة من معرّفات الفئات. ولن تُعاد إلا عمليات الاكتشاف التي تنتمي إلى الفئات المحددة. ويفيد ذلك في التركيز على الكائنات ذات الصلة في مهام الاكتشاف متعدد الفئات.
retina_masksboolFalseيعيد أقنعة تقسيم عالية الدقة. وستطابق الأقنعة المُعادة (masks.data) حجم الصورة الأصلية إذا فُعّلت. وإذا عُطّلت، فسيكون لها حجم الصورة المستخدم أثناء الاستدلال.
embedlist[int]Noneيحدد الطبقات التي تُستخرج منها متجهات الميزات أو التضمينات. استخدم model.embed(source) لتضمينات الطبقة قبل الأخيرة، أو model.predict(source, embed=[layer]) لتحديد طبقات بعينها. ويفيد ذلك في المهام اللاحقة مثل التجميع أو البحث عن التشابه. ولا يتوفر إلا لنماذج Ultralytics PyTorch.
projectstrNoneاسم دليل المشروع الذي تُحفظ فيه مخرجات التنبؤ إذا فُعّل save.
namestrNoneاسم تشغيل التنبؤ. ويُستخدم لإنشاء دليل فرعي داخل مجلد المشروع تُخزَّن فيه مخرجات التنبؤ إذا فُعّل save.
streamboolFalseيمكّن المعالجة الفعالة للذاكرة لمقاطع الفيديو الطويلة أو الصور العديدة عبر إعادة مولّد من كائنات Results بدلًا من تحميل جميع الإطارات إلى الذاكرة دفعة واحدة.
verboseboolTrueيتحكم في عرض سجلات الاستدلال التفصيلية في الطرفية، موفرًا ملاحظات فورية حول عملية التنبؤ.
compilebool أو strFalseيمكّن تجميع الرسم البياني باستخدام torch.compile في PyTorch 2.x مع backend='inductor'. يقبل True"default"، أو False → للتعطيل، أو وضعًا نصيًا مثل "default" و"reduce-overhead" و"max-autotune-no-cudagraphs". ويعود إلى التنفيذ الفوري مع إصدار تحذير إذا لم يكن مدعومًا.
channels_lastboolNoneيستخدم تنسيق ذاكرة channels_last (NHWC) للاستدلال الأصلي في PyTorch. ويمكّنه None تلقائيًا على وحدات CPU x86 في Linux وWindows المفعّل فيها oneDNN مع PyTorch 1.13 أو أحدث، بينما يعطّله False، ويطلبه True على أجهزة CPU x86 أو CUDA المدعومة. وتظل ARM64 وMPS وإصدارات PyTorch الأقدم ووحدات CPU التي لا تحتوي على oneDNN والتنسيقات المُصدَّرة مثل TensorRT وONNX دون تغيير.
nmsbool، اختياريNoneيشغل استدلال من واحد إلى متعدد مع NMS افتراضيًا (None أو True). قم بتعيين False لاستخدام الرأس الفردي الخالي من NMS عند توفره. راجع دليل الكشف من طرف إلى طرف للحصول على التفاصيل.

وسيطات التصور:

الوسيطةالنوعالافتراضيالوصف
showboolFalseإذا كانت قيمة True، يعرض الصور أو مقاطع الفيديو المشروحة في نافذة. ويفيد ذلك في الحصول على ملاحظات مرئية فورية أثناء التطوير أو الاختبار.
saveboolFalse or Trueيمكّن حفظ الصور أو مقاطع الفيديو المشروحة في ملفات. ويفيد ذلك للتوثيق أو التحليل الإضافي أو مشاركة النتائج. وتكون القيمة الافتراضية True عند استخدام CLI، وFalse عند استخدام Python.
save_framesboolFalseعند معالجة مقاطع الفيديو، يحفظ الإطارات الفردية كصور. ويفيد ذلك لاستخراج إطارات محددة أو لإجراء تحليل تفصيلي إطارًا بإطار.
save_txtboolFalseيحفظ نتائج الاكتشاف في ملف نصي باتباع التنسيق [class] [x_center] [y_center] [width] [height] [confidence]. ويفيد ذلك للتكامل مع أدوات التحليل الأخرى.
save_confboolFalseيتضمن درجات الثقة في الملفات النصية المحفوظة. ويزيد مستوى التفاصيل المتاح للمعالجة اللاحقة والتحليل.
save_cropboolFalseيحفظ صورًا مقصوصة لعمليات الاكتشاف. ويفيد ذلك لزيادة البيانات أو التحليل أو إنشاء مجموعات بيانات مركزة لكائنات محددة.
show_labelsboolTrueيعرض تسميات كل كشف في المخرجات المرئية. ويوفر فهمًا فوريًا للكائنات المكتشفة.
show_confboolTrueيعرض درجة الثقة لكل كشف إلى جانب التسمية. ويوفر لمحة عن مدى يقين النموذج بشأن كل كشف.
show_boxesboolTrueيرسم مربعات إحاطة حول الكائنات المكتشفة. ويُعد ذلك أساسيًا للتعرف المرئي على الكائنات وتحديد مواقعها في الصور أو إطارات الفيديو.
line_widthint or NoneNoneيحدد عرض خط المربعات المحيطة. وإذا كان None، يُضبط عرض الخط تلقائيًا استنادًا إلى حجم الصورة. ويوفر تخصيصًا بصريًا لتحسين الوضوح.

تنسيقات الصور ومقاطع الفيديو#

يدعم YOLO26 تنسيقات متنوعة للصور ومقاطع الفيديو، كما هو محدد في ultralytics/data/utils.py. راجع الجداول أدناه للاطلاع على اللواحق الصالحة وأوامر predict النموذجية.

الصور#

يحتوي الجدول أدناه على تنسيقات الصور الصالحة في Ultralytics.

ملاحظة

تتطلب تنسيقات HEIC/HEIF الحزمة pi-heif، التي تُثبَّت تلقائيًا عند الاستخدام الأول. ويدعم Pillow تنسيق AVIF دعمًا أصليًا.

لواحق الصورمثال على أمر Predictالمرجع
.avifyolo predict source=image.avifتنسيق ملف صور AV1
.bmpyolo predict source=image.bmpتنسيق ملفات BMP من Microsoft
.dngyolo predict source=image.dngAdobe DNG
.heicyolo predict source=image.heicتنسيق الصور عالي الكفاءة
.heifyolo predict source=image.heifتنسيق الصور عالي الكفاءة
.jp2yolo predict source=image.jp2JPEG 2000
.jpegyolo predict source=image.jpegJPEG
.jpgyolo predict source=image.jpgJPEG
.mpoyolo predict source=image.mpoكائن الصور المتعددة
.pngyolo predict source=image.pngالرسومات الشبكية المحمولة
.tifyolo predict source=image.tifتنسيق ملفات الصور ذات الوسوم
.tiffyolo predict source=image.tiffتنسيق ملفات الصور ذات الوسوم
.webpyolo predict source=image.webpWebP

مقاطع الفيديو#

يحتوي الجدول أدناه على تنسيقات الفيديو الصالحة في Ultralytics.

امتدادات الفيديومثال على أمر Predictالمرجع
.asfyolo predict source=video.asfتنسيق الأنظمة المتقدمة
.aviyolo predict source=video.aviتداخل الصوت والفيديو
.gifyolo predict source=video.gifتنسيق تبادل الرسومات
.m4vyolo predict source=video.m4vMPEG-4 الجزء 14
.mkvyolo predict source=video.mkvMatroska
.movyolo predict source=video.movتنسيق ملفات QuickTime
.mp4yolo predict source=video.mp4MPEG-4 الجزء 14 - ويكيبيديا
.mpegyolo predict source=video.mpegMPEG-1 الجزء 2
.mpgyolo predict source=video.mpgMPEG-1 الجزء 2
.tsyolo predict source=video.tsدفق نقل MPEG
.wmvyolo predict source=video.wmvفيديو Windows Media
.webmyolo predict source=video.webmمشروع WebM

العمل مع النتائج#

ستُرجع جميع استدعاءات Ultralytics predict() قائمةً من كائنات Results:

النتائج
from ultralytics import YOLO

# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")
results = model(
    [
        "https://ultralytics.com/images/bus.jpg",
        "https://ultralytics.com/images/zidane.jpg",
    ]
)  # batch inference

تحتوي كائنات Results على السمات التالية:

السمةالنوعالوصف
orig_imgnp.ndarrayالصورة الأصلية في صورة مصفوفة NumPy.
orig_shapetupleأبعاد الصورة الأصلية بتنسيق (الارتفاع، العرض).
boxesBoxes, optionalكائن Boxes يحتوي على مربعات الإحاطة الخاصة بالكشف.
masksMasks, optionalكائن Masks يحتوي على أقنعة الكشف.
probsProbs, optionalكائن Probs يحتوي على احتمالات كل فئة لمهمة التصنيف.
keypointsKeypoints, optionalكائن Keypoints يحتوي على النقاط الأساسية المكتشفة لكل كائن.
obbOBB, optionalكائن OBB يحتوي على مربعات الإحاطة الموجّهة.
semantic_maskSemanticMask, optionalكائن SemanticMask يحتوي على خريطة فئات كثيفة لكل بكسل.
speeddictقاموس لسرعات المعالجة المسبقة والاستدلال والمعالجة اللاحقة بالمللي ثانية لكل صورة.
namesdictقاموس يربط فهارس الفئات بأسماء الفئات.
pathstrمسار ملف الصورة.
save_dirstr, optionalالدليل لحفظ النتائج.

النتائج حسب المهمة#

الحقول التي يتم تعبئتها أدناه تعتمد على مهمة نموذجك — قارن بين الكشف، والتجزئة، والتجزئة الدلالية، وتحديد العمق، والتصنيف، الوضعية، و OBB إذا لم تقم باختيار واحدة بعد. تُرجع كل عملية تنبؤ كائن Results واحد لكل صورة أو إطار. الحقول المشتركة أعلاه متاحة دائماً، بينما يتم تخزين بيانات التنبؤ الخاصة بالمهمة في الحقول أدناه. موترات الإحداثيات والثقة الخاصة بـ YOLO هي torch.float32؛ وموتررات الاحتمالية هي torch.float32 ما لم يتم استخدام الدقة النصفية، فتصبح torch.float16. بعد result.numpy()، تصبح الموترات مصفوفات NumPy مع أنواع بيانات NumPy مطابقة. أقنعة الحالات هي موترات ثنائية torch.uint8، بينما تستخدم الأقنعة الدلالية أصغر نوع بيانات صحيح عملي لمعرفات الفئات: torch.uint8، أو torch.int16، أو torch.int32، بناءً على عدد الفئات.

السمةالنوعالشكلالوصف
result.boxesBoxes(N)مربعات الكشف.
result.boxes.datatorch.float32(N,6/7)[x1,y1,x2,y2,conf,cls] الخام، بالإضافة إلى معرّف التتبع الاختياري.
result.boxes.xyxytorch.float32(N,4)مربعات البكسلات xyxy.
result.boxes.conftorch.float32(N,)درجات الثقة.
result.boxes.clstorch.float32(N,)معرّفات الفئات؛ حوّلها إلى int للحصول على الأسماء.

تحتوي كائنات Results على الطرق التالية:

الطريقةنوع الإرجاعالوصف
update()Noneيحدّث كائن Results ببيانات جديدة مثل المربعات أو الأقنعة أو الاحتمالات أو OBB أو النقاط الأساسية أو الأقنعة الدلالية.
cpu()Resultsيُرجع نسخة من كائن Results مع نقل جميع الموترات إلى ذاكرة CPU.
numpy()Resultsيُرجع نسخة من كائن Results مع تحويل جميع الموترات إلى مصفوفات NumPy.
cuda()Resultsيُرجع نسخة من كائن Results مع نقل جميع الموترات إلى ذاكرة GPU.
to()Resultsيُرجع نسخة من كائن Results مع نقل الموترات إلى الجهاز ونوع البيانات المحددين.
new()Resultsينشئ كائن Results جديدًا بالسمات نفسها للصورة والمسار والأسماء والسرعة.
plot()np.ndarrayيرسم نتائج الكشف على صورة BGR مُدخلة ويُرجع الصورة المُعنونة.
show()Noneيعرض الصورة مع نتائج الاستدلال المُعنونة.
save()strيحفظ صورة نتائج الاستدلال المُعنونة في ملف ويُرجع اسم الملف.
verbose()strيُرجع سلسلة سجل لكل مهمة، مع تفصيل نتائج الكشف والتصنيف.
save_txt()strيحفظ نتائج الكشف في ملف نصي ويُرجع مسار الملف المحفوظ.
save_crop()Noneيحفظ صور الكشف المقصوصة في الدليل المحدد.
summary()List[Dict[str, Any]]يحوّل نتائج الاستدلال إلى قاموس ملخّص مع إمكانية التطبيع.
to_df()DataFrameيحوّل نتائج الكشف إلى DataFrame من Polars.
to_csv()strيحوّل نتائج الكشف إلى تنسيق CSV.
to_json()strيحوّل نتائج الكشف إلى تنسيق JSON.

لمزيد من التفاصيل، راجع وثائق فئة Results.

المربعات#

يمكن استخدام كائن Boxes لفهرسة مربعات الإحاطة ومعالجتها وتحويلها إلى تنسيقات مختلفة.

المربعات
from ultralytics import YOLO

# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.boxes)  # print the Boxes object containing the detection bounding boxes

فيما يلي جدول لطرق وخصائص الفئة Boxes، بما في ذلك الاسم والنوع والوصف:

الاسمالنوعالوصف
cpu()الطريقةينقل الكائن إلى ذاكرة CPU.
numpy()الطريقةيحوّل الكائن إلى مصفوفة NumPy.
cuda()الطريقةينقل الكائن إلى ذاكرة CUDA.
to()الطريقةينقل الكائن إلى الجهاز المحدد.
xyxyالخاصية (torch.Tensor)يُرجع المربعات بتنسيق xyxy.
confالخاصية (torch.Tensor)يُرجع قيم الثقة للمربعات.
clsالخاصية (torch.Tensor)يُرجع قيم الفئات للمربعات.
idالخاصية (torch.Tensor)يُرجع معرّفات تتبع المربعات (إن توفرت).
xywhالخاصية (torch.Tensor)يُرجع المربعات بتنسيق xywh.
xyxynالخاصية (torch.Tensor)يُرجع المربعات بتنسيق xyxy بعد تطبيعها وفقًا لحجم الصورة الأصلية.
xywhnالخاصية (torch.Tensor)يُرجع المربعات بتنسيق xywh بعد تطبيعها وفقًا لحجم الصورة الأصلية.

لمزيد من التفاصيل، راجع وثائق فئة Boxes.

الأقنعة#

يمكن استخدام كائن Masks لفهرسة الأقنعة ومعالجتها وتحويلها إلى مقاطع.

الأقنعة
from ultralytics import YOLO

# Load a pretrained YOLO26n-seg Segment model
model = YOLO("yolo26n-seg.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.masks)  # print the Masks object containing the detected instance masks

فيما يلي جدول لطرق وخصائص الفئة Masks، بما في ذلك الاسم والنوع والوصف:

الاسمالنوعالوصف
dataالخاصية (torch.Tensor)موتر القناع الثنائي torch.uint8 ذو الشكل (N,H,W) والقيم 0 أو 1.
cpu()الطريقةيُرجع موتر الأقنعة في ذاكرة CPU.
numpy()الطريقةيُرجع موتر الأقنعة كمصفوفة NumPy.
cuda()الطريقةيُرجع موتر الأقنعة في ذاكرة GPU.
to()الطريقةيُرجع موتر الأقنعة باستخدام الجهاز ونوع البيانات المحددين.
xynالخاصية (list[np.ndarray])قائمة بمضلعات الأقنعة المُطبَّعة.
xyالخاصية (list[np.ndarray])قائمة بمضلعات الأقنعة بإحداثيات البكسل.

لمزيد من التفاصيل، راجع وثائق فئة Masks.

SemanticMask#

يخزّن SemanticMask خريطة فئات كثيفة واحدة لنتائج التقسيم الدلالي. بخلاف Masks، لا يحتوي على قناع ثنائي واحد لكل كائن ولا يوفر أدوات مساعدة للمضلعات.

SemanticMask
from ultralytics import YOLO

# Load a pretrained YOLO26n-sem Semantic model
model = YOLO("yolo26n-sem.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.semantic_mask.data)  # print the H x W class-ID map
الاسمالنوعالوصف
dataالخاصية (torch.Tensor)خريطة معرّفات الفئات ذات الشكل (H,W). نوع البيانات هو torch.uint8 أو torch.int16 أو torch.int32، ويُحدَّد ذلك حسب عدد الفئات.
shapeالخاصية (tuple)شكل خريطة الفئات، ويطابق عادةً result.orig_shape.
cpu()الطريقةيعيد موتر القناع الدلالي في ذاكرة CPU.
numpy()الطريقةيعيد موتر القناع الدلالي في صورة مصفوفة NumPy.
cuda()الطريقةيعيد موتر القناع الدلالي في ذاكرة GPU.
to()الطريقةيعيد موتر القناع الدلالي باستخدام الجهاز ونوع البيانات المحددين.

النقاط المفصلية#

يمكن استخدام الكائن Keypoints لفهرسة الإحداثيات ومعالجتها وتطبيعها.

النقاط المفصلية
from ultralytics import YOLO

# Load a pretrained YOLO26n-pose Pose model
model = YOLO("yolo26n-pose.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.keypoints)  # print the Keypoints object containing the detected keypoints

فيما يلي جدول لطرق وخصائص الفئة Keypoints، بما في ذلك الاسم والنوع والوصف:

الاسمالنوعالوصف
cpu()الطريقةيعيد موتر النقاط الأساسية في ذاكرة CPU.
numpy()الطريقةيعيد موتر النقاط الأساسية في صورة مصفوفة NumPy.
cuda()الطريقةيعيد موتر النقاط الأساسية في ذاكرة GPU.
to()الطريقةيعيد موتر النقاط الأساسية باستخدام الجهاز ونوع البيانات المحددين.
xynالخاصية (torch.Tensor)قائمة بالنقاط الأساسية المطَبَّعة والممثلة على هيئة موترات.
xyالخاصية (torch.Tensor)قائمة بالنقاط الأساسية بإحداثيات البكسل والممثلة على هيئة موترات.
confالخاصية (torch.Tensor)يعيد قيم ثقة النقاط الأساسية إن توفرت، وإلا يعيد None.

لمزيد من التفاصيل، راجع وثائق فئة Keypoints.

Probs#

يمكن استخدام الكائن Probs للحصول على فهارس التصنيف ودرجاته top1 وtop5.

Probs
from ultralytics import YOLO

# Load a pretrained YOLO26n-cls Classify model
model = YOLO("yolo26n-cls.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.probs)  # print the Probs object containing the detected class probabilities

إليك جدولًا يلخّص أساليب وخصائص الفئة Probs:

الاسمالنوعالوصف
cpu()الطريقةيعيد نسخة من موتر probs في ذاكرة CPU.
numpy()الطريقةيعيد نسخة من موتر probs في صورة مصفوفة NumPy.
cuda()الطريقةيعيد نسخة من موتر probs في ذاكرة GPU.
to()الطريقةيعيد نسخة من موتر probs باستخدام الجهاز ونوع البيانات المحددين.
top1الخاصية (int)فهرس الفئة الأولى.
top5الخاصية (list[int])فهارس أفضل 5 فئات.
top1confالخاصية (torch.Tensor)ثقة الفئة الأولى.
top5confالخاصية (torch.Tensor)درجات ثقة أفضل 5 فئات.

لمزيد من التفاصيل، راجع وثائق فئة Probs.

OBB#

يمكن استخدام الكائن OBB لفهرسة مربعات الإحاطة الموجّهة ومعالجتها وتحويلها إلى تنسيقات مختلفة.

OBB
from ultralytics import YOLO

# Load a pretrained YOLO26n model
model = YOLO("yolo26n-obb.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/boats.jpg")  # results list

# View results
for r in results:
    print(r.obb)  # print the OBB object containing the oriented detection bounding boxes

فيما يلي جدول لطرق وخصائص الفئة OBB، بما في ذلك الاسم والنوع والوصف:

الاسمالنوعالوصف
cpu()الطريقةينقل الكائن إلى ذاكرة CPU.
numpy()الطريقةيحوّل الكائن إلى مصفوفة NumPy.
cuda()الطريقةينقل الكائن إلى ذاكرة CUDA.
to()الطريقةينقل الكائن إلى الجهاز المحدد.
confالخاصية (torch.Tensor)يُرجع قيم الثقة للمربعات.
clsالخاصية (torch.Tensor)يُرجع قيم الفئات للمربعات.
idالخاصية (torch.Tensor)يُرجع معرّفات تتبع المربعات (إن توفرت).
xyxyالخاصية (torch.Tensor)إرجاع المربعات الأفقية بالتنسيق xyxy.
xywhrالخاصية (torch.Tensor)إرجاع المربعات المُدارة بالتنسيق xywhr.
xyxyxyxyالخاصية (torch.Tensor)إرجاع المربعات المُدارة بالتنسيق xyxyxyxy.
xyxyxyxynالخاصية (torch.Tensor)إرجاع المربعات المُدارة بالتنسيق xyxyxyxy بعد تطبيعها بحسب حجم الصورة.

لمزيد من التفاصيل، راجع وثائق فئة OBB.

رسم النتائج#

تسهّل الطريقة plot() في كائنات Results تصور التنبؤات من خلال تراكب الكائنات المكتشفة، مثل مربعات الإحاطة والأقنعة والنقاط الأساسية والاحتمالات، على الصورة الأصلية. وتعيد هذه الطريقة الصورة المشروحة كمصفوفة NumPy، ما يسهّل عرضها أو حفظها.

الرسم
from PIL import Image

from ultralytics import YOLO

# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Run inference on 'bus.jpg'
results = model(["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/zidane.jpg"])  # results list

# Visualize the results
for i, r in enumerate(results):
    # Plot results image
    im_bgr = r.plot()  # BGR-order numpy array
    im_rgb = Image.fromarray(im_bgr[..., ::-1])  # RGB-order PIL image

    # Show results to screen (in supported environments)
    r.show()

    # Save results to disk
    r.save(filename=f"results{i}.jpg")

معلمات طريقة plot()#

تدعم الطريقة plot() وسائط مختلفة لتخصيص المخرجات:

الوسيطةالنوعالوصفالافتراضي
confboolتضمين درجات ثقة الاكتشاف.True
line_widthfloatعرض خط مربعات الإحاطة. يتدرج مع حجم الصورة إذا كان None.None
font_sizefloatحجم خط النص. يتدرج مع حجم الصورة إذا كان None.None
fontstrاسم الخط لتعليقات النص.'Arial.ttf'
pilboolإرجاع الصورة ككائن PIL Image.False
imgnp.ndarray | torch.Tensorصورة بديلة. يجب أن تكون الموترات متجاورة بتنسيق HWC BGR uint8.None
kpt_radiusintنصف قطر النقاط الأساسية المرسومة.5
kpt_lineboolتوصيل النقاط الأساسية بخطوط.True
labelsboolتضمين تسميات الفئات في التعليقات.True
boxesboolتراكب مربعات الإحاطة على الصورة.True
masksboolتراكب الأقنعة على الصورة.True
probsboolتضمين احتمالات التصنيف.True
showboolعرض الصورة المشروحة مباشرةً باستخدام عارض الصور الافتراضي.False
saveboolحفظ الصورة المشروحة في ملف يحدده filename.False
filenamestrمسار واسم الملف المراد حفظ الصورة المشروحة فيه إذا كان save هو True.None
color_modestrتحديد وضع الألوان، مثل 'instance' أو 'class'.'class'
txt_colortuple[int, int, int]لون نص BGR لمربع الإحاطة وتسمية تصنيف الصورة.(255, 255, 255)

الاستدلال الآمن من حيث الخيوط#

يُعد ضمان أمان الخيوط أثناء الاستدلال أمرًا بالغ الأهمية عند تشغيل نماذج YOLO متعددة بالتوازي عبر خيوط مختلفة. ويضمن الاستدلال الآمن للخيوط عزل تنبؤات كل خيط وعدم تداخلها مع بعضها، مما يتجنب حالات التنافس ويضمن مخرجات متسقة وموثوقة.

عند استخدام نماذج YOLO في تطبيق متعدد الخيوط، من المهم إنشاء كائنات نموذج منفصلة لكل خيط أو استخدام تخزين محلي للخيوط لمنع التعارضات:

الاستدلال الآمن من حيث الخيوط

إنشاء نموذج واحد داخل كل خيط لضمان استدلال آمن للخيوط:

from threading import Thread

from ultralytics import YOLO

def thread_safe_predict(model, image_path):
    """Performs thread-safe prediction on an image using a locally instantiated YOLO model."""
    model = YOLO(model)
    results = model.predict(image_path)
    # Process results

# Starting threads that each have their own model instance
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image1.jpg")).start()
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image2.jpg")).start()

للاطلاع المتعمق على الاستدلال الآمن للخيوط باستخدام نماذج YOLO والتعليمات التفصيلية خطوةً بخطوة، يُرجى الرجوع إلى دليل الاستدلال الآمن للخيوط في YOLO. سيوفر لك هذا الدليل جميع المعلومات اللازمة لتجنب المشكلات الشائعة وضمان سير الاستدلال متعدد الخيوط بسلاسة.

حلقة for لمصدر البث#

إليك نص Python يستخدم OpenCV (cv2) وYOLO لإجراء الاستدلال على إطارات الفيديو. يفترض هذا النص أنك ثبّتَّ مسبقًا الحزم اللازمة (opencv-python وultralytics).

حلقة for للبث
import cv2

from ultralytics import YOLO

# Load the YOLO model
model = YOLO("yolo26n.pt")

# Open the video file
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLO inference on the frame
        results = model(frame)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLO Inference", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

سيُجري هذا النص التنبؤات على كل إطار من الفيديو، ويعرض النتائج بصريًا، ويعرضها في نافذة. يمكن الخروج من الحلقة بالضغط على 'q'.

ما التالي#

هل أنت مستعد لتجاوز النموذج المدرَّب مسبقًا؟ تأكد من ملاءمة مهمتك لمشكلتك، ونظّم بياناتك باستخدام دليل مجموعات البيانات، ثم درّب النموذج عليها.

الأسئلة الشائعة#

  • Ultralytics YOLO هو نموذج متطور لـاكتشاف الكائنات وتقسيم الكائنات والتقسيم الدلالي وتقدير العمق والتصنيف في الوقت الفعلي. يتيح وضع predict للمستخدمين إجراء استدلال عالي السرعة على مصادر بيانات متنوعة، مثل الصور ومقاطع الفيديو والبثوث المباشرة. وبفضل تصميمه لتحقيق الأداء وتعدد الاستخدامات، يوفر أيضًا وضعي المعالجة الدفعية والبث. لمزيد من التفاصيل حول ميزاته، راجع وضع predict في Ultralytics YOLO.

  • يمكن لـ Ultralytics YOLO معالجة مجموعة واسعة من مصادر البيانات، بما في ذلك الصور الفردية ومقاطع الفيديو والأدلة وعناوين URL والبثوث. يمكنك تحديد مصدر البيانات في استدعاء model.predict(). على سبيل المثال، استخدم 'image.jpg' لصورة محلية أو 'https://ultralytics.com/images/bus.jpg' لعنوان URL. راجع الأمثلة التفصيلية لمصادر الاستدلال المتنوعة في الوثائق.

  • لتحسين سرعة الاستدلال وإدارة الذاكرة بكفاءة، يمكنك استخدام وضع البث من خلال تعيين stream=True في طريقة استدعاء المتنبئ. ينشئ وضع البث مولّدًا موفرًا للذاكرة من كائنات Results بدلًا من تحميل جميع الإطارات إلى الذاكرة. ويُعد وضع البث مفيدًا خصوصًا لمعالجة مقاطع الفيديو الطويلة أو مجموعات البيانات الكبيرة. تعرّف على المزيد حول وضع البث.

  • تدعم الطريقة model.predict() في YOLO وسائط متنوعة، مثل conf وiou وimgsz وdevice وغيرها. تتيح لك هذه الوسائط تخصيص عملية الاستدلال، من خلال ضبط معلمات مثل عتبات الثقة وحجم الصورة والجهاز المستخدم للحساب. يمكن العثور على أوصاف تفصيلية لهذه الوسائط في قسم وسائط الاستدلال.

  • استخدم model.embed(source) لاستخراج تضمينات الميزات من الطبقة قبل الأخيرة، أو مرّر embed=[layer_index] إلى model.predict() لاختيار طبقات محددة.

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    source = "https://ultralytics.com/images/bus.jpg"
    
    results = model.predict(source)  # Results objects
    embeddings = model.embed(source)  # list of torch.Tensor embeddings
  • بعد إجراء الاستدلال باستخدام YOLO، تحتوي كائنات Results على أساليب لعرض الصور المشروحة وحفظها. يمكنك استخدام أساليب مثل result.show() وresult.save(filename="result.jpg") لتصور النتائج وحفظها. تُنشأ تلقائيًا أي أدلة رئيسية مفقودة في مسار اسم الملف، مثل result.save("path/to/result.jpg"). للحصول على قائمة شاملة بهذه الأساليب، راجع قسم التعامل مع النتائج.

التعليقات