Ultralytics YOLO27:

YOLOE: الكشف والتجزئة في الزمن الحقيقي باستخدام مفردات مفتوحة#

Ultralytics YOLOE (الرؤية الفورية لكل شيء) هو نموذج للكشف باستخدام مفردات مفتوحة وتجزئة الكائنات: فبدلاً من قائمة فئات ثابتة وقت التدريب، يستقبل الفئات التي تريدها وقت الاستدلال، على شكل مطالبة نصية أو مثال مرئي أو مفردات مدمجة تضم 4,585 اسماً. بُني النموذج على معماريات Ultralytics YOLO — YOLOv8 وYOLO11 وYOLO26 — واستُلهم من YOLO-World، ويحقق YOLOE دقة متقدمة عالمياً في الإعداد الصفري تقريباً بسرعة YOLO ذات مجموعة الفئات المغلقة.



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

بدء سريع#

حدّد الفئات التي تريدها ثم شغّل النموذج. يعيد YOLOE-26 مربعات وأقنعة تجزئة الكائنات للفئات التي لم يُدرَّب عليها قط.

اكتشف أي شيء يمكنك تسميته
from ultralytics import YOLOE

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

# "double-decker bus" is not a COCO class; YOLOE resolves it from the words alone
model.set_classes(["double-decker bus", "person"])

results = model.predict("https://ultralytics.com/images/bus.jpg")
results[0].show()

تعمل أول استدعاء لـ set_classes() على تنزيل مُرمّز نصي؛ راجع التثبيت والمتطلبات قبل النشر على جهاز لا يملك وصولاً إلى الشبكة.

اختيار وضع المطالبة#

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

يكتشف YOLOE الكائنات ويجزّئها باستخدام المطالبات النصية والمطالبات المرئية ومفرداته الخالية من المطالبات

الوضعنقطة الفحصما تقدمهأسماء الفئات في النتائجاستخدمه عندما
المطالبة النصية*-seg.ptأسماء الفئات كسلاسل نصيةالأسماء التي مررتها بالضبطيمكنك وصف الهدف بالكلمات — وهو الخيار المعتاد
المطالبة المرئية*-seg.ptمربعات أمثلة على صورة مرجعيةobject0 وobject1 عامة، …لا يمكنك وصف الهدف بالكلمات: جزء محدد أو شعار أو عيب
الخالي من المطالبات*-seg-pf.ptلا شيءأسماء من المفردات المدمجة التي تضم 4,585 اسماًتقوم بفهرسة العناصر أو استكشافها ولا تعرف مسبقاً ما الذي تبحث عنه
مفاجأتان شائعتان
  • المطالبات المرئية لا تحمل تسمياتك. تجمع معرّفات الفئات في visual_prompts الأمثلة معاً؛ ويعرضها النموذج على شكل object0 وobject1 وما إلى ذلك. أعد ربطها بأسماءك الخاصة بنفسك.
  • نقاط الفحص الخالية من المطالبات ترفض set_classes(). يؤدي استدعاؤه على نموذج *-seg-pf.pt إلى رفع AssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models. حمّل نقطة فحص *-seg.pt بدلاً من ذلك عندما تحتاج إلى فئاتك الخاصة.

التثبيت والمتطلبات#

يتوفر YOLOE ضمن حزمة Ultralytics الرئيسية:

pip install -U ultralytics

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

  • يعمل أول استدعاء لـ set_classes() على تثبيت ultralytics/CLIP من GitHub باستخدام pip (إذ يوفر أداة تقسيم الرموز) وتنزيل مُرمّز نصي TorchScript إلى دليل العمل الحالي. ينزّل YOLOE-26 الملف mobileclip2_b.ts، وحجمه نحو 254 ميغابايت؛ بينما ينزّل YOLOE-11 وYOLOE-v8 الملف mobileclip_blt.ts. نفّذ التنزيل مرة واحدة من الدليل الذي ستشغّل منه، أو انسخ الملف إليه، وإلا فسيُجلب مرة أخرى.
  • تحتاج كلتا الخطوتين إلى الوصول إلى الشبكة، لذا نفّذ تنبؤاً واحداً باستخدام المطالبة قبل النشر على جهاز غير متصل أو معزول عن الشبكة.
  • لا تحتاج نقاط فحص المطالبات المرئية والخالية من المطالبات إلى مُرمّز نصي على الإطلاق.

تتطلب نقاط فحص YOLOE-26 الإصدار ultralytics 8.4.0 أو أحدث؛ أما عائلتا YOLOE-11 وYOLOE-v8 فمتاحتان في الإصدارات الأقدم. يختبر تنبؤ واحد باستخدام مطالبة نصية المسار بأكمله — تنزيل نقطة الفحص وتثبيت CLIP والمُرمّز النصي والاستدلال:

