رؤية YOLO 2026:

نموذج YOLO-World#

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



Watch: YOLO World training workflow on custom dataset

YOLO-World Model architecture overview

نظرة عامة#

يتعامل YOLO-World مع التحديات التي تواجه نماذج الكشف التقليدية ذات المفردات المفتوحة، والتي تعتمد غالبًا على نماذج Transformer الضخمة التي تتطلب موارد حسابية هائلة. كما أن اعتماد هذه النماذج على فئات كائنات محددة مسبقًا يحد من فائدتها في السيناريوهات الديناميكية. يعيد YOLO-World إحياء إطار عمل YOLOv8 بقدرات الكشف ذي المفردات المفتوحة، مستخدمًا نمذجة الرؤية-اللغة والتدريب المسبق على مجموعات بيانات واسعة لتفوق في تحديد مجموعة واسعة من الكائنات في سيناريوهات الصفر-لقطة (zero-shot) بكفاءة لا مثيل لها.

للعمل بالمفردات المفتوحة الذي يتطلب أيضاً أقنعة الحالات، أو التوجيهات البصرية، أو وضعاً خالياً من التوجيهات، انظر YOLOE، الذي يحافظ على نفس واجهة برمجة التطبيقات set_classes().

الميزات الرئيسية#

  1. حل فائق السرعة: من خلال الاستفادة من السرعة الحسابية لشبكات CNN، يقدم YOLO-World حلاً سريعاً للاكتشاف مفتوح المفردات، مما يلبي احتياجات الصناعات التي تتطلب نتائج فورية.

  2. الكفاءة والأداء: يقلل YOLO-World من المتطلبات الحسابية والموارد دون التضحية بالأداء، مما يوفر بديلاً قوياً لنماذج مثل SAM ولكن بجزء بسيط من التكلفة الحسابية، مما يتيح تطبيقات تعمل في الوقت الفعلي.

  3. الاستدلال باستخدام مفردات غير متصلة (Offline Vocabulary): يقدم YOLO-World استراتيجية "التلقين ثم الاكتشاف"، باستخدام مفردات غير متصلة لتحسين الكفاءة بشكل أكبر. يتيح هذا النهج استخدام تلقينات مخصصة محسوبة مسبقاً، بما في ذلك التسميات التوضيحية أو الفئات، ليتم ترميزها وتخزينها كتمثيلات للمفردات غير المتصلة، مما يبسط عملية الاكتشاف.

  4. مدعوم بواسطة YOLOv8: بناءً على Ultralytics YOLOv8، يستفيد YOLO-World من أحدث التطورات في مجال اكتشاف الكائنات في الوقت الفعلي لتسهيل الكشف ذي المفردات المفتوحة بدقة وسرعة لا تقارن.

  5. امتياز في الأداء القياسي: يتفوق YOLO-World على أجهزة الكشف مفتوحة المفردات الحالية، بما في ذلك سلسلة MDETR وGLIP، من حيث السرعة والكفاءة في الاختبارات القياسية، مما يبرز قدرة YOLOv8 الفائقة على وحدة معالجة رسومات NVIDIA V100 واحدة.

  6. تطبيقات متعددة الاستخدامات: يفتح نهج YOLO-World المبتكر إمكانيات جديدة لعدد كبير من مهام الرؤية، مما يوفر تحسينات في السرعة بمرات عديدة مقارنة بالطرق الحالية.

النماذج المتاحة، والمهام المدعومة، وأوضاع التشغيل#

يفصل هذا القسم النماذج المتاحة مع أوزانها المدربة مسبقاً المحددة، والمهام التي تدعمها، وتوافقها مع وضعيات التشغيل المختلفة مثل الاستدلال، التحقق، التدريب، والتصدير، والتي يرمز إليها بـ ✅ للوضعيات المدعومة و❌ للوضعيات غير المدعومة.

ملاحظة

تم نقل جميع أوزان YOLOv8-World مباشرة من مستودع YOLO-World الرسمي، مما يسلط الضوء على إسهاماتهم الممتازة.

نوع النموذجالأوزان المدربة مسبقاًالمهام المدعومةالتدريبالتحققالاستنتاجالتصدير
YOLOv8s-worldyolov8s-world.ptاكتشاف الكائنات
YOLOv8s-worldv2yolov8s-worldv2.ptاكتشاف الكائنات
YOLOv8m-worldyolov8m-world.ptاكتشاف الكائنات
YOLOv8m-worldv2yolov8m-worldv2.ptاكتشاف الكائنات
YOLOv8l-worldyolov8l-world.ptاكتشاف الكائنات
YOLOv8l-worldv2yolov8l-worldv2.ptاكتشاف الكائنات
YOLOv8x-worldyolov8x-world.ptاكتشاف الكائنات
YOLOv8x-worldv2yolov8x-worldv2.ptاكتشاف الكائنات

نقل التعلم بدون تدريب (Zero-shot Transfer) على مجموعة بيانات COCO#

الأداء
نوع النموذجmAPmAP50mAP75
yolov8s-world37.452.040.6
yolov8s-worldv237.752.241.0
yolov8m-world42.057.045.6
yolov8m-worldv243.058.446.8
yolov8l-world45.761.349.8
yolov8l-worldv245.861.349.8
yolov8x-world47.063.051.2
yolov8x-worldv247.162.851.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 prompt class names overview

يسمح إطار عمل 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اكتشاف609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kالتأريض (Grounding)149k641kfinal_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-worldyolov8s-world.ptاكتشاف الكائنات
    YOLOv8s-worldv2yolov8s-worldv2.ptاكتشاف الكائنات
    YOLOv8m-worldyolov8m-world.ptاكتشاف الكائنات
    YOLOv8m-worldv2yolov8m-worldv2.ptاكتشاف الكائنات
    YOLOv8l-worldyolov8l-world.ptاكتشاف الكائنات
    YOLOv8l-worldv2yolov8l-worldv2.ptاكتشاف الكائنات
    YOLOv8x-worldyolov8x-world.ptاكتشاف الكائنات
    YOLOv8x-worldv2yolov8x-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)

التعليقات