YOLOE: رؤية أي شيء في الوقت الفعلي

مقدمة

خيارات التلقين في YOLOE

YOLOE (رؤية أي شيء في الوقت الفعلي) هو تقدم جديد في نماذج YOLO القابلة للتلقين وذات التعلم الصفري (zero-shot)، والمصمم للكشف والتجزئة بـ مفردات مفتوحة (open-vocabulary). على عكس نماذج YOLO السابقة التي كانت محدودة بفئات ثابتة، يستخدم YOLOE تلقينات نصية أو صورية أو مفردات داخلية، مما يتيح الكشف في الوقت الفعلي عن أي فئة من الكائنات. تم بناء YOLOE على YOLOv10 وهو مستوحى من YOLO-World، ويحقق أداءً متطوراً في التعلم الصفري بأقل تأثير على السرعة والدقة.



Watch: How to use Ultralytics YOLOE-26 (New) | Open Vocabulary & Real-Time Seeing Anything 🚀

مقارنةً بنماذج YOLO السابقة، يعزز YOLOE الكفاءة والدقة بشكل كبير. فهو يحقق تحسناً بمقدار +3.5 AP مقارنة بـ YOLO-Worldv2 على LVIS مع استخدام ثلث موارد التدريب فقط وتحقيق سرعات استدلال أسرع بمقدار 1.4 مرة. بعد ضبطه بدقة على COCO، يتفوق YOLOE-v8-large على YOLOv8-L بمقدار 0.1 mAP، مع استهلاك أقل من وقت التدريب بـ 4 مرات تقريباً. يوضح هذا التوازن الاستثنائي لـ YOLOE بين الدقة والكفاءة وتعدد الاستخدامات. تستعرض الأقسام أدناه بنية YOLOE، ومقارنات الأداء، والتكامل مع إطار عمل Ultralytics.

نظرة عامة على البنية

YOLOE Architecture

يحتفظ YOLOE بهيكل YOLO القياسي؛ أي Backbone (عمود فقري) تلافيفي (مثل CSP-Darknet) لاستخراج الميزات، و Neck (عنق) (مثل PAN-FPN) لدمج الميزات متعددة النطاقات، و Head (رأس) كشف غير مرتكز على نقاط الارتكاز ومنفصل (كما في YOLOv8/YOLO11) يتنبأ بوجود الكائن والفئات والمربعات بشكل مستقل. يقدم YOLOE ثلاث وحدات مبتكرة تتيح الكشف بالمفردات المفتوحة:

  • محاذاة المنطقة والنص القابلة لإعادة التقييم (RepRTA): تدعم الكشف الموجه بالنصوص من خلال تحسين embeddings النصية (على سبيل المثال، من CLIP) عبر شبكة مساعدة صغيرة. عند الاستدلال، يتم طي هذه الشبكة داخل النموذج الرئيسي، مما يضمن عدم وجود عبء إضافي. وبالتالي يكتشف YOLOE الكائنات المسمى بنصوص عشوائية (مثل "إشارة مرور" غير مرئية) دون عقوبات في وقت التشغيل.

  • مشفر التلقين البصري المنشط دلالياً (SAVPE): يتيح الكشف الموجه بصرياً عبر فرع تضمين خفيف الوزن. عند توفير صورة مرجعية، يقوم SAVPE بتشفير الميزات الدلالية والنشطة، مما يهيئ النموذج للكشف عن كائنات متشابهة بصرياً؛ وهي قدرة كشف بلقطة واحدة (one-shot) مفيدة للشعارات أو أجزاء معينة.

  • تباين المنطقة والتلقين البطيء (LRPC): في وضع بدون تلقين (prompt-free)، يقوم YOLOE بالتعرف على المفردات المفتوحة باستخدام تضمينات داخلية مدربة على مفردات واسعة (أكثر من 1200 فئة من LVIS و Objects365). بدون تلقينات أو مشفرات خارجية، يحدد YOLOE الكائنات عبر البحث عن تشابه التضمين، مما يتعامل بكفاءة مع مساحات التسميات الكبيرة عند الاستدلال.