yolo predict model=yoloe-26s-seg.pt source="https://ultralytics.com/images/bus.jpg" classes="person"

لتجاوز تنزيل المُرمّز النصي وقت الاستدلال تماماً، ادمج المطالبات في الأوزان مرة واحدة وأعد استخدامها — راجع إعادة استخدام تضمينات المطالبة.

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

YOLOE Architecture

يحافظ YOLOE على بنية YOLO القياسية — جذع تلافيفي لاستخراج السمات، وعنق لدمج المقاييس المتعددة، ورأس غير معتمد على المراسي ومفصول يتنبأ بالفئات والمربعات — ويضيف ثلاث وحدات، واحدة لكل وضع مطالبة:

  • تعمل مواءمة المنطقة والنص القابلة لإعادة المعلمة (RepRTA) على تحسين تضمينات النص من CLIP عبر شبكة مساعدة صغيرة. تعمل هذه الشبكة مرة واحدة لكل استدعاء لـ set_classes() وتُدمج عند التصدير، ولذلك لا تفرض أي تكلفة لكل إطار. أما ما يعمل في كل تمريرة أمامية فهو مقارنة تضمينات المطالبة المخزنة بسمات المناطق؛ راجع القيود لمعرفة تكلفة ذلك مع مجموعة مطالبات كبيرة.
  • تشفّر مُرمّز المطالبة المرئية المنشّط دلالياً (SAVPE) السمات الدلالية وسمات التنشيط من مربع مثال، وتكيّف النموذج مع الكائنات المشابهة له. وهذا هو المسار أحادي اللقطة للأهداف التي يصعب وصفها، مثل شعار أو جزء محدد.
  • تطابق مقابلة مطالبة المنطقة الكسولة (LRPC) تضمينات المناطق مع مفردات مدمجة تضم 4,585 اسماً، ولذلك تتعرف نقاط الفحص الخالية من المطالبات على الكائنات دون مطالبة خارجية ودون مُرمّز نصي.

تأتي تجزئة الكائنات من فرع أقنعة في رأس الكشف، كما في YOLOv8-Seg، وتحمل كل تنبؤ قناعاً على results[0].masks. بعد تصدير النموذج، تُعاد معلمة وحدات العالم المفتوح لتصبح رأس YOLO قياسياً، ولذلك يشغّل الملف المُصدَّر مسار الكشف/التجزئة المعتاد.

النماذج المتاحة#

كل نقطة فحص أدناه هي نموذج لتجزئة الكائنات وتدعم val وpredict وexport وtrack. حمّل ملف *-seg.pt للمطالبة النصية أو المرئية وملف *-seg-pf.pt للاستدلال الخالي من المطالبات؛ وهما غير قابلين للتبادل، راجع اختيار وضع المطالبة. تدعم ملفات *-seg.pt فقط train؛ إذ تُنتج نقطة الفحص الخالية من المطالبات من نموذج مُدرَّب على المطالبات النصية، راجع تدريب النماذج الرسمية من الصفر.

أداء YOLOE على LVIS#

نتائج الإعداد الصفري على LVIS minival بدقة 640 بكسلاً، من ورقة Ultralytics YOLO26.

المطالبات النصية والمرئية#

تُقرأ كل خلية دقة ومعلمة بالشكل المطالبة النصية / المطالبة المرئية؛ وتُذكر FLOPs مرة واحدة. المعلمات وFLOPs خاصتان بتكوين الكشف الذي تقيّمه الورقة. الدقة هي قيمة Non-E2E في الورقة، وهو البروتوكول الوحيد الذي تعرضه لكل نموذج في المقارنة؛ ويتأخر رأس YOLOE-26 الشامل من البداية إلى النهاية عنه بحد أقصى قدره 1.1 AP تحت المطالبات النصية و2.6 AP تحت المطالبات المرئية.

النموذجmAP50-95mAPrmAPcmAPfالمعاملات
(M)
FLOPs
(B)
YOLOE-26n24.7 / 21.920.5 / 17.624.1 / 22.326.1 / 22.43.9 / 3.16.1
YOLOE-26s30.8 / 28.623.9 / 25.129.6 / 27.833.0 / 29.910.7 / 11.021.9
YOLOE-26m35.4 / 33.931.1 / 33.434.7 / 34.036.9 / 33.821.3 / 25.170.6
YOLOE-26l37.8 / 36.335.1 / 37.637.6 / 36.238.5 / 36.125.5 / 29.389.0
YOLOE-26x40.6 / 38.537.4 / 35.340.9 / 38.841.0 / 38.855.2 / 65.2197.7
YOLOE-11s27.5 / 26.321.4 / 22.526.8 / 27.129.3 / 26.410.7 / 10.922.7
YOLOE-11m33.0 / 31.426.9 / 27.132.5 / 31.934.5 / 31.721.0 / 24.870.4
YOLOE-11l35.2 / 33.729.1 / 28.135.0 / 34.636.5 / 33.826.0 / 29.889.5
YOLOE-v8s27.9 / 26.222.3 / 21.327.8 / 27.729.0 / 25.712.3 / 12.629.8
YOLOE-v8m32.6 / 31.026.9 / 27.031.9 / 31.734.4 / 31.126.4 / 28.480.7
YOLOE-v8l35.9 / 34.233.2 / 33.234.8 / 34.637.3 / 34.143.5 / 47.3167.6

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

