تجزئة المثيل وتتبعه باستخدام Ultralytics YOLO11 🚀
ما هو تجزئة المثيل (Instance Segmentation)؟
تجزئة المثيل هي مهمة رؤية حاسوبية تتضمن تحديد وتحديد الخطوط العريضة للكائنات الفردية في صورة على مستوى البكسل. على عكس التجزئة الدلالية التي تصنف فقط وحدات البكسل حسب الفئة، فإن تجزئة المثيل تصنف بشكل فريد وتحدد بدقة كل مثيل كائن، مما يجعلها ضرورية للتطبيقات التي تتطلب فهمًا مكانيًا تفصيليًا مثل التصوير الطبي والقيادة الذاتية والأتمتة الصناعية.
يوفر Ultralytics YOLO11 إمكانات قوية لتقسيم الحالات تتيح الكشف الدقيق عن حدود الجسم مع الحفاظ على السرعة والكفاءة التي تشتهر بها نماذج YOLO.
يتوفر نوعان من تتبع تجزئة المثيل في حزمة Ultralytics:
-
تقسيم المثيلات مع كائنات الفئة: يتم تخصيص لون فريد لكل كائن فئة لفصل بصري واضح.
-
تجزئة المثيلات مع مسارات الكائنات: يتم تمثيل كل مسار بلون مميز، مما يسهل التعرف عليه وتتبعه عبر إطارات الفيديو.
شاهد: تجزئة المثيل مع تتبع الكائنات باستخدام Ultralytics YOLO11
عينات
تجزئة المثيل | تجزئة المثيل + تتبع الكائنات |
---|---|
![]() |
![]() |
تقسيم الحالات في Ultralytics 😍 | تقسيم الحالات في Ultralytics مع تتبع الكائنات 🔥 |
تجزئة المثيل باستخدام Ultralytics YOLO
# Instance segmentation using Ultralytics YOLO11
yolo solutions isegment show=True
# Pass a source video
yolo solutions isegment source="path/to/video.mp4"
# Monitor the specific classes
yolo solutions isegment classes="[0, 5]"
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"
# Video writer
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("isegment_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Initialize instance segmentation object
isegment = solutions.InstanceSegmentation(
show=True, # display the output
model="yolo11n-seg.pt", # model="yolo11n-seg.pt" for object segmentation using YOLO11.
# classes=[0, 2], # segment specific classes i.e, person and car with pretrained model.
)
# Process video
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
results = isegment(im0)
# print(results) # access the output
video_writer.write(results.plot_im) # write the processed frame.
cap.release()
video_writer.release()
cv2.destroyAllWindows() # destroy all opened windows
InstanceSegmentation
الوسائط
إليك جدول مع InstanceSegmentation
arguments:
الوسيطة | النوع | افتراضي | الوصف |
---|---|---|---|
model |
str |
None |
مسار إلى ملف نموذج Ultralytics YOLO. |
region |
list |
'[(20, 400), (1260, 400)]' |
قائمة النقاط التي تحدد منطقة العد. |
يمكنك أيضًا الاستفادة من track
الوسائط داخل InstanceSegmentation
الحل:
الوسيطة | النوع | افتراضي | الوصف |
---|---|---|---|
tracker |
str |
'botsort.yaml' |
يحدد خوارزمية التتبع المراد استخدامها، على سبيل المثال، bytetrack.yaml أو botsort.yaml . |
conf |
float |
0.3 |
يحدد عتبة الثقة للكشف؛ القيم الأقل تسمح بتتبع المزيد من الكائنات ولكن قد تتضمن نتائج إيجابية كاذبة. |
iou |
float |
0.5 |
يحدد عتبة التقاطع على الاتحاد (IoU) لتصفية الاكتشافات المتداخلة. |
classes |
list |
None |
يقوم بتصفية النتائج حسب فهرس الفئة. على سبيل المثال، classes=[0, 2, 3] يتتبع الفئات المحددة فقط. |
verbose |
bool |
True |
يتحكم في عرض نتائج التتبع، مما يوفر مخرجًا مرئيًا للكائنات التي يتم تتبعها. |
device |
str |
None |
يحدد الجهاز الخاص بالاستدلال (على سبيل المثال، cpu , cuda:0 أو 0 ). يسمح للمستخدمين بالاختيار بين CPU أو GPU معين أو أجهزة حساب أخرى لتنفيذ النموذج. |
علاوة على ذلك، تتوفر وسائط التصور التالية للاستخدام:
الوسيطة | النوع | افتراضي | الوصف |
---|---|---|---|
show |
bool |
False |
إذا True ، يعرض الصور أو مقاطع الفيديو المشروحة في نافذة. مفيد للحصول على تعليقات مرئية فورية أثناء التطوير أو الاختبار. |
line_width |
None or int |
None |
يحدد عرض خطوط مربعات الإحاطة. إذا None ، يتم تعديل عرض الخط تلقائيًا بناءً على حجم الصورة. يوفر تخصيصًا مرئيًا للوضوح. |
show_conf |
bool |
True |
يعرض قيمة الثقة لكل كائن يتم الكشف عنه بجانب التسمية. يعطي نظرة ثاقبة حول يقين النموذج لكل كائن تم الكشف عنه. |
show_labels |
bool |
True |
يعرض تسميات لكل كائن يتم الكشف عنه في الناتج المرئي. يوفر فهمًا فوريًا للكائنات التي تم الكشف عنها. |
تطبيقات تقسيم المثيلات
تجزئة المثيل باستخدام YOLO11 لديها العديد من التطبيقات الواقعية في مختلف الصناعات:
إدارة النفايات وإعادة التدوير
يمكن استخدام YOLO11 في مرافق إدارة النفايات لتحديد وفرز أنواع مختلفة من المواد. يمكن للنموذج تقسيم النفايات البلاستيكية والورق المقوى والمعادن والمواد القابلة لإعادة التدوير الأخرى بدقة عالية، مما يتيح لأنظمة الفرز الآلية معالجة النفايات بكفاءة أكبر. وهذا ذو قيمة خاصة بالنظر إلى أن حوالي 10٪ فقط من 7 مليارات طن من النفايات البلاستيكية المتولدة عالميًا يتم إعادة تدويرها.
المركبات ذاتية القيادة
في السيارات ذاتية القيادة، يساعد تقسيم المثيلات في تحديد وتتبع المشاة والمركبات وإشارات المرور وعناصر الطريق الأخرى على مستوى البكسل. يعد هذا الفهم الدقيق للبيئة أمرًا بالغ الأهمية للملاحة وقرارات السلامة. أداء YOLO11 في الوقت الفعلي يجعله مثاليًا لهذه التطبيقات الحساسة للوقت.
التصوير الطبي
يمكن لتجزئة المثيل تحديد وتحديد أورام أو أعضاء أو هياكل خلوية في الفحوصات الطبية. إن قدرة YOLO11 على تحديد حدود الكائنات بدقة تجعلها ذات قيمة لـ التشخيص الطبي والتخطيط للعلاج.
مراقبة مواقع البناء
في مواقع البناء، يمكن لتقسيم المثيلات تتبع الآلات الثقيلة والعمال والمواد. يساعد هذا في ضمان السلامة من خلال مراقبة مواقع المعدات واكتشاف متى يدخل العمال إلى المناطق الخطرة، مع تحسين سير العمل وتخصيص الموارد أيضًا.
ملاحظة
لأية استفسارات، لا تتردد في نشر أسئلتك في قسم المشكلات في Ultralytics أو قسم المناقشة المذكور أدناه.
الأسئلة الشائعة
كيف يمكنني إجراء تجزئة مثيل باستخدام Ultralytics YOLO11؟
لتنفيذ تجزئة المثيل باستخدام Ultralytics YOLO11، قم بتهيئة نموذج YOLO بإصدار تجزئة من YOLO11 وعالج إطارات الفيديو من خلاله. إليك مثال مبسط للتعليمات البرمجية:
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"
# Video writer
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("instance-segmentation.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Init InstanceSegmentation
isegment = solutions.InstanceSegmentation(
show=True, # display the output
model="yolo11n-seg.pt", # model="yolo11n-seg.pt" for object segmentation using YOLO11.
)
# Process video
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or processing is complete.")
break
results = isegment(im0)
video_writer.write(results.plot_im)
cap.release()
video_writer.release()
cv2.destroyAllWindows()
تعرف على المزيد حول تقسيم المثيل في دليل Ultralytics YOLO11.
ما هو الفرق بين تجزئة المثيل وتتبع الكائنات في Ultralytics YOLO11؟
تحدد تجزئة المثيل وتحدد الكائنات الفردية داخل الصورة، مما يمنح كل كائن تسمية وقناعًا فريدًا. يوسع تتبع الكائنات هذا عن طريق تعيين معرفات متسقة للكائنات عبر إطارات الفيديو، مما يسهل التتبع المستمر لنفس الكائنات بمرور الوقت. عند الدمج، كما في تطبيق YOLO11، تحصل على قدرات قوية لتحليل حركة الكائنات وسلوكها في مقاطع الفيديو مع الحفاظ على معلومات دقيقة حول الحدود.
لماذا يجب عليّ استخدام Ultralytics YOLO11 لتجزئة وتتبع الحالات (instance segmentation and tracking) مقارنة بنماذج أخرى مثل Mask R-CNN أو Faster R-CNN؟
يوفر Ultralytics YOLO11 أداءً في الوقت الفعلي و دقة فائقة وسهولة في الاستخدام مقارنةً بنماذج أخرى مثل Mask R-CNN أو Faster R-CNN. يعالج YOLO11 الصور في تمريرة واحدة (الكشف على مرحلة واحدة)، مما يجعله أسرع بشكل ملحوظ مع الحفاظ على دقة عالية. كما يوفر تكاملاً سلسًا مع Ultralytics HUB، مما يسمح للمستخدمين بإدارة النماذج ومجموعات البيانات ومسارات التدريب بكفاءة. بالنسبة للتطبيقات التي تتطلب السرعة والدقة، يوفر YOLO11 توازنًا مثاليًا.
هل توجد أي مجموعات بيانات مقدمة من Ultralytics ومناسبة لتدريب نماذج YOLO11 لتقسيم وتتبع الحالات؟
نعم، تقدم Ultralytics العديد من مجموعات البيانات المناسبة لتدريب نماذج YOLO11 لتقسيم المثيلات، بما في ذلك COCO-Seg، COCO8-Seg (مجموعة فرعية أصغر للاختبار السريع)، Package-Seg، و Crack-Seg. تأتي مجموعات البيانات هذه مع تعليقات توضيحية على مستوى البكسل ضرورية لمهام تقسيم المثيلات. للتطبيقات الأكثر تخصصًا، يمكنك أيضًا إنشاء مجموعات بيانات مخصصة باتباع تنسيق Ultralytics. يمكن العثور على معلومات كاملة عن مجموعة البيانات وإرشادات الاستخدام في Ultralytics Datasets documentation.