بالإضافة إلى ذلك، يدمج YOLOE تجزئة الكائنات في الوقت الفعلي من خلال توسيع رأس الكشف بفرع تنبؤ بالقناع (مشابه لـ YACT أو YOLOv8-Seg)، مما يضيف حداً أدنى من العبء.

من المهم أن وحدات YOLOE للعالم المفتوح لا تفرض أي تكلفة استدلال عند استخدامها كـ YOLO عادي للفئات المغلقة. بعد التدريب، يمكن إعادة تقييم معلمات YOLOE في رأس YOLO قياسي، مع الحفاظ على قيم FLOPs والسرعة ذاتها (على سبيل المثال، مطابقة YOLO11 تماماً).

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

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

نماذج التلقين النصي/البصري

نوع النموذجالأوزان المدربة مسبقاًالمهام المدعومةالاستدلالالتحققالتدريبتصدير
YOLOE-11Syoloe-11s-seg.ptتجزئة المثيلات
YOLOE-11Myoloe-11m-seg.ptتجزئة المثيلات
YOLOE-11Lyoloe-11l-seg.ptتجزئة المثيلات
YOLOE-v8Syoloe-v8s-seg.ptتجزئة المثيلات
YOLOE-v8Myoloe-v8m-seg.ptتجزئة المثيلات
YOLOE-v8Lyoloe-v8l-seg.ptتجزئة المثيلات
YOLOE-26Nyoloe-26n-seg.ptتجزئة المثيلات
YOLOE-26Syoloe-26s-seg.ptتجزئة المثيلات
YOLOE-26Myoloe-26m-seg.ptتجزئة المثيلات
YOLOE-26Lyoloe-26l-seg.ptتجزئة المثيلات
YOLOE-26Xyoloe-26x-seg.ptتجزئة المثيلات

نماذج بدون تلقين (Prompt Free)

نوع النموذجالأوزان المدربة مسبقاًالمهام المدعومةالاستدلالالتحققالتدريبتصدير
YOLOE-11S-PFyoloe-11s-seg-pf.ptتجزئة المثيلات
YOLOE-11M-PFyoloe-11m-seg-pf.ptتجزئة المثيلات
YOLOE-11L-PFyoloe-11l-seg-pf.ptتجزئة المثيلات
YOLOE-v8S-PFyoloe-v8s-seg-pf.ptتجزئة المثيلات
YOLOE-v8M-PFyoloe-v8m-seg-pf.ptتجزئة المثيلات
YOLOE-v8L-PFyoloe-v8l-seg-pf.ptتجزئة المثيلات
YOLOE-26N-PFyoloe-26n-seg-pf.ptتجزئة المثيلات
YOLOE-26S-PFyoloe-26s-seg-pf.ptتجزئة المثيلات
YOLOE-26M-PFyoloe-26m-seg-pf.ptتجزئة المثيلات
YOLOE-26L-PFyoloe-26l-seg-pf.ptتجزئة المثيلات
YOLOE-26X-PFyoloe-26x-seg-pf.ptتجزئة المثيلات
أداء YOLOE-26

لمعرفة مقاييس الأداء التفصيلية لنماذج YOLOE-26، راجع توثيق YOLO26.

أمثلة الاستخدام

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

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

الضبط الدقيق (Fine-Tuning) على مجموعة بيانات مخصصة

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



Watch: How to Train YOLOE on Car Parts Segmentation Dataset | Open-Vocabulary Model, Prediction & Export 🚀
مثال

تجزئة الكائنات

يتبع الضبط الدقيق لنقطة فحص (checkpoint) مدربة مسبقاً لـ YOLOE في الغالب إجراء تدريب YOLO القياسي. الاختلاف الرئيسي هو تمرير YOLOEPESegTrainer صراحةً كمعامل trainer إلى model.train():

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPESegTrainer

model = YOLOE("yoloe-26s-seg.pt")

# Fine-tune on your segmentation dataset
results = model.train(
    data="coco128-seg.yaml",  # Segmentation dataset
    epochs=80,
    patience=10,
    trainer=YOLOEPESegTrainer,  # <- Important: use segmentation trainer
)

كشف الكائنات

