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

درّب نموذجك الأول

اضبط YOLO26 بدقة على مجموعة بياناتك باستدعاء واحد، وتابع سجل التدريب المباشر سطرًا سطرًا، واعثر على best.pt والمخططات المهمة في مجلد التشغيل.

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

في هذا الدرس، ستقوم بـالتدريب على مجموعة بيانات الأقراص، وتراقب ارتفاع mAP50-95 من قيمة أساسية تقترب من الصفر إلى 0.66 خلال عشر حقب، وتتعلم كيف تحدد مبكرًا من السجل ما إذا كان التشغيل سليمًا أم يهدر وقتك.

النتيجة

يمكنك بدء تشغيل للضبط الدقيق لـ YOLO26، والحكم من سجل كل حقبة على سلامة التشغيل، والعثور على نقطة التحقق والمخططات المطلوبة في مجلد التشغيل.

المسار السريع
إذا كنت تعرف الأساسيات بالفعل، فإليك النسخة المختصرة.
  1. YOLO('yolo26n.pt').train(data='my_dataset/data.yaml', epochs=10, imgsz=320, name='pills_v1') على CPU.

  2. على GPU، استخدم الإعدادات الافتراضية بدلًا من ذلك: epochs=100، imgsz=640.

  3. السجل السليم: تنخفض الخسائر، وترتفع mAP50-95، ويظل كل من الدقة والاستدعاء متوازنين.

  4. افتح train_batch0.jpg أولًا؛ واستخدم weights/best.pt لكل ما بعد ذلك.

عملي

مثال تطبيقي: تدريب كاشف الأقراص#

مربع حوار التدريب في منصة Ultralytics، علامة التبويب السحابية، ويتضمن خيارات النموذج ومجموعة البيانات والحقب وGPU لتشغيل تدريب سحابي

يطلب مربع حوار «تدريب نموذج جديد» في منصة Ultralytics الخيارات نفسها الواردة في الشيفرة أدناه — النموذج الأساسي ومجموعة البيانات والحقب وحجم الصورة — ثم ينفذها إما على GPU سحابي أو ينشئ الأمر المحلي المطابق. تُنجز هذه الإعدادات في نحو دقيقة على CPU في حاسوب محمول:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # ⁨مدرَّب مسبقًا على COCO⁩
results = model.train(data="my_dataset/data.yaml", epochs=10, imgsz=320, name="pills_v1")
print(results.save_dir)

CLI وPython متكافئان. يُبقي epochs=10 وimgsz=320 تشغيلات CPU قصيرة؛ أما عند استخدام GPU، فاحذفهما واعتمد الإعدادات الافتراضية (epochs=100، imgsz=640)، لأن زيادة عدد الحقب والبكسلات مفيدة دائمًا تقريبًا. ينفذ وضع التدريب هذه الحلقة نيابةً عنك:

اقرأ السجل سطرًا سطرًا#

مخرجات فعلية، مقتطعة لتعرض أول حقبتين وآخر حقبتين:

optimizer: AdamW(lr=0.002, momentum=0.9) with parameter groups ...
Using 92 train, 23 val images for fraction=1.0 at imgsz=320
      Epoch    GPU_mem   box_loss   cls_loss    l1_loss  Instances       Size
       1/10         0G      1.818      3.899   0.008805        206        320: 100% 6/6 3.3s
                   all         23        399      0.957      0.805      0.927      0.548
       2/10         0G      1.434      3.291   0.006285        208        320: 100% 6/6 4.4s
                   all         23        399      0.953      0.911      0.964      0.592
       ...
       9/10         0G      1.121      1.103   0.005143        194        320: 100% 6/6 5.0s
                   all         23        399      0.949      0.957      0.975      0.656
      10/10         0G      1.174      1.125   0.005068        212        320: 100% 6/6 5.1s
                   all         23        399       0.97      0.957      0.977      0.659
10 epochs completed in 0.015 hours.
  • optimizer: AdamW(lr=0.002 ...): اختار optimizer=auto الافتراضي المحسِّن ومعدل التعلّم نيابةً عنك.
  • Using 92 train, 23 val images: تأكد من مطابقة هذه القيم لمجموعة البيانات لديك. يشير العدد الأقل إلى صور تم تخطيها.
  • GPU_mem 0G: يجري التدريب على CPU. على GPU، ستظهر هنا الذاكرة المستخدمة؛ ويعني 0G على جهاز مزود بـGPU أنه غير مستخدم.
  • السطر الأول لكل حقبة: الخسائر الثلاث لمجموعة التدريب، بالإضافة إلى عدد الكائنات الموسومة في الدفعة الأخيرة (Instances) وحجم الصورة.
  • سطر all لكل حقبة: الدقة والاستدعاء وmAP50 وmAP50-95 على مجموعة التحقق. هذا هو السطر الذي ينبغي مراقبته.
