أساسيات Ultralytics YOLO: الجزء الثالث

البيانات المخصصة وتدريب النماذج

4. أساسيات التدريب وتعلم الآلة

كيف تعلّم الكمبيوتر التعرف على أشيائك الخاصة؟

مفاهيم أساسية قبل التدريب

قبل أن نبدأ، دعونا نتفق على هذه المصطلحات:

  • النموذج (Model): “المخ” الرياضي الذي يحتوي على المعرفة (الأوزان) التي تعلمها (مثل yolo26n.pt).
  • الحقبة (Epoch): دورة كاملة يقرأ فيها النموذج كل صور التدريب مرة واحدة ليذاكرها.
  • مقياس الدقة (mAP): الدرجة النهائية من 0 إلى 100%. تقيس مدى براعة النموذج في تحديد مكان الكائن واسمه بدقة.

التدريب مقابل التحقق (مذاكرة أم اختبار؟)

لبناء نموذج ذكي، يجب أن نقسم بياناتنا (كما نُعدّ طالباً للاختبار):

تخيلها كأنها:

  • بيانات التدريب (Train - 80%): هي “كتاب المذاكرة”؛ الأسئلة التي يراها الطالب ويحلها مئات المرات ليتعلم منها.
  • بيانات التحقق (Val - 20%): هي “ورقة الاختبار”؛ أسئلة لم يراها الطالب أبداً، نستخدمها لنعرف هل هو فعلاً “فهم” المادة أم “حفظ” الإجابات فقط.

قاعدة ذهبية: لا تدرّب النموذج أبداً على بيانات الاختبار! هذا يسمى الغش في الاختبار (Data Leakage) وسيجعل النموذج يبدو ذكياً في الأرقام لكنه فاشل تماماً في الواقع.

تسريب البيانات: القاتل الصامت

المشكلة: بالغلط، دخلت صور من “الاختبار” إلى “أسئلة المذاكرة”. النموذج حفظ الإجابة!

الأسباب الشائعة: وجود صور مكررة، أو تقسيم البيانات يدوياً بطريقة خاطئة.

الخطر: الدرجات (mAP) تبدو 100% (ممتازة جداً!)، لكن عندما تستخدم الكاميرا في الواقع، النموذج لا يتعرف على شيء!

كيف تتجنبها؟ - استخدم خاصية التقسيم التلقائي autosplit() لضمان عدم اختلاط الأوراق. - لا تنسخ الصور يدوياً بين المجلدات. - تأكد من عدم وجود صور مكررة في بياناتك.

الدرجات تبدو مثالية جداً؟ ربما حدث تسريب للبيانات!

نقل المعرفة (Transfer Learning)

كيف نختصر الوقت؟ نستفيد من المعرفة السابقة!

  • النماذج الجاهزة .pt: نماذج سبق وأن تدربت على الملايين من الصور وتعرف الأشكال الأساسية (خطوط، دوائر، حواف). تستخدمها كنقطة انطلاق لتعلم أشياء جديدة بسرعة جداً وببيانات قليلة! (يُنصح بها دائماً!)
  • النماذج الفارغة .yaml: نماذج بيضاء تماماً (مثل طفل حديث الولادة). يجب أن تتعلم كل شيء من الصفر، وتحتاج لبيانات هائلة وأسابيع من التدريب.

استخدم دائماً نماذج .pt لتسريع التدريب.

تنظيم مجلدات البيانات

كل مهمة لها طريقة مختلفة في ترتيب الصور:

  • التصنيف (Classification): يعتمد على المجلدات فقط. (تضع صور القطط في مجلد cat وصور الكلاب في مجلد dog). لا حاجة لملفات نصوص!
  • الاكتشاف والتجزئة: تستخدم صيغة YOLO، كل صورة يقابلها ملف نصي .txt يحمل نفس الاسم يحتوي على الإحداثيات.
my_dataset/
├── images/           (مجلد الصور)
│   ├── train/        (صور المذاكرة)
│   └── val/          (صور الاختبار)
└── labels/           (مجلد ملفات النصوص/الإحداثيات)
    ├── train/
    └── val/

