نموذج YOLO-World#
يقدّم نموذج YOLO-World نهجًا متقدمًا وآنيًا قائمًا على Ultralytics وYOLOv8 لمهام الكشف بالمفردات المفتوحة. ويتيح هذا الابتكار كشف أي جسم في الصورة استنادًا إلى النصوص الوصفية. ومن خلال خفض المتطلبات الحاسوبية بدرجة كبيرة مع الحفاظ على أداء تنافسي، يصبح YOLO-World أداة متعددة الاستخدامات للعديد من التطبيقات القائمة على الرؤية.
شاهد: سير عمل تدريب YOLO World على مجموعة بيانات مخصصة

نظرة عامة#
يعالج YOLO-World التحديات التي تواجه نماذج الكشف التقليدية بالمفردات المفتوحة، التي تعتمد غالبًا على نماذج Transformer كبيرة تتطلب موارد حوسبة هائلة. كما أن اعتماد هذه النماذج على فئات أجسام محددة مسبقًا يحد من فائدتها في السيناريوهات الديناميكية. ويطوّر YOLO-World إطار عمل YOLOv8 بإضافة قدرات الكشف بالمفردات المفتوحة، مستخدمًا نمذجة الرؤية واللغة والتدريب المسبق على مجموعات بيانات واسعة، ليبرع في تحديد طيف واسع من الأجسام في سيناريوهات التعلّم دون أمثلة وبكفاءة لا مثيل لها.
للاستخدام بالمفردات المفتوحة عندما تحتاج أيضًا إلى أقنعة الكائنات أو المطالبات المرئية أو وضع خالٍ من المطالبات، راجع YOLOE، الذي يستخدم واجهة API نفسها set_classes().
الميزات الرئيسية#
-
حل آني: يستفيد YOLO-World من سرعة الحوسبة التي توفرها شبكات CNN لتقديم حل سريع للكشف بالمفردات المفتوحة، يلبي احتياجات القطاعات التي تتطلب نتائج فورية.
-
الكفاءة والأداء: يقلل YOLO-World المتطلبات الحاسوبية ومتطلبات الموارد دون التضحية بالأداء، مقدّمًا بديلًا قويًا لنماذج مثل SAM، ولكن بتكلفة حوسبية أقل بكثير، ما يتيح التطبيقات الآنية.
-
الاستدلال باستخدام مفردات غير متصلة بالإنترنت: يقدم YOLO-World استراتيجية «المطالبة ثم الكشف»، مستخدمًا مفردات غير متصلة بالإنترنت لتعزيز الكفاءة أكثر. ويتيح هذا النهج استخدام مطالبات مخصصة محسوبة مسبقًا، بما في ذلك التسميات التوضيحية أو الفئات، لترميزها وتخزينها في صورة تضمينات للمفردات غير المتصلة بالإنترنت، ما يبسّط عملية الكشف.
-
مدعوم بـ YOLOv8: يستند YOLO-World إلى Ultralytics YOLOv8، ويستفيد من أحدث التطورات في الكشف الآني عن الأجسام لتيسير الكشف بالمفردات المفتوحة بدقة وسرعة لا مثيل لهما.
-
التميز في المعايير المرجعية: يتفوق YOLO-World على كواشف المفردات المفتوحة الحالية، بما في ذلك سلسلتا MDETR وGLIP، من حيث السرعة والكفاءة في المعايير المرجعية القياسية، ما يبرز القدرات المتفوقة لـ YOLOv8 على وحدة NVIDIA V100 GPU واحدة.
-
تطبيقات متعددة الاستخدامات: يفتح النهج المبتكر لـ YOLO-World آفاقًا جديدة لمجموعة كبيرة من مهام الرؤية، محققًا تحسينات في السرعة تتجاوز الأساليب الحالية بمراتب عدة.
النماذج المتاحة والمهام المدعومة وأوضاع التشغيل#
يفصّل هذا القسم النماذج المتاحة وأوزانها المحددة المدرّبة مسبقًا والمهام التي تدعمها ومدى توافقها مع أنماط التشغيل المختلفة، مثل الاستدلال والتحقق والتدريب والتصدير، مع الإشارة إلى الأنماط المدعومة بالرمز ✅ وغير المدعومة بالرمز ❌.
نُقلت جميع أوزان YOLOv8-World مباشرةً من مستودع YOLO-World الرسمي، تأكيدًا على إسهاماته الممتازة.
| نوع النموذج | الأوزان المدرّبة مسبقاً | المهام المدعومة | التدريب | التحقق | الاستدلال | التصدير |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | كشف الكائنات | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | كشف الكائنات | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | كشف الكائنات | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | كشف الكائنات | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | كشف الكائنات | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | كشف الكائنات | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | كشف الكائنات | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | كشف الكائنات | ✅ | ✅ | ✅ | ✅ |
النقل دون تدريب مسبق على مجموعة بيانات COCO#
| نوع النموذج | mAP | mAP50 | mAP75 |
|---|---|---|---|
| yolov8s-world | 37.4 | 52.0 | 40.6 |
| yolov8s-worldv2 | 37.7 | 52.2 | 41.0 |
| yolov8m-world | 42.0 | 57.0 | 45.6 |
| yolov8m-worldv2 | 43.0 | 58.4 | 46.8 |
| yolov8l-world | 45.7 | 61.3 | 49.8 |
| yolov8l-worldv2 | 45.8 | 61.3 | 49.8 |
| yolov8x-world | 47.0 | 63.0 | 51.2 |
| yolov8x-worldv2 | 47.1 | 62.8 | 51.4 |
أمثلة الاستخدام#
يسهل دمج نماذج YOLO-World في تطبيقات Python. وتوفر Ultralytics واجهة Python البرمجية وأوامر CLI سهلة الاستخدام لتبسيط عملية التطوير.
شاهد: أمثلة على استخدام نموذج YOLO-World مع Ultralytics | مفردات مفتوحة، دون مطالبات، وغيرها 🚀
استخدام التدريب#
نوصي بشدة باستخدام yolov8-worldv2 للتدريب المخصص، لأنه يدعم التدريب الحتمي ويتيح التصدير بسهولة أكبر إلى تنسيقات مثل ONNX وTensorRT.
يُعد اكتشاف الكائنات سهلًا باستخدام طريقة train، كما هو موضح أدناه:
يمكن تمرير نماذج *.pt المدربة مسبقًا من PyTorch، وكذلك ملفات الإعداد *.yaml، إلى الصنف YOLOWorld() لإنشاء مثيل نموذج في Python:
from ultralytics import YOLOWorld
# تحميل نموذج YOLOv8s-worldv2 مدرّب مسبقًا
model = YOLOWorld("yolov8s-worldv2.pt")
# تدريب النموذج على مجموعة بيانات المثال COCO8 لمدة 100 حقبة
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# تشغيل الاستدلال باستخدام نموذج YOLO-World على الصورة 'bus.jpg'
results = model("path/to/bus.jpg")الاستخدام للتنبؤ#
يُعد اكتشاف الكائنات سهلًا باستخدام طريقة predict، كما هو موضح أدناه:
from ultralytics import YOLOWorld
# تهيئة نموذج YOLO-World
model = YOLOWorld("yolov8s-world.pt") # أو اختر yolov8m/l-world.pt لأحجام مختلفة
# تنفيذ الاستدلال باستخدام نموذج YOLOv8s-world على الصورة المحددة
results = model.predict("path/to/image.jpg")
# عرض النتائج
results[0].show()يوضح هذا المقتطف سهولة تحميل نموذج مدرّب مسبقًا وإجراء تنبؤ على صورة.
الاستخدام للتحقق#
يُبسَّط التحقق من صحة النموذج على مجموعة بيانات كما يلي:
from ultralytics import YOLO
# إنشاء نموذج YOLO-World
model = YOLO("yolov8s-world.pt") # أو اختر yolov8m/l-world.pt لأحجام مختلفة
# إجراء التحقق من صحة النموذج على مجموعة البيانات النموذجية COCO8
metrics = model.val(data="coco8.yaml")تتبُّع الاستخدام#
يُبسَّط تتبّع الكائنات باستخدام نموذج YOLO-World على فيديو أو صور كما يلي:
from ultralytics import YOLO
# إنشاء نموذج YOLO-World
model = YOLO("yolov8s-world.pt") # أو اختر yolov8m/l-world.pt لأحجام مختلفة
# التتبّع باستخدام نموذج YOLO-World على فيديو
results = model.track(source="path/to/video.mp4")تأتي نماذج YOLO-World التي توفرها Ultralytics مُهيأة مسبقًا بفئات مجموعة بيانات COCO ضمن مفرداتها غير المتصلة، مما يعزز كفاءتها للاستخدام الفوري. يتيح هذا التكامل لنماذج YOLOv8-World التعرّف مباشرةً على الفئات القياسية الثمانين المحددة في مجموعة بيانات COCO والتنبؤ بها، من دون الحاجة إلى إعداد أو تخصيص إضافي.
تعيين المطالبات#