تستجيب نقاط الفحص الخالية من المطالبات باستخدام مفرداتها المدمجة دون توفير مطالبة. تُقرأ كل خلية دقة بالشكل من البداية إلى النهاية / Non-E2E، وهما البروتوكولان اللذان تقيس الورقة أداء YOLOE-26 وفقاً لهما؛ وتعرض صفحة YOLO26 عمود Non-E2E.

النموذجmAP50-95mAPrmAPcmAPfالمعاملات
(M)
FLOPs
(B)
YOLOE-26n-pf16.6 / 17.715.7 / 15.815.3 / 16.417.9 / 19.22.35.3
YOLOE-26s-pf21.4 / 22.616.2 / 20.220.1 / 20.923.5 / 24.59.020.8
YOLOE-26m-pf25.7 / 26.426.7 / 24.524.0 / 25.026.9 / 27.919.468.4
YOLOE-26l-pf27.2 / 28.026.3 / 25.725.7 / 26.828.7 / 29.523.686.8
YOLOE-26x-pf29.9 / 31.127.5 / 28.929.1 / 30.731.1 / 31.753.1194.4

تحت المطالبات النصية والمرئية، تتفوق نماذج YOLOE-26 على نظيراتها من YOLOE-11 وYOLOE-v8 عند كل مقياس مطابق في mAP50-95، مع بقائها أدنى من خط v8 في عدد المعلمات وFLOPs. وفي التقسيم نفسه، تعرض الورقة YOLO-Worldv2 بقيم 24.4 (S) و32.4 (M) و35.5 (L)، وكواشف تعتمد على Transformer هي GLIP-T بقيمة 26.0 وGDINO-T بقيمة 27.4 وDetCLIP-T بقيمة 34.4، ويحمل كل منها من 155 إلى 232 مليون معلمة. وتضيف ورقة YOLOE الأصلية نتيجتين للنماذج ذات مقياس v8 التي قدمتها. على LVIS، يتفوق YOLOE-v8s على YOLO-Worldv2-S بمقدار 3.5 AP، مع ثلث تكلفة التدريب وسرعة استدلال تبلغ 1.4 ضعفاً. وعند نقله إلى COCO، يحقق YOLOE-v8l زيادة قدرها 0.6 box AP و0.4 mask AP مقارنةً بـ YOLOv8-L ذي المجموعة المغلقة، مع زمن تدريب أقل بنحو 4 مرات.

أرقام الورقة مقابل نقاط الفحص المُصدرة

تقيّم ورقة YOLO26 تكويناً للكشف. أما الأوزان المُصدرة فهي نقاط فحص للتجزئة وتحمل فرع أقنعة وSAVPE وإسقاط النص فوقها، ولذلك يعرض yoloe-26l-seg.pt المحمّل 35.4 مليوناً و142.0 ملياراً بدلاً من 25.5 مليوناً و89.0 ملياراً المذكورتين أعلاه. وفي كلتا الحالتين، يستثني رقم FLOPs تشابه المنطقة والنص، ولذلك تزداد التكلفة الفعلية مع حجم مجموعة المطالبات رغم عدم تغير العمود؛ راجع القيود.

أمثلة على الاستخدام#

يعمل كل مثال YOLOE أدناه من خلال Python API. كما يعمل التنبؤ باستخدام مطالبة نصية والتحقق والتصدير والتتبع والتدريب العادي من خلال CLI؛ أما وصفات الضبط الدقيق وتمرير المطالبات المرئية فتتطلب تمرير فئة مدرّب أو متنبئ كوسيط، وهو ما تقبله Python API فقط.

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

اضبط دقيقاً لأي نقطة فحص *-seg.pt مُصدرة على مجموعة بيانات YOLO الخاصة بك. يتبع ذلك في الغالب إجراء تدريب YOLO القياسي؛ ويكمن الاختلاف في المدرّب الذي تمرره. يدمج YOLOEPESegTrainer أسماء فئاتك في الرأس ويجري الضبط الدقيق انطلاقاً من هناك، وهذا ما تريده عند استخدام تسمياتك الخاصة؛ أما المدرّب الافتراضي فلا يتدرّب على أسماء فئاتك.