تنفذ جميع نماذج YOLOE المدربة مسبقاً تجزئة الكائنات بشكل افتراضي. لاستخدام نقاط الفحص هذه لتدريب نموذج كشف، قم بتهيئة نموذج كشف من الصفر باستخدام إعدادات YAML، ثم قم بتحميل نقطة فحص التجزئة المدربة مسبقاً من نفس الحجم. لاحظ أننا نستخدم YOLOEPETrainer بدلاً من YOLOEPESegTrainer لأننا ندرب نموذج كشف:

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPETrainer

# Initialize a detection model from a config
model = YOLOE("yoloe-26s.yaml")

# Load weights from a pretrained segmentation checkpoint (same scale)
model.load("yoloe-26s-seg.pt")

# Fine-tune on your detection dataset
results = model.train(
    data="coco128.yaml",  # Detection dataset
    epochs=80,
    patience=10,
    trainer=YOLOEPETrainer,  # <- Important: use detection trainer
)

استخدام التنبؤ (Predict)

يدعم YOLOE التلقين النصي والبصري. استخدام التلقينات بسيط - فقط قم بتمريرها عبر طريقة predict كما هو موضح أدناه:

مثال

تسمح لك التلقينات النصية بتحديد الفئات التي ترغب في اكتشافها من خلال أوصاف نصية. يوضح الكود التالي كيفية استخدام YOLOE لاكتشاف الأشخاص والحافلات في صورة:

from ultralytics import YOLOE

# Initialize a YOLOE model
model = YOLOE("yoloe-26l-seg.pt")  # or yoloe-26s/m-seg.pt for different sizes

# Set text prompt to detect person and bus. You only need to do this once after you load the model.
model.set_classes(["person", "bus"])

# Run detection on the given image
results = model.predict("path/to/image.jpg")

# Show results
results[0].show()

استخدام التحقق (Val)

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

مثال
from ultralytics import YOLOE

# Create a YOLOE model
model = YOLOE("yoloe-26l-seg.pt")  # or yoloe-26s/m-seg.pt for different sizes

# Conduct model validation on the COCO128-seg example dataset
metrics = model.val(data="coco128-seg.yaml")

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

عملية التصدير مشابهة لنماذج YOLO الأخرى، مع مرونة إضافية في التعامل مع التلقينات النصية والبصرية:

النماذج المصدرة ثابتة

يتم دمج الفئات التي تم إعدادها باستخدام set_classes() (أو عبر refer_image للتلقينات البصرية) في الأوزان المصدرة. بمجرد التصدير، لا يمكن للنموذج قبول تلقينات جديدة: سيؤدي استدعاء set_classes() أو تمرير visual_prompts=... إلى predict() على تصدير محمل إلى الفشل. لتغيير الفئات المكتشفة، أعد التصدير من نقطة فحص .pt الأصلية مع إعداد التلقينات الجديدة. يتصرف الملف المصدر مثل كاشف YOLO قياسي ويمكن تحميله أيضاً باستخدام YOLO() بدلاً من YOLOE().

مثال
from ultralytics import YOLOE

# Select yoloe-26s/m-seg.pt for different sizes
model = YOLOE("yoloe-26l-seg.pt")

# Configure the set_classes() before exporting the model
model.set_classes(["person", "bus"])

export_model = model.export(format="onnx")
model = YOLOE(export_model)

# Run detection on the given image
results = model.predict("path/to/image.jpg")

# Show results
results[0].show()

تدريب النماذج الرسمية

تحضير مجموعات البيانات

ملاحظة

Training official YOLOE models needs segment annotations for train data, here's the script provided by official team that converts datasets to segment annotations, powered by SAM2.1 models. Or you can directly download the provided Processed Segment Annotations in following table provided by official team.

  • بيانات التدريب
مجموعة البياناتالنوععيناتBoxesتعليقات توضيحية للكشف الخامتعليقات توضيحية للتجزئة المعالجة
Objects365v1كشف609k9621kobjects365_train.jsonobjects365_train_segm.json
GQAتأريض621k3681kfinal_mixed_train_no_coco.jsonfinal_mixed_train_no_coco_segm.json
Flickr30kتأريض149k641kfinal_flickr_separateGT_train.jsonfinal_flickr_separateGT_train_segm.json
  • بيانات التحقق
