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):
"""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şmek
Evolution is performed about a base scenario which we seek to improve upon. The base scenario in this example is finetuning COCO128 for 10 epochs using pretrained YOLOv5s. The base scenario training command is:
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.csv
olarak 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 saat 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.
Desteklenen Ortamlar
Ultralytics gibi temel bağımlılıklarla önceden yüklenmiş bir dizi kullanıma hazır ortam sağlar. CUDA, CUDNN, Pythonve PyTorchProjelerinizi başlatmak için.
- Ücretsiz GPU Not Defterleri:
- Google Bulut: GCP Hızlı Başlangıç Kılavuzu
- Amazon: AWS Hızlı Başlangıç Kılavuzu
- Azure: AzureML Hızlı Başlangıç Kılavuzu
- Docker: Docker Hızlı Başlangıç Kılavuzu
Proje Durumu
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.