نظرة عامة على مجموعات بيانات التجزئة الدلالية (Semantic Segmentation)

تقوم التجزئة الدلالية بتعيين تسمية فئة واحدة لكل بكسل في الصورة. وعلى عكس التجزئة المثيلية (Instance Segmentation)، لا تقوم التجزئة الدلالية بفصل الكائنات الفردية من نفس الفئة. هدف التدريب هو خريطة فئات كثيفة حيث يخزن كل بكسل معرف فئة (Class ID).

يشرح هذا الدليل تنسيق مجموعة البيانات المستخدم بواسطة نماذج التجزئة الدلالية Ultralytics YOLO ويسرد تكوينات مجموعات البيانات المضمنة المتاحة للتدريب والتحقق من الصحة.

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

يتم دعم تنسيقين للتسميات. يختار محمل مجموعة البيانات المسار بناءً على ما إذا كان ملف YAML الخاص بمجموعة البيانات يحدد مفتاح masks_dir.

تنسيق قناع PNG

تستخدم مجموعات بيانات التجزئة الدلالية ملف صورة واحداً وملف قناع واحداً لكل عينة. القناع عبارة عن صورة ذات قناة واحدة، عادة بصيغة PNG، حيث تمثل قيمة كل بكسل فهرس الفئة للبكسل المقابل في الصورة.

  • تمثل قيم البكسل 0 و 1 و 2 ... معرفات الفئات من تعيين names في مجموعة البيانات.
  • تُعامل قيمة البكسل 255 كتسمية تجاهل (ignore label) ويتم استبعادها من حساب الخسارة والمقاييس.
  • يجب أن تستخدم ملفات الأقنعة نفس الاسم الأساسي (stem) لملف الصورة المطابق لها، على سبيل المثال frankfurt_000000_000294.png.
  • امتدادات الأقنعة المدعومة هي .png و .PNG و .bmp و .tif.

يحافظ التخطيط الافتراضي على الصور والأقنعة في مجلدات متوازية. تستبدل قيمة masks_dir من ملف YAML الخاص بمجموعة البيانات مكون مسار images للعثور على الأقنعة.

dataset/
├── images/
│   ├── train/
│   └── val/
└── masks/
    ├── train/
    └── val/

على سبيل المثال، يتم إقران صورة في images/train/aachen_000000_000019.png بقناع في masks/train/aachen_000000_000019.png عندما يكون masks_dir: masks.

تنسيق تسمية المضلع (Polygon) لـ YOLO

إذا كانت مجموعة بياناتك تحتوي بالفعل على تسميات مضلع Ultralytics YOLO (ملف .txt واحد لكل صورة يحتوي على صفوف <class-index> <x1> <y1> <x2> <y2> ...)، يمكنك تدريب التجزئة الدلالية مباشرة منها - لا حاجة لتحويل قناع PNG. راجع تنسيق مجموعة بيانات التجزئة المثيلية لمعرفة تخطيط مستوى الصف.

يتم اختيار هذا المسار تلقائياً عند حذف masks_dir من ملف YAML الخاص بمجموعة البيانات. السلوك:

  • يتم تحويل المضلعات إلى قناع دلالي لكل صورة في وقت التحميل، مرتبة حسب المساحة بحيث تتجاوز الكائنات الأصغر الكائنات الأكبر في مناطق التداخل.
  • متعددة الفئات (N > 1 في names): يتم إلحاق فئة background إضافية بعد الفئات المعلن عنها للبكسلات التي لا تغطيها أي مضلع. يتم بناء النموذج بـ N + 1 من قنوات الإخراج وتكون القناة الأخيرة هي الخلفية.
  • فئة واحدة (N == 1 في names): تظل مدربة كفئة واحدة. يكون القناع ثنائياً، حيث تظهر فئتك المعلن عنها كـ 1 والبكسلات التي لا تغطيها أي مضلع كـ 0. لا يتم إضافة فئة خلفية إضافية إلى names.
  • البكسلات المضافة بواسطة حشوة التوسيع (مثل القص العشوائي) لا تزال تستخدم 255 كتسمية تجاهل.