مجموعة البياناتالنوعملفات التوضيح
LVIS minivalكشفminival.txt

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

ملاحظة

Visual Prompt models are fine-tuned based on trained-well Text Prompt models.

مثال
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOESegTrainerFromScratch

# Option 1: Use Python dictionary
data = dict(
    train=dict(
        yolo_data=["Objects365.yaml"],
        grounding_data=[
            dict(
                img_path="flickr/full_images/",
                json_file="flickr/annotations/final_flickr_separateGT_train_segm.json",
            ),
            dict(
                img_path="mixed_grounding/gqa/images",
                json_file="mixed_grounding/annotations/final_mixed_train_no_coco_segm.json",
            ),
        ],
    ),
    val=dict(yolo_data=["lvis.yaml"]),
)

# Option 2: Use YAML file (yoloe_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 = YOLOE("yoloe-26l-seg.yaml")
model.train(
    data=data,  # or data="yoloe_data.yaml" if using YAML file
    batch=128,
    epochs=30,
    close_mosaic=2,
    optimizer="AdamW",
    lr0=2e-3,
    warmup_bias_lr=0.0,
    weight_decay=0.025,
    momentum=0.9,
    workers=4,
    trainer=YOLOESegTrainerFromScratch,
    device="0,1,2,3,4,5,6,7",
)

مقارنة أداء YOLOE

يعادل YOLOE أو يتفوق على دقة نماذج YOLO ذات المجموعة المغلقة في المقاييس القياسية مثل COCO و LVIS، دون المساومة على السرعة أو حجم النموذج. يقارن الجدول أدناه بين YOLOE-L (المبني على YOLO11) و YOLOE26-L (المبني على YOLO26) مقابل النماذج المقابلة ذات المجموعة المغلقة:

النموذجCOCO mAP50-95LVIS mAP50-95سرعة الاستدلال (T4)المعاملاتGFLOPs (640px)
YOLOv8-L (مجموعة مغلقة)52.9%-9.06 ms (110 FPS)43.7 M165.2 B
YOLO11-L (مجموعة مغلقة)53.5%-6.2 ms (161 FPS)26.2 M86.9 B
YOLOE-L (مفتوح المفردات)52.6%35.2%6.2 ms (161 FPS)26.2 M86.9 B
YOLOE26-L (مفتوح المفردات)-36.8%6.2 ms (161 FPS)32.3 M88.3 B

يشارك YOLOE-L بنية YOLO11-L ويشارك YOLOE26-L بنية YOLO26-L، مما يؤدي إلى سرعة استدلال و GFLOPs مماثلة.

يحقق YOLOE26-L نسبة 36.8% LVIS mAP مع 32.3M بارامتر و 88.3B FLOPs، حيث يعالج صوراً بحجم 640×640 بسرعة 6.2 ms (161 FPS) على وحدة معالجة الرسوميات T4. هذا تحسن عن نسبة 35.2% LVIS mAP الخاصة بـ YOLOE-L مع الحفاظ على نفس سرعة الاستدلال. الأهم من ذلك، أن وحدات المفردات المفتوحة في YOLOE لا تتكبد أي تكلفة استدلال، مما يثبت تصميم "لا توجد مقايضة مجانية".

بالنسبة لمهام الصفر (zero-shot)، يتفوق YOLOE26 بشكل كبير على كواشف المفردات المفتوحة السابقة: على LVIS، يحقق YOLOE26-S نسبة 29.9% mAP، متجاوزاً YOLO-World-S بمقدار +11.4 AP، بينما يحقق YOLOE26-L نسبة 36.8% mAP، متجاوزاً YOLO-World-L بمقدار +10.0 AP. يحافظ YOLOE26 على استدلال فعال عند 161 FPS على وحدة معالجة الرسوميات T4، وهو مثالي لتطبيقات المفردات المفتوحة في الوقت الفعلي.

ملاحظة

