Ultralytics YOLO27: انضم إلى قائمة الانتظار.
Get Started
الدرسمبتدئ

أفضل ممارسات التعليق التوضيحي

اكتب دليلًا لوضع الوسوم، واختر أداة، وتجنّب الأخطاء العشرة التي تقلّل الدقة بصمت، وقِس اتفاق المعلّقين باستخدام نص برمجي قبل التوسّع.

تحدّد جودة الوسوم الحد الأقصى لجودة النموذج. فعندما يفسّر عشرة معلّقين كلمة "منصة نقالة" بطرق مختلفة قليلًا، تنتج مجموعة بيانات تعلّم النموذج التفسيرات العشرة كلها في آن واحد، ولا يستطيع أي قدر من التدريب إزالة هذا التناقض. يحافظ دليل مكتوب وجولة معايرة مقيسة وقائمة موجزة بالأخطاء المعروفة على اتساق الوسوم، سواء وضع شخص واحد وسومًا لـ500 صورة أم وضع فريق وسومًا لـ50,000 صورة.

النتيجة

اكتب دليلًا لوضع الوسوم، وقِس الاتفاق بين معلّقين اثنين باستخدام نص برمجي، وحوّل كل اختلاف إلى قاعدة مكتوبة.

المسار السريع
إذا كنت تعرف الأساسيات بالفعل، فإليك النسخة المختصرة.
  1. اكتب تعريفات الفئات وقواعد الرسم وقاعدة للاحتجاب قبل بدء وضع الوسوم.

  2. ضع وسومًا لكل كائن ذي صلة في كل صورة، مع مربعات إحاطة محكمة حول الأجزاء المرئية.

  3. قِس الاتفاق على عينة مشتركة؛ ولا تتوسع إلا إذا بلغ 90% أو أكثر.

  4. راجع يدويًا كل وسم يقترحه النموذج؛ ولا تقبله تلقائيًا أبدًا.

عملي

اختر أداة التعليق التوضيحي#

تعتمد الأداة المناسبة على المهمة والفريق ومكان إجراء التدريب:

الأداةالأنسب لـملاحظات
Ultralytics Platformمهام YOLO السبع: محرّر للمربعات والمضلعات والأقنعة الدلالية والنقاط المفتاحية والمربعات المدوّرة وفئات الصور، إضافةً إلى خرائط العمق المرفوعة؛ وتعليق توضيحي ذكي باستخدام SAMالوسوم ومخططات مجموعة البيانات والتدريب في مكان واحد؛ دون خطوة تصدير
CVATالفرق الكبيرة والفيديو وسير عمل المراجعة المعقداستضافة ذاتية أو سحابية
Label Studioالمشاريع متعددة الوسائط (صور + نص + صوت)إعداد مرن، مع منحنى تعلّم أكثر صعوبة
Labelmeوضع وسوم المضلعات للفرق الصغيرةتطبيق سطح مكتب بسيط
LabelImgنماذج أولية سريعة تقتصر على المربعاتخفيف؛ ومستودعه مؤرشف

في Ultralytics Platform، يعمل التعليق التوضيحي الذكي باستخدام SAM 2.1 وSAM 3 وSAM 3.1 على مجموعات بيانات الكشف والتجزئة والتجزئة الدلالية وOBB. أيًا كان اختيارك، تأكد من أنه يصدّر تنسيق YOLO الذي تتطلبه مهمتك؛ إذ يتناول إعداد مجموعة بيانات مخصصة تنسيق الوسوم وتحويلها.

أنواع الوسوم السبعة#

مهام Ultralytics YOLO جنبًا إلى جنب: التصنيف والكشف والتجزئة والتجزئة الدلالية وتقدير الوضعية وOBB والعمق

نوع الوسمما ترسمهالمهمة
وسم الفئةتسمية واحدة لكل صورةالتصنيف
مربع إحاطةمستطيل غير مائل لكل كائنالكشف
مضلعمحيط كل كائن في الصورةتجزئة الكائنات
قناع كثيففئة لكل بكسلالتجزئة الدلالية
نقاط مفتاحيةنقاط مسماة، مثل المفاصلالوضعية
مربع موجّهمستطيل مائل لكل كائنOBB
خريطة عمقلا شيء: خريطة مسافة لكل بكسل من مستشعر عمق، مقترنة بكل صورةتقدير العمق

