تخطي إلى المحتوى

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

مقدمة

خيارات المطالبة في YOLOE

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



شاهد: كيفية استخدام YOLOE مع حزمة Ultralytics python: المفردات المفتوحة والرؤية الآنية لأي شيء 🚀

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

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

هندسة YOLOE

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

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

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

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

بالإضافة إلى ذلك، يدمج YOLOE تقسيم المثيلات في الوقت الفعلي عن طريق توسيع رأس الكشف بفرع تنبؤ القناع (على غرار YOLACT أو YOLOv8-Seg)، مما يضيف الحد الأدنى من الحمل الزائد.

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

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

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

نماذج المطالبات النصية / المرئية

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

نماذج المطالبة المجانية

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

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

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

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

الضبط الدقيق على مجموعة بيانات مخصصة

يمكنك إجراء تعديل دقيق على أي نموذج YOLOE مُدرَّب مسبقًا على مجموعة بيانات YOLO المخصصة الخاصة بك لكل من مهام الكشف وتقسيم الحالات.



شاهد: كيفية تدريب YOLOE على مجموعة بيانات تقسيم قطع غيار السيارات | نموذج مفتوح المفردات والتنبؤ والتصدير 🚀

مثال

تقسيم الحالات

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

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

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

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

اكتشاف الأجسام

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

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

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

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

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

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

تقسيم الحالات

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

# Load a pretrained segmentation model
model = YOLOE("yoloe-11s-seg.pt")

# Identify the head layer index
head_index = len(model.model.model) - 1

# Freeze all backbone and neck layers (i.e. everything before the head)
freeze = [str(i) for i in range(0, head_index)]

# Freeze parts of the segmentation head, keeping only the classification branch trainable
for name, child in model.model.model[-1].named_children():
    if "cv3" not in name:
        freeze.append(f"{head_index}.{name}")

# Freeze detection branch components
freeze.extend(
    [
        f"{head_index}.cv3.0.0",
        f"{head_index}.cv3.0.1",
        f"{head_index}.cv3.1.0",
        f"{head_index}.cv3.1.1",
        f"{head_index}.cv3.2.0",
        f"{head_index}.cv3.2.1",
    ]
)

# Train only the classification branch
results = model.train(
    data="coco128-seg.yaml",  # Segmentation dataset
    epochs=80,
    patience=10,
    trainer=YOLOEPESegTrainer,  # <- Important: use segmentation trainer
    freeze=freeze,
)

اكتشاف الأجسام

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

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

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

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

# Identify the head layer index
head_index = len(model.model.model) - 1

# Freeze all backbone and neck layers (i.e. everything before the head)
freeze = [str(i) for i in range(0, head_index)]

# Freeze parts of the segmentation head, keeping only the classification branch trainable
for name, child in model.model.model[-1].named_children():
    if "cv3" not in name:
        freeze.append(f"{head_index}.{name}")

# Freeze detection branch components
freeze.extend(
    [
        f"{head_index}.cv3.0.0",
        f"{head_index}.cv3.0.1",
        f"{head_index}.cv3.1.0",
        f"{head_index}.cv3.1.1",
        f"{head_index}.cv3.2.0",
        f"{head_index}.cv3.2.1",
    ]
)

# Train only the classification branch
results = model.train(
    data="coco128.yaml",  # Detection dataset
    epochs=80,
    patience=10,
    trainer=YOLOEPETrainer,  # <- Important: use detection trainer
    freeze=freeze,
)

استخدام التوقع

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

مثال

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

from ultralytics import YOLOE

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

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

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

# Show results
results[0].show()

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

في visual_prompts تأخذ الوسيطة قاموسًا بمفتاحين: bboxes و cls. كل مربع إحاطة في bboxes يجب أن يحيط بإحكام بمثال للكائن الذي تريد أن يقوم النموذج بـ detect، والإدخال المقابل في cls يحدد تسمية الفئة لهذا الصندوق. هذه المطابقة تخبر النموذج، "هذا ما تبدو عليه الفئة X—ابحث الآن عن المزيد مثلها."

