تدريب YOLOv5 على بيانات مخصصة

📚 يشرح هذا الدليل كيفية تدريب مجموعة بيانات مخصصة خاصة بك باستخدام نموذج YOLOv5 🚀. يُعد تدريب النماذج المخصصة خطوة أساسية في تكييف حلول الرؤية الحاسوبية لتطبيقات واقعية محددة تتجاوز اكتشاف الكائنات العام.

قبل البدء

أولاً، تأكد من إعداد البيئة اللازمة. قم باستنساخ مستودع YOLOv5 وتثبيت التبعيات المطلوبة من requirements.txt. بيئة Python>=3.8.0 مع PyTorch>=1.8 ضرورية. يتم تنزيل النماذج ومجموعات البيانات تلقائياً من أحدث إصدار لـ YOLOv5 إذا لم يتم العثور عليها محلياً.

git clone https://github.com/ultralytics/yolov5 # Clone the repository
cd yolov5
pip install -r requirements.txt # Install dependencies

التدريب على بيانات مخصصة

رسم توضيحي لحلقة التعلم النشط من Ultralytics

تطوير نموذج اكتشاف كائنات مخصص هو عملية تكرارية:

  1. جمع الصور وتنظيمها: اجمع الصور ذات الصلة بمهمتك المحددة. البيانات المتنوعة عالية الجودة أمر بالغ الأهمية. راجع دليلنا حول جمع البيانات وتصنيفها.
  2. تصنيف الكائنات: قم بتصنيف الكائنات محل الاهتمام داخل صورك بدقة.
  3. تدريب نموذج: استخدم البيانات المصنفة لـ تدريب نموذج YOLOv5 الخاص بك. استفد من التعلم بنقل المعرفة من خلال البدء بأوزان مدربة مسبقاً.
  4. النشر والتنبؤ: استخدم النموذج المدرب لـ الاستدلال على بيانات جديدة وغير مرئية.
  5. جمع الحالات الطرفية: حدد السيناريوهات التي يكون فيها أداء النموذج ضعيفاً (الحالات الطرفية) وأضف بيانات مماثلة إلى مجموعة بياناتك لتحسين المتانة. كرر الدورة.

تقدم منصة Ultralytics حلاً مبسطاً وبدون برمجة لدورة عمليات تعلم الآلة (MLOps) الكاملة هذه، بما في ذلك إدارة مجموعة البيانات، وتدريب النماذج، والنشر.

الترخيص

توفر Ultralytics خياري ترخيص لتلبية سيناريوهات الاستخدام المتنوعة:

  • رخصة AGPL-3.0: هذا الترخيص مفتوح المصدر المعتمد من OSI مثالي للطلاب والباحثين والمتحمسين الشغوفين بالتعاون المفتوح ومشاركة المعرفة. يتطلب مشاركة الأعمال المشتقة بموجب نفس الترخيص. راجع ملف LICENSE للحصول على التفاصيل الكاملة.
  • رخصة المؤسسات: مصممة للتطبيقات التجارية، تسمح هذه الرخصة بالتكامل السلس لبرمجيات ونماذج ذكاء اصطناعي من Ultralytics في المنتجات والخدمات التجارية دون اشتراطات المصدر المفتوح الخاصة بـ AGPL-3.0. إذا كان مشروعك يتطلب نشراً تجارياً، اطلب رخصة مؤسسات.

استكشف خيارات الترخيص الخاصة بنا بشكل أكبر على صفحة ترخيص Ultralytics.

قبل البدء في التدريب، يعد إعداد مجموعة البيانات أمراً ضرورياً.

إنشاء مجموعة بيانات

تتطلب نماذج YOLOv5 بيانات مصنفة لتعلم الخصائص البصرية لفئات الكائنات. تنظيم مجموعة بياناتك بشكل صحيح هو المفتاح.

1.1 إنشاء dataset.yaml

يحدد ملف إعداد مجموعة البيانات (على سبيل المثال، coco128.yaml) هيكل مجموعة البيانات، وأسماء الفئات، والمسارات إلى أدلة الصور. تُعد COCO128 مجموعة بيانات صغيرة نموذجية، تتكون من أول 128 صورة من مجموعة بيانات COCO الواسعة. وهي مفيدة لاختبار خط أنابيب التدريب بسرعة وتشخيص المشكلات المحتملة مثل الإفراط في التخصيص.

