Skip to main content

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, modellerde veya eğitim ayarlarında herhangi bir değişiklik yapmadan iyi sonuçlar elde edilebilir; yeterince büyük ve iyi etiketlenmiş bir veri setine sahip olduğun sürece. İlk seferde iyi sonuçlar alamazsan, durumu iyileştirmek için atabileceğin adımlar olabilir; ancak biz her zaman kullanıcılara önce tüm varsayılan ayarlarla eğitim yapmalarını öneriyoruz. Bu, bir performans temeli oluşturmana ve iyileştirme gerektiren alanları belirlemene yardımcı olur.

Eğitim sonuçların hakkında soruların varsa yardımcı bir yanıt bekliyorsan mümkün olan en fazla bilgiyi sağlamanı öneririz; buna sonuç grafikleri (eğitim kayıpları, doğrulama kayıpları, P, R, mAP), PR eğrisi, confusion matrix, eğitim mozaikleri, test sonuçları ve labels.png gibi veri seti istatistik görselleri dahildir. Bunların hepsi project/name dizininde bulunur, genellikle yolov5/runs/train/exp.

YOLOv5 eğitimlerinden en iyi sonuçları almak isteyen kullanıcılar için aşağıda kapsamlı 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ılan ortamı temsil etmelidir. Gerçek dünya kullanım durumları için günün farklı saatlerinden, farklı mevsimlerden, farklı hava koşullarından, farklı ışıklandırmalardan, farklı açılardan ve farklı kaynaklardan (internetten toplanan, yerel olarak toplanan, farklı kameralardan) alınmış 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 çalışmayacaktır.
  • Etiket YOLO modelleri için eğitim ayarları, eğitim sürecinde kullanılan çeşitli hiperparametreleri ve yapılandırmaları kapsar. Bu ayarlar modelin performansını, hızını ve . Etiketler her nesneyi tam olarak sarmalıdır. Nesne ile bounding box arasında boşluk olmamalıdır. Hiçbir nesnenin etiketi eksik olmamalı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ı bölümler arasında benzer tut.
  • Etiket doğrulama. Etiketlerinin doğru göründüğünü doğrulamak için eğitime başlarken train_batch*.jpg kısmına bak, yani örnek mozaiklerini gör.
  • Arka plan görüntüleri. Arka plan görüntüleri, Yanlış Pozitifleri (FP) azaltmak için veri setine eklenen, nesne içermeyen görüntülerdir. FP'leri azaltmaya yardımcı olması için yaklaşık %0-10 oranında arka plan görüntüsü öneriyoruz (COCO'da referans olarak 1000 arka plan görüntüsü vardır, toplamın %1'i). Arka plan görüntüleri için etiket gerekmez.

COCO dataset class distribution analysis

Model Seçimi

YOLOv5x ve YOLOv5x6 gibi daha büyük modeller neredeyse her durumda daha iyi sonuçlar verir ancak daha fazla parametreye sahiptir, eğitmek için daha fazla CUDA belleği gerektirir 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 öneririz. Tüm modellerin tam karşılaştırması için README tablomuza bakabilirsin.