ماذا يوجد داخل ملفات النصوص؟

  • اكتشاف الكائنات (مربع إحاطة): <class_id> <x_center> <y_center> <width> <height>

  • التجزئة (مضلع بأضلاع كثيرة): <class_id> <x1> <y1> <x2> <y2> ... <xn> <yn>

  • تتبع الهيكل (نقاط المفاصل): <class_id> <bbox> <kp_x1> <kp_y1> <v1> ...

تنبيه ⚠️: يجب أن تكون كل الإحداثيات نسبية (من 0.0 إلى 1.0) وليست أرقام بيكسل مطلقة!

ملف الإعدادات data.yaml

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

# data.yaml
path: ../my_dataset    # المسار الرئيسي للمجلد
train: images/train    # مجلد المذاكرة
val: images/val        # مجلد الاختبار

names:                 # أسماء الأشياء
  0: my_custom_object  # الصنف رقم 0
  1: another_object    # الصنف رقم 1

5. تجهيز وتصنيف البيانات

منصة Ultralytics وأدوات التسمية

تصنيف بياناتك الخاصة (Labeling)

كتابة الإحداثيات يدوياً في ملفات نصية هو أمر مستحيل! لذلك نستخدم منصات مثل Ultralytics HUB أو Roboflow.

  1. ارفع صورك للمنصة.
  2. ارسم المربعات أو المضلعات حول الأشياء بالماوس بكل سهولة.
  3. قم بتصدير البيانات بصيغة YOLO format لتحصل على مجلدات (الصور والنصوص) جاهزة للتدريب فوراً!

المرجع: منصة Ultralytics HUB

التصنيف التلقائي الذكي (AutoLabeling)

وفر وقتك واستخدم نماذج الذكاء الاصطناعي “السحرية” لمساعدتك في التصنيف:

  1. التعرف من الصفر (Zero-Shot): يمكنك استخدام نماذج ذكية جداً مثل SAM (Segment Anything Model).
  2. شغل هذا النموذج على صورك، وسيقوم تلقائياً برسم المربعات أو المضلعات حول الأشياء.
  3. هذه النماذج الجبارة تفهم وتتعرف على الأشياء العامة بدون أي تدريب مسبق!
  4. كل ما عليك فعله هو المراجعة وتصحيح الأخطاء البسيطة فقط — أسرع بكثير من الرسم اليدوي!

المرجع: نماذج SAM

6. بدء التدريب (Kickoff)

المعايير والإعدادات

بدء التدريب

بمجرد تجهيز بياناتك، يمكننا بدء التدريب بسطر واحد فقط:

yolo train model=weights/yolo26n.pt data=data.yaml epochs=100 imgsz=640 batch=-1
# كود بايثون
from ultralytics import YOLO

model = YOLO("weights/yolo26n.pt")
results = model.train(data="data.yaml", epochs=100, imgsz=640, batch=-1)

استكمال التدريب (Resume)

ماذا لو انقطع التيار الكهربائي أو توقف جهازك في منتصف التدريب؟ لا تقلق، يمكنك استكمال التدريب من آخر نقطة وصل إليها النموذج دون خسارة الأيام السابقة!

# استكمال التدريب من آخر نقطة حفظ
yolo train resume model=path/to/runs/train/exp/weights/last.pt
# كود بايثون
from ultralytics import YOLO

# تحميل آخر وزن تم حفظه
model = YOLO("path/to/runs/train/exp/weights/last.pt")

# استئناف التدريب
results = model.train(resume=True)

المعلمات (Hyperparameters) المهمة

  • الحقبة (Epoch): عدد مرات “قراءة الكتاب” بالكامل.
    • تخيل: إذا قرأت الكتاب مرة واحدة (Epoch 1) قد لا تحفظه، وإذا قرأته 10,000 مرة قد تحفظه بصماً دون فهم! (نستهدف رقم متوازن مثل 100).
  • الدفعة (Batch): كم صورة يذاكرها النموذج “في نفس اللحظة” قبل أن يأخذ استراحة ليعدل معلوماته.
    • نصيحة: استخدم batch=-1 وسيقوم YOLO باختيار أنسب حجم يناسب جهازك تلقائياً!

معلمات إضافية: حجم الصورة والعتاد

  • imgsz (الافتراضي 640): حجم الصورة أثناء التدريب. الأحجام الكبيرة (مثل 1024) تلتقط تفاصيل أدق (ممتازة للأشياء الصغيرة جداً!) لكنها تستهلك ذاكرة أكبر وبطيئة جداً.
  • device (الافتراضي ’’): تحديد كروت الشاشة (مثال device=0,1) لتفعيل التدريب على أكثر من كرت معاً!

