Ultralytics YOLO27:
Get Started

نموذج YOLO-World#

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



شاهد: سير عمل تدريب YOLO World على مجموعة بيانات مخصصة

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

نظرة عامة#

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

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

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

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

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

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

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

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

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

النقل دون تدريب مسبق على مجموعة بيانات 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 البرمجية وأوامر 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

يتيح إطار عمل 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الكشف609k9621kobjects365_train.json
GQAالتأريض621k3681kfinal_mixed_train_no_coco.json
Flickr30kالتأريض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

# ⁨الخيار 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-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)

التعليقات