معرفات الفئات (Class IDs)cls) في visual_prompts تُستخدم لربط كل مربع إحاطة بفئة معينة داخل مطالبتك. إنها ليست تسميات ثابتة، ولكنها معرفات مؤقتة تقوم بتعيينها لكل مثال. الشرط الوحيد هو أن تكون معرفات الفئات متسلسلة، بدءًا من 0. وهذا يساعد النموذج على ربط كل مربع بفئته بشكل صحيح.

يمكنك توفير مطالبات مرئية مباشرة داخل نفس الصورة التي تريد تشغيل الاستدلال عليها. على سبيل المثال:

import numpy as np

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

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

# Define visual prompts using bounding boxes and their corresponding class IDs.
# Each box highlights an example of the object you want the model to detect.
visual_prompts = dict(
    bboxes=np.array(
        [
            [221.52, 405.8, 344.98, 857.54],  # Box enclosing person
            [120, 425, 160, 445],  # Box enclosing glasses
        ],
    ),
    cls=np.array(
        [
            0,  # ID to be assigned for person
            1,  # ID to be assigned for glassses
        ]
    ),
)

# Run inference on an image, using the provided visual prompts as guidance
results = model.predict(
    "ultralytics/assets/bus.jpg",
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)

# Show results
results[0].show()

أو يمكنك تقديم أمثلة من صورة مرجعية منفصلة باستخدام refer_image الوسيطة. في هذه الحالة، bboxes و cls في visual_prompts يجب أن يصف الكائنات في الصورة المرجعية، وليس الصورة الهدف التي تقوم بعمل تنبؤات عليها:

ملاحظة

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

import numpy as np

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

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

# Define visual prompts based on a separate reference image
visual_prompts = dict(
    bboxes=np.array([[221.52, 405.8, 344.98, 857.54]]),  # Box enclosing person
    cls=np.array([0]),  # ID to be assigned for person
)

# Run prediction on a different image, using reference image to guide what to look for
results = model.predict(
    "ultralytics/assets/zidane.jpg",  # Target image for detection
    refer_image="ultralytics/assets/bus.jpg",  # Reference image used to get visual prompts
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)

# Show results
results[0].show()

استخدام refer_image يقوم أيضًا بتعيين الفئات بشكل دائم، بحيث يمكنك تشغيل التنبؤات دون الحاجة إلى تقديم نفس المطالبات المرئية مرة أخرى، وتصدير النموذج مع الاحتفاظ بالقدرة على الاستمرار في detect نفس الفئات بعد التصدير:

# After making prediction with `refer_image`, you can run predictions without passing visual_prompts again and still get the same classes back
results = model("ultralytics/assets/bus.jpg")

# Or export it to a different format while retaining the classes
model.export(format="onnx")

يمكنك أيضًا تمرير صور مستهدفة متعددة لتشغيل التنبؤ عليها:

import numpy as np

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

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

# Define visual prompts using bounding boxes and their corresponding class IDs.
# Each box highlights an example of the object you want the model to detect.
visual_prompts = dict(
    bboxes=[
        np.array(
            [
                [221.52, 405.8, 344.98, 857.54],  # Box enclosing person
                [120, 425, 160, 445],  # Box enclosing glasses
            ],
        ),
        np.array([[150, 200, 1150, 700]]),
    ],
    cls=[
        np.array(
            [
                0,  # ID to be assigned for person
                1,  # ID to be assigned for glasses
            ]
        ),
        np.array([0]),
    ],
)

# Run inference on multiple image, using the provided visual prompts as guidance
results = model.predict(
    ["ultralytics/assets/bus.jpg", "ultralytics/assets/zidane.jpg"],
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)

# Show results
results[0].show()

