نظرة عامة على مجموعات بيانات تقسيم الكائنات#
تقسيم الكائنات هو مهمة في الرؤية الحاسوبية تتضمن تحديد الكائنات الفردية داخل الصورة ورسم حدودها. يقدم هذا الدليل نظرة عامة على تنسيقات مجموعات البيانات التي يدعمها 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: personيمثّل names قاموسًا لأسماء الفئات. ويجب أن يتطابق ترتيب الأسماء مع ترتيب فهارس فئات الكائنات في ملفات مجموعة بيانات YOLO.
الاستخدام#
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-seg.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)مجموعات البيانات المدعومة#
يدعم Ultralytics YOLO مجموعات بيانات متنوعة لمهمات تجزئة الحالات. إليك قائمة بأكثر مجموعات البيانات استخداماً. تُستضاف معظم مجموعات البيانات هذه أيضاً على Ultralytics Platform، حيث يمكنك تصفح الصور والتعليقات التوضيحية، وعرض إحصاءات مجموعات البيانات، واستنساخ مجموعات البيانات للتدريب السحابي.
- 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 الخاصة بـ Non-Maximum Suppression لتصفية المربعات المتداخلة. |
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 دالة مساعدة لهذا الغرض:
from ultralytics.data.utils import visualize_image_annotations
label_map = { # Define the label map with all annotated class labels.
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # Input image path.
"path/to/annotations.txt", # Annotation file path for the image.
label_map,
)ترسم هذه الدالة مربعات الإحاطة، وتوسم الكائنات بأسماء الفئات، وتضبط لون النص لتحسين سهولة القراءة، مما يساعدك على تحديد أخطاء التعليقات التوضيحية وتصحيحها قبل التدريب.
تحويل أقنعة التقسيم إلى تنسيق YOLO#
إذا كانت لديك أقنعة تقسيم بتنسيق ثنائي، فيمكنك تحويلها إلى تنسيق تقسيم YOLO باستخدام:
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# For datasets like COCO with 80 classes
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"تؤتمت هذه الدالة عملية التوسيم، مما يجعلها أسرع وأكثر كفاءة. لمزيد من التفاصيل، استكشف مرجع التوسيم التلقائي.