Ultralytics YOLO27:
Get Started

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

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



شاهد: كيفية استخدام Ultralytics YOLOE-26 (الجديد) | مفردات مفتوحة ورؤية أي شيء في الوقت الفعلي 🚀

البدء السريع#

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

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

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

# ⁨«حافلة ذات طابقين» ليست فئة في COCO؛ إذ يتعرف YOLOE عليها من الكلمات وحدها⁩
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 MB؛ بينما ينزّل 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 قياسيًا، لذا يستخدم الملف المُصدّر مسار الكشف/التجزئة المعتاد.

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

كل نقطة تحقق أدناه هي نموذج لتجزئة المثيلات، وتدعم التحقق والتنبؤ والتصدير والتتبع. حمّل ملف *-seg.pt للمطالبات النصية أو البصرية، وملف *-seg-pf.pt للاستدلال من دون مطالبات؛ فهما غير قابلين للتبادل، راجع اختيار نمط المطالبة. لا تدعم التدريب إلا الملفات *-seg.pt؛ وتُنتج نقطة التحقق الخالية من المطالبات من نموذج مدرّب باستخدام مطالبة نصية، راجع تدريب النماذج الرسمية من البداية.

أداء 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 بقيم 26.0 لـ GLIP-T، و27.4 لـ GDINO-T، و34.4 لـ DetCLIP-T، ويضم كل منها ما بين 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 M و142.0 B بدلًا من 25.5 M و89.0 B المذكورتين أعلاه. وفي الحالتين، لا يشمل رقم FLOPs تشابه المنطقة والنص، لذا ترتفع التكلفة الفعلية مع حجم مجموعة المطالبات رغم ثبات قيمة العمود؛ راجع القيود.

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

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

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

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



شاهد: كيفية تدريب YOLOE على مجموعة بيانات تقسيم أجزاء السيارات | نموذج بمفردات مفتوحة والتنبؤ والتصدير 🚀
مثال
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,  # ⁨<- مهم: مدرّب الضبط الدقيق، وليس المدرّب الافتراضي⁩
)
تدريب نموذج للكشف بدلًا من ذلك

كل نقطة تحقق منشورة هي نموذج تجزئة. لتدريب كاشف، أنشئ النموذج باستخدام 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")

# ⁨صندوق مثال واحد لكل هدف، ولكل صندوق معرّف فئة خاص به⁩
visual_prompts = {
    "bboxes": np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]),  # ⁨شخص، نظارات⁩
    "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",  # ⁨الصورة المستهدفة⁩
    refer_image="ultralytics/assets/bus.jpg",  # ⁨موضع صناديق الأمثلة⁩
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

# ⁨يضبط refer_image الفئات نهائيًا أيضًا، لذا لا تحتاج الاستدعاءات اللاحقة إلى أي مطالبات⁩
results = model("ultralytics/assets/bus.jpg")
model.export(format="onnx")  # ⁨ويحتفظ بها التصدير أيضًا⁩
ملاحظة

عندما يكون 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) في النطاق [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: شخص، نظارات⁩
        np.array([[150, 200, 1150, 700]]),  # ⁨zidane.jpg: شخص⁩
    ],
    "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")  # ⁨أو yoloe-26s/m-seg.pt للأحجام الأخرى⁩

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

# ⁨يرتبط ملف التعريف بنقطة التحقق المصدر، ويمكن إعادة استخدامه في عمليات التصدير اللاحقة.⁩
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 على ثبات معرّفات التتبع عبر الإطارات⁩
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 نموذج Transformer للرؤية واللغة وقت الاستدلال. أما YOLOE فيرمّز المطالبات مرة واحدة، ثم يقارنها بسمات المناطق داخل رأس التفافي.

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

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

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

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

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

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

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

القيود#

يستبدل YOLOE بعض الدقة بإمكانية تغيير الفئات وقت الاستدلال. وهذه أهم العواقب التي ينبغي معرفتها قبل اعتماده:

  • دقة الاستدلال الصفري أقل بكثير من دقة نموذج دُرّب على فئاتك. تحقق نقاط التحقق الموجّهة بالمطالبات نحو 22–40 mAP على LVIS minival؛ وسيتفوق عليها YOLO ذو الفئات المغلقة والمدرّب على بياناتك ضمن تلك الفئات. استخدم YOLOE لتغطية الفئات التي لا يمكنك التدريب عليها، لا ليحل محل التدريب.
  • الفئات النادرة هي نقطة الضعف. يعرض عمود 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 مليون عينة تدريب على 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,  # ⁨أو مسار ملف YAML يتضمن البنية نفسها⁩
    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

# ⁨الأوزان التي كتبها التشغيل الخالي من الموجّهات والتشغيل ذي الموجّه النصي الذي بدأ منه. كل⁩
# ⁨إعادة تشغيل تنشئ دليلاً جديداً (train-2 وtrain-3 و...)؛ لذا استخدم المسارات التي طبعتها عمليات التشغيل.⁩
model = YOLOE("runs/segment/train-2/weights/best.pt")  # ⁨في التشغيل الخالي من الموجّهات، يكون الرأس مدمجاً بالفعل⁩
text_model = YOLOE("runs/segment/train/weights/best.pt")  # ⁨في التشغيل ذي الموجّه النصي، لا يزال الرأس غير مدمج⁩

names = list(YOLOE("yoloe-26l-seg-pf.pt").model.names.values())  # ⁨مفردات الأسماء البالغ عددها 4,585، أو قائمتك الخاصة⁩
vocab = text_model.get_vocab(names)

model.set_vocab(vocab, names)
model.save("yoloe-26l-seg-pf-custom.pt")  # ⁨لا تستبدل نقطة التحقق المنشورة مطلقاً⁩

تعيد get_vocab الفرع الذي يحدده علم end2end الخاص بالنموذج، وتعيد set_vocab تهيئة ذلك الفرع. أما ملفات YOLOE-26 المنشورة فتحمل مفردات لكل فرع، وهذا ما يتيح لـnms الاختيار بينها؛ ويمكنك إعادة إنتاج ذلك بأخذ المفردات الثانية من نسخة أخرى من نموذج الموجّه النصي. لدى YOLOE-11 وYOLOE-v8 فرع واحد، لذا يستخدمان الاستدعاء أعلاه دون تغيير.

one2one_model = YOLOE("runs/segment/train/weights/best.pt")  # ⁨تدمج get_vocab الرأس الذي تقرأه؛ لذا حمّل نسخة ثانية⁩
one2one_model.model.end2end = True  # ⁨اقرأ الفرع الخالي من NMS⁩

model.set_vocab(vocab, names, one2one_vocab=one2one_model.get_vocab(names))

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

إذا أسهم 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 MB لـYOLOE-26؛ راجع التثبيت والمتطلبات لمعرفة المكوّن الدقيق لكل عائلة نماذج. لا تحتاج الموجّهات المرئية ونقاط التحقق الخالية من الموجّهات إلى أي منهما. لتجنب التنزيل على الجهاز المستهدف، عيّن الموجّهات مرة واحدة واحفظها باستخدام save_prompt_embeddings()، أو صدّر النموذج بعد إعداد الفئات مسبقاً.

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

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

التعليقات