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

تحديد مواصفات مجموعة البيانات

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

تنتهي الفرق التي لا تضع مواصفات بمجموعة من 5,000 صورة نهارية جيدة الإضاءة من كاميرا واحدة، وبنموذج يفشل عند الغسق في أول يوم له في الإنتاج. مواصفات مجموعة البيانات قائمة تسوق للصور: كل سيناريو يجب أن يتعامل معه النموذج، وعدد الصور اللازمة لكل سيناريو، والحالات النادرة التي ينبغي زيادة عيناتها. يستغرق إعدادها ساعة، لكنها تحدد أين يُبذل جهد الجمع.

النتيجة

أنشئ جدول سيناريوهات بحصص تغطي أبعاد التباين والحالات الحدية، وقِس مدى ابتعاد أي مجموعة بيانات موسومة عن أهداف حجم الإنتاج.

المسار السريع
إذا كنت تعرف الأساسيات بالفعل، فإليك النسخة المختصرة.
  1. اكتب السيناريوهات في صفوف: الكاميرا والموقع والوقت والظروف، مع حصة لكل منها.

  2. حدّد الحصص وفقاً لما لا يقل عن 1,500 صورة و10,000 عيّنة موسومة لكل فئة للإنتاج.

  3. خصص صفاً لكل حالة حدية معروفة، وزِد عيناتها.

  4. خصص 0–10% من الصور للخلفيات الخالية من الكائنات.

عملي

موضع المواصفات#

المواصفات هي الجسر بين الهدف والكاميرا. فهي توجه عملية الجمع، وهي الصفحة التي تعود إليها عندما لا يحقق النموذج الأول هدفه:

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

اكتب السيناريوهات في صفوف#

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

السيناريوالكاميراتالمواقعوقت اليومالظروفالحصةملاحظات
رصيف التحميل نهاراًcam-1 إلى cam-4الأرصفة A–C08:00–17:00أي وقت1,200ساعات الذروة
رصيف التحميل ليلاًcam-1 إلى cam-4الأرصفة A–C22:00–04:00أي وقت400إضاءة الصوديوم، عدد أقل من الأشخاص
التحميل تحت المطرcam-2، cam-3الرصيف Bأي وقتالمطر فقط200نادر لكنه حاسم
مكدسةأي وقتأي وقتأي وقتمنصات > 2 مرتفعة150تحجب الأشخاص خلفها
الخلفيةأي وقتأي وقتأي وقترصيف تحميل فارغ150لا كائنات ولا تسميات

السيناريو الذي لا تستطيع تدوينه لن يراه النموذج أثناء التدريب، وسيكون هو السيناريو الذي يفشل فيه الإنتاج.

حدّد حجم المواصفات وفق أهداف الحجم#

تقدم نصائح Ultralytics لتحقيق أفضل نتائج التدريب قواعد إرشادية للإنتاج:

الهدفالتوصية
الصور لكل فئة≥ 1,500
العيّنات الموسومة لكل فئة≥ 10,000
صور الخلفية (بلا تسميات)0–10% من مجموعة البيانات؛ تبلغ النسبة في COCO نحو 1%
التنوعأوقات وفصول وطقس وإضاءة وزوايا ومصادر وكاميرات مختلفة

هذه هي الحدود الدنيا لنموذج إنتاجي. تكفي بضع مئات من الكائنات الموسومة لكل فئة لبدء التجارب، وهذا النموذج الأول هو أسرع وسيلة لمعرفة السيناريوهات التي تحتاج إلى مزيد من البيانات. لمعرفة مدى ابتعاد مجموعة بيانات عن الحد المطلوب، أحصِ محتوياتها. يعمل هذا البرنامج النصي على COCO128، وهي عيّنة من COCO تضم 128 صورة وتُنزّل تلقائياً:

from collections import Counter
from pathlib import Path

from ultralytics.data.utils import IMG_FORMATS, check_det_dataset, img2label_paths

IMAGES_PER_CLASS, INSTANCES_PER_CLASS = 1500, 10_000  # Ultralytics production targets

data = check_det_dataset("coco128.yaml")  # downloads COCO128 (~7 MB) on first run; swap in your data YAML
images = [p for p in Path(data["train"]).rglob("*.*") if p.suffix[1:].lower() in IMG_FORMATS]
image_count, instance_count, background = Counter(), Counter(), 0
for label in map(Path, img2label_paths([str(p) for p in images])):
    classes = [int(r.split()[0]) for r in label.read_text().splitlines() if r.strip()] if label.exists() else []
    instance_count.update(classes)
    image_count.update(set(classes))
    background += not classes

print(f"{len(images)} images, {background} background ({background / len(images):.0%}, target 0-10%)")
print(f"{'class':>12} {'images':>7} {'instances':>10} {'of target':>10}")
ranked = instance_count.most_common()
for cls, n in ranked[:3] + ranked[-3:]:  # best and worst covered classes
    coverage = min(image_count[cls] / IMAGES_PER_CLASS, n / INSTANCES_PER_CLASS)
    print(f"{data['names'][cls]:>12} {image_count[cls]:>7} {n:>10} {coverage:>10.1%}")

