En İyi YOLOv5 Eğitim Sonuçları İçin İpuçları

📚 Bu kılavuz, YOLOv5 ile en iyi mAP ve eğitim sonuçlarını nasıl elde edeceğini açıklar 🚀.

Çoğu zaman, veri setin yeterince büyük ve iyi etiketlenmiş olması koşuluyla, model veya eğitim ayarlarında herhangi bir değişiklik yapmadan iyi sonuçlar elde edilebilir. Eğer ilk seferde iyi sonuç alamazsan, iyileştirme yapmak için uygulayabileceğin adımlar mevcuttur ancak herhangi bir değişiklik yapmayı düşünmeden önce her zaman önce tüm varsayılan ayarlarla eğitim yapmanı öneririz. Bu, bir performans temeli oluşturmana ve geliştirilmesi gereken alanları belirlemene yardımcı olur.

If you have questions about your training results we recommend you provide the maximum amount of information possible if you expect a helpful response, including results plots (train losses, val losses, P, R, mAP), PR curve, confusion matrix, training mosaics, test results and dataset statistics images such as labels.png. All of these are located in your project/name directory, typically yolov5/runs/train/exp.

YOLOv5 eğitimlerinden en iyi sonuçları almak isteyen kullanıcılar için aşağıda eksiksiz bir kılavuz hazırladık.

Veri Kümesi

  • Sınıf başına görüntü. Sınıf başına ≥ 1500 görüntü önerilir
  • Sınıf başına örnek. Sınıf başına ≥ 10000 örnek (etiketlenmiş nesne) önerilir
  • Görüntü çeşitliliği. Dağıtım yapılan ortamı temsil etmelidir. Gerçek dünya kullanım senaryoları için günün farklı saatlerinden, farklı mevsimlerden, farklı hava koşullarından, farklı aydınlatmalardan, farklı açılardan, farklı kaynaklardan (çevrimiçi taranmış, yerel olarak toplanmış, farklı kameralar) vb. görüntüler öneririz.
  • Etiket tutarlılığı. Tüm görüntülerdeki tüm sınıflara ait tüm örnekler etiketlenmelidir. Kısmi etiketleme işe yaramayacaktır.
  • Etiket doğruluğu. Etiketler her nesneyi yakından çevrelemelidir. Nesne ile bounding box arasında boşluk olmamalıdır. Etiketi eksik hiçbir nesne kalmamalıdır.
  • Eğitim/doğrulama ayrımı disiplini. Aşırı iyimser metriklerden kaçınmak için doğrulama ve test görüntülerinin eğitim setinde asla görünmediğinden emin ol. Sınıf dağılımlarını ayrılan kümeler arasında benzer tut.
  • Etiket doğrulama. Etiketlerinin doğru göründüğünü doğrulamak için eğitim başlangıcında train_batch*.jpg dosyasını incele, yani örnek mozaik.
  • Arka plan görüntüleri. Arka plan görüntüleri, Yanlış Pozitifleri (FP) azaltmak için veri setine eklenen, içinde nesne bulunmayan görüntülerdir. FP'leri azaltmaya yardımcı olması için %0-10 civarında arka plan görüntüsü öneririz (referans olarak COCO'da toplamın %1'i olan 1000 arka plan görüntüsü bulunur). Arka plan görüntüleri için etiket gerekmez.

COCO veri seti sınıf dağılım analizi

Model Seçimi

YOLOv5x ve YOLOv5x6 gibi daha büyük modeller neredeyse her durumda daha iyi sonuçlar verecektir, ancak daha fazla parametreye sahiptirler, eğitmek için daha fazla CUDA belleği gerektirirler ve çalıştırılmaları daha yavaştır. Mobil dağıtımlar için YOLOv5s/m, bulut dağıtımları için YOLOv5l/x modellerini öneririz. Tüm modellerin tam karşılaştırması için README tablomuza bakabilirsin.

