YOLOE: الكشف والتجزئة المفتوحة المفردات في الوقت الحقيقي#
Ultralytics YOLOE (رؤية أي شيء في الوقت الحقيقي) هو نموذج للكشف وتجزئة المثيلات بمفردات مفتوحة: فبدلاً من قائمة فئات ثابتة وقت التدريب، فإنه يأخذ الفئات التي تريدها وقت الاستدلال، كوجه نصي، أو مثال مرئي، أو مفردات مدمجة تضم 4,585 اسماً. تم بناؤه على معماريات Ultralytics YOLO — YOLOv8، وYOLO11، وYOLO26 — ومستوحى من YOLO-World، ويحقق YOLOE دقة حديثة دون تدريب مسبق (zero-shot) بسرعة قريبة من سرعة نماذج 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 ثلاثة أوضاع توجيه، ويحدد الاختيار نقطة التحقق (checkpoint) التي تقوم بتحميلها وشكل تسميات الفئات الخاصة بك. اختر الصف الذي يطابق ما يمكنك توفيره وقت الاستدلال.

| النمط | نقطة التحقق (Checkpoint) | ما تقوم بتوفيره | أسماء الفئات في النتائج | استخدمها عندما |
|---|---|---|---|---|
| موجه نصي | *-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 القياسي — عمود فقري (backbone) تلافيفي لاستخراج الميزات، وعنق (neck) للدمج متعدد المقاييس، ورأس منفصل خالٍ من المراسي (anchor-free, decoupled head) يتنبأ بالفئات والمربعات — ويضيف ثلاث وحدات، بواقع وحدة لكل وضع توجيه:
- محاذاة المناطق والنصوص القابلة لإعادة المعلمات (RepRTA) تنقي تضمينات النصوص من CLIP من خلال شبكة مساعد صغيرة. تعمل تلك الشبكة مرة واحدة لكل استدعاء لـ
set_classes()ويتم طيها عند التصدير، لذا فهي لا تكلف شيئاً لكل إطار. ما يعمل في كل تمريرة أمامية هو مقارنة تضمينات الموجهات المخزنة مقابل ميزات المناطق؛ راجع القيود لمعرفة تكلفة ذلك مع مجموعة موجهات كبيرة. - مُرمّز الموجهات المرئية المُفعل دلالياً (SAVPE) يرمّز ميزات الدلالات والتنشيط من مربع مثال، مما يضبط النموذج على الكائنات التي تشبهه. هذا هو مسار اللقطة الواحدة (one-shot) للأهداف التي يصعب تسميتها، مثل شعار أو جزء معين.
- تباين موجهات المناطق الكسول (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 بدقة 640 بكسل، من ورقة بحث YOLO26 من Ultralytics.
الموجهات النصية والمرئية#
تُقرأ كل خلية دقة ومعلمات هكذا: موجه نصي / موجه مرئي؛ ويتم إعطاء العمليات الفاصلة العائمة (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-based) 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 تكوين كشف. الأوزان المُصدرة هي نقاط تحقق تجزئة (segmentation) وتحمل فرع قناع، وSAVPE، والإسقاط النصي في الأعلى، لذا فإن نموذج yoloe-26l-seg.pt المُحمل يُبلغ عن 35.4 مليون و142.0 مليار بدلاً من 25.5 مليون و89.0 مليار أعلاه. في كلا الحالتين، استبعاد رقم FLOPs يشمل تشابه المنطقة والنص، لذا تنمو التكلفة الحقيقية مع حجم مجموعة الموجهات على الرغم من عدم تغير العمود؛ راجع القيود.
أمثلة الاستخدام#
يعمل كل مثال لـ YOLOE أدناه من خلال واجهة برمجة تطبيقات Python. يعمل التنبؤ الموجه بنص، والتحقق، والتصدير، والتتبع، والتدريب العادي أيضاً من واجهة سطر الأوامر (CLI)؛ تمرر وصفات الضبط الدقيق (fine-tuning) والتوجيه المرئي فئة مدرب أو متنبئ كمعامل، وهو ما تقبله واجهة Python فقط.
استخدام التدريب#
قم بضبط أي نقطة تحقق مُصدرة *-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)استخدام التنبؤ (Predict)#
استدعاء التوجيه النصي هو الظاهر في البدء السريع. يحتاج الوضعان المتبقيان إلى معامل إضافي:
تُظهر الموجهات المرئية للنموذج مثالاً بدلاً من وصفه. يأخذ 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 فيديو أو تدفقاً (stream)، يصبح الإطار الأول هو 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()استخدام التحقق (Val)#
يعمل التحقق تماماً مثل أي نموذج آخر على مجموعة بيانات تجزئة:
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. يتم تحميل ملف تعريف NPZ بواسطة نموذج PyTorch الأصلي قبل التصدير؛ وهو ليس إدخال وقت تشغيل إضافي، ولا يتطلب النموذج المصدر ملف 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)استخدام التتبع (Track)#
تنتقل الفئات المُوجّهة مباشرة إلى التتبع، لذا يمكنك متابعة الكائنات التي لم يتم تدريب المتتبع عليها أبداً:
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 رأس YOLO26 من طرف إلى طرف الخالي من NMS ويغطي خمسة مقاييس (n/s/m/l/x) مقابل المقاييس الثلاثة السابقة (s/m/l)، ويتصدر في كل مقياس مطابق في الأداء.
- ضد كواشف المفردات المفتوحة المستندة إلى المحولات (transformers). يشغل GLIP و OWL-ViT محول رؤية-لغة وقت الاستدلال. يقوم YOLOE بتضمين الموجهات مرة واحدة ثم يقارنها مقابل ميزات المناطق داخل رأس تلافيفي.
البدائل الأقرب كلها تأخذ موجهاً نصياً، ولكن YOLOE و SAM 3 وحدهما يعيدان أقنعة، وتجيب الثلاثة على أسئلة مختلفة:
| YOLOE | SAM 3 | YOLO-World | |
|---|---|---|---|
| مُصمم لـ | الكشف والتجزئة في الوقت الحقيقي للفئات المُسماة | تجزئة المفاهيم والتتبع القابل للتوجيه | اكتشاف المفردات المفتوحة في الوقت الفعلي |
| الأقنعة (Masks) | نعم، باستخدام نقاط التحقق *-seg.pt | نعم | لا، المربعات المحيطة فقط |
| الموجهات المرئية | نعم (SAVPE) | نعم | لا |
| الوضع الخالي من الموجهات | نعم، مفردات تضم 4,585 اسماً | لا | لا |
| اختره عندما | تحتاج إلى إنتاجية عالية ويمكنك تسمية الفئات | تحتاج إلى أقوى تجزئة للمفاهيم ويمكنك تحمل تكلفة الحوسبة | أنت موجود عليه بالفعل - راجع ملاحظة الترحيل أدناه |
هل أنت قادم من YOLO-World؟ واجهة برمجة التطبيقات لها نفس الشكل: استبدل YOLOWorld بـ YOLOE، وقم بتحميل نقطة تحقق *-seg.pt، واحتفظ باستدعاء set_classes() كما هو. ستحصل على الأقنعة والموجهات المرئية؛ وتنطبق ملاحظة التصدير المتعلقة بالفئات المجمدة على كلاهما.
حالات الاستخدام والتطبيقات#
يزيل اكتشاف المفردات المفتوحة خطوة إعادة التدريب لكل فئة، وهو ما يهم أكثر عندما تكون قائمة الأهداف غير معروفة مسبقاً:
- الاكتشاف في العالم المفتوح — الروبوتات وأنظمة الأمان التي تتعامل مع كائنات لم يتم تعدادها أثناء التدريب.
- الاكتشاف بلقطة واحدة من مثال — تلتقط الموجهات المرئية جزءاً معيناً أو شعاراً أو عيباً من صندوق مرجعي واحد، وهو مفيد في الفحص الصناعي.
- فهرسة الذيل الطويل — مفردات 4,585 اسماً المدمجة واسعة بما يكفي لـ مراقبة التنوع البيولوجي أو عمليات مسح مخزون التجزئة.
- تمهيد مجموعات البيانات — وضع علامات مسبقة على الصور بالمربعات والأقنعة قبل مراجعة البشر، ثم تدريب نموذج سريع مغلق المجموعات على النتيجة.
- تجزئة الأهداف التعسفية — تُرجع نقاط التحقق
*-seg.ptالصادرة قناعاً مع كل تنبؤ، بحيث يحصل التصوير الطبي والتحليل عبر الأقمار الصناعية على مخرجات دقيقة على مستوى البكسل دون الحاجة إلى نموذج ثانٍ.
النمط الشائع يجمع بين وضعين: تشغيل الوضع الخالي من الموجهات مرة واحدة لمعرفة ما هو موجود، ثم التبديل إلى موجهات النص للفئات التي تهمك.
القيود#
يقايض نموذج YOLOE الدقة مقابل القدرة على تغيير الفئات في وقت الاستدلال. العواقب التي يجدر معرفتها قبل الالتزام:
- دقة الصفر (Zero-shot) أقل بكثير من نموذج مدرب على فئاتك. تقع نقاط التحقق الموجهة تقريباً في نطاق 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 جيجابايت؛ وتعمل مقاييس
nوsعلى وحدات معالجة الرسوميات الخاصة بالحافة مثل Jetson أو على وحدة المعالجة المركزية (CPU) بدقة مخفضة. يتطلب الضبط الدقيق وحدة معالجة رسومية واحدة. - خوارزمية NMS محايدة للفئة افتراضياً. يتنبأ YOLOE باستخدام
agnostic_nms=True. في YOLOE-11 وYOLOE-v8، يقمع هذا المربعات المتداخلة الأقل تقييماً عبر الفئات المختلفة بدلاً من الفئة نفسها فقط، مما يمنع التكرارات عندما يتطابق كائن واحد مع عدة فئات. لا تطبق نماذج 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.
| مجموعة البيانات | النوع | عينات | صناديق (Boxes) | تعليقات التجزئة المعالجة |
|---|---|---|---|---|
| Objects365v1 | اكتشاف | 609k | 9621k | objects365_train_segm.json |
| GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco_segm.json |
| Flickr30k | التأريض (Grounding) | 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.