never_labeled = [name for i, name in data["names"].items() if i not in instance_count]
print(f"{len(never_labeled)} classes in names with zero labels: {never_labeled[:4]} ...")
128 images, 2 background (2%, target 0-10%)
       class  images  instances  of target
      person      61        254       2.5%
         car      12         46       0.5%
         cup      10         36       0.4%
        bear       1          1       0.0%
      banana       1          1       0.0%
        skis       1          1       0.0%
9 classes in names with zero labels: ['fire hydrant', 'parking meter', 'sheep', 'cow'] ...

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

  • التغطية هي الأقل بين نسبة الصور ونسبة العيّنات، لأن الفئة تحتاج إلى كليهما. حتى الفئة person، وهي الأفضل تغطية، لا تبلغ سوى 2.5% من الحد المطلوب للإنتاج.
  • الفئات ذات العيّنة الواحدة (bear، banana، skis) لا يمكن تعلّمها أو قياسها. في مجموعة بياناتك، اجمع المزيد منها أو احذفها من الإصدار الأول v1.
  • الفئات التي لا تملك أي تسميات مدرجة في YAML، لكن لم تُرسم لها أي تسميات. ومع ذلك، يستهلك النموذج سعة في محاولة التنبؤ بها. احذفها من names أو اجمع بياناتها قبل التدريب.

غطِّ أبعاد التباين#

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

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

البُعدأمثلة
الوقتنهار، ليل، فجر، غسق
الطقسشمس، غائم، مطر، ضباب، ثلج
الإضاءةسطوع، خفوت، وهج، ظلال حادة، مصادر إضاءة مختلطة
الكاميراالطراز، العدسة، ارتفاع التركيب، مجال الرؤية
الجغرافياالمواقع، المدن، البلدان
الأشخاص والمشغّلونالمناوبات، الفرق، الزي الرسمي، معدات الوقاية
متغيرات المنتجوحدات حفظ المخزون (SKU)، تعديلات التغليف، الألوان
حجم الكائنقريب وكبير، متوسط المدى، بعيد وصغير
الحجبواضح، جزئي، شديد، خلف الزجاج
حالة المعداتعدسات متسخة أو ملبدة بالضباب، منصات نقالة تالفة، علامات أرضية بالية

التنوع أهم من الحجم: 1,500 صورة موزعة على هذه الصفوف أفضل من 5,000 صورة ملتقطة بكاميرا واحدة وقت الظهيرة.

خطط للصور الخلفية والحالات الحدّية#

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

كيفية تخزين صورة الخلفية

في تنسيق Ultralytics YOLO، صورة الخلفية هي ببساطة صورة لها ملف تسميات فارغ أو لا تملك ملفًا كهذا أصلًا. يحتسب التدريب كلتيهما في سطر الفحص (… 1200 images, 90 backgrounds, 0 corrupt). تحقّق من مطابقة هذا العدد لهدفك البالغ 0–10% قبل الحقبة الأولى.

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

التكرار الطبيعي يحرم الحالات الطرفية من العينات

إذا أظهر إطار واحد من كل 200 شخصًا خلف منصات نقالة مكدسة، فستضم مجموعة البيانات المجمّعة وفق التكرار الطبيعي نحو 7 إطارات من هذا النوع من أصل 1,500، وهو عدد قليل جدًا للتعلم منه. زِد أخذ عينات الحالات الطرفية عمدًا: ينبغي أن تكون حصصها أكبر بكثير من نسبتها في اللقطات الفعلية.

ليس من الضروري أن تكون المواصفات مكتملة

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

جرّبه

صغ جدول سيناريوهات لمشروعك يتضمن 5–10 صفوف، لكل منها حصة رقمية، بالإضافة إلى صف للخلفية وصف لكل حالة حدّية معروفة. راجعه مع شخص يعمل في موقع النشر، وأضف كل سيناريو يذكره. ثم شغّل volume_gap.py على أي بيانات موسومة لديك مسبقًا (أو COCO128)، وسجّل الفئات الأفضل والأسوأ من حيث التغطية. المخرج المطلوب: spec.md مع الجدول وأرقام التغطية.

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

  • تغطي الخطة 5 أبعاد تنوع على الأقل من أصل 10، أو تستبعدها صراحةً.

  • يبلغ مجموع الحصص أهداف الصور والحالات لكل فئة على الأقل، أو يُوثّق النقص بوصفه استثناءً في الإصدار الأول.

عرض الحل

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

الفئةالحالات لكل صورةالصور المطلوبة للوصول إلى 10,000 حالةالصور المطلوبة للحد الأدنى البالغ 1,500 صورةالخطة
car3.0≈ 3,3001,5003,300 صورة
truck0.5≈ 20,0001,500التقاط موجّه عند مدخل التحميل، حيث تكثر الشاحنات بمقدار 10 مرات

تغطي اللقطات الاعتيادية السيارات. أما الشاحنات فتتطلب 20,000 صورة عشوائية، لذا تضيف المواصفات صفًا مخصصًا لسيناريو (مدخل التحميل، أيام الأسبوع من 06:00 إلى 10:00) بدلًا من جمع ستة أضعاف كل شيء. أضف صفًا للخلفية بنحو 5% (موقف فارغ ليلًا) وصفوفًا للحالات الحدّية، مثل تغطية الثلج والشاحنات الظاهرة جزئيًا خارج الإطار.

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

بعد تدوين المواصفات، يجمع الدرس التالي صورًا تفي بها فعليًا.

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