YOLOv5 Models

  • Önceden eğitilmiş ağırlıklarla başla. Küçük ve orta ölçekli veri setleri için önerilir (ör. VOC, VisDrone, GlobalWheat). Modelin adını --weights argümanına geçir. Modeller, en son YOLOv5 sürümünden otomatik olarak indirilir.

    python train.py --data custom.yaml --weights yolov5s.pt
    python train.py --data custom.yaml --weights yolov5m.pt
    python train.py --data custom.yaml --weights yolov5l.pt
    python train.py --data custom.yaml --weights yolov5x.pt
    python train.py --data custom.yaml --weights custom_pretrained.pt
  • Sıfırdan başla. Büyük veri setleri için önerilir (ör. COCO, Objects365, OIv6). İlgilendiğin model mimarisi YAML dosyasını ve boş bir --weights '' argümanını geçir:

    python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
    python train.py --data custom.yaml --weights '' --cfg yolov5m.yaml
    python train.py --data custom.yaml --weights '' --cfg yolov5l.yaml
    python train.py --data custom.yaml --weights '' --cfg yolov5x.yaml

Eğitim Ayarları

Herhangi bir şeyi değiştirmeden önce, bir performans temeli oluşturmak için önce varsayılan ayarlarla eğitim yap. train.py ayarlarının tam listesi train.py argparser kısmında bulunabilir.

  • Epochs. 300 epoch ile başla. Eğer bu erken aşırı öğrenmeye (overfit) yol açarsa epoch sayısını azaltabilirsin. 300 epoch'tan sonra overfitting oluşmazsa, daha uzun süre yani 600, 1200 vb. epoch kadar eğitim yap.
  • Görüntü boyutu. COCO, --img 640 yerel çözünürlüğünde eğitilir, ancak veri setindeki çok sayıda küçük nesne nedeniyle --img 1280 gibi daha yüksek çözünürlüklerde eğitim yapmaktan fayda sağlayabilir. Eğer çok fazla küçük nesne varsa, özel veri setleri yerel veya daha yüksek çözünürlükte eğitim yapmaktan faydalanacaktır. En iyi çıkarım (inference) sonuçları, eğitimin yapıldığı --img değeri ile aynı değerde elde edilir, yani --img 1280 ile eğitim yaparsan, test ve tespiti de --img 1280 ile yapmalısın.
  • Batch size. Donanımının izin verdiği en büyük --batch-size değerini kullan. Küçük batch boyutları zayıf batch normalization istatistikleri üretir ve bundan kaçınılmalıdır. GPU'n için en uygun batch boyutunu otomatik olarak seçmek için --batch-size -1 kullanabilirsin.
  • Learning rate. Varsayılan öğrenme oranı çizelgesi çoğu durumda iyi çalışır. Daha hızlı yakınsama için, öğrenme oranını epochlar boyunca kosinüs eğrisi izleyerek kademeli olarak azaltan kosinüs öğrenme oranı çizelgelemesini etkinleştirmek amacıyla --cos-lr bayrağını kullanmayı deneyebilirsin.
  • Data augmentation. YOLOv5, birden fazla eğitim görüntüsünü birleştiren mosaic gibi çeşitli artırma tekniklerini içerir. Son birkaç epoch için, eğitimi dengelemeye yardımcı olabilecek mosaic artırmasını devre dışı bırakmak için --close-mosaic 10 kullanmayı düşün.
  • Hiperparametreler. Varsayılan hiperparametreler hyp.scratch-low.yaml dosyasındadır. Herhangi birini değiştirmeyi düşünmeden önce varsayılan hiperparametrelerle eğitim yapmanı öneririz. Genel olarak, artırma hiperparametrelerini artırmak, aşırı öğrenmeyi azaltacak ve geciktirecek, daha uzun eğitimlere ve daha yüksek nihai mAP değerlerine olanak tanıyacaktır. hyp['obj'] gibi kayıp bileşeni kazanç hiperparametrelerinin azaltılması, o özel kayıp bileşenlerindeki aşırı öğrenmeyi azaltmaya yardımcı olacaktır. Bu hiperparametreleri optimize etmenin otomatik bir yöntemi için Hiperparametre Evrimi Eğitimimize bakabilirsin.
  • Mixed precision eğitimi. Model doğruluğundan ödün vermeden eğitimi hızlandırmak ve bellek kullanımını azaltmak için --amp ile karma hassasiyetli eğitimi etkinleştir.
  • Çoklu GPU eğitimi. Eğer birden fazla GPU'n varsa, eğitimi bunlar arasında dağıtmak için --device 0,1,2,3 kullan; bu, eğitim süresini önemli ölçüde azaltabilir.
  • Erken durdurma (Early stopping). Doğrulama metrikleri 50 epoch boyunca iyileşmezse eğitimi durdurmak, zaman kazanmak ve aşırı öğrenmeyi önlemek için --patience 50 kullan.