استخدم هذا المسار عندما تكون بياناتك مصنفة بالفعل كمضلعات مثيل وتريد نموذج تجزئة دلالية من نفس الملفات.

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

يتم تكوين مجموعات بيانات التجزئة الدلالية باستخدام ملفات YAML. الحقول الرئيسية هي:

المفتاحالوصف
pathالدليل الجذر لمجموعة البيانات.
trainمسار صورة التدريب بالنسبة إلى path، أو مسار مطلق.
valمسار صورة التحقق بالنسبة إلى path، أو مسار مطلق.
testمسار صورة الاختبار الاختياري.
masks_dirاسم الدليل المستخدم للأقنعة الدلالية. احذف هذا المفتاح للتبديل إلى تنسيق تسمية المضلع YOLO.
namesتعيين معرف الفئة إلى اسم الفئة.
label_mappingتعيين اختياري من معرفات مجموعة البيانات المصدر إلى معرفات التدريب أو ignore_label.
ultralytics/cfg/datasets/cityscapes8.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# Cityscapes semantic segmentation dataset (19 classes)
# Documentation: https://docs.ultralytics.com/datasets/semantic/cityscapes8/
# Example usage: yolo semantic train data=cityscapes8.yaml model=yolo26n-sem.pt
# parent
# ├── ultralytics
# └── datasets
#     └── cityscapes8 ← downloads here (small subset)
#         └── images
#         └── masks

# Dataset root directory
path: cityscapes8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images

masks_dir: masks # semantic mask directory

# Cityscapes 19-class labels
names:
  0: road
  1: sidewalk
  2: building
  3: wall
  4: fence
  5: pole
  6: traffic light
  7: traffic sign
  8: vegetation
  9: terrain
  10: sky
  11: person
  12: rider
  13: car
  14: truck
  15: bus
  16: train
  17: motorcycle
  18: bicycle

# Map source label IDs to train IDs; ignore_label is converted to 255.
label_mapping:
  -1: ignore_label
  0: ignore_label
  1: ignore_label
  2: ignore_label
  3: ignore_label
  4: ignore_label
  5: ignore_label
  6: ignore_label
  7: 0
  8: 1
  9: ignore_label
  10: ignore_label
  11: 2
  12: 3
  13: 4
  14: ignore_label
  15: ignore_label
  16: ignore_label
  17: 5
  18: ignore_label
  19: 6
  20: 7
  21: 8
  22: 9
  23: 10
  24: 11
  25: 12
  26: 13
  27: 14
  28: 15
  29: ignore_label
  30: ignore_label
  31: 16
  32: 17
  33: 18

# Download URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/cityscapes8.zip

استخدم label_mapping عندما لا تتطابق معرفات قناع المصدر بالفعل مع معرفات فئة التدريب المتجاورة. تتضمن Cityscapes و ADE20K تعيينات تحول معرفات التسمية الأصلية إلى معرفات تدريب التجزئة الدلالية YOLO وتتجاهل التسميات غير المستخدمة.

الاستخدام

تدريب نموذج التجزئة الدلالية YOLO26 باستخدام Python أو CLI:

مثال
from ultralytics import YOLO

# Load a pretrained semantic segmentation model
model = YOLO("yolo26n-sem.pt")

# Train on the Cityscapes8 semantic segmentation dataset
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)

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

توفر Ultralytics ملفات YAML لمجموعات بيانات التجزئة الدلالية لهذه المجموعات:

  • Cityscapes: مجموعة بيانات التجزئة الدلالية لمشاهد الشوارع الحضرية مع 19 فئة تدريب.
  • Cityscapes8: مجموعة فرعية من Cityscapes مكونة من 8 صور للاختبارات السريعة وفحوصات CI.
  • ADE20K: مجموعة بيانات تحليل المشهد مع 150 فئة دلالية.

إضافة مجموعة البيانات الخاصة بك