العمودالمعنىالاتجاه الصحي
box_lossمدى بُعد الصناديق المتوقعة عن الصناديق الموسومةتنخفض، ثم تستقر
cls_lossمدى خطأ درجات الفئاتتنخفض، ثم تستقر
l1_lossخطأ إحداثيات الصندوق المباشر في YOLO26تنخفض
P, Rالدقة والاستدعاء على مجموعة التحققترتفع وتظل متوازنة
mAP50, mAP50-95جودة الكشف؛ كما تكافئ mAP50-95 الصناديق المحكمةترتفع، ثم تبلغ مستوى مستقرًا

هنا، ارتفعت mAP50-95 من القيمة الأساسية 0.0002 إلى 0.548 بعد حقبة واحدة، ثم إلى 0.659 بعد عشر حقب. وانخفضت الدقة إلى 0.80 في الحقبة 4 ثم تعافت: فالنتائج متقلبة بين الحقب عند التحقق على 23 صورة، لذا قيّم الاتجاه العام لا سطرًا واحدًا. قواعد اتخاذ القرار أثناء التشغيل:

  • تنخفض الخسائر وترتفع mAP: اترك التشغيل مستمرًا.
  • الخسائر ثابتة منذ الحقبة 1: أوقف التشغيل باستخدام Ctrl+C وتحقق من التسميات وملف YAML.
  • الدقة أعلى بكثير من الاستدعاء: النموذج متحفظ ويفوّت الكائنات. الاستدعاء أعلى بكثير من الدقة: يكتشف النموذج أشياء غير موجودة.
  • mAP ثابتة لحقب عديدة: لن تساعد زيادة عدد الحقب؛ غيّر البيانات أو imgsz.

الخسائر الثلاث هي مكونات دالة الخسارة في YOLO26؛ ويشرح دليل مقاييس الأداء كل مقياس بالتفصيل.

اعثر على الملفات التي أنشأها التشغيل#

تُحفظ جميع الملفات في runs/detect/pills_v1/:

الملفالغرض
weights/best.ptنقطة التحقق ذات أفضل ملاءمة على بيانات التحقق عبر الحقب؛ استخدمها للاستدلال والتصدير
weights/last.ptأحدث نقطة تحقق؛ تُستخدم لاستئناف تشغيل متوقف
args.yamlكل وسيطات التشغيل، لإعادة إنتاجه
results.csv, results.pngالخسائر والمقاييس لكل حقبة، على هيئة بيانات ومخططات
labels.jpgأعداد الفئات ومخططات توزيع حجم الصناديق ومواضعها
train_batch*.jpgدفعات التدريب المعززة مع رسم التسميات
val_batch*_labels.jpg, val_batch*_pred.jpgالحقيقة الأساسية مقابل التنبؤات على صور التحقق
confusion_matrix*.png, Box*_curve.pngمصفوفة الالتباس ومنحنيات الدقة والاستدعاء وF1 وPR

افتح train_batch0.jpg قبل أي شيء آخر. إذا لم تكن صناديقه منطبقة على الكائنات، فالتسميات خاطئة، ولن يصلح ذلك أي عدد من الحقب.

غيّر هذه الوسيطات أولًا#

الوسيطافتراضيمتى تغيّره
epochs100التجارب القصيرة على CPU أو مجموعات البيانات الصغيرة التي تبدأ في فرط التكيّف (خفّض القيمة)؛ ومجموعات البيانات الكبيرة التي لا تزال تتحسن (ارفعها إلى 200–300)
imgsz640الكائنات الصغيرة (ارفع القيمة إلى 1024 أو 1280) أو تجارب CPU (اخفضها)
batch16حجم الدفعة: خفّضه عند نفاد الذاكرة، أو استخدم -1 لضبطه تلقائيًا على نحو 60% من ذاكرة GPU
patience100أوقف التدريب مبكرًا إذا لم تتحسن ملاءمة التحقق خلال N حقبة، مثل patience=20
deviceتلقائيحدّد cpu أو mps أو فهرس GPU مثل 0، أو عدة فهارس مثل [0, 1]
nametrainدائمًا: سمِّ عمليات التشغيل بما يصف التغيير
model.train(data="my_dataset/data.yaml", epochs=200, imgsz=1024, batch=-1, patience=20, name="pills_v1_1024")

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