يتضمن YOLOE أيضًا متغيرات غير موجهة تأتي مع مفردات مدمجة. لا تتطلب هذه النماذج أي مطالبات وتعمل مثل نماذج YOLO التقليدية. بدلاً من الاعتماد على الملصقات المقدمة من المستخدم أو الأمثلة المرئية، فإنها تقوم بعملية الـ detect للكائنات من قائمة محددة مسبقًا تضم 4,585 فئة بناءً على مجموعة العلامات المستخدمة بواسطة Recognize Anything Model Plus (RAM++).

from ultralytics import YOLOE

# Initialize a YOLOE model
model = YOLOE("yoloe-11l-seg-pf.pt")

# Run prediction. No prompts required.
results = model.predict("path/to/image.jpg")

# Show results
results[0].show()

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

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

مثال

from ultralytics import YOLOE

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

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

بشكل افتراضي، يتم استخدام مجموعة البيانات المتوفرة لاستخراج التضمينات المرئية لكل فئة.

from ultralytics import YOLOE

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

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

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

from ultralytics import YOLOE

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

# Conduct model validation on the COCO128-seg example dataset
metrics = model.val(data="coco128-seg.yaml", load_vp=True, refer_data="coco.yaml")
from ultralytics import YOLOE

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

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

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

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

مثال

from ultralytics import YOLOE

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

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

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

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

# Show results
results[0].show()

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

إعداد مجموعات البيانات

ملاحظة

يحتاج تدريب نماذج YOLOE الرسمية إلى تعليقات توضيحية segment لبيانات التدريب، إليك البرنامج النصي المقدم من الفريق الرسمي الذي يحول مجموعات البيانات إلى تعليقات توضيحية لـ segment، مدعومًا بواسطة نماذج SAM2.1. أو يمكنك تنزيل الملفات المتوفرة مباشرة Processed Segment Annotations في الجدول التالي المقدم من الفريق الرسمي.

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

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

ملاحظة

Visual Prompt يتم ضبط النماذج بدقة بناءً على التدريب الجيد Text Prompt النماذج.

مثال

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

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

model = YOLOE("yoloe-11l-seg.yaml")
model.train(
    data=data,
    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",
)

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

from ultralytics import YOLOE
from ultralytics.utils.patches import torch_load

det_model = YOLOE("yoloe-11l.yaml")
state = torch_load("yoloe-11l-seg.pt")
det_model.load(state["model"])
det_model.save("yoloe-11l-seg-det.pt")

ابدأ التدريب:

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

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

model = YOLOE("yoloe-11l-seg.pt")
# replace to yoloe-11l-seg-det.pt if converted to detection model
# model = YOLOE("yoloe-11l-seg-det.pt")

# freeze every layer except of the savpe module.
head_index = len(model.model.model) - 1
freeze = list(range(0, head_index))
for name, child in model.model.model[-1].named_children():
    if "savpe" not in name:
        freeze.append(f"{head_index}.{name}")

model.train(
    data=data,
    batch=128,
    epochs=2,
    close_mosaic=2,
    optimizer="AdamW",
    lr0=16e-3,
    warmup_bias_lr=0.0,
    weight_decay=0.025,
    momentum=0.9,
    workers=4,
    trainer=YOLOESegVPTrainer,  # use YOLOEVPTrainer if converted to detection model
    device="0,1,2,3,4,5,6,7",
    freeze=freeze,
)

قم بالتحويل مرة أخرى إلى نموذج التجزئة بعد التدريب. مطلوب فقط إذا قمت بتحويل نموذج التجزئة إلى نموذج الكشف قبل التدريب.

from copy import deepcopy

from ultralytics import YOLOE

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

vp_model = YOLOE("yoloe-11l-vp.pt")
model.model.model[-1].savpe = deepcopy(vp_model.model.model[-1].savpe)
model.eval()
model.save("yoloe-11l-seg.pt")

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

from ultralytics import YOLOE
from ultralytics.utils.patches import torch_load