شروط القياس: نتائج YOLOE مأخوذة من نماذج مدربة مسبقاً على Objects365، GoldG، و LVIS، ثم تم ضبطها بدقة أو تقييمها على COCO. ميزة YOLOE الطفيفة في mAP على YOLOv8 تأتي من التدريب المسبق المكثف. بدون هذا التدريب المفتوح، يطابق YOLOE نماذج YOLO ذات الحجم المماثل، مما يؤكد دقة SOTA الخاصة به ومرونته في العالم المفتوح دون عقوبات في الأداء.

مقارنة مع النماذج السابقة

يقدم YOLOE تطورات ملحوظة على نماذج YOLO السابقة وكواشف المفردات المفتوحة:

  • YOLOE مقابل YOLOv5: قدم YOLOv5 توازناً جيداً بين السرعة والدقة ولكنه تطلب إعادة تدريب للفئات الجديدة واستخدم رؤوساً تعتمد على المراسي (anchors). في المقابل، YOLOE خالٍ من المراسي ويكتشف الفئات الجديدة ديناميكياً. يحقق YOLOE، بناءً على تحسينات YOLOv8، دقة أعلى (52.6% مقابل ~50% mAP لـ YOLOv5 على COCO) ويدمج تجزئة العناصر (instance segmentation)، على عكس YOLOv5.

  • YOLOE مقابل YOLOv8: يوسع YOLOE البنية المعاد تصميمها لـ YOLOv8، محققاً دقة مماثلة أو متفوقة (52.6% mAP مع ~26M بارامتر مقابل 52.9% مع ~44M بارامتر لـ YOLOv8-L). يقلل بشكل كبير من وقت التدريب بسبب التدريب المسبق الأقوى. التطور الرئيسي هو قدرة YOLOE على التعامل مع العالم المفتوح، حيث يكتشف كائنات غير مرئية (مثل "سكوتر طائر" أو "رمز السلام") عبر المطالبات (prompts)، على عكس تصميم YOLOv8 المغلق.

  • YOLOE مقابل YOLO11: يحسن YOLO11 من YOLOv8 بكفاءة معززة وبارامترات أقل (انخفاض بنسبة ~22%). يرث YOLOE هذه المكاسب مباشرة، مطابقاً سرعة استدلال YOLO11 وعدد البارامترات (~26M بارامتر)، مع إضافة اكتشاف وتجزئة المفردات المفتوحة. في سيناريوهات المجموعة المغلقة، يعادل YOLOE نموذج YOLO11، ولكنه يضيف بشكل حاسم القدرة على التكيف لاكتشاف فئات غير مرئية، محققاً YOLO11 + قدرة العالم المفتوح دون المساومة على السرعة.

  • YOLOE26 مقابل YOLOE (القائم على YOLO11): يبني YOLOE26 على بنية YOLO26، وارثاً تصميمه الشامل (end-to-end) الخالي من NMS لاستدلال أسرع. على LVIS، يحقق YOLOE26-L نسبة 36.8% mAP، متفوقاً على نسبة 35.2% mAP لـ YOLOE-L. يوفر YOLOE26 جميع أحجام النماذج الخمسة (N/S/M/L/X) مقارنة بثلاثة في YOLOE (S/M/L)، مما يوفر مرونة أكبر لسيناريوهات النشر المختلفة.

  • YOLOE26 مقابل كواشف المفردات المفتوحة السابقة: اعتمدت نماذج المفردات المفتوحة السابقة (GLIP، OWL-ViT، YOLO-World) بشكل كبير على محولات الرؤية واللغة، مما أدى إلى استدلال بطيء. على LVIS، يحقق YOLOE26-S نسبة 29.9% mAP (+11.4 AP مقابل YOLO-World-S) ويحقق YOLOE26-L نسبة 36.8% mAP (+10.0 AP مقابل YOLO-World-L)، مع الحفاظ على استدلال في الوقت الفعلي عند 161 FPS على وحدة معالجة الرسوميات T4. مقارنة بالنهج القائمة على المحولات (مثل GLIP)، يقدم YOLOE26 استدلالاً أسرع بأوامر من الحجم، مما يسد فجوة الدقة والكفاءة بشكل فعال في الاكتشاف في المجموعات المفتوحة.