الخيار أ — أقنعة PNG

  1. احفظ صورك تحت مجلدات التقسيم مثل images/train و images/val.
  2. احفظ قناعاً واحداً ذا قناة واحدة لكل صورة تحت مجلدات الأقنعة المقابلة، مثل masks/train و masks/val.
  3. تأكد من أن قيم بكسل القناع هي معرفات فئات. استخدم 255 للبكسلات التي يجب تجاهلها.
  4. أنشئ ملف YAML لمجموعة البيانات يحتوي على path و train و val و masks_dir و names.
  5. أضف label_mapping فقط عندما تحتاج معرفات القناع الخاصة بك إلى تحويل إلى معرفات تدريب متجاورة.
path: path/to/my-semantic-dataset
train: images/train
val: images/val
masks_dir: masks

names:
    0: background
    1: road
    2: building

الخيار ب — تسميات المضلع

  1. رتب الصور وملفات مضلع .txt تماماً كما في التجزئة المثيلية.
  2. أنشئ ملف YAML لمجموعة البيانات يحتوي على path و train و val و namesاحذف masks_dir.
  3. لا تضف إدخال "خلفية" (background) إلى names. بالنسبة لمجموعات البيانات متعددة الفئات، يقوم المحمل بإلحاق واحدة تلقائياً؛ بالنسبة لمجموعات البيانات ذات الفئة الواحدة، يظل التدريب على فئة واحدة — تصبح فئتك المعلنة 1 في القناع وتصبح البكسلات غير المغطاة 0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val

names:
    0: person
    1: car

أسئلة شائعة

ما الفرق بين أقنعة التجزئة الدلالية وتسميات التجزئة المثيلية؟

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

ما هي قيمة البكسل التي يتم تجاهلها أثناء التدريب؟

تُستخدم قيمة البكسل 255 كتسمية تجاهل. يتم تخطي هذه البكسلات أثناء حساب الخسارة والمقاييس، وهو أمر مفيد للمناطق الفارغة، أو البكسلات غير المصنفة، أو الفئات خارج مجموعة تسميات التدريب.

هل يجب أن تتطابق أسماء ملفات القناع مع أسماء ملفات الصور؟

نعم. يجب أن يكون لكل قناع دلالي نفس الاسم الأساسي للملف للصورة المقابلة. يستبدل محمل مجموعة البيانات مكون دليل images بـ masks_dir ويبحث عن ملفات الأقنعة المطابقة.

هل يمكنني استخدام معرفات تسمية مجموعة البيانات الأصلية مباشرة؟

نعم، إذا كانت تتطابق بالفعل مع معرفات فئات names الخاصة بك. إذا كانت مجموعة بيانات المصدر تستخدم معرفات غير متجاورة أو تتضمن تسميات يجب تجاهلها، أضف قسماً لـ label_mapping لتحويل قيم بكسل المصدر إلى معرفات تدريب.

هل يمكنني استخدام مجموعة بيانات التجزئة المثيلية الخاصة بي لتدريب التجزئة الدلالية؟

نعم. تستخدم مجموعات بيانات التجزئة المثيلية تسميات مضلع Ultralytics YOLO (ملف .txt واحد لكل صورة يحتوي على صفوف <class-index> <x1> <y1> <x2> <y2> ...)، ويمكن إعادة استخدام نفس الملفات للتجزئة الدلالية — فقط احذف masks_dir من ملف YAML الخاص بمجموعة البيانات. يقوم المحمل بتحويل المضلعات إلى أقنعة لكل صورة أثناء التشغيل. بالنسبة لمجموعات البيانات متعددة الفئات (N > 1) يتم إلحاق فئة background إضافية ويتم بناء النموذج بـ N + 1 قنوات إخراج. بالنسبة لمجموعات البيانات ذات الفئة الواحدة (N == 1) يظل التدريب على فئة واحدة — يُظهر القناع فئتك المعلنة كـ 1 والبكسلات غير المغطاة كـ 0.

التعليقات