det_model = YOLOE("yoloe-11l.yaml")
state = torch_load("yoloe-11l-seg.pt")
det_model.load(state["model"])
det_model.save("yoloe-11l-seg-det.pt")
ابدأ التدريب:
from ultralytics import YOLOE

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

model = YOLOE("yoloe-11l-seg.pt")
# replace to yoloe-11l-seg-det.pt if converted to detection model
# model = YOLOE("yoloe-11l-seg-det.pt")

# freeze layers.
head_index = len(model.model.model) - 1
freeze = [str(f) for f in range(0, head_index)]
for name, child in model.model.model[-1].named_children():
    if "cv3" not in name:
        freeze.append(f"{head_index}.{name}")

freeze.extend(
    [
        f"{head_index}.cv3.0.0",
        f"{head_index}.cv3.0.1",
        f"{head_index}.cv3.1.0",
        f"{head_index}.cv3.1.1",
        f"{head_index}.cv3.2.0",
        f"{head_index}.cv3.2.1",
    ]
)

model.train(
    data=data,
    batch=128,
    epochs=1,
    close_mosaic=1,
    optimizer="AdamW",
    lr0=2e-3,
    warmup_bias_lr=0.0,
    weight_decay=0.025,
    momentum=0.9,
    workers=4,
    trainer=YOLOEPEFreeTrainer,
    device="0,1,2,3,4,5,6,7",
    freeze=freeze,
    single_cls=True,  # this is needed
)

قم بالتحويل مرة أخرى إلى نموذج التجزئة بعد التدريب. مطلوب فقط إذا قمت بتحويل نموذج التجزئة إلى نموذج الكشف قبل التدريب.

from copy import deepcopy

from ultralytics import YOLOE

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

pf_model = YOLOE("yoloe-11l-seg-pf.pt")
names = ["object"]
tpe = model.get_text_pe(names)
model.set_classes(names, tpe)
model.model.model[-1].fuse(model.model.pe)

model.model.model[-1].cv3[0][2] = deepcopy(pf_model.model.model[-1].cv3[0][2]).requires_grad_(True)
model.model.model[-1].cv3[1][2] = deepcopy(pf_model.model.model[-1].cv3[1][2]).requires_grad_(True)
model.model.model[-1].cv3[2][2] = deepcopy(pf_model.model.model[-1].cv3[2][2]).requires_grad_(True)
del model.model.pe
model.save("yoloe-11l-seg-pf.pt")

مقارنة أداء YOLOE

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

النموذجCOCO mAP50-95سرعة الاستدلال (T4)المعلماتGFLOPs (640 بكسل)
YOLOv8-L (مجموعة مغلقة)52.9%9.06 ms (110 إطارًا في الثانية)43.7 M165.2 B
YOLO11-L (مجموعة مغلقة)53.5%6.2 ms (130 إطارًا في الثانية)26.2 M86.9 B
YOLOE-L (مفردات مفتوحة)52.6%6.2 ms (130 إطارًا في الثانية)26.2 M86.9 مليار

YOLO11-L و YOLOE-L لهما بنى متطابقة (وحدات المطالبة معطلة في YOLO11-L)، مما يؤدي إلى سرعة استدلال متطابقة وتقديرات GFLOPs مماثلة.

يحقق YOLOE-L نسبة 52.6% mAP، متجاوزًا YOLOv8-L (52.9%) مع معلمات أقل بنسبة 40% تقريبًا (26 مليون مقابل 43.7 مليون). يعالج صورًا بحجم 640 × 640 في 6.2 مللي ثانية (161 إطارًا في الثانية) مقارنة بـ 9.06 مللي ثانية (110 إطارات في الثانية) لـ YOLOv8-L، مما يسلط الضوء على كفاءة YOLO11. والأهم من ذلك، أن وحدات المفردات المفتوحة في YOLOE لا تتكبد أي تكلفة استدلال، مما يدل على تصميم "لا يوجد غذاء مجاني".

