انتقل إلى المحتوى

تطور المعلمات الفائقة

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

تتحكم المعلمات الفائقة في ML في جوانب مختلفة من التدريب ، ويمكن أن يمثل إيجاد القيم المثلى لها تحديا. يمكن أن تصبح الطرق التقليدية مثل عمليات البحث الشبكية مستعصية بسرعة بسبب 1) مساحة البحث عالية الأبعاد 2) الارتباطات غير المعروفة بين الأبعاد ، و 3) الطبيعة المكلفة لتقييم الملاءمة في كل نقطة ، مما يجعل GA مرشحا مناسبا لعمليات البحث عن المعلمات الفائقة.

قبل البدء

استنساخ الريبو ومتطلبات التثبيت .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 غائب. يمكنك تعديلها على النحو الذي تراه مناسبا أو استخدام تعريف اللياقة الافتراضي في الأدوات / المقاييس .py (مستحسن).

def fitness(x):
    # Model fitness as a weighted combination of metrics
    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
for i in 0 1 2 3 4 5 6 7; do
  sleep $(expr 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

# Multi-GPU bash-while (not recommended)
for i in 0 1 2 3 4 5 6 7; do
  sleep $(expr 30 \* $i) &&  # 30-second delay (optional)
  echo 'Starting GPU '$i'...' &&
  "$(while true; do nohup python train.py... --device $i --evolve 1 > evolve_gpu_$i.log; done)" &
done

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

العوامل الوراثية الرئيسية هي الانتقال و طفرة. في هذا العمل ، يتم استخدام طفرة ، مع احتمال 80 ٪ وتباين 0.04 لإنشاء ذرية جديدة على أساس مزيج من أفضل الآباء من جميع الأجيال السابقة. يتم تسجيل النتائج إلى runs/evolve/exp/evolve.csv، ويتم حفظ أعلى نسل اللياقة البدنية كل جيل كما runs/evolve/hyp_evolved.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 جيل من التطور للحصول على أفضل النتائج. لاحظ أن التطور مكلف بشكل عام ويستغرق وقتا طويلا ، حيث يتم تدريب السيناريو الأساسي مئات المرات ، وربما يتطلب مئات أو آلاف ساعات وحدة معالجة الرسومات.

4. تصور

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

تتطور

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

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

حالة المشروع

YOLOv5 سي آي

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



تم إنشاؤه في 2023-11-12, اخر تحديث 2023-12-03
المؤلفون: جلين جوشر (2)

التعليقات