Watch: How to Train YOLOE on Car Parts Segmentation Dataset | Open-Vocabulary Model, Prediction & Export 🚀
مثال
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPESegTrainer

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

results = model.train(
    data="coco128-seg.yaml",
    epochs=80,
    patience=10,
    trainer=YOLOEPESegTrainer,  # <- Important: the fine-tuning trainer, not the default
)
تدريب نموذج كشف بدلًا من ذلك

كل نقطة تحقق مُصدرة هي نموذج تقسيم. ولتدريب كاشف، أنشئ النموذج من ملف YAML المطابق، وحمّل أوزان التقسيم للمقياس نفسه، واستبدل مدرّب التقسيم بمدرّب الكشف. ولا يتغير أي شيء آخر.

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

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

results = model.train(data="coco128.yaml", epochs=80, patience=10, trainer=YOLOEPETrainer)

استخدام التنبؤ#

استدعاء مطالبة النص هو الموضح في البدء السريع. ويحتاج النمطان الآخران إلى وسيط إضافي لكل منهما:

مثال

تُري المطالبات المرئية النموذجَ مثالًا بدلًا من وصفه. يأخذ visual_prompts مصفوفة bboxes من مربعات الأمثلة ومصفوفة cls من معرّفات الفئات، مع معرّف واحد لكل مربع. وهذه المعرّفات تجميعات مؤقتة وليست تسميات — ويجب أن تكون متسلسلة بدءًا من 0، وتُعاد النتائج بصيغة object0 وobject1 و… بدلًا من الأسماء التي تختارها.

يمكن وضع مربعات الأمثلة على الصورة التي تتنبأ عليها:

import numpy as np

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

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

# One example box per target, each with its own class ID
visual_prompts = {
    "bboxes": np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]),  # person, glasses
    "cls": np.array([0, 1]),
}

results = model.predict(
    "ultralytics/assets/bus.jpg",
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

أو على صورة مرجعية منفصلة تُمرَّر بصيغة refer_image، وفي هذه الحالة يصف bboxes وcls الكائنات الموجودة في الصورة المرجعية، لا في الصورة الهدف:

import numpy as np

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

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

visual_prompts = {"bboxes": np.array([[221.52, 405.8, 344.98, 857.54]]), "cls": np.array([0])}  # person

results = model.predict(
    "ultralytics/assets/zidane.jpg",  # Target image
    refer_image="ultralytics/assets/bus.jpg",  # Where the example boxes live
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

# refer_image also sets the classes permanently, so later calls need no prompts at all
results = model("ultralytics/assets/bus.jpg")
model.export(format="onnx")  # And the export keeps them
ملاحظة

عندما يكون source فيديو أو تدفقًا، يصبح الإطار الأول تلقائيًا هو refer_image، ولذلك تُطبَّق المطالبات التي تمررها على ذلك الإطار وتستمر عبر بقية الفيديو. مرّر refer_image صراحةً لاختيار إطار مختلف.

يقبل كل من source وrefer_image موترات torch مباشرةً، وهو أمر مفيد عندما تكون الصور ناتجةً أصلًا عن مسار معالجة قائم. قدّم المربعات بإحداثيات البكسل الخاصة بالموتر:

import numpy as np
import torch

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

model = YOLOE("yoloe-11l-seg.pt")

img_tensor = torch.rand(1, 3, 480, 480)  # (1, 3, H, W) float tensor in [0, 1]
visual_prompts = {"bboxes": np.array([[10, 10, 50, 50]]), "cls": np.array([0])}

results = model.predict(
    img_tensor,
    refer_image=img_tensor,
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
    imgsz=640,
)

للتنبؤ على عدة صور دفعةً واحدة، أضف مستوىً آخر إلى تداخل المطالبات: مصفوفة bboxes واحدة ومصفوفة cls واحدة لكل صورة مصدر، وبالترتيب نفسه للمصادر.

import numpy as np

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

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

visual_prompts = {
    "bboxes": [
        np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]),  # bus.jpg: person, glasses
        np.array([[150, 200, 1150, 700]]),  # zidane.jpg: person
    ],
    "cls": [np.array([0, 1]), np.array([0])],
}