يتضمن هيكل ملف dataset.yaml ما يلي:

  • path: الدليل الجذري الذي يحتوي على مجموعة البيانات.
  • train, val, test: مسارات نسبية من path إلى الأدلة التي تحتوي على الصور أو ملفات نصية تسرد مسارات الصور لمجموعات التدريب والتحقق والاختبار.
  • names: قاموس يربط فهارس الفئات (بدءاً من 0) بأسماء الفئات المقابلة لها.

يمكنك ضبط path إما على دليل مطلق (على سبيل المثال، /home/user/datasets/coco128) أو مسار نسبي مثل ../datasets/coco128 عند بدء التدريب من جذر مستودع YOLOv5.

فيما يلي الهيكل الخاص بـ coco128.yaml (عرض على GitHub):

# Dataset root directory relative to the yolov5 directory
path: coco128

# Train/val/test sets: specify directories, *.txt files, or lists
train: images/train2017 # 128 images for training
val: images/train2017 # 128 images for validation
test: # Optional path to test images

# Classes (example using 80 COCO classes)
names:
    0: person
    1: bicycle
    2: car
    # ... (remaining COCO classes)
    77: teddy bear
    78: hair drier
    79: toothbrush

1.2 الاستفادة من النماذج للتصنيف الآلي

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

  • Google Gemini: تمتلك النماذج متعددة الوسائط الكبيرة مثل Gemini قدرات قوية في فهم الصور. يمكن توجيهها لتحديد وتعيين موقع الكائنات داخل الصور، وتوليد مربعات إحاطة أو أوصاف يمكن تحويلها إلى تسميات بتنسيق YOLO. استكشف إمكاناتها في دفتر الملاحظات التعليمي المقدم.
  • SAM2 (Segment Anything Model 2): يمكن للنماذج التأسيسية التي تركز على التقطيع، مثل SAM2، تحديد وتوضيح الكائنات بدقة عالية. على الرغم من أنها مخصصة للتقطيع في المقام الأول، إلا أنه غالباً ما يمكن تحويل الأقنعة الناتجة إلى تعليقات توضيحية لمربعات الإحاطة مناسبة لمهام اكتشاف الكائنات.
  • YOLOWorld: يوفر هذا النموذج قدرات اكتشاف ذات مفردات مفتوحة. يمكنك تقديم أوصاف نصية للكائنات التي تهتم بها، ويمكن لـ YOLOWorld تحديد موقعها في الصور بدون تدريب مسبق على تلك الفئات المحددة. يمكن استخدام هذا كنقطة بداية لتوليد تسميات أولية، والتي يمكن بعد ذلك تحسينها.

يمكن أن يوفر استخدام هذه النماذج خطوة "تصنيف مسبق"، مما يقلل من الجهد اليدوي المطلوب. ومع ذلك، من الضروري مراجعة وتحسين التسميات التي يتم توليدها تلقائياً لضمان الدقة والاتساق، حيث تؤثر الجودة بشكل مباشر على أداء نموذج YOLOv5 المدرب الخاص بك. بعد توليد (وربما تحسين) تسمياتك، تأكد من التزامها بـ تنسيق YOLO: ملف *.txt واحد لكل صورة، حيث يمثل كل سطر كائناً بتنسيق class_index x_center y_center width height (إحداثيات طبيعية، فئة تبدأ من الصفر). إذا كانت الصورة لا تحتوي على كائنات ذات أهمية، فلا حاجة إلى ملف *.txt مطابق.

مواصفات ملف *.txt بتنسيق YOLO دقيقة:

  • صف واحد لكل مربع إحاطة كائن.
  • يجب أن يحتوي كل صف على: class_index x_center y_center width height.
  • يجب أن تكون الإحداثيات مُطبّعة إلى نطاق يتراوح بين 0 و 1. لتحقيق ذلك، قسّم قيم البكسل لـ x_center و width على العرض الكلي للصورة، وقسّم y_center و height على الارتفاع الكلي للصورة.
  • فهارس الفئات تبدأ من الصفر (أي، الفئة الأولى ممثلة بـ 0، والثانية بـ 1، وهكذا).

Example image with two persons and a tie annotated

سيبدو ملف التسمية المقابل للصورة أعلاه، والذي يحتوي على كائني 'شخص' (فهرس الفئة 0) وكائن 'ربطة عنق' واحد (فهرس الفئة 27)، كالتالي:

YOLO format label file content example

1.3 تنظيم الأدلة

قم بتنظيم دليل مجموعات البيانات الخاص بك كما هو موضح أدناه. افتراضياً، يتوقع YOLOv5 أن يتواجد دليل مجموعة البيانات (على سبيل المثال، /coco128) داخل مجلد /datasets الموجود بجوار دليل مستودع /yolov5.

