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

| الوضع | نقطة الفحص | ما تقدمه | أسماء الفئات في النتائج | استخدمه عندما |
|---|---|---|---|---|
| المطالبة النصية | *-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 على بنية 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-26n | yoloe-26n-seg.pt | yoloe-26n-seg-pf.pt |
| YOLOE-26s | yoloe-26s-seg.pt | yoloe-26s-seg-pf.pt |
| YOLOE-26m | yoloe-26m-seg.pt | yoloe-26m-seg-pf.pt |
| YOLOE-26l | yoloe-26l-seg.pt | yoloe-26l-seg-pf.pt |
| YOLOE-26x | yoloe-26x-seg.pt | yoloe-26x-seg-pf.pt |
| YOLOE-11s | yoloe-11s-seg.pt | yoloe-11s-seg-pf.pt |
| YOLOE-11m | yoloe-11m-seg.pt | yoloe-11m-seg-pf.pt |
| YOLOE-11l | yoloe-11l-seg.pt | yoloe-11l-seg-pf.pt |
| YOLOE-v8s | yoloe-v8s-seg.pt | yoloe-v8s-seg-pf.pt |
| YOLOE-v8m | yoloe-v8m-seg.pt | yoloe-v8m-seg-pf.pt |
| YOLOE-v8l | yoloe-v8l-seg.pt | yoloe-v8l-seg-pf.pt |
أداء YOLOE على LVIS#
نتائج الإعداد الصفري على LVIS minival بدقة 640 بكسلاً، من ورقة Ultralytics YOLO26.
المطالبات النصية والمرئية#
تُقرأ كل خلية دقة ومعلمة بالشكل المطالبة النصية / المطالبة المرئية؛ وتُذكر FLOPs مرة واحدة. المعلمات وFLOPs خاصتان بتكوين الكشف الذي تقيّمه الورقة. الدقة هي قيمة Non-E2E في الورقة، وهو البروتوكول الوحيد الذي تعرضه لكل نموذج في المقارنة؛ ويتأخر رأس YOLOE-26 الشامل من البداية إلى النهاية عنه بحد أقصى قدره 1.1 AP تحت المطالبات النصية و2.6 AP تحت المطالبات المرئية.
| النموذج | mAP50-95 | mAPr | mAPc | mAPf | المعاملات (M) | FLOPs (B) |
|---|---|---|---|---|---|---|
| YOLOE-26n | 24.7 / 21.9 | 20.5 / 17.6 | 24.1 / 22.3 | 26.1 / 22.4 | 3.9 / 3.1 | 6.1 |
| YOLOE-26s | 30.8 / 28.6 | 23.9 / 25.1 | 29.6 / 27.8 | 33.0 / 29.9 | 10.7 / 11.0 | 21.9 |
| YOLOE-26m | 35.4 / 33.9 | 31.1 / 33.4 | 34.7 / 34.0 | 36.9 / 33.8 | 21.3 / 25.1 | 70.6 |
| YOLOE-26l | 37.8 / 36.3 | 35.1 / 37.6 | 37.6 / 36.2 | 38.5 / 36.1 | 25.5 / 29.3 | 89.0 |
| YOLOE-26x | 40.6 / 38.5 | 37.4 / 35.3 | 40.9 / 38.8 | 41.0 / 38.8 | 55.2 / 65.2 | 197.7 |
| YOLOE-11s | 27.5 / 26.3 | 21.4 / 22.5 | 26.8 / 27.1 | 29.3 / 26.4 | 10.7 / 10.9 | 22.7 |
| YOLOE-11m | 33.0 / 31.4 | 26.9 / 27.1 | 32.5 / 31.9 | 34.5 / 31.7 | 21.0 / 24.8 | 70.4 |
| YOLOE-11l | 35.2 / 33.7 | 29.1 / 28.1 | 35.0 / 34.6 | 36.5 / 33.8 | 26.0 / 29.8 | 89.5 |
| YOLOE-v8s | 27.9 / 26.2 | 22.3 / 21.3 | 27.8 / 27.7 | 29.0 / 25.7 | 12.3 / 12.6 | 29.8 |
| YOLOE-v8m | 32.6 / 31.0 | 26.9 / 27.0 | 31.9 / 31.7 | 34.4 / 31.1 | 26.4 / 28.4 | 80.7 |
| YOLOE-v8l | 35.9 / 34.2 | 33.2 / 33.2 | 34.8 / 34.6 | 37.3 / 34.1 | 43.5 / 47.3 | 167.6 |
الخالي من المطالبات#
تستجيب نقاط الفحص الخالية من المطالبات باستخدام مفرداتها المدمجة دون توفير مطالبة. تُقرأ كل خلية دقة بالشكل من البداية إلى النهاية / Non-E2E، وهما البروتوكولان اللذان تقيس الورقة أداء YOLOE-26 وفقاً لهما؛ وتعرض صفحة YOLO26 عمود Non-E2E.
| النموذج | mAP50-95 | mAPr | mAPc | mAPf | المعاملات (M) | FLOPs (B) |
|---|---|---|---|---|---|---|
| YOLOE-26n-pf | 16.6 / 17.7 | 15.7 / 15.8 | 15.3 / 16.4 | 17.9 / 19.2 | 2.3 | 5.3 |
| YOLOE-26s-pf | 21.4 / 22.6 | 16.2 / 20.2 | 20.1 / 20.9 | 23.5 / 24.5 | 9.0 | 20.8 |
| YOLOE-26m-pf | 25.7 / 26.4 | 26.7 / 24.5 | 24.0 / 25.0 | 26.9 / 27.9 | 19.4 | 68.4 |
| YOLOE-26l-pf | 27.2 / 28.0 | 26.3 / 25.7 | 25.7 / 26.8 | 28.7 / 29.5 | 23.6 | 86.8 |
| YOLOE-26x-pf | 29.9 / 31.1 | 27.5 / 28.9 | 29.1 / 30.7 | 31.1 / 31.7 | 53.1 | 194.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 وحدهما يعيدان أقنعة، وتجيب النماذج الثلاثة عن أسئلة مختلفة:
| YOLOE | SAM 3 | YOLO-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 | الكشف | 609k | 9621k | objects365_train_segm.json |
| GQA | التأريض | 621k | 3681k | final_mixed_train_no_coco_segm.json |
| Flickr30k | التأريض | 149k | 641k | final_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.