Meet YOLO26: next-gen vision AI.

Link to this sectionتطور المعاملات الفائقة لـ YOLOv5#

📚 يشرح هذا الدليل تطور المعاملات الفائقة (hyperparameter evolution) لـ YOLOv5 🚀. يُعد تطور المعاملات الفائقة أسلوباً من أساليب تحسين المعاملات الفائقة باستخدام خوارزمية جينية (GA) لأغراض التحسين.

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

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

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

Link to this sectionقبل البدء#

استنسخ المستودع وقم بتثبيت 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

Link to this sectionتهيئة المعاملات الفائقة#

يحتوي 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)

Link to this sectionتعريف اللياقة#

اللياقة هي القيمة التي نسعى لتعظيمها. في 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)

Link to this sectionالتطور#

يتم إجراء التطور حول سيناريو أساسي نسعى لتحسينه. السيناريو الأساسي في هذا المثال هو الضبط الدقيق لـ 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.

العوامل الجينية الرئيسية هي التقاطع (crossover) والطفرة (mutation). في هذا العمل، يتم استخدام الطفرة، باحتمالية 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.

Link to this sectionتصور#

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

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

Link to this sectionالبيئات المدعومة#

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

Link to this sectionحالة المشروع#

YOLOv5 CI

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

التعليقات