اكتب دليل وضع الوسوم أولًا#

قبل أن يرسم أي شخص مربعًا، اكتب دليلًا يتضمن خمسة أقسام:

  1. تعريفات الفئات: فقرة واحدة لكل فئة، تتضمن أمثلة إيجابية، وأشياء مشابهة لا تنتمي إلى الفئة، وحالات حدّية.
  2. قواعد الرسم: مربعات محكمة حول الكائن المرئي؛ ومضلعات تتبع المحيط المرئي.
  3. قواعد الاحتجاب والحجم: حدّ واحد للكائنات الجزئية ("ضع وسمًا إذا أمكنك تحديد الفئة") وحدّ واحد للكائنات الصغيرة جدًا ("ضع وسومًا للأشخاص الذين يزيد ارتفاعهم على 10 بكسلات")، ويُطبّقان في كل الحالات.
  4. سجل الحالات الملتبسة: كل سؤال من قبيل "ماذا عن هذه الحالة؟" مع الإجابة المتفق عليها ولقطة شاشة.
  5. ما يجب تجاهله: كل ما لا يستحق وضع وسم له في هذه المهمة.

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

وضع التسميات جزئيًا يفسد التدريب بصمت

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

عشرة أخطاء تقلّل الدقة#

الأخطاء الأكثر شيوعًا التي يرصدها فريق التعليق التوضيحي في Ultralytics، موضّحة بصور للرافعات الشوكية والأشخاص والمنصات النقالة (مقتبسة بتصرّف من عرض أعدّه Alexis Schutzger). استخدمها بوصفها أولى الحالات في دليلك.

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

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

2. مربعات غير دقيقة. يجب أن تحيط المربعات بالكائن بإحكام. يقطع هذا المربع أضواء الحاجز العلوي؛ فالمربع الذي يقتطع جزءًا من الكائن أو يترك هامشًا من الأرض يعلّم النموذج امتدادًا خاطئًا.

خطأ في التعليق التوضيحي: مربع غير دقيق للرافعة الشوكية تقطع حافته العلوية أضواء الحاجز العلوي بدلًا من إحاطة الكائن كاملًا

3. عدم اتساق القواعد مع الكائنات المتشابهة. يتضمن المربع الأيسر الشوكتين، بينما يستبعدهما المربع الأيمن. يتلقى النموذج إجابتين عن السؤال نفسه، لذا دوّن القاعدة: هل تُدرج الشوكتان أم تُستبعدان؟

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

4. وسوم مفقودة. يقف شخصان بجوار الرافعة الشوكية، لكن أُحيط أحدهما فقط بمربع. ويتحوّل الشخص غير الموسوم إلى درس مفاده أن "الأشخاص جزء من الخلفية".

خطأ في التعليق التوضيحي: أُحيطت الرافعة الشوكية وأحد العاملين الزراعيين بمربعات، بينما تُرك العامل الزراعي الثاني بلا وسم

5. الفئة الخاطئة. تحقّق من الفئة، لا من المربع فحسب. فالمربع الصحيح حول رافعة شوكية مصنّف بـ person يفسد الفئتين، وغالبًا ما يكون السبب خطأً في استخدام اختصار لوحة المفاتيح.

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

6. وسوم فارغة أو شاردة. يحتاج كل وسم إلى كائن حقيقي وفئة حقيقية. تؤدي نقرة شاردة إلى إنشاء مربع شبه فارغ مثل المربع الموجود في الزاوية هنا، وقد يُصدَّر المربع المحفوظ من دون فئة على أنه None أو الفئة 0. أصلح هذه الوسوم أو احذفها.

خطأ في الوسم: وسم شارد شبه فارغ لرافعة شوكية في زاوية الصورة بجوار مربع الرافعة الشوكية الحقيقي

7. المربعات المكررة. كائن واحد، ومربع واحد. يؤدي وجود مربعين متداخلين حول الرافعة الشوكية نفسها إلى تضخيم عدد النماذج، وتعليم النموذج توقّع كائنات مكررة.

خطأ في الوسم: مربعان مكرران ومتداخلان حول رافعة شوكية واحدة

