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 kümen yeterince büyük ve iyi etiketlenmişse modellerde veya eğitim ayarlarında değişiklik yapmadan iyi sonuçlar alabilirsin. Başlangıçta iyi sonuçlar alamazsan bunları iyileştirmek için uygulayabileceğin adımlar var; ancak herhangi bir değişikliği değerlendirmeden önce kullanıcılara önce tüm varsayılan ayarlarla eğitim yapmalarını her zaman öneririz. Böylece bir performans başlangıç noktası oluşturabilir ve iyileştirme alanlarını belirleyebilirsin.
Eğitim sonuçlarınla ilgili soruların varsa, yararlı bir yanıt alabilmek için mümkün olduğunca fazla bilgi paylaşmanı öneririz. Bu bilgilere sonuç grafikleri (train loss, val loss, P, R, mAP), PR eğrisi, karışıklık matrisi, eğitim mozaikleri, test sonuçları ve labels.png gibi veri kümesi istatistiklerini gösteren görseller dahildir. Bunların tümü project/name dizininde, genellikle yolov5/runs/train/exp altında bulunur.
Aşağıda, YOLOv5 eğitimlerinde en iyi sonuçları almak isteyen kullanıcılar için kapsamlı bir kılavuz hazırladık.
Veri kümesi#
- Sınıf başına görsel. Sınıf başına ≥ 1500 görsel önerilir
- Sınıf başına örnek. Sınıf başına ≥ 10000 örnek (etiketlenmiş nesne) önerilir
- Görsel çeşitliliği. Dağıtım ortamını temsil etmelidir. Gerçek dünyadaki 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 (çevrimiçi toplanmış, yerel olarak derlenmiş, farklı kameralarla çekilmiş vb.) görseller kullanmanı öneririz.
- Etiket tutarlılığı. Tüm görsellerdeki tüm sınıfların tüm örnekleri etiketlenmelidir. Kısmi etiketleme işe yaramaz.
- Etiket doğruluğu. Etiketler her nesneyi yakından çevrelemelidir. Bir nesne ile sınırlayıcı kutusu arasında boşluk olmamalıdır. Hiçbir nesne etiketsiz bırakılmamalıdır.
- Eğitim/doğrulama bölme disiplini. Aşırı iyimser metrikleri önlemek için doğrulama ve test görsellerinin eğitim kümesinde hiç yer almadığından emin ol. Bölümler arasındaki sınıf dağılımlarını benzer tut.
- Etiket doğrulama. Etiketlerinin doğru göründüğünü doğrulamak için eğitim başlarken
train_batch*.jpgdosyasını görüntüle; yani örnek mozaiğe bak. - Arka plan görselleri. Arka plan görselleri, yanlış pozitifleri (FP) azaltmak için veri kümesine eklenen, nesne içermeyen görsellerdir. Yanlış pozitifleri azaltmaya yardımcı olmak için yaklaşık %0-10 oranında arka plan görseli kullanmanı öneririz (referans olması açısından COCO'da toplamın %1'ine denk gelen 1000 arka plan görseli bulunur). Arka plan görselleri için etiket gerekmez.
Model Seçimi#
YOLOv5x ve YOLOv5x6 gibi daha büyük modeller neredeyse tüm durumlarda daha iyi sonuçlar verir; ancak daha fazla parametreye sahiptir, eğitim için daha fazla CUDA belleği gerektirir ve daha yavaş çalışır. Mobil dağıtımlar için YOLOv5s/m, bulut dağıtımları için YOLOv5l/x öneririz. Tüm modellerin kapsamlı karşılaştırması için README tablomuz sayfasına bak.