results = model.predict(
    ["ultralytics/assets/bus.jpg", "ultralytics/assets/zidane.jpg"],
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

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

يُجرى التحقق مثل أي نموذج آخر على مجموعة بيانات تقسيم:

مثال
from ultralytics import YOLOE

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

metrics = model.val(data="coco128-seg.yaml")

يغطي تنويعان من الاستدعاء نفسه نمطي المطالبة الآخرين:

  • المطالبات المرئية — يستخرج model.val(data="coco128-seg.yaml", load_vp=True) تضمينًا مرئيًا لكل فئة من مجموعة البيانات نفسها. أضف refer_data="coco.yaml" لأخذ التضمينات من مجموعة بيانات مختلفة، على أن تحتوي على الفئات نفسها تمامًا.
  • من دون مطالبة — حمّل نقطة تحقق *-seg-pf.pt ومرّر single_cls=True.

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

يمكن حفظ تضمينات المطالبات مرةً واحدة وإعادة استخدامها عند إنتاج صادرات ثابتة مثل ONNX وOpenVINO وTensorRT وCoreML وLiteRT وRKNN. ويحمّل نموذج PyTorch الأصلي ملف تعريف NPZ قبل التصدير؛ ولا يُعد هذا الملف إدخالًا إضافيًا في وقت التشغيل، كما أن النموذج المُصدَّر لا يتطلب ملف NPZ.

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

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

إعادة استخدام تضمينات المطالبات
from ultralytics import YOLOE

model = YOLOE("yoloe-26n-seg.pt")
model.set_classes(["person", "bus"])
model.save_prompt_embeddings("person-bus.npz")

# The profile is bound to the source checkpoint and can be reused for later exports.
model = YOLOE("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="onnx")

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

from ultralytics import YOLOE

model = YOLOE("yoloe-26n.yaml").load("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="rknn", name="rk3588", quantize=16)

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

تنتقل الفئات المُطالب بها مباشرةً إلى التتبع، ولذلك يمكنك تتبع كائنات لم يُدرَّب المتعقّب عليها قط:

مثال
from ultralytics import YOLOE

model = YOLOE("yoloe-26s-seg.pt")
model.set_classes(["forklift", "pallet"])

# persist=True keeps track IDs stable across frames
for result in model.track("path/to/video.mp4", stream=True, persist=True):
    print(result.boxes.id)

مقارنة YOLOE#

يقع YOLOE بين كاشف ذي مجموعة فئات مغلقة ونموذج ثقيل ذي مفردات مفتوحة. وتحدد ثلاث مقارنات ما إذا كان الخيار المناسب:

  • مقابل YOLO ذي مجموعة الفئات المغلقة. بعد ضبط المطالبات، يتنبأ YOLOE عبر مسار الكشف/التقسيم المعتاد ويُصدَّر مثل أي نموذج آخر. وما يضيفه هو إمكانية تغيير قائمة الفئات وقت الاستدلال بدلًا من إعادة التدريب؛ أما تكلفته فهي أن دقة اللقطة الصفرية أقل بكثير من دقة نموذج مُدرَّب على فئاتك الخاصة.
  • مقابل عائلات YOLOE الأقدم. يرث YOLOE-26 رأسًا شاملًا من طرف إلى طرف بلا NMS من YOLO26، ويغطي خمسة مقاييس (n/s/m/l/x) مقابل ثلاثة فقط في الإصدارات الأقدم (s/m/l)، ويتفوق عند كل مقياس مطابق في الأداء.
  • مقابل كواشف المفردات المفتوحة القائمة على Transformer. يشغّل GLIP وOWL-ViT محوّل رؤية-لغة أثناء الاستدلال. أما YOLOE فيشفّر المطالبات مرةً واحدة ثم يقارنها بميزات المناطق داخل رأس التفاف.

تقبل أقرب البدائل جميعها مطالبةً نصية، لكن YOLOE وSAM 3 وحدهما يعيدان أقنعة، وتجيب النماذج الثلاثة عن أسئلة مختلفة:

YOLOESAM 3YOLO-World
مصمم من أجلالكشف والتقسيم في الوقت الفعلي للفئات المُسمّاةتقسيم المفاهيم والتتبع القابل للمطالبةالكشف عن المفردات المفتوحة في الوقت الفعلي
الأقنعةنعم، باستخدام نقاط التحقق *-seg.ptنعملا، المربعات فقط
المطالبات المرئيةنعم (SAVPE)نعملا
الوضع من دون مطالبةنعم، مفردات تضم 4,585 اسمًالالا
اختره عندماتحتاج إلى معدل معالجة مرتفع ويمكنك تسمية الفئاتتحتاج إلى أقوى تقسيم للمفاهيم ويمكنك تحمّل تكلفة الحسابتستخدمه بالفعل — راجع ملاحظة الترحيل أدناه

هل تنتقل من YOLO-World؟ تتماثل بنية API: استبدل YOLOWorld بـ YOLOE، وحمّل نقطة تحقق *-seg.pt، وأبقِ استدعاء set_classes() كما هو. وستحصل على الأقنعة والمطالبات المرئية؛ وتنطبق ملاحظة التصدير المتعلقة بالفئات المجمدة على كليهما.

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

يزيل الكشف عن المفردات المفتوحة خطوة إعادة التدريب لكل فئة، وهو أمر مهم خصوصًا عندما لا تكون القائمة المستهدفة معروفة مسبقًا:

  • الكشف في عالم مفتوحالروبوتات وأنظمة الأمان التي تصادف كائنات لم يحصرها أحد في تعداد وقت التدريب.
  • الكشف من مثال واحد — تلتقط المطالبات المرئية جزءًا أو شعارًا أو عيبًا محددًا من مربع مرجعي واحد، وهو مفيد في الفحص الصناعي.
  • فهرسة الذيل الطويل — تتميز المفردات المدمجة التي تضم 4,585 اسمًا باتساع يكفي لـمراقبة التنوع الحيوي أو جرد المخزون في متاجر التجزئة.
  • تهيئة مجموعة البيانات — ضع تسميات أولية للصور بالمربعات والأقنعة قبل المراجعة البشرية، ثم درّب نموذجًا سريعًا ذا مجموعة فئات مغلقة على الناتج.
  • تقسيم أهداف عشوائية — تعيد نقاط التحقق *-seg.pt المُصدرة قناعًا مع كل تنبؤ، ولذلك تحصل التصويرات الطبية وتحليلات الأقمار الصناعية على ناتج دقيق على مستوى البكسل من دون نموذج ثانٍ.

يجمع نمط شائع بين وضعين: شغّل الوضع من دون مطالبة مرةً لاكتشاف الموجود، ثم بدّل إلى المطالبات النصية للفئات المهمة.

القيود#

يستبدل YOLOE الدقة بالقدرة على تغيير الفئات وقت الاستدلال. وفيما يلي النتائج التي يجدر معرفتها قبل اعتماده:

  • دقة اللقطة الصفرية أقل بكثير من دقة نموذج مُدرَّب على فئاتك. تحقق نقاط التحقق المُطالب بها نحو 22-40 mAP على LVIS minival؛ وسيتفوق YOLO ذي مجموعة الفئات المغلقة المُدرَّب على بياناتك الخاصة عليها في تلك الفئات. استخدم YOLOE لتغطية الفئات التي لا تستطيع التدريب عليها، لا لاستبدال التدريب.
  • الفئات النادرة هي نقطة الضعف. ي report عمود mAPr في الأداء الدقة على الفئات النادرة في LVIS تحديدًا، وتبقى قيمته في المطالبة النصية أدنى من عمودي الفئات الشائعة والمتكررة في كل صف. افحصه بدلًا من mAP الرئيسي عندما تكون أهدافك غير مألوفة.
  • تصف المطالبة المظهر لا العلاقات. يعمل الكشف بمقارنة ميزات المناطق بتضمين المطالبة، ولذلك لا تملك المطالبات التي تعتمد على الحالة أو السياق أو المقارنة — «تالف» و«الأيسر» و«الذي يجري حمله» — سمةً موثوقة للمطابقة. فضّل صياغة قريبة من أسماء الفئات المتداولة.
  • تؤدي مجموعات المطالبات الكبيرة إلى زيادة زمن الاستجابة. تُحسب تضمينات المطالبات مرةً واحدة، لكنها تُقارن بميزات المناطق في كل تمريرة أمامية. وبالقياس على CPU باستخدام yoloe-26s-seg.pt، تزداد التمريرة الأمامية بنحو 19% عند الانتقال من 80 إلى 1,203 فئات، وبنحو 89% عند استخدام المفردات الكاملة التي تضم 4,585 اسمًا. ولا تتغير قيمة FLOPs المُبلغ عنها إطلاقًا، لأن تشابه المنطقة-النص غير محسوب، ولذلك لن ينبهك الملف التعريفي إلى ذلك.
  • أسماء الفئات مجرد عناصر نائبة إلى أن تُقدّم مطالبة. تُبلغ نقطة التحقق المحمّلة حديثًا *-seg.pt عن nc=80 بأسماء رقمية ("0" و"1" و…)، لذا استدعِ set_classes() قبل قراءة التسميات. أما نقاط التحقق من دون مطالبة فتأتي بالمفردات الكاملة مملوءة مسبقًا.

ملاحظات النشر#

  • العتاد. يتطلب الاستدلال وحدة GPU من NVIDIA بذاكرة VRAM سعتها 4-8 GB؛ وتعمل مقاييس n وs على وحدات GPU طرفية مثل Jetson أو على CPU بدقة منخفضة. ويتطلب الضبط الدقيق وحدة GPU واحدة.
  • يكون خوارزمية NMS (قمع التجاوز غير الحدود) مستقلة عن الفئات افتراضياً. يتنبأ نموذج YOLOE باستخدام agnostic_nms=True. افتراضياً، يقوم هذا بقمع المربعات المتداخلة ذات النقاط الأقل عبر الفئات المختلفة بدلاً من الفئة نفسها فقط، مما يمنع التكرارات عندما يتطابق كائن واحد مع عدة فئات. باستخدام nms=False, لا يطبق نموذج YOLOE-26 أي قمع لمؤشر التقاطع على الاتحاد (IoU)؛ حيث يحافظ وضع الاستقلالية عن الفئات على أفضل فئة واحدة فقط لكل مثبت بدلاً من السماح لمثبت واحد بإصدار تسميات فئات متعددة. مرر agnostic_nms=False للتجاوز.
  • التجميع. يعمل الاستدلال الدفعي مباشرةً، ويمكن أن تختلف المطالبات المرئية لكل صورة في الاستدعاء نفسه.

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

لا يحتاج معظم القراء إلى ذلك. فهو يعيد إنتاج نقاط التحقق المنشورة للمفردات المفتوحة من Objects365 وGQA وFlickr30k — نحو 1.4 M عينة تدريبية على 8× RTX 4090 — ولا علاقة له بالضبط الدقيق على بياناتك الخاصة، المشروح ضمن استخدام التدريب أعلاه.

تحذير

يرفض كل مدرّب يرث YOLOETrainer الوسيط compile=True، بما في ذلك YOLOESegTrainer الافتراضي وجميع مدرّبات التدريب من الصفر أدناه. مرّر compile=False (القيمة الافتراضية). ولا يفرض مدرّبا الضبط الدقيق المستخدمان أعلاه، YOLOEPESegTrainer وYOLOEPETrainer، هذا القيد.

يتطلب التدريب تعليقات توضيحية للمقاطع. يمكنك إما تنزيل الملفات المعالجة أدناه، أو إنشاؤها بنفسك باستخدام البرنامج النصي الذي يقدمه الفريق الرسمي، والمدعوم بواسطة SAM 2.1. ويستخدم التحقق LVIS minival.

مجموعة البياناتالنوعالعيناتالمربعاتتعليقات توضيحية معالجة للمقاطع
Objects365v1الكشف609k9621kobjects365_train_segm.json
GQAالتأريض621k3681kfinal_mixed_train_no_coco_segm.json
Flickr30kالتأريض149k641kfinal_flickr_separateGT_train_segm.json

يُدرَّب نموذج المطالبة النصية أولًا، ويُعد النمطان الآخران من المطالبات تنقيحين له:

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

data = {
    "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 the path to a YAML file holding the same structure
    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",
)

تبدأ نقاط التحقق للمطالبة المرئية ومن دون مطالبة من نموذج المطالبة النصية المُدرَّب، وتحدّث كلٌّ منها وحدةً واحدة. ويمثل YOLOESegVPTrainer وصفة المطالبة المرئية، ويمثل YOLOEPEFreeTrainer الوصفة من دون مطالبة، لكن لا يجمّد أيٌّ من الصنفين شيئًا بمفرده: إذ يأتي التدريب الانتقائي من قائمة freeze التي تمررها إلى جانبه، والتي تسمّي كل ابن من أبناء الرأس باستثناء savpe (أي كل برج تصنيف)، كما يتطلب تشغيل الوضع من دون مطالبة single_cls=True إضافيًا. ويحتوي مستودع YOLOE الأساسي على الوصفات الكاملة للنماذج ذات مقياس v8.

تُعاد معلمة عملية مكتملة من دون مطالبة إلى نقطة تحقق تُبلغ عن أسمائها من دون مطالبة أثناء الاستدلال، باستخدام get_vocab وset_vocab:

from ultralytics import YOLOE

# Weights written by the prompt-free run and by the text-prompt run it started from. Each
# rerun creates a new directory (train-2, train-3, ...), so take the paths the runs printed.
model = YOLOE("runs/segment/train-2/weights/best.pt")  # prompt-free run, its head is already fused
text_model = YOLOE("runs/segment/train/weights/best.pt")  # text-prompt run, its head is still unfused

names = list(YOLOE("yoloe-26l-seg-pf.pt").model.names.values())  # the 4,585-name vocabulary, or your own list
vocab = text_model.get_vocab(names)

model.set_vocab(vocab, names)
model.save("yoloe-26l-seg-pf-custom.pt")  # never overwrite the released checkpoint

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

إذا أسهم YOLOE في بحثك أو مشروعك، فيُرجى الاستشهاد بالورقة الأصلية التي ألّفها Ao Wang وLihao Liu وHui Chen وZijia Lin وJungong Han و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.

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

  • يضيف Ultralytics YOLOE إمكانيتين لا يملكهما YOLO-World: المطالبات المرئية، حيث يحل مربع مثال محل اسم الفئة، ونقاط التحقق من دون مطالبة التي تجيب من مفردات مدمجة تضم 4,585 اسمًا من دون أي مطالبة. كما يحمل كل تنبؤ من نقاط التحقق *-seg.pt المُصدرة قناع تقسيم المثيل. ومن حيث الدقة، تضع ورقة YOLOE الأصلية YOLOE-v8s متقدمًا على YOLO-Worldv2-S بمقدار 3.5 AP على LVIS، مع ثلث تكلفة التدريب وسرعة استدلال تبلغ 1.4×. والترحيل لا يتطلب سوى تغيير سطر واحد — راجع مقارنة YOLOE.

  • يدعم Ultralytics YOLOE ثلاثة أوضاع للمطالبات. المطالبة النصية هي أسماء الفئات كسلاسل نصية على نقطة تحقق *-seg.pt، وهي الخيار المعتاد. أما المطالبة المرئية فهي مربع مثال واحد أو أكثر على صورة مرجعية، للأهداف التي يصعب وصفها بالكلمات. ويستخدم الاستدلال من دون مطالبة نقطة تحقق *-seg-pf.pt منفصلة تجيب من مفردات مدمجة تضم 4,585 اسمًا من دون تزويدها بأي شيء. وتشترك المطالبات النصية والمرئية في نقاط التحقق نفسها؛ أما نقاط التحقق من دون مطالبة فهي ملفات مختلفة وترفض set_classes(). راجع اختيار وضع المطالبة للمقارنة الكاملة.

  • ابدأ بـ yoloe-26s-seg.pt: تتفوق عائلة YOLOE-26 على YOLOE-11 وYOLOE-v8 عند كل مقياس مطابق، كما أن مقياس s هو الأصغر الذي يتجاوز 30 mAP على LVIS minival. انتقل إلى m أو l أو x عندما تكون الدقة على الفئات النادرة أهم من زمن الاستجابة — فعمود mAPr في الأداء هو ما ينبغي مقارنته. وانتقل إلى n فقط للنشر على الأجهزة الطرفية. وحمّل ملف *-seg-pf.pt ذي المقياس نفسه بدلًا من ذلك عندما تريد المفردات المدمجة بدلًا من أسماء فئاتك الخاصة.

  • تعني التسميات مثل object0 وobject1 أن التنبؤ صدر من مطالبة مرئية، تجمع مربعات الأمثلة في فئات مؤقتة مرقمة بدلًا من الاحتفاظ بأسمائك. وتُستخدم معرّفات الفئات التي تمررها في visual_prompts["cls"] لهذا التجميع فقط. ويعرضها النموذج بصفتها object0 وobject1 وما إلى ذلك، وفق ترتيب المعرّفات التي عيّنتها، لذا اربطها مجددًا بتسمياتك الخاصة في النتيجة. إذا أردت ظهور أسمائك في المخرجات، فاستخدم مطالبة نصية بدلًا من ذلك.

  • تحل نقاط الفحص الخالية من المطالبات (*-seg-pf.pt) الفئات باستخدام مفرداتها المضمنة الخاصة بها، وترفض المطالبات الخارجية باستخدام AssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models. حمّل نقطة فحص *-seg.pt عندما تحتاج إلى قائمة الفئات الخاصة بك. راجع اختيار وضع المطالبة.

  • تجعل المطالبة النصية الأولى Ultralytics YOLOE يثبّت ultralytics/CLIP من GitHub باستخدام pip، وينزّل مُرمّزًا نصيًا بصيغة TorchScript إلى دليل العمل الحالي — بحجم يقارب 254 ميغابايت لـ YOLOE-26؛ راجع التثبيت والمتطلبات لمعرفة الأصل الدقيق لكل عائلة من النماذج. لا تحتاج المطالبات المرئية ونقاط الفحص الخالية من المطالبات إلى أيٍّ منهما. لتجنب التنزيل على الجهاز المستهدف، عيّن المطالبات مرة واحدة واحفظها باستخدام save_prompt_embeddings()، أو صدّر النموذج مع الفئات المكوّنة مسبقًا.

  • لا — يضمّن YOLOE الفئات المحددة بالمطالبات داخل الأوزان وقت التصدير، لذلك يرفض التصدير المُحمّل كلًّا من set_classes() وvisual_prompts=. أعد التصدير من نقطة الفحص الأصلية .pt بعد تهيئة المطالبات الجديدة. يتصرف الملف المُصدَّر مثل نموذج YOLO قياسي، ويمكن تحميله باستخدام YOLO() وكذلك YOLOE().

  • استخدم YOLOE عندما تحتاج إلى معدل معالجة لحظي ويمكنك تسمية الفئات، واستخدم SAM 3 عندما تكون جودة التجزئة لمفهوم ما أهم من السرعة. يقبل كلاهما أمثلة مرئية؛ لكن YOLOE وحده يوفّر وضعًا خاليًا من المطالبات. ترد المقارنة الكاملة في مقارنة YOLOE.

التعليقات