نموذج YOLO-World

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



Watch: YOLO World training workflow on custom dataset

نظرة عامة على بنية نموذج YOLO-World

نظرة عامة

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

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

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

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

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

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

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

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

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

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

ملاحظة

تم ترحيل جميع أوزان 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 على مجموعة بيانات 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 commands لتبسيط عملية التطوير.



Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀

استخدام التدريب

تلميحة

نوصي بشدة باستخدام نموذج yolov8-worldv2 للتدريب المخصص، لأنه يدعم التدريب الحتمي كما يسهل تصدير تنسيقات أخرى مثل onnx/tensorrt.

كشف الكائنات أمر مباشر مع طريقة train، كما هو موضح أدناه:

مثال

يمكن تمرير نماذج PyTorch المدربة مسبقاً من نوع *.pt بالإضافة إلى ملفات الإعداد *.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 dataset كجزء من مفرداتها غير المتصلة، مما يعزز الكفاءة للتطبيق الفوري. يتيح هذا التكامل لنماذج YOLOv8-World التعرف مباشرة على الفئات الـ 80 القياسية المحددة في مجموعة بيانات COCO والتنبؤ بها دون الحاجة إلى إعداد أو تخصيص إضافي.

تعيين التلقينات

نظرة عامة على أسماء فئات تلقين YOLO-World

يسمح إطار عمل YOLO-World بالتحديد الديناميكي للفئات من خلال تلقينات مخصصة، مما يمنح المستخدمين القدرة على تكييف النموذج وفقاً لاحتياجاتهم المحددة بدون إعادة تدريب. تعد هذه الميزة مفيدة بشكل خاص لتكييف النموذج مع مجالات جديدة أو مهام محددة لم تكن في الأصل جزءاً من بيانات التدريب. من خلال تعيين تلقينات مخصصة، يمكن للمستخدمين توجيه تركيز النموذج بشكل أساسي نحو الكائنات محل الاهتمام، مما يعزز صلة دقة نتائج الكشف.

على سبيل المثال، إذا كان تطبيقك يتطلب فقط اكتشاف كائنات 'شخص' و 'حافلة'، يمكنك تحديد هذه الفئات مباشرة:

مثال
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
GQAتأريض621k3681kfinal_mixed_train_no_coco.json
Flickr30kتأريض149k641kfinal_flickr_separateGT_train.json
  • بيانات التحقق
مجموعة البياناتالنوعملفات التوضيح
LVIS minivalكشفminival.txt

بدء التدريب من الصفر

ملاحظة

WorldTrainerFromScratch مخصص للغاية للسماح بتدريب نماذج yolo-world على مجموعات بيانات الكشف ومجموعات بيانات التأريض في وقت واحد. لمزيد من التفاصيل يرجى مراجعة ultralytics.model.yolo.world.train_world.py.

مثال
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch

# Option 1: Use Python dictionary
data = dict(
    train=dict(
        yolo_data=["Objects365.yaml"],
        grounding_data=[
            dict(
                img_path="flickr30k/images",
                json_file="flickr30k/final_flickr_separateGT_train.json",
            ),
            dict(
                img_path="GQA/images",
                json_file="GQA/final_mixed_train_no_coco.json",
            ),
        ],
    ),
    val=dict(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,
)

الاقتباسات والشكر

نعرب عن امتناننا لـ مركز رؤية الكمبيوتر التابع لـ Tencent AILab لعملهم الرائد في مجال الكشف عن الأشياء ذات المفردات المفتوحة في الوقت الفعلي باستخدام 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 وكيف يعمل؟

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

كيف يتعامل YOLO-World مع الاستدلال باستخدام مطالبات مخصصة؟

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

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 بدلاً من نماذج الكشف التقليدية ذات المفردات المفتوحة؟

يوفر YOLO-World العديد من المزايا مقارنة بنماذج الكشف التقليدية ذات المفردات المفتوحة:

  • أداء في الوقت الفعلي: يستفيد من سرعة الحوسبة الخاصة بـ CNNs لتوفير كشف سريع وفعال.
  • الكفاءة ومتطلبات الموارد المنخفضة: يحافظ YOLO-World على أداء عالٍ مع تقليل متطلبات الحوسبة والموارد بشكل كبير.
  • مطالبات قابلة للتخصيص: يدعم النموذج تعيين المطالبات الديناميكية، مما يسمح للمستخدمين بتحديد فئات كشف مخصصة دون إعادة تدريب.
  • تميز قياسي: يتفوق على كواشف المفردات المفتوحة الأخرى مثل MDETR و GLIP في كل من السرعة والكفاءة في الاختبارات القياسية.

كيف يمكنني تدريب نموذج YOLO-World على مجموعة البيانات الخاصة بي؟

يعد تدريب نموذج YOLO-World على مجموعة البيانات الخاصة بك أمراً مباشراً من خلال Python API المقدم أو أوامر 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

ما هي نماذج YOLO-World المدربة مسبقاً والمتاحة والمهام التي تدعمها؟

توفر 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اكتشاف الكائنات

كيف يمكنني إعادة إنتاج النتائج الرسمية لـ YOLO-World من الصفر؟

لإعادة إنتاج النتائج الرسمية من الصفر، تحتاج إلى إعداد مجموعات البيانات وبدء التدريب باستخدام الكود المقدم. تتضمن إجراءات التدريب إنشاء قاموس بيانات وتشغيل طريقة 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)

التعليقات