نظرة عامة على مجموعات بيانات تجزئة المثيلات#
تجزئة المثيلات مهمة في الرؤية الحاسوبية تتضمن تحديد الكائنات الفردية في الصورة ورسم حدودها. يقدم هذا الدليل نظرة عامة على تنسيقات مجموعات البيانات التي يدعمها Ultralytics YOLO لمهام تجزئة المثيلات، إلى جانب تعليمات إعداد مجموعات البيانات وتحويلها واستخدامها لتدريب نماذجك.
تنسيقات مجموعات البيانات المدعومة#
تنسيق Ultralytics YOLO#
تنسيق تسميات مجموعة البيانات المستخدم لتدريب نماذج تجزئة YOLO هو كما يلي:
- ملف نصي واحد لكل صورة: تقابل كل صورة في مجموعة البيانات ملفًا نصيًا يحمل اسم ملف الصورة نفسه، ويمتد باللاحقة ".txt".
- سطر واحد لكل كائن: يقابل كل سطر في الملف النصي مثيلًا واحدًا لكائن في الصورة.
- معلومات الكائن في كل سطر: يحتوي كل سطر على المعلومات التالية حول مثيل الكائن:
- مؤشر فئة الكائن: عدد صحيح يمثل فئة الكائن (مثلًا، 0 للشخص و1 للسيارة، إلخ).
- إحداثيات مضلّع الكائن: نقاط
(x, y)التي تحدد محيط قناع الكائن، بعد تطبيعها لتقع بين 0 و1.
يكون تنسيق السطر الواحد في ملف مجموعة بيانات التجزئة كما يلي:
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>في هذا التنسيق، يمثّل <class-index> مؤشر فئة الكائن، وتمثّل <x1> <y1> <x2> <y2> ... <xn> <yn> إحداثيات المضلّع المُطبّعة لقناع تجزئة الكائن (وتكون القيم ضمن [0, 1] بالنسبة إلى عرض الصورة وارتفاعها). وتُفصل الإحداثيات بمسافات.
فيما يلي مثال على تنسيق مجموعة بيانات YOLO لصورة واحدة تحتوي على كائنين: أحدهما مقطع مكوّن من 3 نقاط، والآخر مقطع مكوّن من 5 نقاط.
0 0.681 0.485 0.670 0.487 0.676 0.487
1 0.504 0.000 0.501 0.004 0.498 0.004 0.493 0.010 0.492 0.0104- ليس من الضروري أن يكون طول كل سطر متساويًا.
- يجب أن تحتوي كل تسمية تجزئة على 3 نقاط
(x, y)على الأقل:<class-index> <x1> <y1> <x2> <y2> <x3> <y3> - يحتاج كل كائن إلى مضلع. لا تحتوي صفوف تنسيق الكشف (
<class-index> <x_center> <y_center> <width> <height>) على أي مضلعات، ويُرفض أي مجموعة بيانات تجزئة يختلف فيها عدد المربعات عن عدد المضلعات مع ظهورValueErrorعند تحميل التسميات.
تنسيق YAML لمجموعة البيانات#
يستخدم إطار عمل Ultralytics تنسيق ملف YAML لتعريف مجموعة البيانات وإعداد النموذج لتدريب نماذج التجزئة. فيما يلي مثال على تنسيق YAML المستخدم لتعريف مجموعة بيانات للتجزئة:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8-seg ← downloads here (1 MB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes
names:
0: person
1: bicycle
2: car
3: motorcycle
4: airplane
5: bus
6: train
7: truck
8: boat
9: traffic light
10: fire hydrant
11: stop sign
12: parking meter
13: bench
14: bird
15: cat
16: dog
17: horse
18: sheep
19: cow
20: elephant
21: bear
22: zebra
23: giraffe
24: backpack
25: umbrella
26: handbag
27: tie
28: suitcase
29: frisbee
30: skis
31: snowboard
32: sports ball
33: kite
34: baseball bat
35: baseball glove
36: skateboard
37: surfboard
38: tennis racket
39: bottle
40: wine glass
41: cup
42: fork
43: knife
44: spoon
45: bowl
46: banana
47: apple
48: sandwich
49: orange
50: broccoli
51: carrot
52: hot dog
53: pizza
54: donut
55: cake
56: chair
57: couch
58: potted plant
59: bed
60: dining table
61: toilet
62: tv
63: laptop
64: mouse
65: remote
66: keyboard
67: cell phone
68: microwave
69: oven
70: toaster
71: sink
72: refrigerator
73: book
74: clock
75: vase
76: scissors
77: teddy bear
78: hair drier
79: toothbrush
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zipتشير الحقول train وval وtest إلى صور التدريب والتحقق والاختبار. ويقبل كل منها مجلدًا أو قائمة مجلدات أو ملف *.txt يسرد مسار صورة واحدًا في كل سطر (تُحلّ المسارات التي تبدأ بـ ./ نسبةً إلى ملف *.txt). ويفيد ملف *.txt في التدريب على مجموعة فرعية من مجلد، أو تخطي الصور التي لا تحمل تسميات، أو جمع الصور من مصادر متعددة في قسم واحد.
path: datasets/coco8-seg # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
names:
0: personnames قاموس لأسماء الفئات. ينبغي أن يتطابق ترتيب الأسماء مع ترتيب مؤشرات فئات الكائنات في ملفات مجموعة بيانات YOLO.
الاستخدام#
from ultralytics import YOLO
# تحميل نموذج
model = YOLO("yolo26n-seg.pt") # تحميل نموذج مدرّب مسبقًا (موصى به للتدريب)
# تدريب النموذج
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)مجموعات البيانات المدعومة#
تدعم Ultralytics YOLO مجموعات بيانات متنوعة لمهام تجزئة الكائنات الفردية. فيما يلي قائمة بأكثرها استخدامًا. وتُستضاف معظم هذه المجموعات أيضًا على منصة Ultralytics، حيث يمكنك تصفح الصور والتعليقات التوضيحية، والاطلاع على إحصاءات مجموعات البيانات، واستنساخها للتدريب السحابي.
- Carparts-seg: مجموعة بيانات متخصصة تركز على تجزئة أجزاء السيارات، وهي مثالية لتطبيقات قطاع السيارات. وتتضمن مجموعة متنوعة من المركبات مع تعليقات توضيحية مفصلة لمكونات كل سيارة.
- COCO: مجموعة بيانات شاملة لاكتشاف الكائنات والتجزئة وإضافة الأوصاف التوضيحية، وتضم أكثر من 200 ألف صورة موسومة ضمن فئات متنوعة.
- COCO8-seg: مجموعة فرعية صغيرة من COCO تضم 8 صور، ومخصصة للاختبار السريع لتدريب نماذج التجزئة، وهي مثالية لفحوصات CI والتحقق من سير العمل في مستودع
ultralytics. - COCO128-seg: مجموعة بيانات أصغر لمهام تجزئة الكائنات الفردية، وتتضمن مجموعة فرعية من 128 صورة من COCO مع تعليقات توضيحية للتجزئة.
- Crack-seg: مجموعة بيانات مصممة لتجزئة الشقوق في أسطح متنوعة. وهي أساسية لصيانة البنية التحتية ومراقبة الجودة، إذ توفر صورًا مفصلة لتدريب النماذج على تحديد نقاط الضعف الهيكلية.
- Package-seg: مجموعة بيانات مخصصة لتجزئة أنواع مواد التغليف وأشكالها المختلفة. وهي مفيدة بوجه خاص لأتمتة الخدمات اللوجستية والمستودعات، وتساعد في تطوير أنظمة مناولة الطرود وفرزها.
إضافة مجموعة البيانات الخاصة بك#
إذا كانت لديك مجموعة بيانات خاصة بك وتريد استخدامها لتدريب نماذج التجزئة بتنسيق Ultralytics YOLO، فتأكد من اتباعها التنسيق المحدد أعلاه ضمن «تنسيق Ultralytics YOLO». حوّل التعليقات التوضيحية إلى التنسيق المطلوب، وحدد المسارات وعدد الفئات وأسماءها في ملف إعدادات YAML. احتفظ بالمجلدين images/ وlabels/ منفصلين وعلى المستوى نفسه، مع تطابق بنية المجلدات الفرعية؛ إذ قد يؤدي وضع ملفات .txt الخاصة بالتسميات في مجلد الصور إلى عدم اكتشاف النموذج للتسميات.
نقل تنسيقات التسميات أو تحويلها#
تحويل تنسيق مجموعة بيانات COCO إلى تنسيق YOLO#
يمكنك بسهولة تحويل التسميات من تنسيق مجموعة بيانات COCO الشائع إلى تنسيق YOLO باستخدام مقتطف الشيفرة التالي:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)يمكن استخدام أداة التحويل هذه لتحويل مجموعة بيانات COCO أو أي مجموعة بيانات بتنسيق COCO إلى تنسيق Ultralytics YOLO.
تذكّر التحقق جيدًا من توافق مجموعة البيانات التي تريد استخدامها مع نموذجك ومن اتباعها اصطلاحات التنسيق اللازمة. فالتنسيق الصحيح لمجموعات البيانات ضروري لتدريب نماذج تجزئة ناجحة.
التعليق التوضيحي التلقائي#
تُعد ميزة التعليق التوضيحي التلقائي أساسية، إذ تتيح لك إنشاء مجموعة بيانات للتجزئة باستخدام نموذج كشف مدرّب مسبقًا. وتمكّنك من إضافة تعليقات توضيحية إلى عدد كبير من الصور بسرعة ودقة من دون الحاجة إلى وسمها يدويًا، ما يوفر الوقت والجهد.
إنشاء مجموعة بيانات للتجزئة باستخدام نموذج كشف#
لإضافة تعليقات توضيحية تلقائيًا إلى مجموعة بياناتك باستخدام إطار عمل Ultralytics، يمكنك استخدام الدالة auto_annotate كما هو موضح أدناه:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
data | str | مطلوب | مسار الدليل الذي يحتوي على الصور المستهدفة المراد وسمها أو تجزئتها. |
det_model | str | 'yolo26x.pt' | مسار نموذج كشف YOLO لإجراء الكشف الأولي عن الكائنات. |
sam_model | str | 'sam_b.pt' | مسار نموذج SAM لإجراء التجزئة (يدعم أوزان SAM وSAM 2 وMobileSAM وSAM 3). |
device | str | '' | جهاز الحوسبة (مثل 'cuda:0' أو 'cpu' أو '' للكشف التلقائي عن الجهاز). |
conf | float | 0.25 | عتبة الثقة لكشف YOLO لتصفية الكشوفات ضعيفة الثقة. |
iou | float | 0.45 | عتبة IoU لكبت غير الأقصى لتصفية المربعات المتداخلة. |
imgsz | int | 640 | حجم الإدخال لتغيير أبعاد الصور (يُقرّب إلى أقرب مضاعف للعدد 32 عند الحاجة). |
max_det | int | 300 | الحد الأقصى لعدد الكشوفات لكل صورة لترشيد استخدام الذاكرة. |
classes | list[int] | None | قائمة بمؤشرات الفئات المراد كشفها (مثل [0, 1] للشخص والدراجة). |
output_dir | str | None | دليل حفظ الوسوم (الافتراضي: الدليل الشقيق <data>_auto_annotate_labels). |
تستقبل الدالة auto_annotate مسار الصور، إلى جانب وسيطات اختيارية لتحديد نماذج الكشف المدرّبة مسبقًا، مثل YOLO26 وYOLO11 أو نماذج أخرى، ونماذج التجزئة، مثل SAM وSAM 2 وMobileSAM أو SAM 3، والجهاز الذي ستُشغّل عليه النماذج، ومجلد الإخراج لحفظ النتائج التي أُضيفت إليها التعليقات التوضيحية.
بفضل الاستفادة من قوة النماذج المدرّبة مسبقًا، يمكن للتعليق التوضيحي التلقائي أن يقلل بدرجة كبيرة الوقت والجهد اللازمين لإنشاء مجموعات بيانات تجزئة عالية الجودة. وتفيد هذه الميزة بوجه خاص الباحثين والمطورين الذين يعملون مع مجموعات صور كبيرة، إذ تتيح لهم التركيز على تطوير النماذج وتقييمها بدلًا من إضافة التعليقات التوضيحية يدويًا.
تصوير التعليقات التوضيحية لمجموعة البيانات#
غالبًا ما يكون من المفيد عرض التعليقات التوضيحية لمجموعة البيانات بصريًا قبل تدريب النموذج، للتأكد من صحتها. توفر Ultralytics دالة مساعدة لهذا الغرض. تقرأ الدالة تسميات المربعات بتنسيق الكشف (<class-index> <x_center> <y_center> <width> <height>) فقط، ولذلك لا يمكنها تحليل ملفات تسميات مضلعات التجزئة:
from ultralytics.data.utils import visualize_image_annotations
label_map = { # عرّف خريطة التسميات التي تضم جميع تسميات الفئات المشروحة.
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # مسار صورة الإدخال.
"path/to/annotations.txt", # مسار ملف التعليقات التوضيحية للصورة.
label_map,
)ترسم هذه الدالة مربعات الإحاطة، وتضع أسماء الفئات لتسمية الكائنات، وتضبط لون النص لتحسين وضوحه، ما يساعدك على اكتشاف أخطاء التعليقات التوضيحية وتصحيحها قبل التدريب.
تحويل أقنعة التجزئة إلى تنسيق YOLO#
إذا كانت لديك صور أقنعة بتدرج الرمادي، حيث تمثل قيمة كل بكسل مؤشر الفئة + 1 (والخلفية قيمتها 0)، فيمكنك تحويلها إلى تنسيق تجزئة YOLO باستخدام:
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# لمجموعات البيانات مثل COCO التي تضم 80 فئة
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)تحوّل هذه الأداة المساعدة صور الأقنعة إلى تنسيق تجزئة YOLO وتحفظها في مجلد الإخراج المحدد.
الأسئلة الشائعة#
تدعم Ultralytics YOLO عدة تنسيقات لمجموعات البيانات الخاصة بتجزئة الكائنات الفردية، ويُعد تنسيق Ultralytics YOLO الخاص بها التنسيق الأساسي. تحتاج كل صورة في مجموعة بياناتك إلى ملف نصي مطابق يتضمن معلومات الكائنات المجزأة في عدة صفوف (صف واحد لكل كائن)، ويسرد مؤشر الفئة وإحداثيات المضلع المعيارية. للاطلاع على تعليمات أكثر تفصيلًا بشأن تنسيق مجموعة بيانات YOLO، تفضل بزيارة نظرة عامة على مجموعات بيانات تجزئة الكائنات الفردية.
من السهل تحويل التعليقات التوضيحية بتنسيق COCO إلى تنسيق YOLO باستخدام أدوات Ultralytics. يمكنك استخدام الدالة
convert_cocoمن الوحدةultralytics.data.converter:from ultralytics.data.converter import convert_coco convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)يحوّل هذا البرنامج النصي التعليقات التوضيحية لمجموعة بيانات COCO إلى تنسيق YOLO المطلوب، لتصبح مناسبة لتدريب نماذج YOLO. لمزيد من التفاصيل، راجع نقل تنسيقات التسميات أو تحويلها.
لإعداد ملف YAML لتدريب نماذج YOLO باستخدام Ultralytics، تحتاج إلى تعريف مسارات مجموعة البيانات وأسماء الفئات. فيما يلي مثال على إعداد YAML:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license # COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics # Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg # Example usage: yolo train data=coco8-seg.yaml # parent # ├── ultralytics # └── datasets # └── coco8-seg ← downloads here (1 MB) # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: coco8-seg # dataset root dir train: images/train # train images (relative to 'path') 4 images val: images/val # val images (relative to 'path') 4 images test: # test images (optional) # Classes names: 0: person 1: bicycle 2: car 3: motorcycle 4: airplane 5: bus 6: train 7: truck 8: boat 9: traffic light 10: fire hydrant 11: stop sign 12: parking meter 13: bench 14: bird 15: cat 16: dog 17: horse 18: sheep 19: cow 20: elephant 21: bear 22: zebra 23: giraffe 24: backpack 25: umbrella 26: handbag 27: tie 28: suitcase 29: frisbee 30: skis 31: snowboard 32: sports ball 33: kite 34: baseball bat 35: baseball glove 36: skateboard 37: surfboard 38: tennis racket 39: bottle 40: wine glass 41: cup 42: fork 43: knife 44: spoon 45: bowl 46: banana 47: apple 48: sandwich 49: orange 50: broccoli 51: carrot 52: hot dog 53: pizza 54: donut 55: cake 56: chair 57: couch 58: potted plant 59: bed 60: dining table 61: toilet 62: tv 63: laptop 64: mouse 65: remote 66: keyboard 67: cell phone 68: microwave 69: oven 70: toaster 71: sink 72: refrigerator 73: book 74: clock 75: vase 76: scissors 77: teddy bear 78: hair drier 79: toothbrush # Download script/URL (optional) download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zipتأكد من تحديث المسارات وأسماء الفئات بما يتوافق مع مجموعة بياناتك. لمزيد من المعلومات، راجع قسم تنسيق YAML لمجموعة البيانات.
تتيح ميزة التعليق التوضيحي التلقائي في Ultralytics YOLO إنشاء تعليقات توضيحية للتجزئة لمجموعة بياناتك باستخدام نموذج كشف مدرّب مسبقًا، ما يقلل بدرجة كبيرة الحاجة إلى الوسم اليدوي. يمكنك استخدام الدالة
auto_annotateكما يلي:from ultralytics.data.annotator import auto_annotate auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt") # or sam_model="mobile_sam.pt"تؤتمت هذه الدالة عملية إضافة التعليقات التوضيحية، ما يجعلها أسرع وأكثر كفاءة. لمزيد من التفاصيل، راجع مرجع التعليق التوضيحي التلقائي.