يقوم YOLOv5 تلقائياً بتحديد موقع التسميات لكل صورة عن طريق استبدال آخر مثيل لـ /images/ في مسار الصورة بـ /labels/. على سبيل المثال:

../datasets/coco128/images/im0.jpg # Path to the image file
../datasets/coco128/labels/im0.txt # Path to the corresponding label file

هيكل الدليل الموصى به هو:

/datasets/
└── coco128/  # Dataset root
    ├── images/
    │   ├── train2017/  # Training images
    │   │   ├── 000000000009.jpg
    │   │   └── ...
    │   └── val2017/    # Validation images (optional if using same set for train/val)
    │       └── ...
    └── labels/
        ├── train2017/  # Training labels
        │   ├── 000000000009.txt
        │   └── ...
        └── val2017/    # Validation labels (optional if using same set for train/val)
            └── ...

YOLOv5 recommended dataset directory structure

اختر نموذجاً

اختر نموذجاً مدرباً مسبقاً لبدء عملية التدريب. البدء بأوزان مدربة مسبقاً يسرع التعلم بشكل كبير ويحسن الأداء مقارنة بالتدريب من الصفر. يوفر YOLOv5 أحجام نماذج متنوعة، حيث يوازن كل منها بين السرعة والدقة بشكل مختلف. على سبيل المثال، YOLOv5s هو ثاني أصغر وأسرع نموذج، مناسب للبيئات ذات الموارد المحدودة. راجع جدول README للحصول على مقارنة مفصلة لجميع النماذج المتاحة.

Comparison chart of YOLOv5 models showing size, speed, and accuracy

التدريب

ابدأ تدريب النموذج باستخدام البرنامج النصي train.py. تشمل الوسيطات الأساسية:

  • --img: يحدد حجم صورة الإدخال (على سبيل المثال، --img 640). الأحجام الأكبر تؤدي عموماً إلى دقة أفضل ولكنها تتطلب ذاكرة GPU أكبر.
  • --batch: يحدد حجم الدفعة (على سبيل المثال، --batch 16). اختر أكبر حجم يمكن لـ GPU الخاص بك التعامل معه.
  • --epochs: يحدد العدد الإجمالي لـ حقب التدريب (على سبيل المثال، --epochs 100). تمثل الحقبة تمريرة كاملة على مجموعة بيانات التدريب بأكملها.
  • --data: مسار إلى ملف dataset.yaml الخاص بك (على سبيل المثال، --data coco128.yaml).
  • --weights: مسار إلى ملف الأوزان الأولية. يوصى بشدة باستخدام أوزان مدربة مسبقاً (على سبيل المثال، --weights yolov5s.pt) للوصول إلى التقارب بشكل أسرع والحصول على نتائج متفوقة. للتدريب من الصفر (غير مستحسن إلا إذا كان لديك مجموعة بيانات كبيرة جداً واحتياجات خاصة)، استخدم --weights '' --cfg yolov5s.yaml.

يتم تنزيل الأوزان المدربة مسبقاً تلقائياً من أحدث إصدار لـ YOLOv5 إذا لم يتم العثور عليها محلياً.

# Example: Train YOLOv5s on the COCO128 dataset for 3 epochs
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt
تحسين سرعة التدريب

💡 استخدم --cache ram أو --cache disk لتخزين صور مجموعة البيانات مؤقتاً في ذاكرة الوصول العشوائي (RAM) أو القرص المحلي، على التوالي. هذا يسرع التدريب بشكل كبير، خاصة عندما تكون عمليات الإدخال/الإخراج (I/O) لمجموعة البيانات هي عنق الزجاجة. لاحظ أن هذا يتطلب مساحة كبيرة من ذاكرة الوصول العشوائي أو القرص.

تخزين البيانات المحلي

💡 قم دائماً بالتدريب باستخدام مجموعات بيانات مخزنة محلياً. يمكن أن يكون الوصول إلى البيانات من محركات أقراص الشبكة (مثل Google Drive) أو التخزين البعيد أبطأ بشكل ملحوظ ويعيق أداء التدريب. نسخ مجموعة بياناتك إلى SSD محلي غالباً ما يكون أفضل ممارسة.

