YOLO Vision 2026:

تطوّر المعلمات الفائقة لـ YOLOv5#

📚 يشرح هذا الدليل تطوّر المعلمات الفائقة لـ YOLOv5 🚀. وتطوّر المعلمات الفائقة هو أسلوب لتحسين المعلمات الفائقة باستخدام خوارزمية جينية (GA) لإجراء التحسين.

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

  1. ارتفاع أبعاد مساحة البحث
  2. الارتباطات غير المعروفة بين الأبعاد
  3. ارتفاع تكلفة تقييم الملاءمة عند كل نقطة

وهذا يجعل الخوارزميات الجينية خيارًا مناسبًا للبحث عن المعلمات الفائقة.

قبل البدء#

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

git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install

1. تهيئة المعلمات الفائقة#

يحتوي YOLOv5 على نحو 30 معلمة فائقة تُستخدم لإعدادات تدريب مختلفة. وتُعرَّف هذه المعلمات في ملفات *.yaml الموجودة في المجلد /data/hyps. ستؤدي التخمينات الأولية الأفضل إلى نتائج نهائية أفضل، لذا من المهم تهيئة هذه القيم بصورة صحيحة قبل التطوير. وإذا لم تكن متأكدًا، فاستخدم ببساطة القيم الافتراضية، المُحسّنة لتدريب YOLOv5 على COCO من الصفر.

# YOLOv5 🚀 by Ultralytics, AGPL-3.0 license
# Hyperparameters for low-augmentation COCO training from scratch
# python train.py --batch 64 --cfg yolov5n6.yaml --weights '' --data coco.yaml --img 640 --epochs 300 --linear
# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials

lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
lrf: 0.01 # final OneCycleLR learning rate (lr0 * lrf)
momentum: 0.937 # SGD momentum/Adam beta1
weight_decay: 0.0005 # optimizer weight decay 5e-4
warmup_epochs: 3.0 # warmup epochs (fractions ok)
warmup_momentum: 0.8 # warmup initial momentum
warmup_bias_lr: 0.1 # warmup initial bias lr
box: 0.05 # box loss gain
cls: 0.5 # cls loss gain
cls_pw: 1.0 # cls BCELoss positive_weight
obj: 1.0 # obj loss gain (scale with pixels)
obj_pw: 1.0 # obj BCELoss positive_weight
iou_t: 0.20 # IoU training threshold
anchor_t: 4.0 # anchor-multiple threshold
# anchors: 3  # anchors per output layer (0 to ignore)
fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
hsv_h: 0.015 # image HSV-Hue augmentation (fraction)
hsv_s: 0.7 # image HSV-Saturation augmentation (fraction)
hsv_v: 0.4 # image HSV-Value augmentation (fraction)
degrees: 0.0 # image rotation (+/- deg)
translate: 0.1 # image translation (+/- fraction)
scale: 0.5 # image scale (+/- gain)
shear: 0.0 # image shear (+/- deg)
perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
flipud: 0.0 # image flip up-down (probability)
fliplr: 0.5 # image flip left-right (probability)
mosaic: 1.0 # image mosaic (probability)
mixup: 0.0 # image mixup (probability)
copy_paste: 0.0 # segment copy-paste (probability)

2. تعريف الملاءمة#

الملاءمة هي القيمة التي نسعى إلى تعظيمها. في YOLOv5 نعرّف دالة ملاءمة افتراضية بوصفها مزيجًا موزونًا من المقاييس: يساهم mAP@0.5 بنسبة 10% من الوزن، بينما يساهم mAP@0.5:0.95 بنسبة 90% المتبقية، مع استبعاد الدقة (P) والاستدعاء (R). يمكنك ضبط هذه القيم كما تراه مناسبًا أو استخدام تعريف الملاءمة الافتراضي في utils/metrics.py (موصى به).

def fitness(x):
    """Return model fitness as the sum of weighted metrics [P, R, mAP@0.5, mAP@0.5:0.95]."""
    w = [0.0, 0.0, 0.1, 0.9]  # weights for [P, R, mAP@0.5, mAP@0.5:0.95]
    return (x[:, :4] * w).sum(1)

3. التطوير#

يُجرى التطور انطلاقًا من سيناريو أساسي نسعى إلى تحسينه. والسيناريو الأساسي في هذا المثال هو إجراء الضبط الدقيق لمجموعة COCO128 على مدار 10 عصور تدريب باستخدام YOLOv5s مُدرَّب مسبقًا. وأمر تدريب السيناريو الأساسي هو:

python train.py --epochs 10 --data coco128.yaml --weights yolov5s.pt --cache

لتطوير المعلمات الفائقة الخاصة بهذا السيناريو، بدءًا من قيمنا الأولية المحددة في القسم 1.، وتعظيم الملاءمة المحددة في القسم 2.، ألحِق --evolve:

# Single-GPU
python train.py --epochs 10 --data coco128.yaml --weights yolov5s.pt --cache --evolve

# Multi-GPU with delay
for i in {0..7}; do
  sleep $((30 * i)) # 30-second delay (optional)
  echo "Starting GPU $i..."
  nohup python train.py --epochs 10 --data coco128.yaml --weights yolov5s.pt --cache --device $i --evolve > "evolve_gpu_$i.log" &
done