8. إرشادات غير واضحة. من دون قاعدة مكتوبة، يرتجل القائمون بالوسم: هنا وضع أحدهم مربعًا حول رأس السائق فقط وأسند إليه الفئة forklift. فهل السائق جزء من الرافعة الشوكية أم أنه person منفصل؟ أجب عن ذلك مرة واحدة في الدليل.

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

9. الصور الشاذة. استبعد الصور التي لا تتوافق مع بيئة النشر. فصورة لأفق مدينة ضمن مجموعة بيانات للرافعات الشوكية لا تقدّم أي فائدة وتضعف بقية البيانات.

خطأ في الوسم: صورة لناطحة سحاب أُدرجت ضمن مجموعة بيانات رافعات شوكية باعتبارها صورة شاذة

10. الالتباس الناجم عن زيادة البيانات. عندما تستطيع عملية الاقتصاص إزالة السمة التي تميّز فئةً ما، تصبح فئتان متطابقتين. قصّ رمز الزاوية من آس القلوب يجعله شبيهًا بالبطاقات المصنفة unknown. يشرح استخدام زيادة البيانات بحذر طريقة معالجة ذلك.

خطأ في الوسم: أوراق لعب يظهر فيها آس القلوب، بعد اقتصاص رمز الزاوية منه، شبيهًا بالبطاقات المصنفة على أنها غير معروفة

قِس التوافق، ولا تخمّنه#

تزوّد جولة المعايرة اثنين من القائمين بالوسم بالصور نفسها، ثم تقارن بين تسمياتهما كائنًا كائنًا. يتفق وسمان عندما ينتميان إلى الفئة نفسها ويتداخلان بمقدار IoU لا يقل عن 0.5. يحسب هذا السكربت النتيجة على صور التحقق في COCO8. ولتشغيله دون الحاجة إلى شخص ثانٍ، يتولى نموذج مدرّب مسبقًا دور الموسِّم B؛ أما عند العمل مع فريق حقيقي، فاقرأ مربعات B من ملفات الوسوم الخاصة بأعضاء الفريق:

from pathlib import Path

import torch

from ultralytics import YOLO
from ultralytics.data.utils import check_det_dataset, img2label_paths
from ultralytics.utils.metrics import box_iou
from ultralytics.utils.ops import xywh2xyxy

data = check_det_dataset("coco8.yaml")
model = YOLO("yolo26n.pt")  # stands in for a second annotator; compare two label folders the same way
names = data["names"]

matched = total = 0
for image in sorted(Path(data["val"]).glob("*.jpg")):
    rows = [r.split() for r in Path(img2label_paths([str(image)])[0]).read_text().splitlines() if r.strip()]
    a_cls = torch.tensor([int(r[0]) for r in rows])  # annotator A: the dataset labels
    a_box = xywh2xyxy(torch.tensor([[float(v) for v in r[1:]] for r in rows]))
    b = model(image, conf=0.5, verbose=False)[0].boxes  # annotator B: confident model proposals
    iou = box_iou(a_box, b.xyxyn)
    used = set()
    for i in range(len(rows)):  # pair each A object with the best unused same-class B box at IoU >= 0.5
        ok = [j for j in range(len(b)) if j not in used and b.cls[j] == a_cls[i] and iou[i, j] >= 0.5]
        if ok:
            used.add(max(ok, key=lambda j: iou[i, j]))
        else:
            print(f"{image.name}: {names[int(a_cls[i])]} labeled by A only")
    for j in set(range(len(b))) - used:
        print(f"{image.name}: {names[int(b.cls[j])]} labeled by B only")
    matched += len(used)
    total += len(rows) + len(b) - len(used)

print(f"agreement: {matched}/{total} objects = {matched / total:.0%}")
000000000049.jpg: person labeled by A only
000000000049.jpg: person labeled by A only
000000000049.jpg: potted plant labeled by A only
000000000049.jpg: person labeled by A only
000000000049.jpg: person labeled by A only
000000000049.jpg: person labeled by A only
000000000061.jpg: person labeled by A only
000000000061.jpg: elephant labeled by A only
000000000061.jpg: person labeled by A only
agreement: 8/17 objects = 47%