💡 خدعة للأشياء الصغيرة جداً: SAHI

المشكلة: إذا صغرنا صورة بدقة 4K إلى 640 بيكسل للتدريب، ستختفي الأشياء الصغيرة تماماً ولن يراها النموذج!

الحل السحري — SAHI (الاستدلال المساعد بالتقسيم):

  1. التقسيم (Slice): يقوم بتقطيع الصورة الكبيرة إلى مربعات صغيرة متداخلة.
  2. الاستدلال: يشغل YOLO على كل مربع صغير بدقته الأصلية العالية.
  3. الدمج: يجمع كل المربعات ونتائجها ليعيدها صورة واحدة كاملة!

عرض توضيحي: تقنية SAHI

استخدام ملفات الإعدادات (أفضل ممارسة)

بدلاً من كتابة كل المعلمات في سطر واحد طويل، ضعها في ملف experiment.yaml:

# experiment.yaml
task: detect
mode: train
model: yolo26s.pt
data: data.yaml    
epochs: 100
batch: 16
imgsz: 640
# تشغيل التدريب من ملف الإعدادات
yolo cfg=experiment.yaml

استخدام ملفات الإعدادات في بايثون

# كود بايثون
from ultralytics import YOLO

model = YOLO("yolo26s.pt")
model.train(cfg="experiment.yaml")

تتبع التجارب (Experiment Tracking)

تتكامل Ultralytics بسلاسة مع أدوات MLOps لتسجيل ومراقبة المقاييس (الدقة، الخسارة) ورسم المصفوفات (مصفوفة الارتباك) الحية أثناء التدريب.

أدوات المراقبة المدعومة:

  • TensorBoard (مدمجة)
  • Weights & Biases (W&B)
  • Comet
  • ClearML
  • MLflow
# تفعيل التسجيل في TensorBoard
yolo settings tensorboard=True

# تشغيل اللوحة في موجّه الأوامر
tensorboard --logdir runs/train

# أو داخل Google Colab
%load_ext tensorboard
%tensorboard --logdir path/to/runs

المرجع: التكامل مع الأدوات

تعزيز البيانات (Data Augmentation)

يدعم YOLO مكتبة Albumentations لتعزيز قوة النموذج. ويقوم بتطبيق تأثيرات (مثل تدوير الصورة، تغيير الألوان، التشويش) تلقائياً أثناء التدريب!

تشويقة: سنتعلم لماذا ومتى نستخدم تعزيز البيانات في الجزء الرابع — إنه سلاحك السري ضد “الحفظ الأعمى” (Overfitting)!

🎮 تحدي المدرب الذكي

اختبر معرفتك في أساسيات التدريب

تحدي التوصيل: إعدادات التدريب

وصل المصطلح بالوصف الذي يناسبه:

📖 قراءة الكتاب بالكامل مرة واحدة
📸 عدد الصور المعالجة في نفس اللحظة
📝 أسئلة الاختبار التي لم يراها النموذج
🧠 البدء من معرفة سابقة لنموذج قديم
Batch Size
Epoch
Transfer Learning
Validation Set

الخاتمة

نهاية جزء تدريب النماذج

ملخص ما تعلمناه

  • إعداد البيانات: كيف ننظم المجلدات ونكتب ملفات data.yaml ليفهمها YOLO وكيف نتجنب تسريب البيانات.
  • أدوات التصنيف: استخدام المنصات والتصنيف التلقائي السريع عبر SAM.
  • التدريب: كيف نبدأ ونتوقف ونستكمل التدريب في أي وقت.
  • المعلمات: فهم معنى الحقبة (Epochs)، الدفعات (Batch)، وتتبع النتائج.

الخطوات القادمة

في الدرس القادم: التقييم والنشر (Evaluation & Deployment)

  • كيف نقيس مدى ذكاء النموذج بأرقام حقيقية (mAP، الدقة، الاستدعاء).
  • كيف نحول النموذج إلى نسخة نهائية سريعة جداً للعمل الحقيقي!

شكراً لاهتمامكم ووقتكم

يُسعدني الإجابة على استفساراتكم ومناقشاتكم