يتم حفظ جميع مخرجات التدريب، بما في ذلك الأوزان والسجلات، في دليل runs/train/. تنشئ كل جلسة تدريب دليلاً فرعياً جديداً (على سبيل المثال، runs/train/exp, runs/train/exp-2، إلخ). لتجربة تفاعلية وعملية، استكشف قسم التدريب في دفاتر الملاحظات التعليمية الرسمية الخاصة بنا: فتح في Colab فتح في Kaggle

التصور

يتكامل YOLOv5 بسلاسة مع أدوات متنوعة لتصور تقدم التدريب، وتقييم النتائج، ومراقبة الأداء في الوقت الفعلي.

تسجيل وتصور Comet

Comet متكامل تماماً لتتبع التجارب بشكل شامل. تصور المقاييس مباشرة، واحفظ المعلمات الفائقة، وأدر مجموعات البيانات ونقاط تفتيش النماذج، وقم بتحليل تنبؤات النموذج باستخدام لوحات Comet المخصصة التفاعلية.

البدء سهل ومباشر:

pip install comet_ml                                                          # 1. Install Comet library
export COMET_API_KEY=YOUR_API_KEY_HERE                                        # 2. Set your Comet API key (create a free account at Comet.ml)
python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt # 3. Train your model - Comet automatically logs everything!

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

Comet UI showing YOLOv5 training metrics and visualizations

تسجيل وأتمتة ClearML

يمكنك تكامل ClearML من تتبع التجارب التفصيلي، وإدارة إصدارات مجموعات البيانات، وحتى التنفيذ عن بُعد لعمليات التدريب. قم بتنشيط ClearML بهذه الخطوات البسيطة:

  • قم بتثبيت الحزمة: pip install clearml
  • قم بتهيئة ClearML: قم بتشغيل clearml-init مرة واحدة للاتصال بخادم ClearML الخاص بك (سواء كان مستضافاً ذاتياً أو الخطة المجانية).

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

ClearML experiment management UI for YOLOv5

التسجيل المحلي

يتم تسجيل نتائج التدريب تلقائياً باستخدام TensorBoard وحفظها كملفات CSV داخل دليل التجربة المحددة (على سبيل المثال، runs/train/exp). تتضمن البيانات المسجلة ما يلي:

  • خسارة التدريب والتحقق ومقاييس الأداء.
  • صور عينة تظهر الزيادات المطبقة (مثل الفسيفساء).
  • تسميات الحقيقة الأرضية جنباً إلى جنب مع تنبؤات النموذج للفحص البصري.
  • مقاييس التقييم الرئيسية مثل منحنيات الدقة-الاستدعاء (PR).
  • مصفوفات الارتباك لتحليل الأداء المفصل لكل فئة.
YOLOv5 local logging results with charts and mosaics

يتم تحديث ملف results.csv بعد كل حقبة ويتم رسمه كـ results.png بمجرد انتهاء التدريب. يمكنك أيضاً رسم أي ملف results.csv يدوياً باستخدام دالة الأداة المساعدة المقدمة:

from utils.plots import plot_results

# Plot results from a specific training run directory
plot_results("runs/train/exp/results.csv")  # This will generate 'results.png' in the same directory

YOLOv5 results.png training metrics plot

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

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

  • قم بتشغيل الاستدلال على صور أو مقاطع فيديو جديدة باستخدام النموذج المدرب عبر CLI أو Python.
  • قم بإجراء التحقق لتقييم دقة النموذج وقدراته على التعميم على انقسامات بيانات مختلفة (على سبيل المثال، مجموعة اختبار مستبعدة).
  • تصدير النموذج إلى تنسيقات نشر متنوعة مثل ONNX، أو TensorFlow SavedModel، أو TensorRT للاستدلال المحسّن على منصات متنوعة.
  • استخدم تقنيات ضبط المعلمات الفائقة لتحقيق مكاسب إضافية محتملة في الأداء.
  • استمر في تحسين نموذجك باتباع نصائحنا لأفضل نتائج تدريب وإضافة بيانات أكثر تنوعاً وتحدياً بشكل تكراري بناءً على تحليل الأداء.

البيئات المدعومة

توفر Ultralytics بيئات جاهزة للاستخدام مجهزة بتبعيات أساسية مثل CUDA، و cuDNN، و Python، و PyTorch، مما يسهل بداية سلسة.

حالة المشروع

شارة حالة التكامل المستمر لـ YOLOv5

This badge indicates that all YOLOv5 GitHub Actions Continuous Integration (CI) tests are passing successfully. These rigorous CI tests cover the core functionalities, including training, validation, inference, export, and benchmarks, across macOS, Windows, and Ubuntu operating systems. Tests are executed automatically every 24 hours and upon each code commit, ensuring consistent stability and optimal performance.