İleri Düzey Optimizasyon Teknikleri

  • Transfer learning. Özel veri setleri için, önceden eğitilmiş ağırlıklarla başla ve modeli özel görevine uyarlamak için eğitim sırasında katmanları kademeli olarak dondurmayı kaldır.
  • Model pruning. Eğitimden sonra, gereksiz ağırlıkları kaldırmak ve performansta önemli bir kayıp yaşamadan model boyutunu küçültmek için modelini budamayı (pruning) düşün.
  • Model ensemble. Kritik uygulamalar için, farklı yapılandırmalarla birden fazla model eğit ve daha yüksek doğruluk için tahminlerini birleştir.
  • Test-time augmentation. Giriş görüntüsünün artırılmış sürümlerinden elde edilen sonuçların ortalamasını alarak tahmin doğruluğunu artırmak için çıkarım sırasında --augment ile TTA'yı etkinleştir.

Daha Fazla Okuma

Daha fazlasını öğrenmek istersen, başlamak için iyi bir yer, tüm ML alanlarında genel olarak geçerli olan harika eğitim fikirleri içeren Karpathy'nin 'Neural Networks Eğitimi İçin Tarif' adlı makalesidir: https://karpathy.github.io/2019/04/25/recipe/

Eğitim ayarları ve yapılandırmaları hakkında daha ayrıntılı bilgi için, mevcut tüm parametrelerin kapsamlı açıklamalarını sunan Ultralytics eğitim ayarları belgelerine başvur.

Bol şans 🍀 ve başka soruların olursa bize bildir!

SSS

Modelimin aşırı öğrenip öğrenmediğini nasıl anlarım?

Eğitim kaybı azalmaya devam ederken doğrulama kaybı artmaya başlıyorsa modelin aşırı öğreniyor olabilir. Doğrulama mAP değerini izle; eğer eğitim kaybı iyileşmeye devam ederken bu değer sabit kalır veya azalırsa, bu bir aşırı öğrenme işaretidir. Çözümler arasında daha fazla eğitim verisi eklemek, veri artırmayı (data augmentation) artırmak veya düzenlileştirme (regularization) tekniklerini uygulamak yer alır.

YOLOv5 eğitimi için en uygun batch boyutu nedir?

En uygun batch boyutu GPU belleğine bağlıdır. Daha büyük batch boyutları genellikle daha iyi batch normalizasyon istatistikleri ve eğitim kararlılığı sağlar. Donanımının bellek sorunu yaşamadan kaldırabileceği en büyük batch boyutunu kullan. Kurulumun için en uygun batch boyutunu otomatik olarak belirlemek için --batch-size -1 kullanabilirsin.

YOLOv5 eğitimini nasıl hızlandırabilirim?

Eğitimi hızlandırmak için şunları dene: --amp ile karma hassasiyetli eğitimi etkinleştir, --device 0,1,2,3 ile birden fazla GPU kullan, --cache ile veri setini önbelleğe al ve batch boyutunu optimize et. Ayrıca, mutlak doğruluk kritik değilse YOLOv5s gibi daha küçük bir model varyantı kullanmayı düşün.

Yorumlar