باختصار، يحافظ YOLOE و YOLOE26 على سرعة وكفاءة YOLO الشهيرة، ويتفوقان على الأسلاف في الدقة، ويدمجان التجزئة، ويقدمان اكتشافاً قوياً للعالم المفتوح. يزيد YOLOE26 من تطوير البنية مع استدلال شامل خالي من NMS من YOLO26، مما يجعله مثالياً لتطبيقات المفردات المفتوحة في الوقت الفعلي.

حالات الاستخدام والتطبيقات

تمكّن قدرات اكتشاف وتجزئة المفردات المفتوحة في YOLOE من تطبيقات متنوعة تتجاوز النماذج التقليدية ذات الفئات الثابتة:

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

  • الاكتشاف بلقطات قليلة (Few-Shot) ولقطة واحدة (One-Shot): باستخدام المطالبات المرئية (SAVPE)، يتعلم YOLOE بسرعة كائنات جديدة من صور مرجعية واحدة—مثالي لـ الفحص الصناعي (تحديد الأجزاء أو العيوب فوراً) أو المراقبة المخصصة، مما يتيح عمليات بحث مرئية بأقل قدر من الإعداد.

  • التعرف على المفردات الكبيرة وذيل البيانات الطويل (Long-Tail): مجهز بمفردات تضم أكثر من 1000 فئة، يتفوق YOLOE في مهام مثل مراقبة التنوع البيولوجي (اكتشاف الأنواع النادرة)، مجموعات المتاحف، مخزون التجزئة، أو التجارة الإلكترونية، حيث يحدد بوضوح العديد من الفئات دون تدريب مكثف لكل فئة على حدة.

  • الاكتشاف والتجزئة التفاعلية: يدعم YOLOE التطبيقات التفاعلية في الوقت الفعلي مثل استرجاع الفيديو/الصور القابل للبحث، الواقع المعزز (AR)، وتحرير الصور البديهي، مدفوعاً بمدخلات طبيعية (نص أو مطالبات مرئية). يمكن للمستخدمين عزل الكائنات أو تحديدها أو تحريرها ديناميكياً بدقة باستخدام أقنعة التجزئة (segmentation masks).

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

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

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

تلميحة

اختر وضع YOLOE بناءً على احتياجاتك:

  • وضع المجموعة المغلقة (Closed-set): لمهام الفئات الثابتة (أقصى سرعة ودقة).
  • وضع المطالبات (Prompted mode): أضف كائنات جديدة بسرعة عبر مطالبات نصية أو مرئية.
  • وضع المجموعة المفتوحة بدون مطالبات (Prompt-free open-set mode): اكتشاف عام عبر العديد من الفئات (مثالي للفهرسة والاكتشاف).

غالباً ما يؤدي الجمع بين الأوضاع—مثل الاكتشاف بدون مطالبات متبوعاً بمطالبات مستهدفة—إلى الاستفادة من إمكانات YOLOE الكاملة.

التدريب والاستدلال

يتكامل YOLOE بسلاسة مع Ultralytics Python API و CLI، على غرار نماذج YOLO الأخرى (YOLOv8, YOLO-World). إليك كيفية البدء بسرعة:

التدريب والاستدلال باستخدام YOLOE
from ultralytics import YOLO

# Load pretrained YOLOE model and train on custom data
model = YOLO("yoloe-26s-seg.pt")
model.train(data="path/to/data.yaml", epochs=50, imgsz=640)

# Run inference using text prompts ("person", "bus")
model.set_classes(["person", "bus"])
results = model.predict(source="test_images/street.jpg")
results[0].save()  # save annotated output

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

المهام الأخرى المدعومة

  • التحقق (Validation): قيّم الدقة بسهولة باستخدام model.val() أو yolo val.
  • التصدير (Export): صدّر نماذج YOLOE (model.export()) إلى ONNX، TensorRT، إلخ، مما يسهل النشر.
  • التتبع (Tracking): يدعم YOLOE تتبع الكائنات (yolo track) عند دمجه، وهو مفيد لتتبع الفئات المطلوبة في مقاطع الفيديو.
