─░├žeri─če ge├ž

Hiperparametre evrimi

­čôÜ Bu k─▒lavuz YOLOv5 ­čÜÇ i├žin hiperparametre evrimini a├ž─▒klamaktad─▒r. Hiperparametre evrimi, optimizasyon i├žin Genetik Algoritma (GA) kullanan bir Hiperparametre Optimizasyonu y├Ântemidir.

ML'deki hiperparametreler e─čitimin ├že┼čitli y├Ânlerini kontrol eder ve bunlar i├žin optimum de─čerleri bulmak zor olabilir. Izgara aramalar─▒ gibi geleneksel y├Ântemler, 1) y├╝ksek boyutlu arama uzay─▒ 2) boyutlar aras─▒ndaki bilinmeyen korelasyonlar ve 3) her noktada uygunlu─ču de─čerlendirmenin pahal─▒ do─čas─▒ nedeniyle h─▒zla zorla┼čabilir ve GA'y─▒ hiperparametre aramalar─▒ i├žin uygun bir aday haline getirir.

Ba┼člamadan ├ľnce

Repoyu klonlay─▒n ve requirements.txt dosyas─▒n─▒ bir Python>=3.8.0 ortam─▒ dahil olmak ├╝zere PyTorch>=1.8. Modeller ve veri setleri en son YOLOv5 s├╝r├╝m├╝nden otomatik olarak indirilir.

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

1. Hiperparametreleri Ba┼člatma

YOLOv5 ├že┼čitli e─čitim ayarlar─▒ i├žin kullan─▒lan yakla┼č─▒k 30 hiper parametreye sahiptir. Bunlar ┼čurada tan─▒mlanm─▒┼čt─▒r *.yaml i├žindeki dosyalar /data/hyps dizini. Daha iyi ba┼člang─▒├ž tahminleri daha iyi nihai sonu├žlar ├╝retecektir, bu nedenle geli┼čtirmeden ├Ânce bu de─čerleri d├╝zg├╝n bir ┼čekilde ba┼člatmak ├Ânemlidir. ┼×├╝pheniz varsa, YOLOv5 COCO e─čitimi i├žin s─▒f─▒rdan optimize edilmi┼č varsay─▒lan de─čerleri kullan─▒n.

# 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. Fitness'─▒ tan─▒mlay─▒n

Uygunluk, maksimize etmeye ├žal─▒┼čt─▒─č─▒m─▒z de─čerdir. YOLOv5 adresinde, metriklerin a─č─▒rl─▒kl─▒ bir kombinasyonu olarak varsay─▒lan bir uygunluk fonksiyonu tan─▒ml─▒yoruz: mAP@0.5 a─č─▒rl─▒─č─▒n %10'una katk─▒da bulunur ve mAP@0.5:0.95 kalan %90'─▒na katk─▒da bulunurken Hassasiyet P ve Geri ├ça─č─▒rma R yok. Bunlar─▒ uygun g├Ârd├╝─č├╝n├╝z ┼čekilde ayarlayabilir veya utils/metrics.py'deki varsay─▒lan fitness tan─▒m─▒n─▒ kullanabilirsiniz (├Ânerilir).

def fitness(x):
    """Evaluates model fitness by summing weighted metrics [P, R, mAP@0.5, mAP@0.5:0.95], x is a numpy array of shape (n, 4)."""
    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. Evrimle┼čmek

Evrim, geli┼čtirmeye ├žal─▒┼čt─▒─č─▒m─▒z temel bir senaryo hakk─▒nda ger├žekle┼čtirilir. Bu ├Ârnekteki temel senaryo, ├Ânceden e─čitilmi┼č YOLOv5'ler kullan─▒larak COCO128'in 10 epok i├žin ince ayarlanmas─▒d─▒r. Temel senaryo e─čitim komutu ┼č├Âyledir:

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

Hiperparametreleri geli┼čtirmek i├žin bu senaryoya ├Âzg├╝'de tan─▒mlanan ba┼člang─▒├ž de─čerlerimizden ba┼člayarak B├Âl├╝m 1.'de tan─▒mlanan uygunlu─ču maksimize etmektir. B├Âl├╝m 2., ekle --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

Varsay─▒lan evrim ayarlar─▒ temel senaryoyu 300 kez, yani 300 nesil boyunca ├žal─▒┼čt─▒racakt─▒r. Nesilleri ┼ču yolla de─či┼čtirebilirsiniz --evolve arg├╝man─▒, yani python train.py --evolve 1000.

Ana genetik operat├Ârler ┼čunlard─▒r ├žapraz ge├ži┼č ve mutasyon. Bu ├žal─▒┼čmada, ├Ânceki t├╝m nesillerden en iyi ebeveynlerin bir kombinasyonuna dayanan yeni yavrular olu┼čturmak i├žin %80 olas─▒l─▒k ve 0,04 varyans ile mutasyon kullan─▒lm─▒┼čt─▒r. Sonu├žlar ┼ču adrese kaydedilir runs/evolve/exp/evolve.csvolarak kaydedilir ve en y├╝ksek uygunlu─ča sahip yavru her nesilde 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)

En iyi sonu├žlar i├žin en az 300 nesil evrim ├Âneriyoruz. Temel senaryo y├╝zlerce kez e─čitildi─činden ve muhtemelen y├╝zlerce veya binlerce GPU saati gerektirdi─činden, evrimin genellikle pahal─▒ ve zaman al─▒c─▒ oldu─čunu unutmay─▒n.

4. G├Ârselle┼čtirin

evolve.csv olarak ├žizilir evolve.png taraf─▒ndan utils.plots.plot_evolve() Evrim hiperparametre de─čerlerine (x-ekseni) kar┼č─▒ uygunlu─ču (y-ekseni) g├Âsteren hiperparametre ba┼č─▒na bir alt grafikle tamamland─▒ktan sonra. Sar─▒, daha y├╝ksek konsantrasyonlar─▒ g├Âsterir. Dikey da─č─▒l─▒mlar bir parametrenin devre d─▒┼č─▒ b─▒rak─▒ld─▒─č─▒n─▒ ve mutasyona u─čramad─▒─č─▒n─▒ g├Âsterir. Bu kullan─▒c─▒ taraf─▒ndan se├žilebilir meta s├Âzl├╝─č├╝d├╝r ve parametreleri sabitlemek ve evrimle┼čmelerini ├Ânlemek i├žin kullan─▒┼čl─▒d─▒r.

evolve

Desteklenen Ortamlar

Ultralytics her biri CUDA, CUDNN gibi temel ba─č─▒ml─▒l─▒klarla ├Ânceden y├╝klenmi┼č bir dizi kullan─▒ma haz─▒r ortam sa─člar, Pythonve PyTorchProjelerinizi ba┼člatmak i├žin.

Proje Durumu

YOLOv5 CI

Bu rozet, t├╝m YOLOv5 GitHub Actions S├╝rekli Entegrasyon (CI) testlerinin ba┼čar─▒yla ge├žti─čini g├Âsterir. Bu CI testleri, YOLOv5 'un i┼člevselli─čini ve performans─▒n─▒ ├že┼čitli temel y├Ânlerden titizlikle kontrol eder: e─čitim, do─črulama, ├ž─▒kar─▒m, d─▒┼ča aktarma ve k─▒yaslamalar. Her 24 saatte bir ve her yeni i┼člemde yap─▒lan testlerle macOS, Windows ve Ubuntu ├╝zerinde tutarl─▒ ve g├╝venilir ├žal─▒┼čma sa─člarlar.



Created 2023-11-12, Updated 2024-06-10
Authors: glenn-jocher (5)

Yorumlar