# Continuous training (use with caution)
# for i in {0..7}; do
#   sleep $((30 * i))  # 30-second delay (optional)
#   echo "Starting continuous training on GPU $i..."
#   (
#     while true; do
#       python train.py --epochs 10 --data coco128.yaml --weights yolov5s.pt --cache --device $i --evolve > "evolve_gpu_$i.log"
#     done
#   ) &
# done

ستشغّل إعدادات التطور الافتراضية السيناريو الأساسي 300 مرة، أي على مدار 300 جيل. يمكنك تعديل عدد الأجيال عبر الوسيطة --evolve، أي python train.py --evolve 1000.

المشغّلان الجينيان الرئيسيان هما العبور والطفرة. تُستخدم الطفرة في هذا العمل باحتمال قدره 80% وتباين قدره 0.04 لإنشاء نسل جديد استنادًا إلى مزيج من أفضل الآباء من جميع الأجيال السابقة. تُسجَّل النتائج في runs/evolve/exp/evolve.csv، ويُحفَظ النسل ذو أعلى ملاءمة في كل جيل باسم runs/evolve/exp/hyp_evolve.yaml:

# YOLOv5 Hyperparameter Evolution Results
# Best generation: 287
# Last generation: 300
#    metrics/precision,       metrics/recall,      metrics/mAP_0.5, metrics/mAP_0.5:0.95,         val/box_loss,         val/obj_loss,         val/cls_loss
#              0.54634,              0.55625,              0.58201,              0.33665,             0.056451,             0.042892,             0.013441

lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
lrf: 0.2 # final OneCycleLR learning rate (lr0 * lrf)
momentum: 0.937 # SGD momentum/Adam beta1
weight_decay: 0.0005 # optimizer weight decay 5e-4
warmup_epochs: 3.0 # warmup epochs (fractions ok)
warmup_momentum: 0.8 # warmup initial momentum
warmup_bias_lr: 0.1 # warmup initial bias lr
box: 0.05 # box loss gain
cls: 0.5 # cls loss gain
cls_pw: 1.0 # cls BCELoss positive_weight
obj: 1.0 # obj loss gain (scale with pixels)
obj_pw: 1.0 # obj BCELoss positive_weight
iou_t: 0.20 # IoU training threshold
anchor_t: 4.0 # anchor-multiple threshold
# anchors: 3  # anchors per output layer (0 to ignore)
fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
hsv_h: 0.015 # image HSV-Hue augmentation (fraction)
hsv_s: 0.7 # image HSV-Saturation augmentation (fraction)
hsv_v: 0.4 # image HSV-Value augmentation (fraction)
degrees: 0.0 # image rotation (+/- deg)
translate: 0.1 # image translation (+/- fraction)
scale: 0.5 # image scale (+/- gain)
shear: 0.0 # image shear (+/- deg)
perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
flipud: 0.0 # image flip up-down (probability)
fliplr: 0.5 # image flip left-right (probability)
mosaic: 1.0 # image mosaic (probability)
mixup: 0.0 # image mixup (probability)
copy_paste: 0.0 # segment copy-paste (probability)

نوصي بحد أدنى قدره 300 جيل من التطور للحصول على أفضل النتائج. لاحظ أن التطور مكلف ويستغرق وقتًا طويلًا عمومًا، إذ يُدرَّب السيناريو الأساسي مئات المرات، وقد يتطلب ذلك مئات أو آلاف الساعات من GPU.

عند انتهاء التطور، أعد استخدام الإعدادات المكتشفة بتوجيه التدريب إلى الملف المحفوظ، مثل python train.py --hyp runs/evolve/exp/hyp_evolve.yaml --data your.yaml --weights yolov5s.pt.

4. التصور المرئي#

يُرسَم evolve.csv باسم evolve.png بواسطة utils.plots.plot_evolve() بعد انتهاء التطور، مع مخطط فرعي واحد لكل معلمة فائقة يوضّح الملاءمة (المحور y) مقابل قيم المعلمة الفائقة (المحور x). ويشير اللون الأصفر إلى التراكيز الأعلى. وتشير التوزيعات العمودية إلى تعطيل إحدى المعلمات وعدم حدوث طفرة فيها. ويمكن للمستخدم تحديد ذلك في قاموس meta في train.py، وهو مفيد لتثبيت المعلمات ومنع تطورها.

نتائج ملاءمة تطوّر المعلمات الفائقة لـ YOLOv5

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

توفر Ultralytics مجموعة من البيئات الجاهزة للاستخدام، وكل منها مثبت مسبقًا مع التبعيات الأساسية مثل CUDA وCUDNN وPython وPyTorch، لبدء مشاريعك.

حالة المشروع#

YOLOv5 CI

تشير هذه الشارة إلى اجتياز جميع اختبارات إجراءات YOLOv5 على GitHub الخاصة بـالتكامل المستمر (CI) بنجاح. تتحقق اختبارات CI هذه بدقة من وظائف YOLOv5 وأدائه عبر جوانب رئيسية متنوعة: التدريب والتحقق والاستدلال والتصدير والمعايير. وتضمن التشغيل المتسق والموثوق على macOS وWindows وUbuntu، مع إجراء الاختبارات كل 24 ساعة وعند كل التزام جديد.

التعليقات