ملاحظة

يتضمن YOLOE تلقائياً أقنعة التجزئة في نتائج الاستدلال (results[0].masks)، مما يبسط المهام التي تتطلب دقة البكسل مثل استخراج الكائنات أو القياس دون الحاجة إلى نماذج منفصلة.

البدء

قم بإعداد YOLOE بسرعة مع Ultralytics باتباع الخطوات التالية:

  1. التثبيت: قم بتثبيت أو تحديث حزمة Ultralytics:

    pip install -U ultralytics
  2. تنزيل أوزان YOLOE: نماذج YOLOE المدربة مسبقاً (على سبيل المثال، YOLOE-v8-S/L، متغيرات YOLOE-11) متاحة من إصدارات GitHub الخاصة بـ YOLOE. ما عليك سوى تنزيل ملف .pt المطلوب لتحميله في فئة Ultralytics YOLO.

  3. متطلبات الأجهزة:

    • الاستدلال: يوصى بوجود وحدة معالجة رسوميات (NVIDIA مع ≥4-8GB VRAM). تعمل النماذج الصغيرة بكفاءة على وحدات معالجة الرسوميات الطرفية (مثل Jetson) أو وحدات المعالجة المركزية (CPUs) بدقة أقل. للاستدلال عالي الأداء على محطات العمل المدمجة، راجع دليل NVIDIA DGX Spark الخاص بنا.
    • التدريب: يتطلب الضبط الدقيق لـ YOLOE على بيانات مخصصة عادةً وحدة معالجة رسوميات واحدة فقط. تطلب التدريب المسبق المكثف للمفردات المفتوحة (LVIS/Objects365) الذي استخدمه المؤلفون موارد حوسبة كبيرة (8× وحدات معالجة رسوميات RTX 4090).
  4. التكوين: تستخدم تكوينات YOLOE ملفات YAML القياسية الخاصة بـ Ultralytics. تكفي التكوينات الافتراضية (على سبيل المثال، yoloe-26s-seg.yaml) عادةً، ولكن يمكنك تعديل العمود الفقري (backbone)، أو الفئات، أو حجم الصورة حسب الحاجة.

  5. تشغيل YOLOE:

    • استدلال سريع (بدون مطالبات):

      yolo predict model=yoloe-26s-seg-pf.pt source="image.jpg"
    • اكتشاف عبر مطالبات (مثال لمطالبة نصية):

      from ultralytics import YOLO
      
      model = YOLO("yoloe-26s-seg.pt")
      model.set_classes(["bowl", "apple"])
      results = model.predict("kitchen.jpg")
      results[0].save()
  6. نصائح التكامل:

    • أسماء الفئات: تستخدم مخرجات YOLOE الافتراضية فئات LVIS؛ استخدم set_classes() لتحديد تسمياتك الخاصة.
    • السرعة: لا يوجد حمل إضافي في YOLOE ما لم يتم استخدام المطالبات. للمطالبات النصية تأثير ضئيل؛ المطالبات المرئية لها تأثير أكبر قليلاً.
    • سلوك NMS: يستخدم YOLOE تلقائياً agnostic_nms=True أثناء التنبؤ، مما يدمج المربعات المتداخلة عبر الفئات. هذا يمنع الاكتشافات المكررة عندما يطابق الكائن نفسه فئات متعددة في مفردات YOLOE الكبيرة (أكثر من 1200 فئة LVIS). يمكنك تجاوز هذا عن طريق تمرير agnostic_nms=False بشكل صريح.
    • استدلال الدفعات (Batch inference): مدعوم مباشرة (model.predict([img1, img2])). للمطالبات الخاصة بكل صورة، قم بتشغيل الصور بشكل فردي.

توفر وثائق Ultralytics موارد إضافية. يتيح لك YOLOE استكشاف قدرات العالم المفتوح القوية بسهولة داخل نظام YOLO المألوف.

تلميحة

نصيحة احترافية: لتعظيم دقة الصفر (zero-shot) لـ YOLOE، قم بالضبط الدقيق من نقاط التحقق (checkpoints) المقدمة بدلاً من التدريب من الصفر. استخدم كلمات مطالبة تتماشى مع تسميات التدريب الشائعة (انظر فئات LVIS) لتحسين دقة الاكتشاف.

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