YOLOv5 Models

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

    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 (örneğin olarak ayarla. , Objects365, OIv6). İlgilendiğin model mimarisi YAML dosyasını, boş bir --weights '' argümanını kullanarak annotation türünü belirtebilirsin:

    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, performans temeli oluşturmak için önce varsayılan ayarlarla eğitim yap. train.py ayarlarının tam listesini train.py argparser içerisinde bulabilirsin.

  • Epok. 300 epoch ile başla. Eğer bu erken aşırı öğrenmeye (overfit) yol açarsa epoch sayısını azaltabilirsin. Eğer 300 epoch sonunda aşırı öğrenme oluşmazsa, 600, 1200 gibi daha uzun süreli eğitimler yap.
  • Görüntü boyutu. COCO, --img 640 doğal çö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ğitimden fayda sağlayabilir. Eğer çok sayıda küçük nesne varsa, özel veri setleri doğal veya daha yüksek çözünürlükte eğitimden fayda görür. En iyi çıkarım sonuçları, eğitimle aynı --img değerinde elde edilir; yani --img 1280 ile eğitirsen, test ve tespit işlemlerini de --img 1280.
  • Batch size. ile yapmalısın. 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 bunlardan kaçınılmalıdır. GPU'n için en uygun batch boyutunu otomatik seçmek için --batch-size -1 kullanabilirsin.
  • Öğrenme oranı. Varsayılan öğrenme oranı çizelgesi çoğu durumda iyi çalışır. Daha hızlı yakınsama için, epoch'lar boyunca kosinüs eğrisini takip ederek öğrenme oranını kademeli olarak düşüren kosinüs öğrenme oranı çizelgesini etkinleştiren --cos-lr bayrağını kullanmayı deneyebilirsin.
  • teknikleri, . YOLOv5, birden fazla eğitim görüntüsünü birleştiren mosaic gibi çeşitli artırma teknikleri içerir. Son birkaç epoch için, eğitimi stabilize etmeye yardımcı olabilecek mosaic artırmasını devre dışı bırakmak adına --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'ye olanak tanıyacaktır. hyp['obj'] gibi kayıp bileşeni kazanç hiperparametrelerinin azaltılması, bu belirli kayıp bileşenlerinde aşırı öğrenmeyi azaltmaya yardımcı olacaktır. Bu hiperparametreleri optimize etmenin otomatik bir yöntemi için Hiperparametre Evrimi Eğitimi.
  • YOLO modelleri ile neden mixed precision eğitimi kullanmalısın? eğitimimize bak. Model doğruluğundan ödün vermeden eğitimi hızlandırmak ve bellek kullanımını azaltmak için --amp ile karma hassasiyetli (mixed precision) eğitimi etkinleştir.
  • Çoklu GPU eğitimi. Birden fazla GPU'n varsa, eğitimi bunlar arasında dağıtmak ve eğitim süresini önemli ölçüde azaltmak için --device 0,1,2,3 kullan.
  • Erken durdurma. YOLO'nun letterbox ön işlemesini GPU üzerinde kopyalamak için --patience 50 Doğrulama metrikleri 50 epoch boyunca iyileşmezse eğitimi durdurmak, zamandan tasarruf etmek ve aşırı öğrenmeyi önlemek için kullan.

Gelişmiş Optimizasyon Teknikleri

  • Transfer öğrenimi. Ö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 çöz (unfreeze).
  • Model budama (pruning). Eğitimden sonra, gereksiz ağırlıkları kaldırmak ve performans kaybı olmadan model boyutunu küçültmek için modelini budamayı düşün.
  • Model topluluğu (ensemble). Kritik uygulamalar için farklı konfigürasyonlara sahip birden fazla model eğit ve daha yüksek doğruluk için tahminlerini birleştir.
  • Çıkarım zamanı artırması (TTA). Giriş görüntüsünün artırılmış versiyonlarından 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 Karpathy'nin 'Recipe for Training Sinir Ağlarını' adlı çalışmasıdır; bu çalışma, tüm ML alanlarında geniş ölçüde geçerli olan harika eğitim fikirleri içerir: https://karpathy.github.io/2019/04/25/recipe/

Eğitim ayarları ve yapılandırmaları hakkında daha detaylı bilgi için Ultralytics train settings documentation sayfasına başvurabilirsin, burada mevcut tüm parametrelerin kapsamlı açıklamalarını bulabilirsin.

Bol şans 🍀 ve başka bir sorun olursa bize mutlaka haber ver!

SSS

Modelimin overfitting (aşırı öğrenme) durumunda olduğunu nasıl anlarım?

Eğitim kaybı (training loss) azalmaya devam ederken doğrulama kaybı (validation loss) artmaya başlıyorsa modelin overfitting yaşıyor olabilir. Doğrulama mAP değerini izle; eğer eğitim kaybı iyileşmeye devam ederken bu değer düzleşirse veya düşerse, bu bir overfitting işaretidir. Çözümler arasında daha fazla eğitim verisi eklemek, veri artırmayı (data augmentation) artırmak veya düzenlileştirme (regularization) teknikleri uygulamak yer alır.

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

En uygun batch size, GPU belleğine bağlıdır. Daha büyük batch size değerleri genellikle daha iyi batch normalization istatistikleri ve eğitim kararlılığı sağlar. Bellek hatası almadan donanımının kaldırabileceği en büyük batch size değerini kullan. Kurulumun için en uygun batch size değerini 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 karışık hassasiyetli (mixed precision) eğitimi etkinleştir, --device 0,1,2,3 ile çoklu GPU kullan, --cache ile veri setini önbelleğe al ve batch size değerini optimize et. Ayrıca mutlak doğruluk kritik değilse YOLOv5s gibi daha küçük bir model varyantı kullanmayı düşün.

Yorumlar