التجزئة الدلالية باستخدام Ultralytics YOLO#
تُسند التجزئة الدلالية تسمية فئة إلى كل بكسل في الصورة، منتجةً خريطة فئات كثيفة تغطي المشهد بأكمله. وعلى خلاف تجزئة المثيلات، التي تفصل الكائنات الفردية، تجمع التجزئة الدلالية كل البكسلات المنتمية إلى الفئة نفسها، بصرف النظر عن عدد الكائنات المنفصلة الموجودة.
شاهد: التقسيم الدلالي باستخدام Ultralytics YOLO26 | دليل البدء السريع
يكون ناتج نموذج التجزئة الدلالية خريطة فئات واحدة بأبعاد الارتفاع والعرض، حيث تقابل قيمة كل بكسل معرّف الفئة المتنبأ به. وهذا يجعل التجزئة الدلالية مثالية لمهام فهم المشهد، مثل القيادة الذاتية والتصوير الطبي ورسم خرائط الغطاء الأرضي.
استخدم task=semantic أو مهمة CLI المسماة yolo semantic لإجراء التجزئة الدلالية. وتستخدم ملفات نماذج التجزئة الدلالية YOLO26 اللاحقة -sem، مثل yolo26n-sem.pt.
النماذج#
تظهر أدناه نماذج YOLO26 Semantic المدرّبة مسبقًا على مجموعة بيانات Cityscapes.
تُنزّل النماذج تلقائيًا من أحدث إصدار من Ultralytics عند استخدامها لأول مرة.
| النموذج | الحجم (بكسل) | mIoUالتحقق | السرعة RTX3090 PyTorch (ms) | المعاملات (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem | 1024 × 2048 | 78.3 | 4.4 ± 0.0 | 1.6 | 23.8 |
| YOLO26s-sem | 1024 × 2048 | 80.8 | 8.4 ± 0.0 | 6.5 | 91.0 |
| YOLO26m-sem | 1024 × 2048 | 82.0 | 19.9 ± 0.1 | 14.3 | 305.5 |
| YOLO26l-sem | 1024 × 2048 | 82.9 | 26.5 ± 0.1 | 17.8 | 388.2 |
| YOLO26x-sem | 1024 × 2048 | 83.6 | 48.9 ± 0.2 | 40.1 | 866.9 |
- قيم mIoUval محسوبة لنموذج واحد بمقياس واحد على مجموعة التحقق Cityscapes.
أعِد إنتاج النتائج باستخدامyolo semantic val data=cityscapes.yaml device=0 imgsz=2048 - متوسط السرعة محسوب على صور التحقق من Cityscapes باستخدام مثيل RTX3090.
أعِد إنتاج النتائج باستخدامyolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048 - قيم Params وFLOPs محسوبة للنموذج بعد
model.fuse()، الذي يدمج طبقات Conv وBatchNorm. تحتفظ نقاط التحقق المدرّبة مسبقًا ببنية التدريب الكاملة، وقد تُظهر أعدادًا أعلى.
تظهر أدناه نماذج YOLO26 Semantic المدرّبة مسبقًا على مجموعة بيانات ADE20K.
| النموذج | الحجم (بكسل) | mIoUالتحقق | السرعة RTX3090 PyTorch (ms) | المعاملات (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem-ade20k | 640 | 38.8 | 3.9 ± 0.2 | 1.6 | 4.5 |
| YOLO26s-sem-ade20k | 640 | 45.6 | 4.2 ± 0.3 | 6.5 | 17.5 |
| YOLO26m-sem-ade20k | 640 | 47.4 | 4.7 ± 0.3 | 14.4 | 59.6 |
| YOLO26l-sem-ade20k | 640 | 49.7 | 8.3 ± 0.2 | 17.9 | 75.2 |
| YOLO26x-sem-ade20k | 640 | 51.5 | 9.9 ± 0.3 | 40.2 | 168.4 |
- قيم mIoUval محسوبة لنموذج واحد بمقياس واحد على مجموعة التحقق ADE20K.
أعِد إنتاج النتائج باستخدامyolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640، مع استبدالyolo26n-sem-ade20k.ptبنقطة التحققyolo26*-sem-ade20k.ptالمطلوبة. - متوسط السرعة محسوب على صور التحقق من ADE20K باستخدام مثيل RTX3090.
أعِد إنتاج النتائج باستخدامyolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640، مع استبدالyolo26n-sem-ade20k.ptبنقطة التحققyolo26*-sem-ade20k.ptالمطلوبة. - قيم Params وFLOPs محسوبة للنموذج بعد
model.fuse()، الذي يدمج طبقات Conv وBatchNorm. تحتفظ نقاط التحقق المدرّبة مسبقًا ببنية التدريب الكاملة، وقد تُظهر أعدادًا أعلى.
اطّلع على معاينة YOLO27 غير المُصدرة لمعرفة النتائج الأولية لقيمة mIoU على Cityscapes.
التدريب#
درّب YOLO26n-sem على مجموعة بيانات Cityscapes8 لمدة 100 حقبة بحجم صورة 1024. للاطلاع على القائمة الكاملة للوسيطات المتاحة، راجع صفحة Configuration.
from ultralytics import YOLO
# تحميل نموذج
model = YOLO("yolo26n-sem.yaml") # إنشاء نموذج جديد من YAML
model = YOLO("yolo26n-sem.pt") # تحميل نموذج مدرّب مسبقًا (موصى به للتدريب)
model = YOLO("yolo26n-sem.yaml").load("yolo26n-sem.pt") # الإنشاء من YAML ونقل الأوزان
# تدريب النموذج
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)اطّلع على التفاصيل الكاملة لوضع train في صفحة Train. ويمكن أيضًا تدريب نماذج التجزئة الدلالية باستخدام التدريب السحابي على Ultralytics Platform.
تنسيق مجموعة البيانات#
تستخدم مجموعات بيانات التجزئة الدلالية صور أقنعة أحادية القناة، عادةً بتنسيق PNG، حيث تمثل قيمة كل بكسل معرّف فئة. وتُعامل البكسلات ذات القيمة 255 على أنها «تجاهل»، وتُستبعد من حساب الخسارة. ينبغي أن يحدد ملف YAML لمجموعة البيانات مسارات الصور ومجلدات الأقنعة المقابلة لها. يمكن التدريب مباشرةً على مجموعات البيانات ذات تسميات مضلعات YOLO، إذ تُحوّل إلى أقنعة أثناء التشغيل (راجع هل يمكنني استخدام بيانات تجزئة المثيلات أدناه). راجع دليل مجموعات بيانات التجزئة الدلالية لمعرفة تفاصيل التنسيق. تشمل مجموعات البيانات المدعومة Cityscapes وADE20K. ويمكنك إدارة مجموعات البيانات الدلالية وإضافة التسميات إليها باستخدام التعليقات التوضيحية في Ultralytics Platform.
التحقق#
تحقّق من دقة نموذج YOLO26n-sem المدرّب على مجموعة بيانات للتجزئة الدلالية. مرّر data صراحةً لضمان استخدام مجموعة بيانات YAML المقصودة أثناء التحقق.
from ultralytics import YOLO
# تحميل نموذج
model = YOLO("yolo26n-sem.pt") # حمّل نموذجًا رسميًا
model = YOLO("path/to/best.pt") # تحميل نموذج مخصص
# تحقّق من النموذج
metrics = model.val(data="cityscapes.yaml")
metrics.miou # متوسط التقاطع على الاتحاد
metrics.pixel_accuracy # دقة البكسلات الإجماليةالتنبؤ#
استخدم نموذج YOLO26n-sem مدرّبًا لإجراء تنبؤات على الصور.
from ultralytics import YOLO
# تحميل نموذج
model = YOLO("yolo26n-sem.pt") # حمّل نموذجًا رسميًا
model = YOLO("path/to/best.pt") # تحميل نموذج مخصص
# أجرِ التنبؤ باستخدام النموذج
results = model("https://ultralytics.com/images/bus.jpg") # أجرِ التنبؤ على صورة
# الوصول إلى النتائج
for result in results:
semantic_mask = result.semantic_mask.data # خريطة الفئات، شكلها (H,W)، ونوع بياناتها عدد صحيح يُحدَّد وفقًا لعدد الفئاتاطّلع على التفاصيل الكاملة لوضع predict في صفحة التنبؤ.
مخرجات النتائج#
تعيد التجزئة الدلالية في YOLO كائن Results واحدًا لكل صورة. وتخزّن كل نتيجة خريطة فئات كثيفة واحدة للصورة بأكملها بدلًا من قائمة بأقنعة الكائنات. وتحمل البكسلات ذات الفئة المتنبأ بها نفسها معرّف الفئة ذاته، حتى إن كانت تنتمي إلى كائنات منفصلة.
| السمة | النوع | الشكل | الوصف |
|---|---|---|---|
result.semantic_mask | SemanticMask | (H,W) | خريطة فئات كثيفة. |
result.semantic_mask.data | torch.uint8torch.int16torch.int32 | (H,W) | معرّفات الفئات؛ يُختار نوع البيانات وفقًا لعدد الفئات. |
result.masks | - | - | لا توجد أقنعة للمثيلات. |
result.boxes | - | - | لا توجد صناديق/درجات ثقة للمثيلات. |
للاطلاع على حقول Results الخاصة بكل مهمة، راجع قسم نتائج التنبؤ حسب المهمة.
تتنبأ التجزئة الدلالية بخريطة فئات كثيفة، ثم تغيّر حجم تلك الخريطة لتطابق شكل الصورة بغرض العرض والاستخدام اللاحق. لذلك قد تبدو البنى الرفيعة جدًا، مثل علامات المسارات وخطوط الملاعب والأعمدة والأسلاك، متدرجةً عندما يجري الاستدلال بقيمة imgsz أقل بكثير من دقة الصورة الأصلية. إذا بدت الحدود متعرجة، فأعِد أولًا الاختبار باستخدام نموذج PyTorch .pt الأصلي مع قيمة أكبر لـ imgsz، مثل 1024 أو 1280، أو أقرب قيمة عملية إلى حجم الصورة المصدر. استخدم النماذج المُصدّرة فقط بعد التأكد من قبول مخرجات .pt، إذ لا يمكن لمدخلات الدقة المنخفضة استعادة التفاصيل الدقيقة التي لم تظهر في خريطة الفئات المتنبأ بها.
تجزئة المثيلات مقابل التجزئة الدلالية#
| الجانب | تجزئة المثيلات (task="segment") | التجزئة الدلالية (task="semantic") |
|---|---|---|
| هدف التنبؤ | تجزئة كل كائن مكتشف على حدة | إسناد معرّف فئة واحد إلى كل بكسل |
| حقل الإخراج | result.masks | result.semantic_mask |
| البيانات الأساسية | result.masks.data | result.semantic_mask.data |
| الشكل | (N,H,W) | (H,W) |
| قيم البكسل | قيم القناع الثنائية: 0 أو 1 | معرّفات الفئات: 0 و1 و2، ... |
| نوع البيانات | torch.uint8 | torch.uint8torch.int16torch.int32 |
| الكائنات المنتمية إلى الفئة نفسها | تُحفظ كمثيلات منفصلة | تُدمج في منطقة الفئة نفسها |
| المضلعات | نعم، عبر result.masks.xy وresult.masks.xyn | لا يوجد إخراج للمضلعات افتراضيًا |
| الصناديق ودرجات الثقة | نعم، عبر result.boxes | لا توجد صناديق أو درجات ثقة لكل مثيل |
| الاستخدام المعتاد | العدّ والتتبع والاقتصاص والقياس على مستوى الكائن | وسم المشاهد الكثيف ومناطق القيادة والغطاء الأرضي والمناطق الطبية |
التصدير#
صدّر نموذج YOLO26n-sem إلى تنسيق آخر مثل ONNX أو CoreML وغيرهما.
from ultralytics import YOLO
# تحميل نموذج
model = YOLO("yolo26n-sem.pt") # حمّل نموذجًا رسميًا
model = YOLO("path/to/best.pt") # تحميل نموذج مخصص
# صدّر النموذج
model.export(format="onnx")تظهر تنسيقات التصدير المتاحة للتجزئة الدلالية في YOLO26 في الجدول أدناه. يمكنك التصدير إلى أي تنسيق باستخدام الوسيط format، أي format='onnx' أو format='engine'. ويمكنك إجراء التنبؤ أو التحقق مباشرةً باستخدام النماذج المُصدّرة، أي yolo predict model=yolo26n-sem.onnx. تظهر أمثلة الاستخدام لنموذجك بعد اكتمال التصدير.
| التنسيق | وسيط format | النموذج | البيانات الوصفية | الوسيطات |
|---|---|---|---|---|
| PyTorch | - | yolo26n-sem.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-sem.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-sem.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-sem_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-sem.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-sem.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| Apple Core AI | coreai | yolo26n-sem.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n-sem_saved_model/ | ✅ | imgsz, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-sem.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-sem_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| LiteRT | litert | yolo26n-sem.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-sem_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-sem.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-sem_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-sem_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-sem_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-sem_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-sem_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-sem_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-sem_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| Hailo | hailo | yolo26n-sem_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n-sem_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n-sem_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
يعتمد nms=None على المخرجات الأولية لإجراء NMS خارجي. اضبط nms=False لتحديد رأس متاح خالٍ من NMS؛ وتعود التنسيقات غير المدعومة إلى مسار المخرجات الأصلي الخاص بها. تحدد إدخالات nms أعلاه التنسيقات التي يمكنها تضمين NMS باستخدام nms=True.
اطّلع على التفاصيل الكاملة لـexport في صفحة التصدير.
الأسئلة الشائعة#
لتدريب نموذج YOLO26 للتقسيم الدلالي على مجموعة بيانات مخصصة، عليك إعداد صور أقنعة PNG، بحيث تمثل قيمة كل بكسل معرّف فئة (0، 1، 2، ...) وتُستثنى البكسلات ذات القيمة 255 أثناء التدريب. أنشئ ملف YAML لمجموعة البيانات يشير إلى مجلدي الصور والأقنعة، ثم درّب النموذج:
مثالfrom ultralytics import YOLO # تحميل نموذج YOLO26 مُدرَّب مسبقًا للتقسيم الدلالي model = YOLO("yolo26n-sem.pt") # تدريب النموذج results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=1024)راجع صفحة Configuration للاطلاع على مزيد من الوسيطات المتاحة.
تقسيم الكائنات وتقسيم المشهد دلاليًا مهمتان على مستوى البكسل، لكنهما تختلفان في جانب أساسي:
- يُسنِد التقسيم الدلالي تسمية فئة إلى كل بكسل، لكنه لا يميّز بين الكائنات الفردية من الفئة نفسها. على سبيل المثال، تحمل جميع السيارات في المشهد تسمية الفئة نفسها.
- يحدّد تقسيم الكائنات كل كائن على حدة، وينتج أقنعة منفصلة لكل كائن حتى إن كانت الكائنات تنتمي إلى الفئة نفسها.
يناسب التقسيم الدلالي مهام فهم المشهد، مثل القيادة الذاتية ورسم خرائط الغطاء الأرضي، بينما يُفضَّل تقسيم الكائنات عند أهمية عدّ الكائنات الفردية أو تتبّعها.
نعم. إذا كانت مجموعة بياناتك تستخدم تسميات مضلعات Ultralytics YOLO (واحد
.txtلكل صورة)، فاحذفmasks_dirمن ملف YAML لمجموعة البيانات، وتأكد من عدم وجود مجلدmasks/بجوار صورك في جذر مجموعة البيانات (فوجوده وحده يفعّل وضع أقنعة PNG حتى من دون تعيينmasks_dir). بعد ذلك، يحوّل المُحمِّل المضلعات إلى أقنعة دلالية لكل صورة أثناء التشغيل. في مجموعات البيانات متعددة الفئات (N > 1)، تُضاف فئةbackgroundإضافية تلقائيًا إلىnames. أما في مجموعات البيانات أحادية الفئة (N == 1)، فيظل التدريب على فئة واحدة — وتصبح الفئة التي أعلنتها1في القناع، بينما تصبح البكسلات غير المغطاة0. راجع دليل مجموعة بيانات التقسيم الدلالي لمزيد من التفاصيل.يوفر Ultralytics YOLO26 إعدادات مضمّنة لعدة مجموعات بيانات للتقسيم الدلالي:
- Cityscapes: مشاهد شوارع حضرية تضم 19 فئة، وتُستخدم على نطاق واسع في أبحاث القيادة الذاتية.
- ADE20K: مجموعة بيانات واسعة النطاق لتحليل المشاهد تضم 150 فئة.
يمكنك أيضًا استخدام أي مجموعة بيانات مخصصة توفر تعليقات توضيحية للأقنعة بصيغة PNG، بحيث تطابق قيم البكسلات معرّفات الفئات.
تحقّق من صحة نموذج YOLO26 مُدرَّب مسبقًا للتقسيم الدلالي باستخدام ملف YAML لمجموعة البيانات المستخدَم للتقييم:
مثالfrom ultralytics import YOLO # تحميل نموذج مدرَّب مسبقًا model = YOLO("yolo26n-sem.pt") # تحقّق من النموذج metrics = model.val(data="cityscapes.yaml") print("Mean IoU:", metrics.miou) print("Pixel Accuracy:", metrics.pixel_accuracy)ستوفر لك هذه الخطوات مقاييس التحقق، مثل متوسط التقاطع على الاتحاد (mIoU) ودقة البكسلات، وهي مقاييس معيارية لتقييم أداء التقسيم الدلالي.
صدّر نموذج YOLO26 للتقسيم الدلالي إلى تنسيق ONNX باستخدام أوامر Python أو CLI:
مثالfrom ultralytics import YOLO # تحميل نموذج مدرَّب مسبقًا model = YOLO("yolo26n-sem.pt") # تصدير النموذج إلى تنسيق ONNX model.export(format="onnx")لمزيد من التفاصيل حول التصدير إلى تنسيقات مختلفة، راجع صفحة Export.