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

ابدأ بهدف العمل

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

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

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

النتيجة

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

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

  2. اختر الأبسط من مهام الرؤية السبع للإجابة عن الهدف.

  3. حدّد من 3 إلى 10 فئات، واكتب جملة واحدة لكل فئة تذكر فيها شيئًا مشابهًا في الشكل لكنها لا تشملُه.

  4. اكتب اختبار القبول: المقياس والعتبة ومجموعة بيانات محجوبة لم تُشاهد من قبل. ثم شغّله برمجيًا.

  5. أدرج ما لن يتعامل معه الإصدار الأول.

عملي

وثيقة الهدف من صفحة واحدة#

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

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

الصفالسؤال الذي يجيب عنهمثال المستودع
هدف العملما التغيير المطلوب للعمل، ومتى؟خفض حوادث الاقتراب الخطر عند أبواب التحميل بنسبة 30% خلال ستة أشهر.
مهمة الرؤيةما مخرجات النموذج؟كشف الكائنات: مربعات حول الرافعات الشوكية والأشخاص.
الفئاتما الذي يحصل على تسمية تحديدًا؟forklift، person، pallet؛ وكل ما عداها يُعد خلفية.
اختبار القبولما القيمة التي تعني «جاهز للنشر»؟استدعاء person ≥ 0.95 عند دقة ≥ 0.85 على 500 إطار من كاميرات لم تُستخدم في التدريب.
خارج النطاقما الذي لن يعد به الإصدار الأول؟أرصفة تحميل حالكة الظلام، وأشخاص محجوبون بالكامل خلف الرفوف، ورافعات يدوية للمنصات.

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

اختر أبسط مهمة تجيب عن السؤال#

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

تحدد المهمة ما يرسمه المعلّقون، وهذا بدوره يحدد معظم ميزانية وضع التسميات. اتبع شجرة القرار هذه، وتوقف عند أول مهمة تجيب عن سؤال العمل:

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

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

أنواع التعليقات التوضيحية للصور على مجموعة من الموز: يكشف التصنيف عن وجوده، ويضيف الكشف الموقع والعدد، ويُظهر التقسيم الدلالي البكسلات التي تمثل الموز، ويضيف تقسيم الكائنات حجماً وشكلاً لكل موزة

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

التجزئة افتراضيًا تستنزف الميزانية

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

اكتب فئات يستطيع المعلّق تطبيقها#

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

  • forklift: شاحنة رفع آلية، بما في ذلك شوكتاها وساريتها. لا تشمل رافعات المنصات اليدوية.
  • person: أي إنسان، حتى إن كان ظاهراً جزئياً أو جالساً أو داخل مقصورة مركبة. لا تشمل الانعكاسات والملصقات.
  • pallet: منصة شحن خشبية أو بلاستيكية، محمّلة أو فارغة. لا تشمل الصناديق المكدسة من دون قاعدة منصة.

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

إذا لم تستطع تدوين التعريف، فلن يستطيع العاملون وضع التسميات

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

حوّل المقياس إلى اختبار قبول قابل للتنفيذ#

اختر المقياس الذي يتوافق مع تكلفة الخطأ:

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

يشرح دليل مقاييس أداء YOLO كل مقياس. ثم اكتب الاختبار على هيئة تعليمات برمجية، كي لا يعود السؤال «هل الأداء جيد بما يكفي؟» موضع نقاش. يعمل هذا البرنامج النصي اليوم بنموذج مدرّب مسبقاً على مجموعة العرض COCO8، ثم يعمل لاحقاً باستخدام نقطة تحقق خاصة بك ومجموعة اختبار محجوبة:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # later: your fine-tuned runs/detect/train/weights/best.pt
metrics = model.val(data="coco8.yaml", classes=[0], verbose=False)  # 0 = person; later: your holdout YAML

precision, recall = metrics.box.mp, metrics.box.mr
print(f"person: precision={precision:.2f} recall={recall:.2f}")
print("PASS" if recall >= 0.95 and precision >= 0.85 else "FAIL: below the acceptance test")
                   all          4         10      0.939        0.8      0.848      0.387
person: precision=0.94 recall=0.80
FAIL: below the acceptance test