إذا ساهم YOLOE في بحثك أو مشروعك، يرجى الاستشهاد بالورقة الأصلية من قبل Ao Wang, Lihao Liu, Hui Chen, Zijia Lin, Jungong Han, and Guiguang Ding من جامعة تسينغهوا:

اقتباس
@misc{wang2025yoloerealtimeseeing,
      title={YOLOE: Real-Time Seeing Anything},
      author={Ao Wang and Lihao Liu and Hui Chen and Zijia Lin and Jungong Han and Guiguang Ding},
      year={2025},
      eprint={2503.07465},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2503.07465},
}

لمزيد من القراءة، الورقة الأصلية لـ YOLOE متاحة على arXiv. يمكن الوصول إلى الكود المصدري للمشروع وموارد إضافية عبر مستودع GitHub الخاص بهم.

الأسئلة الشائعة

كيف يختلف YOLOE عن YOLO-World؟

على الرغم من أن كلاً من YOLOE و YOLO-World يتيحان اكتشاف المفردات المفتوحة، إلا أن YOLOE يقدم العديد من المزايا. يحقق YOLOE دقة أعلى بمقدار +3.5 AP على LVIS مع استخدام موارد تدريب أقل بثلاث مرات وتشغيل أسرع بـ 1.4 مرة من YOLO-Worldv2. يدعم YOLOE أيضاً ثلاثة أوضاع للمطالبات (النص، المرئي، والمفردات الداخلية)، بينما يركز YOLO-World بشكل أساسي على المطالبات النصية. بالإضافة إلى ذلك، يتضمن YOLOE قدرات تجزئة العناصر المدمجة، مما يوفر أقنعة دقيقة للبكسل للكائنات المكتشفة دون أي تكلفة إضافية.

هل يمكنني استخدام YOLOE كنموذج YOLO عادي؟

نعم، يمكن لـ YOLOE العمل تماماً مثل نموذج YOLO قياسي دون أي عقوبة في الأداء. عند استخدامه في وضع المجموعة المغلقة (بدون مطالبات)، يتم إعادة تحديد معلمات وحدات المفردات المفتوحة في YOLOE إلى رأس الكشف القياسي، مما يؤدي إلى سرعة ودقة متطابقتين لنماذج YOLO11 المكافئة. هذا يجعل YOLOE متعدد الاستخدامات للغاية—يمكنك استخدامه ككاشف تقليدي لتحقيق أقصى سرعة ثم التبديل إلى وضع المفردات المفتوحة فقط عند الحاجة.

ما هي أنواع المطالبات التي يمكنني استخدامها مع YOLOE؟

يدعم YOLOE ثلاثة أنواع من المطالبات:

  1. المطالبات النصية: حدد فئات الكائنات باستخدام اللغة الطبيعية (مثل "شخص"، "إشارة مرور"، "سكوتر طائر")
  2. المطالبات المرئية: قدم صوراً مرجعية للكائنات التي تريد اكتشافها
  3. المفردات الداخلية: استخدم مفردات YOLOE المدمجة التي تضم أكثر من 1200 فئة دون مطالبات خارجية

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

كيف يتعامل YOLOE مع تجزئة العناصر؟

يدمج YOLOE تجزئة العناصر مباشرة في بنيته عن طريق توسيع رأس الكشف بفرع تنبؤ بالقناع. هذا النهج مشابه لـ YOLOv8-Seg ولكنه يعمل لأي فئة كائن مطلوبة. يتم تضمين أقنعة التجزئة تلقائياً في نتائج الاستدلال ويمكن الوصول إليها عبر results[0].masks. هذا النهج الموحد يلغي الحاجة إلى نماذج اكتشاف وتجزئة منفصلة، مما يبسط سير العمل للتطبيقات التي تتطلب حدود كائنات دقيقة البكسل.

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

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

from ultralytics import YOLO

# Initialize a YOLOE model
model = YOLO("yoloe-26s-seg.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()

التعليقات