نموذج YOLO-World#
يقدم نموذج YOLO-World نهجًا متطورًا وعالي الأداء في الوقت الفعلي يعتمد على Ultralytics YOLOv8 لمهام الكشف ذي المفردات المفتوحة (Open-Vocabulary Detection). يتيح هذا الابتكار اكتشاف أي كائن داخل الصورة استنادًا إلى النصوص الوصفية. ومن خلال خفض المتطلبات الحسابية بشكل كبير مع الحفاظ على أداء تنافسي، يبرز YOLO-World كأداة متعددة الاستخدامات للعديد من التطبيقات القائمة على الرؤية.
Watch: YOLO World training workflow on custom dataset

نظرة عامة#
يتعامل YOLO-World مع التحديات التي تواجه نماذج الكشف التقليدية ذات المفردات المفتوحة، والتي تعتمد غالبًا على نماذج Transformer الضخمة التي تتطلب موارد حسابية هائلة. كما أن اعتماد هذه النماذج على فئات كائنات محددة مسبقًا يحد من فائدتها في السيناريوهات الديناميكية. يعيد YOLO-World إحياء إطار عمل YOLOv8 بقدرات الكشف ذي المفردات المفتوحة، مستخدمًا نمذجة الرؤية-اللغة والتدريب المسبق على مجموعات بيانات واسعة لتفوق في تحديد مجموعة واسعة من الكائنات في سيناريوهات الصفر-لقطة (zero-shot) بكفاءة لا مثيل لها.
للعمل بالمفردات المفتوحة الذي يتطلب أيضاً أقنعة الحالات، أو التوجيهات البصرية، أو وضعاً خالياً من التوجيهات، انظر YOLOE، الذي يحافظ على نفس واجهة برمجة التطبيقات set_classes().
الميزات الرئيسية#
-
حل فائق السرعة: من خلال الاستفادة من السرعة الحسابية لشبكات CNN، يقدم YOLO-World حلاً سريعاً للاكتشاف مفتوح المفردات، مما يلبي احتياجات الصناعات التي تتطلب نتائج فورية.
-
الكفاءة والأداء: يقلل YOLO-World من المتطلبات الحسابية والموارد دون التضحية بالأداء، مما يوفر بديلاً قوياً لنماذج مثل SAM ولكن بجزء بسيط من التكلفة الحسابية، مما يتيح تطبيقات تعمل في الوقت الفعلي.
-
الاستدلال باستخدام مفردات غير متصلة (Offline Vocabulary): يقدم YOLO-World استراتيجية "التلقين ثم الاكتشاف"، باستخدام مفردات غير متصلة لتحسين الكفاءة بشكل أكبر. يتيح هذا النهج استخدام تلقينات مخصصة محسوبة مسبقاً، بما في ذلك التسميات التوضيحية أو الفئات، ليتم ترميزها وتخزينها كتمثيلات للمفردات غير المتصلة، مما يبسط عملية الاكتشاف.
-
مدعوم بواسطة YOLOv8: بناءً على Ultralytics YOLOv8، يستفيد YOLO-World من أحدث التطورات في مجال اكتشاف الكائنات في الوقت الفعلي لتسهيل الكشف ذي المفردات المفتوحة بدقة وسرعة لا تقارن.
-
امتياز في الأداء القياسي: يتفوق YOLO-World على أجهزة الكشف مفتوحة المفردات الحالية، بما في ذلك سلسلة MDETR وGLIP، من حيث السرعة والكفاءة في الاختبارات القياسية، مما يبرز قدرة YOLOv8 الفائقة على وحدة معالجة رسومات NVIDIA V100 واحدة.
-
تطبيقات متعددة الاستخدامات: يفتح نهج 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 | اكتشاف الكائنات | ✅ | ✅ | ✅ | ✅ |
نقل التعلم بدون تدريب (Zero-shot Transfer) على مجموعة بيانات 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 API وأوامر CLI سهلة الاستخدام لتبسيط عملية التطوير.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
استخدام التدريب#
نوصي بشدة باستخدام yolov8-worldv2 للتدريب المخصص لأنه يدعم التدريب الحتمي ويُصدر بشكل أكثر سهولة إلى تنسيقات مثل ONNX وTensorRT.
اكتشاف الكائنات أمر بسيط للغاية باستخدام طريقة train، كما هو موضح أدناه:
يمكن تمرير نماذج *.pt المدربة مسبقًا باستخدام PyTorch بالإضافة إلى ملفات تكوين *.yaml إلى فئة YOLOWorld() لإنشاء مثيل نموذج في python:
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Run inference with the YOLO-World model on the 'bus.jpg' image
results = model("path/to/bus.jpg")استخدام التنبؤ (Predict)#
اكتشاف الكائنات أمر بسيط للغاية باستخدام طريقة predict، كما هو موضح أدناه:
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Execute inference with the YOLOv8s-world model on the specified image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()يوضح هذا المقتطف بساطة تحميل نموذج مدرب مسبقاً وتشغيل تنبؤ على صورة.
استخدام التحقق (Val)#
يتم تبسيط التحقق من النموذج على مجموعة بيانات كما يلي:
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Conduct model validation on the COCO8 example dataset
metrics = model.val(data="coco8.yaml")استخدام التتبع (Track)#
يتم تبسيط تتبع الكائنات باستخدام نموذج YOLO-World على مقطع فيديو/صور على النحو التالي:
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Track with a YOLO-World model on a video
results = model.track(source="path/to/video.mp4")تأتي نماذج YOLO-World المقدمة من Ultralytics مُكوّنة مسبقًا بفئات مجموعة بيانات COCO كجزء من مفرداتها غير المتصلة بالإنترنت، مما يعزز الكفاءة للتطبيق الفوري. يتيح هذا التكامل لنماذج YOLOv8-World التعرف مباشرة والتنبؤ بالفئات القياسية الـ 80 المعرفة في مجموعة بيانات COCO دون الحاجة إلى إعداد أو تخصيص إضافي.
تعيين التلقينات (Prompts)#