يتيح إطار عمل YOLO-World تحديد الفئات ديناميكيًا من خلال مطالبات مخصصة، ما يمكّن المستخدمين من تكييف النموذج وفق احتياجاتهم الخاصة من دون إعادة تدريب. وتفيد هذه الميزة خصوصًا في تكييف النموذج مع مجالات جديدة أو مهام محددة لم تكن ضمن بيانات التدريب الأصلية. ومن خلال تعيين مطالبات مخصصة، يمكن للمستخدمين توجيه تركيز النموذج نحو الكائنات محل الاهتمام، مما يعزز مدى ملاءمة نتائج الكشف ودقتها.
على سبيل المثال، إذا كان تطبيقك يتطلب اكتشاف كائني «شخص» و«حافلة» فقط، فيمكنك تحديد هاتين الفئتين مباشرةً:
from ultralytics import YOLO
# تهيئة نموذج YOLO-World
model = YOLO("yolov8s-world.pt") # أو اختر yolov8m/l-world.pt
# تعريف فئات مخصصة
model.set_classes(["person", "bus"])
# تنفيذ التنبؤ للفئات المحددة في صورة
results = model.predict("path/to/image.jpg")
# عرض النتائج
results[0].show()وجد بعض المستخدمين أن إضافة سلسلة فارغة "" بوصفها فئة خلفية قد تحسّن أداء الكشف في بعض السيناريوهات. ويبدو أن هذا السلوك يعتمد على السيناريو، كما أن آليته الدقيقة غير مفهومة تمامًا:
model.set_classes(["person", "bus", ""])تبقى السلسلة الفارغة في model.names بوصفها فئة مستقلة، بما في ذلك أي نموذج تحفظه، ولذلك تظهر نتائج الكشف الخاصة بها بتسمية فارغة. مرّر classes=[0, 1] وقت التنبؤ للاحتفاظ بفئاتك الفعلية فقط.
يمكنك أيضًا حفظ نموذج بعد تعيين فئات مخصصة. وبذلك تنشئ إصدارًا من نموذج YOLO-World متخصصًا لحالة الاستخدام الخاصة بك. تدمج هذه العملية تعريفات الفئات المخصصة مباشرةً في ملف النموذج، ليصبح جاهزًا للاستخدام مع الفئات المحددة من دون أي تعديلات إضافية. اتبع الخطوات التالية لحفظ نموذج YOLO-World المخصص وتحميله:
حمّل أولًا نموذج YOLO-World، وعيّن له فئات مخصصة، ثم احفظه:
from ultralytics import YOLO
# تهيئة نموذج YOLO-World
model = YOLO("yolov8s-world.pt") # أو اختر yolov8m/l-world.pt
# تعريف فئات مخصصة
model.set_classes(["person", "bus"])
# حفظ النموذج مع المفردات غير المتصلة المحددة
model.save("custom_yolov8s.pt")بعد الحفظ، يعمل النموذج custom_yolov8s.pt مثل أي نموذج YOLOv8 مدرّب مسبقًا، مع اختلاف أساسي: أصبح الآن محسّنًا لاكتشاف الفئات التي عرّفتها فقط. ويمكن لهذا التخصيص تحسين أداء الكشف وكفاءته بدرجة كبيرة في سيناريوهات تطبيقك المحددة.
from ultralytics import YOLO
# تحميل نموذجك المخصص
model = YOLO("custom_yolov8s.pt")
# تشغيل الاستدلال لاكتشاف فئاتك المخصصة
results = model.predict("path/to/image.jpg")
# عرض النتائج
results[0].show()فوائد الحفظ باستخدام مفردات مخصصة#
- الكفاءة: تبسيط عملية الكشف من خلال التركيز على الكائنات ذات الصلة، وتقليل العبء الحسابي وتسريع الاستدلال.
- المرونة: تتيح تكييف النموذج بسهولة مع مهام الكشف الجديدة أو المتخصصة من دون الحاجة إلى إعادة تدريب موسعة أو جمع بيانات إضافية.
- البساطة: تبسيط النشر من خلال إلغاء الحاجة إلى تحديد الفئات المخصصة مرارًا عند التشغيل، مما يجعل النموذج قابلًا للاستخدام مباشرةً بمفرداته المضمّنة.
- الأداء: تعزيز دقة الكشف عن الفئات المحددة من خلال تركيز انتباه النموذج وموارده على التعرّف على الكائنات المعرّفة.
يوفر هذا النهج وسيلة فعالة لتخصيص نماذج اكتشاف الكائنات المتطورة لمهام محددة، ما يجعل الذكاء الاصطناعي المتقدم أكثر إتاحةً وقابليةً للتطبيق على نطاق أوسع من التطبيقات العملية.
إعادة إنتاج النتائج الرسمية من الصفر (تجريبي)#
إعداد مجموعات البيانات#
- بيانات التدريب
| مجموعة البيانات | النوع | العينات | الصناديق | ملفات التعليقات التوضيحية |
|---|---|---|---|---|
| Objects365v1 | الكشف | 609k | 9621k | objects365_train.json |
| GQA | التأريض | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | التأريض | 149k | 641k | final_flickr_separateGT_train.json |
- بيانات التحقق
| مجموعة البيانات | النوع | ملفات التعليقات التوضيحية |
|---|---|---|
| LVIS minival | الكشف | minival.txt |
بدء التدريب من الصفر#
جرى تخصيص WorldTrainerFromScratch بدرجة كبيرة لإتاحة تدريب نماذج yolo-world على مجموعات بيانات الكشف ومجموعات بيانات التأريض في الوقت نفسه. لمزيد من التفاصيل، راجع ultralytics.models.yolo.world.train_world.py.
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# الخيار 1: استخدام قاموس Python
data = {
"train": {
"yolo_data": ["Objects365.yaml"],
"grounding_data": [
{
"img_path": "flickr30k/images",
"json_file": "flickr30k/final_flickr_separateGT_train.json",
},
{
"img_path": "GQA/images",
"json_file": "GQA/final_mixed_train_no_coco.json",
},
],
},
"val": {"yolo_data": ["lvis.yaml"]},
}
# الخيار 2: استخدام ملف YAML (yolo_world_data.yaml)
# train:
# yolo_data:
# - Objects365.yaml
# grounding_data:
# - img_path: flickr/full_images/
# json_file: flickr/annotations/final_flickr_separateGT_train_segm.json
# - img_path: mixed_grounding/gqa/images
# json_file: mixed_grounding/annotations/final_mixed_train_no_coco_segm.json
# val:
# yolo_data:
# - lvis.yaml
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(
data=data, # أو data="yolo_world_data.yaml" عند استخدام ملف YAML
batch=128,
epochs=100,
trainer=WorldTrainerFromScratch,
)الاستشهادات والشكر والتقدير#
نتقدم بخالص الشكر إلى مركز الرؤية الحاسوبية في مختبر Tencent للذكاء الاصطناعي على عملهم الرائد في الكشف الفوري عن الكائنات بمفردات مفتوحة باستخدام YOLO-World:
@article{cheng2024yolow,
title={YOLO-World: Real-Time Open-Vocabulary Object Detection},
author={Cheng, Tianheng and Song, Lin and Ge, Yixiao and Liu, Wenyu and Wang, Xinggang and Shan, Ying},
journal={arXiv preprint arXiv:2401.17270},
year={2024}
}لمزيد من القراءة، تتوفر ورقة YOLO-World الأصلية على arXiv. ويمكن الوصول إلى الشيفرة المصدرية للمشروع والموارد الإضافية عبر مستودع GitHub. ونقدّر التزامهم بتطوير هذا المجال ومشاركة رؤاهم القيّمة مع المجتمع.
الأسئلة الشائعة#
نموذج YOLO-World هو نهج متقدم وفوري لاكتشاف الكائنات، يستند إلى إطار عمل Ultralytics YOLOv8. ويتفوق في مهام الكشف ذات المفردات المفتوحة، إذ يحدد الكائنات داخل الصورة استنادًا إلى أوصاف نصية. وباستخدام نمذجة الرؤية واللغة والتدريب المسبق على مجموعات بيانات كبيرة، يحقق YOLO-World كفاءة وأداءً مرتفعين مع تقليل متطلبات الحوسبة بدرجة كبيرة، مما يجعله مثاليًا للتطبيقات الفورية في مختلف الصناعات.
يدعم YOLO-World استراتيجية «المطالبة ثم الكشف»، التي تستخدم مفردات غير متصلة لتعزيز الكفاءة. وتُرمّز المطالبات المخصصة، مثل التسميات التوضيحية أو فئات كائنات محددة، مسبقًا وتُخزّن على هيئة تضمينات ضمن المفردات غير المتصلة. وتبسط هذه الطريقة عملية الكشف من دون الحاجة إلى إعادة التدريب. ويمكنك تعيين هذه المطالبات ديناميكيًا داخل النموذج لتكييفه مع مهام كشف محددة، كما هو موضح أدناه:
from ultralytics import YOLOWorld # تهيئة نموذج YOLO-World model = YOLOWorld("yolov8s-world.pt") # تعريف فئات مخصصة model.set_classes(["person", "bus"]) # تنفيذ التنبؤ على صورة results = model.predict("path/to/image.jpg") # عرض النتائج results[0].show()يوفر YOLO-World عدة مزايا مقارنةً بنماذج الكشف التقليدية ذات المفردات المفتوحة:
- الأداء الفوري: يستفيد من السرعة الحسابية لشبكات CNN لتقديم كشف سريع وفعال.
- الكفاءة وانخفاض متطلبات الموارد: يحافظ YOLO-World على أداء مرتفع مع تقليل متطلبات الحوسبة والموارد بدرجة كبيرة.
- المطالبات القابلة للتخصيص: يدعم النموذج تعيين المطالبات ديناميكيًا، مما يتيح للمستخدمين تحديد فئات كشف مخصصة من دون إعادة تدريب.
- التميز في المعايير المرجعية: يتفوق على كواشف المفردات المفتوحة الأخرى، مثل MDETR وGLIP، من حيث السرعة والكفاءة في المعايير المرجعية القياسية.
يُعد تدريب نموذج YOLO-World على مجموعة بياناتك أمرًا مباشرًا باستخدام واجهة Python البرمجية أو أوامر CLI المتاحة. إليك كيفية بدء التدريب باستخدام Python:
from ultralytics import YOLOWorld # تحميل نموذج YOLOv8s-worldv2 مدرّب مسبقًا model = YOLOWorld("yolov8s-worldv2.pt") # تدريب النموذج على مجموعة بيانات COCO8 لمدة 100 حقبة results = model.train(data="coco8.yaml", epochs=100, imgsz=640)أو باستخدام CLI:
yolo train model=yolov8s-worldv2.pt data=coco8.yaml epochs=100 imgsz=640توفّر Ultralytics عدة نماذج YOLO-World مدرّبة مسبقًا، تدعم مهامًا وأوضاع تشغيل متنوعة:
نوع النموذج الأوزان المدرّبة مسبقاً المهام المدعومة التدريب التحقق الاستدلال التصدير YOLOv8s-world yolov8s-world.pt كشف الكائنات ✅ ✅ ✅ ❌ YOLOv8s-worldv2 yolov8s-worldv2.pt كشف الكائنات ✅ ✅ ✅ ✅ YOLOv8m-world yolov8m-world.pt كشف الكائنات ✅ ✅ ✅ ❌ YOLOv8m-worldv2 yolov8m-worldv2.pt كشف الكائنات ✅ ✅ ✅ ✅ YOLOv8l-world yolov8l-world.pt كشف الكائنات ✅ ✅ ✅ ❌ YOLOv8l-worldv2 yolov8l-worldv2.pt كشف الكائنات ✅ ✅ ✅ ✅ YOLOv8x-world yolov8x-world.pt كشف الكائنات ✅ ✅ ✅ ❌ YOLOv8x-worldv2 yolov8x-worldv2.pt كشف الكائنات ✅ ✅ ✅ ✅ لإعادة إنتاج النتائج الرسمية من البداية، عليك تجهيز مجموعات البيانات وبدء التدريب باستخدام الشيفرة المقدّمة. يتضمن إجراء التدريب إنشاء قاموس بيانات وتشغيل طريقة
trainباستخدام مدرّب مخصّص:from ultralytics import YOLOWorld from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch data = { "train": { "yolo_data": ["Objects365.yaml"], "grounding_data": [ { "img_path": "flickr30k/images", "json_file": "flickr30k/final_flickr_separateGT_train.json", }, { "img_path": "GQA/images", "json_file": "GQA/final_mixed_train_no_coco.json", }, ], }, "val": {"yolo_data": ["lvis.yaml"]}, } model = YOLOWorld("yolov8s-worldv2.yaml") model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)