Ultralytics YOLO27: انضم إلى قائمة الانتظار.
Get Started
بناء مجموعات بيانات YOLO عالية الأداء·التدريب والتحسين التكراري·الدرس 9/10
الدرسمبتدئ

الضبط الدقيق الأول وحلقة التكرار

أجرِ ضبطًا دقيقًا لأوزان YOLO26 المدرّبة مسبقًا بالإعدادات الافتراضية، ورتّب الفئات حسب AP مع إحصاء حالات الإخفاق والالتباس، وحوّل أضعف فئة إلى إصلاح مجموعة البيانات التالية.

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

النتيجة

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

المسار السريع
إذا كنت تعرف الأساسيات بالفعل، فإليك النسخة المختصرة.
  1. أجرِ ضبطًا دقيقًا لنقطة تحقق YOLO26 المدرّبة مسبقًا لمهمتك، باستخدام الإعدادات الافتراضية.

  2. رتّب الفئات حسب AP50-95 وأحصِ حالات الإخفاق والالتباس لكل فئة.

  3. تشير الكائنات التي لم يُعثر عليها إلى قصور في التغطية أو وسوم مفقودة؛ وتشير حالات الالتباس إلى تعريفات الفئات.

  4. أصلح البيانات، وأعِد التدريب بالإعدادات والتقسيم نفسيهما، ثم قارن النتائج.

عملي

ابدأ بأوزان مدرّبة مسبقًا#

يتعلم التدريب من الصفر كل سمة من البيانات الجديدة، بينما يضبط التعلم بالنقل شبكةً مدرّبة مسبقًا لتلائم المهمة الجديدة

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

المهمةنقطة تحقق مدرّبة مسبقًاالتدريب المسبق على
الكشفyolo26n.ptCOCO
التجزئةyolo26n-seg.ptCOCO
دلاليyolo26n-sem.ptCityscapes
الوضعيةyolo26n-pose.ptنقاط COCO المفتاحية
OBByolo26n-obb.ptDOTAv1
التصنيفyolo26n-cls.ptImageNet
العمقyolo26n-depth.ptمزيج كبير من بيانات العمق الداخلية والخارجية

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

شغّل خط الأساس#

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

from ultralytics import YOLO
from ultralytics.data.utils import check_det_dataset
from ultralytics.utils import YAML

names = check_det_dataset("coco128.yaml")["names"]  # ⁨تحتفظ مجموعة التدريب بأسماء فئات COCO⁩
YAML.save("practice.yaml", {"path": "datasets/practice", "train": "train.txt", "val": "val.txt", "test": "test.txt", "names": names})

model = YOLO("yolo26n.pt")  # ⁨مدرّب مسبقًا على COCO؛ استخدم نقطة التحقق الخاصة بمهمتك⁩
model.train(data="practice.yaml", epochs=3, imgsz=320)  # ⁨تشغيل فعلي: epochs=100, imgsz=640⁩
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)
                   all         20        143      0.614        0.6      0.664      0.486

يحتوي مجلد التشغيل (runs/detect/train/) الآن على weights/best.pt. لا يستحق النظر في التشغيل الأول سوى ثلاث وسيطات:

الوسيطافتراضيمتى تغيّرها
epochs100أعداد أقل لمجموعات البيانات الصغيرة جدًا؛ و200–300 للمجموعات الكبيرة جدًا
imgsz6401024 أو 1280 إذا كان كثير من الكائنات صغيرًا في الإطار
batch16-1 للتجميع التلقائي؛ وخفّض القيمة عند نفاد الذاكرة

يتناول تدريب نموذجك الأول استدعاء التدريب وسجلّه المباشر بالتفصيل.

رتّب الفئات واطّلع على حالات الإخفاق#

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

from ultralytics import YOLO

model = YOLO("runs/detect/train/weights/best.pt")  # your fine-tuned checkpoint
metrics = model.val(data="practice.yaml", imgsz=320, verbose=False)  # same data YAML and imgsz as training

matrix = metrics.confusion_matrix.matrix  # rows: predicted class, columns: true class; last row = background
for ap, cls in sorted(zip(metrics.box.ap, metrics.box.ap_class_index))[:5]:  # weakest five classes first
    total, missed, correct = matrix[:, cls].sum(), matrix[-1, cls], matrix[cls, cls]
    print(f"{model.names[cls]:>8}  AP50-95={ap:.3f}  {total:2.0f} labeled: {correct:2.0f} found, "
          f"{missed:2.0f} missed, {total - correct - missed:2.0f} called another class")
     car  AP50-95=0.000   4 labeled:  0 found,  4 missed,  0 called another class
    fork  AP50-95=0.000   1 labeled:  0 found,  0 missed,  1 called another class
 handbag  AP50-95=0.025   1 labeled:  1 found,  0 missed,  0 called another class
     cup  AP50-95=0.039  14 labeled:  0 found, 10 missed,  4 called another class
    sink  AP50-95=0.075   1 labeled:  1 found,  0 missed,  0 called another class

يشير كل نوع من الأخطاء إلى إصلاح مختلف لمجموعة البيانات:

  • عدد قليل جدًا من الحالات في مجموعة التحقق (fork وhandbag وsink، حالة واحدة لكل منها): قيمة AP هنا مجرد ضوضاء. لا تتخذ إجراءً بشأن فئة حتى تضم مجموعة التحقق بضع عشرات من حالاتها على الأقل؛ واجمع أولًا مزيدًا من مجموعات التحقق.
  • لم يُكتشف (car في 4 من 4 حالات، وcup في 10 من 14 حالة): لا يرى النموذج أي كائن على الإطلاق. تحقّق من تغطية هذا السيناريو في التدريب وابحث عن الوسوم المفقودة باستخدام suspect_labels.py.
  • صُنّف على أنه ينتمي إلى فئة أخرى (cup في 4 من 14 حالة): تتداخل تعريفات الفئات. افتح تلك الصور، ودقّق التعريفات، واذكر الفئة المشابهة في الدليل.