يسمح إطار عمل YOLO-World بتحديد الفئات ديناميكيًا من خلال مطالبات مخصصة (custom prompts)، مما يُمكّن المستخدمين من تصميم النموذج بما يناسب احتياجاتهم الخاصة دون الحاجة لإعادة التدريب. تعتبر هذه الميزة مفيدة بشكل خاص لتكييف النموذج مع مجالات جديدة أو مهام محددة لم تكن في الأساس جزءًا من بيانات التدريب. من خلال تعيين مطالبات مخصصة، يمكن للمستخدمين توجيه تركيز النموذج بشكل أساسي نحو الكائنات محل الاتمام، مما يعزز صلة ودقة نتائج الاكتشاف.
على سبيل المثال، إذا كان تطبيقك يتطلب فقط اكتشاف كائنات 'شخص' (person) و'حافلة' (bus)، يمكنك تحديد هذه الفئات مباشرة:
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or choose yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction for specified categories on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()وجد بعض المستخدمين أن إلحاق سلسلة فارغة "" كفئة خلفية يمكن أن يحسن أداء الاكتشاف في سيناريوهات معينة. يبدو أن هذا السلوك مرتبط بالسيناريو ولم يتم فهم الآلية الدقيقة تمامًا:
model.set_classes(["person", "bus", ""])يمكنك أيضاً حفظ نموذج بعد تعيين فئات مخصصة. من خلال القيام بذلك، يمكنك إنشاء إصدار من نموذج YOLO-World متخصص لحالة الاستخدام الخاصة بك. تقوم هذه العملية بتضمين تعريفات فئاتك المخصصة مباشرة في ملف النموذج، مما يجعل النموذج جاهزاً للاستخدام مع الفئات التي حددتها دون الحاجة إلى تعديلات أخرى. اتبع هذه الخطوات لحفظ وتحميل نموذج YOLO-World المخصص الخاص بك:
قم أولاً بتحميل نموذج YOLO-World، وقم بتعيين فئات مخصصة له واحفظه:
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Save the model with the defined offline vocabulary
model.save("custom_yolov8s.pt")بعد الحفظ، يتصرف النموذج custom_yolov8s.pt مثل أي نموذج YOLOv8 مدرب مسبقاً آخر ولكن مع اختلاف رئيسي: إنه الآن مُحسَّن لاكتشاف الفئات التي حددتها فقط. يمكن لهذا التخصيص تحسين أداء وكفاءة الاكتشاف بشكل كبير لسيناريوهات تطبيقك الخاصة.
from ultralytics import YOLO
# Load your custom model
model = YOLO("custom_yolov8s.pt")
# Run inference to detect your custom classes
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()فوائد الحفظ بمفردات مخصصة#
- الكفاءة: تبسط عملية الاكتشاف من خلال التركيز على الكائنات ذات الصلة، مما يقلل من العبء الحسابي ويسرع الاستدلال.
- المرونة: تسمح بالتكيف السهل للنموذج مع مهام اكتشاف جديدة أو متخصصة دون الحاجة إلى إعادة تدريب مكثفة أو جمع بيانات.
- البساطة: تبسط النشر من خلال إلغاء الحاجة إلى تحديد فئات مخصصة بشكل متكرر عند وقت التشغيل، مما يجعل النموذج قابلاً للاستخدام مباشرة مع مفرداته المضمنة.
- الأداء: تعزز دقة الاكتشاف للفئات المحددة من خلال تركيز انتباه النموذج وموارده على التعرف على الكائنات المحددة.
يوفر هذا النهج وسيلة قوية لتخصيص أحدث نماذج اكتشاف الكائنات لمهام محددة، مما يجعل الذكاء الاصطناعي المتقدم أكثر سهولة وقابلية للتطبيق على نطاق أوسع من التطبيقات العملية.
إعادة إنتاج النتائج الرسمية من الصفر (تجريبي)#
إعداد مجموعات البيانات#
- بيانات التدريب
| مجموعة البيانات | النوع | عينات | صناديق (Boxes) | ملفات التوضيح |
|---|---|---|---|---|
| Objects365v1 | اكتشاف | 609k | 9621k | objects365_train.json |
| GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | التأريض (Grounding) | 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
# Option 1: Use Python dictionary
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"]},
}
# Option 2: Use YAML file (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, # or data="yolo_world_data.yaml" if using YAML file
batch=128,
epochs=100,
trainer=WorldTrainerFromScratch,
)الاقتباسات والشكر#
نتقدم بخالص الشكر إلى مركز رؤية الكمبيوتر في مختبر تينسنت للذكاء الاصطناعي على عملهم الريادي في مجال اكتشاف الكائنات ذي المفردات المفتوحة في الوقت الفعلي باستخدام 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 استراتيجية "الاستعلام ثم الاكتشاف" (prompt-then-detect)، والتي تستخدم مفردات غير متصلة بالإنترنت لتعزيز الكفاءة. تتم ترميز المطالبات المخصصة مثل التسميات التوضيحية أو فئات الكائنات المحددة مسبقًا وتخزينها كـ تضمينات لمفردات غير متصلة بالإنترنت. يبسط هذا النهج عملية الاكتشاف دون الحاجة إلى إعادة التدريب. يمكنك تعيين هذه المطالبات ديناميكيًا داخل النموذج لتخصيصه لمهام اكتشاف محددة، كما هو موضح أدناه:
from ultralytics import YOLOWorld # Initialize a YOLO-World model model = YOLOWorld("yolov8s-world.pt") # Define custom classes model.set_classes(["person", "bus"]) # Execute prediction on an image results = model.predict("path/to/image.jpg") # Show results results[0].show()يوفر YOLO-World العديد من المزايا مقارنة بنماذج الكشف التقليدية بالمفردات المفتوحة:
- أداء في الوقت الفعلي: يستفيد من السرعة الحسابية لشبكات CNN لتقديم كشف سريع وفعال.
- الكفاءة وانخفاض متطلبات الموارد: يحافظ YOLO-World على أداء عالٍ مع تقليل المتطلبات الحسابية والموارد بشكل كبير.
- مطالبات قابلة للتخصيص: يدعم النموذج إعداد المطالبات الديناميكي، مما يسمح للمستخدمين بتحديد فئات كشف مخصصة دون إعادة تدريب.
- تميز في المقاييس: يتفوق في الأداء على كاشفات المفردات المفتوحة الأخرى مثل MDETR و GLIP من حيث السرعة والكفاءة في المقاييس القياسية.
يعد تدريب نموذج YOLO-World على مجموعة بياناتك أمراً مباشراً من خلال واجهة برمجة تطبيقات Python أو أوامر CLI المقدمة. إليك كيفية بدء التدريب باستخدام Python:
from ultralytics import YOLOWorld # Load a pretrained YOLOv8s-worldv2 model model = YOLOWorld("yolov8s-worldv2.pt") # Train the model on the COCO8 dataset for 100 epochs results = model.train(data="coco8.yaml", epochs=100, imgsz=640)أو باستخدام CLI:
yolo train model=yolov8s-worldv2.yaml 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)