Meet YOLO26: next-gen vision AI.

Link to this sectionنموذج YOLO-World#

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



Watch: YOLO World training workflow on custom dataset

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

Link to this sectionنظرة عامة#

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

Link to this sectionالميزات الرئيسية#

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

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

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

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

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

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

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

يفصل هذا القسم النماذج المتاحة مع أوزانها المدربة مسبقاً، والمهام التي تدعمها، وتوافقها مع أوضاع التشغيل المختلفة مثل الاستدلال (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اكتشاف الكائنات

Link to this sectionنقل التعلم بدون تدريب (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

Link to this sectionأمثلة الاستخدام#

من السهل دمج نماذج YOLO-World في تطبيقات Python الخاصة بك. يوفر Ultralytics واجهة برمجة تطبيقات Python API سهلة الاستخدام وأوامر CLI لتبسيط عملية التطوير.



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

Link to this sectionاستخدام التدريب#

نصيحة

نوصي بشدة باستخدام نموذج 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")

Link to this sectionاستخدام التنبؤ (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()

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

Link to this sectionاستخدام التحقق (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")

Link to this sectionاستخدام التتبع (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 والتنبؤ بها دون الحاجة إلى إعداد أو تخصيص إضافي.

Link to this sectionتعيين التلقينات (Prompts)#

نظرة عامة على أسماء فئات تلقين 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()

Link to this sectionفوائد الحفظ بمفردات مخصصة#

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

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

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

Link to this sectionإعداد مجموعات البيانات#

  • بيانات التدريب
مجموعة البياناتالنوععيناتصناديق (Boxes)ملفات التوضيح
Objects365v1اكتشاف609k9621kobjects365_train.json
GQAتأريض (Grounding)621k3681kfinal_mixed_train_no_coco.json
Flickr30kالتأريض (Grounding)149k641kfinal_flickr_separateGT_train.json
  • بيانات التحقق (Val data)
مجموعة البياناتالنوعملفات التوضيح
LVIS minivalاكتشافminival.txt

Link to this sectionبدء التدريب من الصفر#

ملاحظة

تم تخصيص WorldTrainerFromScratch بشكل كبير للسماح بتدريب نماذج YOLO-World على مجموعات بيانات الكشف ومجموعات بيانات التأريض (Grounding) في وقت واحد. لمزيد من التفاصيل يرجى مراجعة 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,
)

Link to this sectionالاقتباسات والشكر#

نقدم خالص شكرنا لمركز Tencent AILab Computer Vision Center لعملهم الرائد في مجال الكشف عن الكائنات بمفردات مفتوحة في الوقت الفعلي باستخدام 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 الخاص بهم. نحن نقدر التزامهم بتطوير هذا المجال ومشاركة رؤاهم القيمة مع المجتمع.

Link to this sectionالأسئلة الشائعة#

Link to this sectionما هو نموذج YOLO-World وكيف يعمل؟#

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

Link to this sectionكيف يتعامل YOLO-World مع الاستدلال (inference) باستخدام مطالبات مخصصة؟#

YOLO-World supports a "prompt-then-detect" strategy, which utilizes an offline vocabulary to enhance efficiency. Custom prompts like captions or specific object categories are pre-encoded and stored as offline vocabulary embeddings. This approach streamlines the detection process without the need for retraining. You can dynamically set these prompts within the model to tailor it to specific detection tasks, as shown below:

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()

Link to this sectionلماذا يجب أن أختار YOLO-World بدلاً من نماذج الكشف التقليدية بالمفردات المفتوحة؟#

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

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

Link to this sectionكيف يمكنني تدريب نموذج YOLO-World على مجموعة بياناتي؟#

يعد تدريب نموذج 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

Link to this sectionما هي نماذج 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اكتشاف الكائنات

Link to this sectionكيف يمكنني إعادة إنتاج النتائج الرسمية لـ 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)

التعليقات