الأسئلة الشائعة

كيف يمكنني تدريب YOLOv5 على مجموعة بياناتي المخصصة؟

يتضمن تدريب YOLOv5 على مجموعة بيانات مخصصة عدة خطوات رئيسية:

  1. جهز مجموعة بياناتك: اجمع الصور وقم بتعليقها. تأكد من أن التعليقات التوضيحية بتنسيق YOLO format المطلوب. نظم الصور والملصقات في أدلة train/ و val/test/ اختيارياً). فكر في استخدام نماذج مثل Google Gemini أو SAM2 أو YOLOWorld للمساعدة في عملية وضع العلامات أو أتمتتها (انظر القسم 1.2).
  2. قم بإعداد بيئتك: استنسخ مستودع YOLOv5 وقم بتثبيت التبعيات باستخدام pip install -r requirements.txt.
    git clone https://github.com/ultralytics/yolov5
    cd yolov5
    pip install -r requirements.txt
  3. إنشاء إعدادات مجموعة البيانات: حدد مسارات مجموعة البيانات، وعدد الفئات، وأسماء الفئات في ملف dataset.yaml.
  4. بدء التدريب: نفذ البرنامج النصي train.py مع توفير المسارات إلى dataset.yaml الخاص بك، والأوزان المدربة مسبقاً المطلوبة (مثل yolov5s.pt)، وحجم الصورة، وحجم الدفعة (batch size)، وعدد الحقبات (epochs).
    python train.py --img 640 --batch 16 --epochs 100 --data path/to/your/dataset.yaml --weights yolov5s.pt

لماذا يجب علي استخدام Ultralytics Platform لتدريب نماذج YOLO الخاصة بي؟

Ultralytics Platform عبارة عن منصة شاملة مصممة لتبسيط دورة حياة تطوير نموذج YOLO بالكامل، غالباً دون الحاجة إلى كتابة أي كود. تشمل الفوائد الرئيسية ما يلي:

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

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

كيف أقوم بتحويل بياناتي المعلقة إلى تنسيق YOLOv5؟

سواء كنت تقوم بالتعليق يدوياً أو تستخدم أدوات آلية (مثل تلك المذكورة في القسم 1.2)، يجب أن تكون الملصقات النهائية بتنسيق YOLO format المحدد المطلوب بواسطة YOLOv5:

  • قم بإنشاء ملف .txt واحد لكل صورة. يجب أن يتطابق اسم الملف مع اسم ملف الصورة (على سبيل المثال، image1.jpg يقابل image1.txt). ضع هذه الملفات في دليل labels/ موازٍ لدليل images/ الخاص بك (على سبيل المثال، ../datasets/mydataset/labels/train/).
  • يمثل كل سطر داخل ملف .txt تعليقاً توضيحياً واحداً للكائن ويتبع التنسيق: class_index center_x center_y width height.
  • يجب أن تكون الإحداثيات (center_x, center_y, width, height) معيارية (قيم بين 0.0 و 1.0) بالنسبة لأبعاد الصورة.
  • مؤشرات الفئات تبدأ من الصفر (الفئة الأولى هي 0، والثانية هي 1، وما إلى ذلك).

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

ما هي خيارات الترخيص لاستخدام YOLOv5 في التطبيقات التجارية؟

توفر Ultralytics تراخيص مرنة مصممة لتلبية احتياجات مختلفة:

  • ترخيص AGPL-3.0: ترخيص مفتوح المصدر هذا مناسب للبحث الأكاديمي والمشاريع الشخصية والحالات التي يكون فيها الامتثال للمصادر المفتوحة مقبولاً. وهو يفرض أن تكون التعديلات والأعمال المشتقة مفتوحة المصدر أيضاً بموجب AGPL-3.0. راجع تفاصيل ترخيص AGPL-3.0.
  • ترخيص المؤسسات (Enterprise License): ترخيص تجاري مصمم للشركات التي تدمج YOLOv5 في منتجات أو خدمات مملوكة لها. يلغي هذا الترخيص التزامات المصدر المفتوح لـ AGPL-3.0، مما يسمح بالتوزيع المغلق المصدر. قم بزيارة صفحة الترخيص الخاصة بنا لمزيد من التفاصيل أو لطلب ترخيص مؤسسي.

اختر الترخيص الذي يتوافق بشكل أفضل مع متطلبات مشروعك ونموذج التوزيع الخاص بك.

التعليقات