Ultralytics YOLO27:

نموذج YOLO-World#

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



Watch: YOLO World training workflow on custom dataset

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

نظرة عامة#

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

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

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

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

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

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

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

  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اكتشاف الأجسام

النقل بالتعلّم الصفري على مجموعة بيانات 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، كما هو موضح أدناه:

مثال
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()

يوضح هذا المقتطف سهولة تحميل نموذج مُدرَّب مسبقًا وتشغيل تنبؤ على صورة.

استخدام التحقق#

تُبسَّط عملية التحقق من النموذج على مجموعة بيانات كما يلي:

مثال
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")

استخدام التتبع#

تُبسَّط عملية تتبع الكائنات باستخدام نموذج 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 التعرّف مباشرةً على الفئات القياسية الثمانين المحددة في مجموعة بيانات COCO والتنبؤ بها دون الحاجة إلى إعداد أو تخصيص إضافي.

تعيين المطالبات#

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

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

على سبيل المثال، إذا كان تطبيقك يتطلب اكتشاف كائنَي «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()

فوائد الحفظ باستخدام مفردات مخصصة#

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

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

إعادة إنتاج النتائج الرسمية من الصفر (تجريبي)#

إعداد مجموعات البيانات#

  • بيانات التدريب
مجموعة البياناتالنوعالعيناتالمربعاتملفات التعليقات التوضيحية
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

# 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,
)

الاقتباسات والشكر والتقدير#

نتقدم بخالص الشكر إلى مركز 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 هو نهج متقدم وآني للكشف عن الكائنات، قائم على إطار Ultralytics YOLOv8. ويتفوق في مهام الكشف بالمفردات المفتوحة من خلال تحديد الكائنات داخل الصورة استنادًا إلى نصوص وصفية. وباستخدام نمذجة الرؤية واللغة والتدريب المسبق على مجموعات بيانات كبيرة، يحقق 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 مزايا عديدة مقارنةً بنماذج الكشف التقليدية بالمفردات المفتوحة:

    • الأداء الآني: يستفيد من السرعة الحاسوبية لشبكات CNNs لتوفير كشف سريع وفعال.
    • الكفاءة وانخفاض متطلبات الموارد: يحافظ YOLO-World على أداء مرتفع مع خفض المتطلبات الحاسوبية ومتطلبات الموارد بدرجة كبيرة.
    • المطالبات القابلة للتخصيص: يدعم النموذج التعيين الديناميكي للمطالبات، مما يتيح للمستخدمين تحديد فئات كشف مخصصة دون إعادة التدريب.
    • التميز في المعايير المرجعية: يتفوق على كاشفات المفردات المفتوحة الأخرى مثل MDETR وGLIP من حيث السرعة والكفاءة معًا في المعايير المرجعية القياسية.
  • يُعد تدريب نموذج 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.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)

التعليقات