-
Önceden eğitilmiş ağırlıklarla başla. Küçük ve orta ölçekli veri kümeleri için önerilir (ör. VOC, VisDrone, GlobalWheat). Model adını
--weightsargü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 kümeleri için önerilir (ör. COCO, Objects365, OIv6). İlgilendiğin model mimarisinin YAML dosyasını boş bir
--weights ''argümanıyla birlikte 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 değişiklik yapmadan önce, bir performans başlangıç noktası oluşturmak için önce varsayılan ayarlarla eğitim yap. train.py ayarlarının tam listesi train.py argparser'ında bulunabilir.
- Epoch sayısı. 300 epoch ile başla. Erken aşamada aşırı uyum görülürse epoch sayısını azaltabilirsin. 300 epoch sonrasında aşırı uyum oluşmazsa eğitimi 600, 1200 vb. epoch boyunca sürdür.
- Görsel boyutu. COCO, yerel
--img 640çözünürlüğünde eğitilir; ancak veri kümesindeki küçük nesne sayısının fazla olması nedeniyle--img 1280gibi daha yüksek çözünürlüklerde eğitimden yarar görebilir. Çok sayıda küçük nesne varsa özel veri kümeleri yerel veya daha yüksek çözünürlükte eğitimden yarar görür. En iyi çıkarım sonuçları, eğitimin yapıldığı--imgile aynı çözünürlükte elde edilir; yani--img 1280çözünürlüğünde eğitim yaparsan--img 1280çözünürlüğünde de test ve tespit yapmalısın. - Yığın boyutu. Donanımının desteklediği en büyük
--batch-sizedeğerini kullan. Küçük yığın boyutları, zayıf yığın normalizasyonu istatistiklerine yol açar ve bunlardan kaçınılmalıdır. GPU'n için en uygun yığın boyutunu otomatik olarak seçmek üzere--batch-size -1kullanabilirsin. - Öğrenme oranı. Varsayılan öğrenme oranı zamanlaması çoğu durumda iyi çalışır. Daha hızlı yakınsama için
--cos-lrbayrağını kullanarak kosinüs öğrenme oranı zamanlamasını etkinleştirebilirsin; bu yöntem epoch'lar boyunca kosinüs eğrisini izleyerek öğrenme oranını kademeli olarak düşürür. - Veri artırma. YOLOv5, birden fazla eğitim görselini birleştiren mozaik gibi çeşitli veri artırma teknikleri içerir. Eğitimi kararlı hâle getirmeye yardımcı olmak için
--hypdosyandakimosaichiperparametresiyle veri artırma düzeyini ayarla. - Hiperparametreler. Varsayılan hiperparametreler hyp.scratch-low.yaml dosyasındadır. Herhangi bir değişiklik yapmayı düşünmeden önce varsayılan hiperparametrelerle eğitim yapmanı öneririz. Genel olarak veri artırma hiperparametrelerini artırmak aşırı uyumu azaltıp geciktirerek daha uzun eğitimlere ve daha yüksek son mAP değerlerine olanak tanır.
hyp['obj']gibi loss bileşeni katsayısı hiperparametrelerini azaltmak, ilgili loss bileşenlerindeki aşırı uyumu azaltmaya yardımcı olur. Bu hiperparametreleri otomatik olarak optimize etme yöntemi için Hiperparametre Evrimi Öğreticimize bak. - Karma duyarlıklı eğitim. Desteklenen bir GPU algılandığında YOLOv5 Otomatik Karma Duyarlılığı (AMP) otomatik olarak etkinleştirir; böylece model doğruluğundan ödün vermeden eğitim hızlanır ve bellek kullanımı azalır.
- Çoklu GPU ile eğitim. Birden fazla GPU'n varsa, eğitimi bunlara dağıtmak için
--device 0,1,2,3kullan; bu, eğitim süresini önemli ölçüde azaltabilir. - Erken durdurma. Doğrulama metrikleri 50 epoch boyunca iyileşmezse eğitimi durdurmak, zaman kazanmak ve aşırı uyumu önlemek için
--patience 50kullan.
Gelişmiş Optimizasyon Teknikleri#
- Aktarım öğrenimi. Özel veri kümeleri için önceden eğitilmiş ağırlıklarla başla ve modeli belirli görevine uyarlamak üzere isteğe bağlı olarak
--freezeile katmanları dondur. - Model budama. Eğitimden sonra, önemli bir performans kaybı olmadan gereksiz ağırlıkları kaldırmak ve model boyutunu küçültmek için modelini budamayı düşünebilirsin.
- Model topluluğu. Kritik uygulamalar için farklı yapılandırmalarla birden fazla model eğit ve doğruluğu artırmak amacıyla bu modellerin tahminlerini birleştir.
- Test zamanı artırma. Girdi görselinin 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
--augmentile TTA'yı etkinleştir.
Ek Okumalar#
Daha fazlasını öğrenmek istiyorsan başlamak için Karpathy'nin Sinir Ağlarını Eğitme Reçetesi iyi bir kaynak; bu reçete, tüm ML alanlarında geniş ölçüde uygulanabilecek harika eğitim fikirleri içeriyor: https://karpathy.github.io/2019/04/25/recipe/
İyi şanslar 🍀; başka soruların varsa bize bildir!
Sık Sorulan Sorular#
Eğitim loss'u düşmeye devam ederken doğrulama loss'u artmaya başlarsa modelin aşırı uyum gösteriyor olabilir. Doğrulama mAP değerini izle: Eğitim loss'u iyileşmeye devam ederken mAP sabit kalıyor veya düşüyorsa bu, aşırı uyumun işaretidir. Çözümler arasında daha fazla eğitim verisi eklemek, veri artırmayı artırmak veya düzenlileştirme teknikleri uygulamak bulunur.
En uygun yığın boyutu GPU belleğine bağlıdır. Daha büyük yığın boyutları genellikle daha iyi yığın normalizasyonu istatistikleri ve eğitim kararlılığı sağlar. Bellek yetersizliği yaşamadan donanımının destekleyebileceği en büyük yığın boyutunu kullan. Kurulumun için en uygun yığın boyutunu otomatik olarak belirlemek üzere
--batch-size -1kullanabilirsin.Eğitimi hızlandırmak için şunları dene:
--device 0,1,2,3ile birden fazla GPU kullan, veri kümeni--cacheile önbelleğe al ve yığın boyutunu optimize et (desteklenen GPU'larda karma duyarlılık otomatik olarak etkinleştirilir). Mutlak doğruluk kritik değilse YOLOv5s gibi daha küçük bir model varyantı kullanmayı da düşünebilirsin.