ما الذي يخبرك به كل سطر:

  • يقيّم classes=[0] الفئة person فقط، لذا لا يمكن للفئات الأخرى رفع النتيجة. استخدم معرّف فئة السلامة الخاص بك.
  • يُظهر صف أداة التحقق 4 صور تضم 10 أشخاص موسومين. يمثّل mp وmr الدقة والاستدعاء عند عتبة الثقة التي تحقق أفضل توازن بينهما (أقصى F1).
  • يعثر نموذج COCO المدرّب مسبقاً على 8 من أصل 10 أشخاص، لذا يبلغ الاستدعاء 0.80: نتيجة دقيقة، لكنها غير آمنة بما يكفي. إن ظهور نتيجة FAIL يعني أن الاختبار يؤدي وظيفته. في هذه الدورة، تعني نتيجة FAIL الرجوع إلى البيانات، لا إلى المعلمات الفائقة.
شرط مجموعة الحجز لا يقل أهمية عن الرقم

الاختبار المستخرج من الكاميرات والأيام نفسها المستخدمة في التدريب يقيس الحفظ، لا الجاهزية. حدّد مجموعة الحجز في الهدف («كاميرات لم تُستخدم في التدريب»، «أسبوعا اللقطات الأخيران»)، وأنشئها باستخدام قسّم مجموعة البيانات على نحو صحيح.

دوّن ما لن يفعله الإصدار الأول v1#

لا يوجد نموذج مثالي، لذا حدّد مسبقاً حالات الإخفاق المقبولة: الظروف التي لن تقدم وعوداً بشأنها (الضباب الكثيف، الظلام الدامس)، والأشياء المتشابهة التي تقبل الالتباس بينها، والفئات النادرة المؤجلة إلى الإصدار الثاني v2. يمنع هذا الصف الحكم على نموذج يحقق هدفه وفق معيار 100% غير مكتوب، ويوضح لفريق جمع البيانات أين لا ينبغي إنفاق الجهد في الوقت الحالي.

جرّبه

املأ جدول الأهداف ذي الصفوف الخمسة لمشروعك وأرسله إلى الشخص المسؤول عن نتيجة العمل. راجع كل صف يعترض عليه. ثم انسخ acceptance_test.py، واضبط معرّف الفئة والعتبات، وشغّله على النموذج المدرّب مسبقاً كي يصبح الاختبار جاهزاً قبل وجود مجموعة البيانات. المُخرَج المطلوب: objective.md وacceptance_test.py يعمل.

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

  • لكل فئة تعريف من جملة واحدة وشيء واحد على الأقل مشابه في المظهر ومذكور بالاسم لاستثنائه.

  • يعمل acceptance_test.py ويطبع PASS أو FAIL لمقياس وعتبة ومجموعة اختبار محجوبة محددة بالاسم.

عرض الحل

مثال عملي لهدف مشروع مختلف: سلسلة متاجر بقالة تكشف الخانات الفارغة على الرفوف:

الصفالإجابة
هدف العملخفض دقائق نفاد المخزون للمنتجات الـ200 الأعلى مبيعاً بنسبة 25% خلال ربع سنة.
مهمة الرؤيةالكشف. يحتاج المتجر إلى موقع كل خانة فارغة، لا إلى محيطها، لذا تتفوق الصناديق على المضلعات.
الفئاتgap: خانة رف فارغة بعرض منتج واحد على الأقل؛ لا تشمل الخانات التي يحجبها متسوق أو عربة. price_tag: بطاقة حافة الرف؛ لا تشمل الملصقات الترويجية.
اختبار القبولاستدعاء gap ≥ 0.90 عند دقة ≥ 0.80، على 400 صورة من 5 متاجر لم تُستخدم في التدريب.
خارج النطاقأبواب المجمّدات التي تعاني من الوهج، وعروض نهايات الممرات، وقسم المنتجات الطازجة.

يأتي الاستدعاء أولاً لأن تفويت خانة فارغة يكلف عملية بيع، بينما يكلف الإنذار الكاذب أحد الموظفين جولة قصيرة. يتغير acceptance_test.py في ثلاثة مواضع فقط: data="holdout_stores.yaml" (المتاجر الخمسة غير المرئية)، وclasses=[0] (أصبح 0 هو gap)، والعتبات recall >= 0.90 and precision >= 0.80.

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

بعد ذلك، حوّل الهدف إلى مواصفات مجموعة بيانات تحدد الصور المطلوبة وعدد كل نوع منها.

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