YOLO Vision 2026:

YOLOv5 için Hiperparametre Evrimi#

📚 Bu kılavuz, YOLOv5 🚀 için hiperparametre evrimini açıklar. Hiperparametre evrimi, optimizasyon için Genetik Algoritma (GA) kullanan bir Hiperparametre Optimizasyonu yöntemidir.

Makine öğrenimindeki hiperparametreler, eğitimin çeşitli yönlerini kontrol eder ve bunlar için optimal değerleri bulmak bir zorluk olabilir. Izgara aramaları gibi geleneksel yöntemler, şunlar nedeniyle hızla yönetilemez hale gelebilir:

  1. Yüksek boyutlu arama uzayı
  2. Boyutlar arasındaki bilinmeyen korelasyonlar
  3. Her noktadaki uygunluğu değerlendirmenin maliyetli doğası

Bu durum, genetik algoritmaları hiperparametre aramaları için uygun bir aday haline getirir.

Başlamadan Önce#

Depoyu klonla ve Python>=3.8.0 ortamında requirements.txt dosyasını PyTorch>=1.8 dahil olacak şekilde yükle. 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şlat#

YOLOv5, çeşitli eğitim ayarları için kullanılan yaklaşık 30 hiperparametreye sahiptir. Bunlar /data/hyps dizinindeki *.yaml dosyalarında tanımlanmıştır. Daha iyi başlangıç tahminleri daha iyi nihai sonuçlar üretecektir, bu nedenle evrimleştirilmeden önce bu değerlerin düzgün bir şekilde başlatılması önemlidir. Şüphe duyarsanız, sıfırdan YOLOv5 COCO eğitimi için optimize edilmiş olan varsayılan değerleri kullanmanız yeterlidir.

# 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. Uygunluğu (Fitness) Tanımla#

Uygunluk, maksimize etmeye çalıştığımız değerdir. YOLOv5'te varsayılan bir uygunluk fonksiyonunu metinlerin ağırlıklı bir kombinasyonu olarak tanımlarız: mAP@0.5 ağırlığın %10'una katkıda bulunur ve mAP@0.5:0.95 kalan %90'ına katkıda bulunur, kesinlik (P) ve duyarlılık (R) ise hariç tutulmuştur. Bunları uygun gördüğünüz şekilde ayarlayabilir veya utils/metrics.py içindeki varsayılan uygunluk tanımını kullanabilirsiniz (önerilir).

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. Evrimleştir#

Evrim, geliştirmeyi amaçladığımız temel bir senaryo etrafında gerçekleştirilir. Bu örnekteki temel senaryo, önceden eğitilmiş YOLOv5s kullanılarak COCO128'in 10 epoch boyunca fine-tuning işlemine tabi tutulmasıdır. Temel senaryo eğitim komutu şöyledir:

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

Bölüm 1.'de tanımlanan başlangıç değerlerimizden başlayarak ve Bölüm 2.'de tanımlanan uygunluğu maksimize ederek bu senaryoya özgü hiperparametreleri evrimleştirmek için --evolve ekleyin:

# 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

Varsayılan evrim ayarları, taban senaryoyu 300 kez, yani 300 nesil boyunca çalıştıracaktır. Nesilleri --evolve argümanı aracılığıyla, yani python train.py --evolve 1000 ile değiştirebilirsiniz.

Ana genetik operatörler çaprazlama ve mutasyondur. Bu çalışmada, önceki tüm nesillerin en iyi ebeveynlerinin bir kombinasyonuna dayanarak yeni yavrular oluşturmak için %80 olasılık ve 0,04 varyans ile mutasyon kullanılır. Sonuçlar runs/evolve/exp/evolve.csv dosyasına kaydedilir ve en yüksek uygunluğa sahip yavru her nesilde runs/evolve/exp/hyp_evolve.yaml olarak kaydedilir:

# 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 nesillik bir evrim öneriyoruz. Temel senaryo yüzlerce kez eğitildiği ve muhtemelen yüzlerce veya binlerce GPU saati gerektirebileceği için evrimin genellikle maliyetli ve zaman alıcı olduğunu unutma.

Evrim sona erdiğinde, eğitimi kaydedilen dosyaya yönlendirerek keşfedilen ayarları yeniden kullanın, örneğin python train.py --hyp runs/evolve/exp/hyp_evolve.yaml --data your.yaml --weights yolov5s.pt.

Görselleştir#

evolve.csv, evrim bittikten sonra her hiperparametre için uygunluğu (y ekseni) hiperparametre değerlerine (x ekseni) karşı gösteren bir alt grafik ile utils.plots.plot_evolve() tarafından evolve.png olarak çizdirilir. Sarı renk daha yüksek yoğunlukları gösterir. Dikey dağılımlar, bir parametrenin devre dışı bırakıldığını ve mutasyona uğramadığını belirtir. Bu, train.py içindeki meta sözlüğünde kullanıcı tarafından seçilebilir ve parametreleri sabitlemek ve evrimleşmelerini önlemek için yararlıdır.

YOLOv5 hiperparametre evrimi uygunluk sonuçları

Desteklenen Ortamlar#

Ultralytics, projelerinizi hızlandırmak için CUDA, CUDNN, Python ve PyTorch gibi temel bağımlılıklarla önceden yüklenmiş bir dizi kullanıma hazır ortam sunar.

Proje Durumu#

YOLOv5 CI

Bu rozet, tüm YOLOv5 GitHub Actions Continuous Integration (CI) testlerinin başarıyla geçtiğini gösterir. Bu CI testleri, YOLOv5'in işlevselliğini ve performansını çeşitli temel yönlerden titizlikle kontrol eder: training, validation, inference, export ve benchmarks. Her 24 saatte bir ve her yeni commit ile gerçekleştirilen testlerle macOS, Windows ve Ubuntu üzerinde tutarlı ve güvenilir bir çalışma sağlarlar.

Katkıda Bulunanlar

Yorumlar