cup هي النتيجة التي تستدعي اتخاذ إجراء هنا: 14 حالة موسومة، ولم يُعثر على أي منها.

اقرأ مجلد التشغيل بوصفه تغذية راجعة عن البيانات#

مخططات التدريب في Ultralytics Platform لنموذج تجزئة: بطاقات ملخص mAP50 وmAP50-95 والدقة والاستدعاء، وفوقها منحنيات الدقة والاستدعاء وmAP50-95 لكل حقبة

ينشئ كل تشغيل تدريبي هذه الملفات، كما تعرض Ultralytics Platform المنحنيات نفسها مباشرةً أثناء التدريب السحابي:

الملفما الذي يخبرك به عن البيانات
confusion_matrix_normalized.pngالفئات التي يلتبس بعضها ببعض أو التي تُصنّف خطأً على أنها خلفية
BoxPR_curve.pngالدقة والاستدعاء لكل فئة؛ ويشير المنحنى المنخفض إلى فئة ضعيفة
val_batch0_pred.jpgتنبؤات على صور حقيقية من مجموعة التحقق؛ ابحث عن حالات الإخفاق المتكررة
labels.jpgأعداد الفئات وأحجام الصناديق التي دُرّب عليها النموذج
results.pngمنحنيات الخسارة والمقاييس؛ يشير ارتفاع خسارة التحقق مع انخفاض خسارة التدريب إلى فرط التكيّف

يشرح التحقق والتشخيص كل مخطط؛ والسؤال هنا دائمًا هو: ما الذي تفتقده البيانات؟

حلقة العمل التي تبدأ بالبيانات#

خطوات التكرار المعتادة: اختر أضعف فئة لديها عدد كافٍ من الحالات في مجموعة التحقق، وراجع نحو 50 صورة تحتوي عليها، وأصلح البيانات، وأعِد التدريب بالإعدادات والتقسيم نفسيهما، ثم قارن AP لكل فئة. بعد ذلك انتقل إلى الفئة التالية من حيث الضعف.

غيّر شيئًا واحدًا في كل إعادة تدريب

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

متى تلجأ إلى المعلمات الفائقة#

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

بعد اجتياز النموذج acceptance_test.py على مجموعة الاختبار المحجوزة، يتناول كتاب Ultralytics YOLO in Production التصدير والتقديم، ويتناول كلٌّ من مراقبة الحالة والدقة وأتمتة حلقة إعادة التدريب في كتاب Build with Ultralytics Platform حلقة إعادة التدريب.

جرّبه

أجرِ ضبطًا دقيقًا لنقطة تحقق YOLO26 الخاصة بمهمتك باستخدام الإعدادات الافتراضية، ثم شغّل rank_classes.py على best.pt. استبعد الفئات التي لديها عدد قليل جدًا من الحالات في مجموعة التحقق، وراجع نحو 50 صورة لأضعف فئة متبقية، وحدد ما إذا كانت أخطاؤها حالات إخفاق في الاكتشاف أم التباسًا بين الفئات. المُخرج المطلوب: إجراء واحد لتحسين مجموعة البيانات (الجمع أو إعادة الوسم أو إعادة التعريف)، مع عدد الصور التي سيؤثر فيها.

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

  • تم تحديد أضعف فئة لديها عدد كافٍ من الحالات في مجموعة التحقق، مع عدد حالات الإخفاق والالتباس فيها.

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

عرض الحل

من التشغيل التجريبي، الفئة cup هي الفئة التي ينبغي العمل عليها: وُسِمت 14 صورة في مجموعة التحقق، ولم يُعثر على أي صورة، وفاتت 10 صور، وصُنفت 4 صور على أنها فئة أخرى. خطة محددة الحجم:

النتيجةإجراء مجموعة البياناتالحجم
فاتت 10 أكواب من أصل 14تحقّق من تغطية التدريب: احسب صور التدريب التي تتضمن أكوابًا بحسب الكاميرا واليوم؛ واجمع صورًا للأكواب من المجموعات التي لا تضم أيًّا منها40 صورة جديدة تتضمن أكوابًا، موزعة على 4 أيام تصوير بالكاميرا
صُنفت 4 أكواب من أصل 14 على أنها فئة أخرىافتح الصور في val_batch0_pred.jpg ومصفوفة الالتباس؛ إذا صُنفت على أنها wine glass أو bowl، فأضف كلا العنصرين المتشابهين إلى تعريف cupأعِد وسم نحو 30 صورة تدريب وفق القاعدة الجديدة
الفئات ذات المثال الواحدلا تتخذ أي إجراء بعد؛ أضف مجموعات التحقق التي تتضمنهاجولة الجمع التالية

بعد ذلك، أعد التدريب باستخدام epochs وimgsz مع إبقاء التقسيم دون تغيير، ثم أعد تشغيل rank_classes.py وقارن قيمة AP في cup قبل التغيير وبعده. إذا ارتفعت، فكانت البيانات هي عنق الزجاجة؛ وإذا لم ترتفع، فراجع الصور الخمسين التالية قبل تعديل أي معلمة فائقة.

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

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

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