Ultralytics YOLO27:

نظرة عامة على مجموعات بيانات تقسيم الكائنات#

تقسيم الكائنات هو مهمة في الرؤية الحاسوبية تتضمن تحديد الكائنات الفردية داخل الصورة ورسم حدودها. يقدم هذا الدليل نظرة عامة على تنسيقات مجموعات البيانات التي يدعمها Ultralytics YOLO لمهام تقسيم الكائنات، إلى جانب إرشادات حول كيفية إعداد مجموعات البيانات هذه وتحويلها واستخدامها لتدريب نماذجك.

تنسيقات مجموعات البيانات المدعومة#

تنسيق Ultralytics YOLO#

يكون تنسيق تسميات مجموعة البيانات المستخدم لتدريب نماذج تقسيم YOLO كما يلي:

  1. ملف نصي واحد لكل صورة: تحتوي كل صورة في مجموعة البيانات على ملف نصي مطابق له في الاسم مع ملف الصورة، ويمتد بالامتداد ".txt".
  2. صف واحد لكل كائن: يتوافق كل صف في الملف النصي مع مثيل كائن واحد في الصورة.
  3. معلومات الكائن في كل صف: يحتوي كل صف على المعلومات التالية حول مثيل الكائن:
    • فهرس فئة الكائن: عدد صحيح يمثل فئة الكائن (مثلًا، 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/cfg/datasets/coco8-seg.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 في التدريب على مجموعة فرعية من دليل، أو تخطي الصور غير الموسومة، أو دمج الصور من مصادر متعددة في مجموعة واحدة.

مسارات الصور في ملف `*.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")
الوسيطةالنوعالافتراضيالوصف
datastrمطلوبمسار الدليل الذي يحتوي على الصور المستهدفة لإضافة التعليقات التوضيحية أو التقسيم.
det_modelstr'yolo26x.pt'مسار نموذج اكتشاف YOLO لاكتشاف الكائنات مبدئيًا.
sam_modelstr'sam_b.pt'مسار نموذج SAM للتقسيم (يدعم أوزان SAM وSAM 2 وMobileSAM وSAM 3).
devicestr''جهاز الحساب (مثل 'cuda:0' أو 'cpu' أو '' لاكتشاف الجهاز تلقائيًا).
conffloat0.25عتبة الثقة لاكتشاف YOLO لتصفية الاكتشافات الضعيفة.
ioufloat0.45عتبة IoU الخاصة بـ Non-Maximum Suppression لتصفية المربعات المتداخلة.
imgszint640حجم الإدخال لتغيير حجم الصور (يجب أن يكون من مضاعفات 32).
max_detint300الحد الأقصى لعدد الاكتشافات لكل صورة لتحسين كفاءة الذاكرة.
classeslist[int]Noneقائمة فهارس الفئات المراد اكتشافها (مثل [0, 1] للشخص والدراجة).
output_dirstrNoneدليل حفظ التعليقات التوضيحية (الافتراضي: الدليل الشقيق لـ <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"

    تؤتمت هذه الدالة عملية التوسيم، مما يجعلها أسرع وأكثر كفاءة. لمزيد من التفاصيل، استكشف مرجع التوسيم التلقائي.

التعليقات