طريقة قراءته:

  • الدرجة هي عدد الكائنات المتطابقة مقسومًا على عدد كل الكائنات التي وضع أيٌّ من القائمين بالوسم مربعات حولها: 8 من أصل 17.
  • تتركز حالات الاختلاف. تقع الحالات التسع كلها في صورتين، ومعظمها لأشخاص لا يشغلون سوى أقل بكثير من 1% من الإطار. ليست هذه تسعة أخطاء عشوائية، بل غياب قاعدة واحدة: هل نضع وسومًا للأشخاص البعيدين؟
  • الحل هو إضافة بند إلى الدليل، مثل: «ضع وسمًا لكل شخص لا يقل ارتفاعه عن 10 بكسلات عند دقة 640 بكسل». يعيد القائمان بالوسم وضع الوسوم على هاتين الصورتين، ثم تُقاس الدرجة مجددًا.

قاعدة اتخاذ القرار: لا توسّع نطاق وضع الوسوم إلا عندما يصل التوافق إلى 90%. فما دون ذلك، يضاعف كل قائم جديد بالوسم حالات عدم الاتساق.

استخدم الوسم الذكي لتسريع العمل#

يتيح الوسم الذكي لنموذج YOLO أو SAM اقتراح وسوم يقبلها شخص أو يصححها، ما قد يضاعف الإنتاجية عدة مرات. ابدأ على مراحل: درّب النموذج على دفعة تمت مراجعتها، واستخدمه لاقتراح وسوم للدفعة التالية، ثم راجعها وأعد التدريب. هذه هي حلقة التعلّم النشط، ويشرح الوسم الذكي ووضع الوسوم على دفعات خطوات تنفيذها على Ultralytics Platform.

قبول المقترحات تلقائيًا يرسّخ أخطاء النموذج في البيانات

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

تحقّق بصريًا#

ينشئ كل تشغيل لتدريب Ultralytics الملفين labels.jpg وtrain_batch*.jpg في مجلد التشغيل. يعرض الأول مخططات لأعداد الفئات ومواضع المربعات وأحجامها؛ أما الآخران فيعرضان صور تدريب حقيقية مرسومة عليها وسومها. افتحهما قبل انتهاء الحقبة الأولى. تلتقط العين ما لا تستطيع المقاييس رصده: مربعات مرسومة حول الظلال، ومعرّفات فئات متبادلة، ومضلعات غير مغلقة.

جرّبه

اكتب دليلًا من صفحة واحدة لوضع الوسوم على فئاتك، يتضمن الأقسام الخمسة أعلاه ويستند إلى الأخطاء العشرة. أعطِ الشخصين الصور العشرين إلى الخمسين نفسها، واطلب منهما وضع الوسوم بشكل مستقل، ثم عدّل agreement.py لمقارنة مجلدي الوسوم. المخرجات المطلوبة: الدليل، ودرجة التوافق، وقاعدة جديدة لكل مجموعة من حالات الاختلاف.

متى يُعدّ مكتملًا
تكون قد أتممت الدرس عند تحقق جميع الشروط التالية.
  • يعرّف الدليل كل فئة، ويحدّد قواعد الرسم والحجب والحجم.

  • وضع قائمان بالوسم تسميات للصور نفسها، وقيس التوافق باستخدام برنامج نصي، لا بالتقدير.

  • تحولت كل مجموعة من حالات الاختلاف إلى قاعدة مكتوبة، وبلغ التوافق 90% على الأقل بعد إعادة وضع الوسوم.

عرض الحل

تتحول حالات الاختلاف في COCO8 إلى بنود في الدليل مثل هذه:

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

لمقارنة شخصين بدلًا من مقارنة شخص ونموذج، اقرأ صفوف القائم بالوسم B من مجلد الوسوم الثاني، بالطريقة نفسها التي يقرأ بها البرنامج النصي صفوف A (Path("labels_b", image.stem + ".txt"))، وأنشئ منها b_cls وb_box باستخدام السطرين نفسيهما، واستخدمهما في المواضع التي يقرأ فيها البرنامج النصي b.cls وb.xyxyn. أعد التشغيل بعد إعادة وضع الوسوم؛ وتنتهي الجولة عندما تتجاوز الدرجة 90%.

ما الخطوة التالية

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

سجّل الدخول لحفظ التقدم