تعني القيمة الافتراضية patience البالغة 100 أن تشغيلًا من 100 حقبة لن يتوقف مبكرًا أبدًا. تنهي قيمة أقل تشغيلًا متعثرًا عند النقطة التي تشير إليها المنحنيات أعلاه؛ ويُحتفظ بـbest.pt في الحالتين.

عند استخدام عدة وحدات GPU، مرّر قائمة مثل device=[0, 1, 2, 3]: تبدأ Ultralytics تدريبًا موزعًا متوازيًا للبيانات (DDP) نيابةً عنك، ويمثل batch الإجمالي عبر وحدات GPU، ويستخدم التدريب الدقة المختلطة افتراضيًا (amp=True). عندما يتجاوز التشغيل قدرة حاسوبك المحمول، يمكنك تشغيل مجموعة البيانات والوسيطات نفسها على GPU سحابي عبر منصة Ultralytics، كما هو موضح في تدريب عمليات التشغيل وقراءتها وضبطها الدقيق.

تجنّب هذه الأخطاء#

بدء التدريب من الصفر عن طريق الخطأ

العَرَض: قيمة mAP تقترب من الصفر بعد عصور تدريب كثيرة على مجموعة بيانات صغيرة. السبب: جاء النموذج من yolo26n.yaml (أوزان عشوائية) بدلًا من yolo26n.pt. الحل: ابدأ دائمًا من .pt مدرَّب مسبقًا. لا يُجدي التدريب من الصفر إلا في أبحاث الشبكة الأساسية أو مع مجموعات البيانات الضخمة.

نفاد ذاكرة GPU

العَرَض: CUDA out of memory في العصر الأول. الحل: خفّض batch إلى النصف، أو اضبط batch=-1 ليختار AutoBatch حجمًا ملائمًا. يساعد خفض imgsz أيضًا، لكنه يغيّر ما يستطيع النموذج رؤيته.

انشر best.pt لا last.pt

يمثل last.pt العصر الأخير، وقد يكون أداؤه أسوأ من عصر سابق. أما best.pt فهو العصر الذي حقق أفضل ملاءمة على التحقق، وهو العصر الذي ينبغي التحقق منه وتصديره ونشره.

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

جرّبه

درّب yolo26n.pt على my_dataset/data.yaml باستخدام epochs=10, imgsz=320, name='pills_v1' (أو الإعدادات الافتراضية عند استخدام GPU). سلّم تقريرًا موجزًا عن التشغيل: قيمة mAP50 وmAP50-95 النهائية إلى جانب القيمة الأساسية من الدرس السابق، والحقبة التي توقفت عندها mAP50-95 عن التحسن بشكل ملحوظ، وإجابة بنعم أو لا عما إذا كانت الصناديق في train_batch0.jpg منطبقة على الأقراص.

التزام
git add -A && git commit -m "feat(model): trained first pill detector"
متى يُعدّ مكتملًا
تكون قد أتممت الدرس عند تحقق جميع الشروط التالية.
  • يوجد runs/detect/pills_v1/weights/best.pt.

  • يُظهر تقريرك قيمة mAP50-95 نهائية أعلى بوضوح من القيمة الأساسية للنموذج المُسبق التدريب.

  • تحققت من train_batch0.jpg وresults.png وسجلت الموضع الذي تستقر عنده mAP.

عرض الحل
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
results = model.train(data="my_dataset/data.yaml", epochs=10, imgsz=320, name="pills_v1")
print(results.save_dir)  # runs/detect/pills_v1
Baseline (yolo26n.pt, no pill class): mAP50 0.001, mAP50-95 0.0002
pills_v1 (10 epochs, imgsz 320, CPU, ~1 min): mAP50 0.977, mAP50-95 0.659
Plateau: mAP50-95 gains shrink after epoch 8 (0.649 -> 0.656 -> 0.659)
train_batch0.jpg: yes, boxes sit on the pills

تختلف الأرقام الدقيقة قليلًا باختلاف الأجهزة وإصدار الحزمة.

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

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

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