بالنسبة لمهام النقل والمهام الصفرية، يتفوق YOLOE: على LVIS، يتحسن YOLOE-small على YOLO-Worldv2 بمقدار +3.5 AP باستخدام موارد تدريب أقل بمقدار 3 أضعاف. تطلب الضبط الدقيق لـ YOLOE-L من LVIS إلى COCO أيضًا وقت تدريب أقل بمقدار 4 أضعاف من YOLOv8-L، مما يؤكد كفاءته وقابليته للتكيف. تحافظ YOLOE أيضًا على سرعة YOLO المميزة، حيث تحقق 300+ FPS على T4 GPU و ~64 FPS على iPhone 12 عبر CoreML، وهو مثالي لعمليات النشر على الحافة والأجهزة المحمولة.

ملاحظة

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

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

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

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

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

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

  • YOLOE مقابل كاشفات المفردات المفتوحة السابقة: اعتمدت نماذج المفردات المفتوحة السابقة (GLIP، OWL-ViT، YOLO-World) بشكل كبير على محولات الرؤية اللغوية، مما أدى إلى استدلال بطيء. يتفوق YOLOE على هذه النماذج في دقة اللقطة الصفرية (على سبيل المثال، +3.5 AP مقابل YOLO-Worldv2) أثناء التشغيل أسرع بـ 1.4 مرة مع موارد تدريب أقل بكثير. بالمقارنة مع الأساليب القائمة على المحولات (مثل GLIP)، يقدم YOLOE استدلالًا أسرع بترتيبات من حيث الحجم، مما يسد بشكل فعال فجوة دقة الكفاءة في الكشف عن المجموعة المفتوحة.

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

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

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

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

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

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

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

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

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

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

نصيحة

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

  • وضع المجموعة المغلقة: لمهام الفئة الثابتة (أقصى سرعة ودقة).
  • الوضع المُوجّه: أضف كائنات جديدة بسرعة عبر مطالبات نصية أو مرئية.
  • وضع المجموعة المفتوحة بدون مطالبات: الكشف العام عبر العديد من الفئات (مثالي للفهرسة والاكتشاف).

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

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

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

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

from ultralytics import YOLO

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

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

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

# Training YOLOE on custom dataset
yolo train model=yoloe-11s-seg.pt data=path/to/data.yaml epochs=50 imgsz=640

# Inference with text prompts
yolo predict model=yoloe-11s-seg.pt source="test_images/street.jpg" classes="person,bus"

مطالبات CLI (classes) يرشد YOLOE بشكل مماثل لـ Python set_classesيتطلب التوجيه المرئي (الاستعلامات المستندة إلى الصور) حاليًا واجهة برمجة تطبيقات python.

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

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

ملاحظة

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

ابدأ

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

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

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

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

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

  5. تشغيل YOLOE:

    • استدلال سريع (بدون مطالبات):
      yolo predict model=yoloe-11s-seg-pf.pt source="image.jpg"
      
    • الكشف المُوجّه (مثال على مطالبة نصية):

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

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

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

نصيحة

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

الاقتباسات والإقرارات

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

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

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

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

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

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

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

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

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

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

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

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

كيف يتعامل YOLOE مع تجزئة المثيل؟

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

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

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

from ultralytics import YOLO

# Initialize a YOLOE model
model = YOLO("yoloe-11s-seg.pt")

# Define custom classes
names = ["person", "bus"]
model.set_classes(names, model.get_text_pe(names))

# Execute prediction on an image
results = model.predict("path/to/image.jpg")

# Show results
results[0].show()


📅 تم إنشاؤه منذ 8 أشهر ✏️ تم تحديثه منذ 25 يومًا
RizwanMunawarglenn-jocherY-T-GLaughing-qonuralpszrShuaiLYUpicsalexwillie.maddox@gmail.comJShengPleonnil

تعليقات