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 edebileceğini açıklar 🚀.
Çoğu zaman, veri kümen yeterince büyük ve iyi etiketlenmişse modellerde veya eğitim ayarlarında hiçbir değişiklik yapmadan iyi sonuçlar elde edilebilir. İlk denemede iyi sonuçlar alamazsan iyileştirme yapmak için uygulayabileceğin bazı adımlar vardır; ancak herhangi bir değişikliği değerlendirmeden önce kullanıcıların ilk olarak tüm varsayılan ayarlarla eğitim yapmasını her zaman öneririz. Bu, bir performans tabanı oluşturmaya ve iyileştirilebilecek alanları belirlemeye yardımcı olur.
Eğitim sonuçlarınla ilgili soruların varsa ve yararlı bir yanıt bekliyorsan mümkün olan en fazla bilgiyi sağlamanı öneririz. Buna sonuç grafikleri (train losses, val losses, P, R, mAP), PR eğrisi, confusion matrix, eğitim mozaikleri, test sonuçları ve labels.png gibi veri kümesi istatistik görüntüleri dahildir. Bunların tümü project/name dizininde, genellikle yolov5/runs/train/exp konumunda bulunur.
YOLOv5 eğitimlerinde en iyi sonuçları elde etmek 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ım yapılacak 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ınlatma koşullarından, farklı açılardan ve farklı kaynaklardan (çevrim içinden toplanmış, yerel olarak derlenmiş, farklı kameralar) 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 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 nesnenin etiketi eksik olmamalıdır.
- Train/val bölme disiplini. Aşırı iyimser metrikleri önlemek için doğrulama ve test görüntülerinin eğitim kümesinde hiçbir zaman yer almadığından emin ol. Bölmeler 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şlangıcında
train_batch*.jpgdosyasını görüntüle; yani örnek mozaiğe bak. - Arka plan görüntüleri. Arka plan görüntüleri, Yanlış Pozitifleri (FP) azaltmak için veri kümesine eklenen ve hiç nesne içermeyen görüntülerdir. FP'leri azaltmaya yardımcı olmak için yaklaşık %0-10 oranında arka plan görüntüsü öneririz (referans olarak COCO'da toplamın %1'ine karşılık gelen 1000 arka plan görüntüsü bulunur). Arka plan görüntüleri 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 kullanmanı öneririz. Tüm modellerin kapsamlı karşılaştırması için README dosyamızdaki tabloya bak.

-
Önceden eğitilmiş ağırlıklarla başla. Küçük ve orta boyutlu veri kümeleri için önerilir (ör. VOC, VisDrone, GlobalWheat). Modelin adını
--weightsbağımsız değişkenine 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 mimarisi YAML dosyasını boş bir
--weights ''bağımsız değişkeniyle 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 şeyi değiştirmeden önce performans tabanı oluşturmak için ilk olarak varsayılan ayarlarla eğitim yap. train.py ayarlarının tam listesine train.py argparser'ından ulaşabilirsin.
- Epoch. 300 epoch ile başla. Erken aşamada aşırı öğrenme olursa epoch sayısını azaltabilirsin. 300 epoch sonrasında aşırı öğrenme oluşmazsa eğitimi 600, 1200 vb. epoch'a kadar uzat.
- Görüntü boyutu. COCO,
--img 640yerel çözünürlüğünde eğitilir; ancak veri kümesindeki küçük nesnelerin çokluğu nedeniyle--img 1280gibi daha yüksek çözünürlüklerde eğitimden fayda sağlayabilir. Çok sayıda küçük nesne varsa özel veri kümeleri, yerel veya daha yüksek çözünürlükte eğitimden fayda görür. En iyi çıkarım sonuçları, eğitimde kullanılan--imgile aynı değerde elde edilir; yani--img 1280değerinde eğitim yaparsan--img 1280değerinde de test ve tespit yapmalısın. - Batch boyutu. Donanımının desteklediği en büyük
--batch-sizedeğerini kullan. Küçük batch boyutları zayıf batch normalizasyonu istatistikleri üretir ve bunlardan kaçınılmalıdır. GPU'n için en uygun batch 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, epoch'lar boyunca öğrenme oranını kosinüs eğrisini izleyerek kademeli olarak azaltan kosinüs öğrenme oranı zamanlamasını etkinleştirmek üzere
--cos-lrbayrağını kullanmayı deneyebilirsin. - Veri artırma. YOLOv5, birden fazla eğitim görüntüsünü birleştiren mozaik gibi çeşitli artırma teknikleri içerir. Eğitimi dengelemeye yardımcı olmak için kendi
--hypdosyandakimosaichiperparametresiyle artırma gücünü ayarla. - 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 azaltıp geciktirerek daha uzun eğitimlere ve daha yüksek nihai mAP değerine olanak tanır.
hyp['obj']gibi kayıp bileşeni kazancı hiperparametrelerinin azaltılması, ilgili kayıp bileşenlerinde aşırı öğrenmeyi azaltmaya yardımcı olur. Bu hiperparametreleri otomatik olarak optimize etme yöntemi için Hiperparametre Evrimi Eğitimi sayfamıza bak. - Karışık hassasiyet eğitimi. YOLOv5, desteklenen bir GPU algılandığında Otomatik Karışık Hassasiyeti (AMP) otomatik olarak etkinleştirir; böylece model doğruluğundan ödün vermeden eğitimi hızlandırır ve bellek kullanımını azaltır.
- Çoklu GPU eğitimi. Birden fazla GPU'n varsa eğitimi bunlar arasında dağıtmak için
--device 0,1,2,3kullanabilirsin; 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ı öğrenmeyi önlemek için
--patience 50kullan.
Gelişmiş Optimizasyon Teknikleri#
- Aktarım öğrenimi. Uzmanlaşmış veri kümeleri için önceden eğitilmiş ağırlıklarla başla ve modeli özel görevine uyarlamak üzere eğitim sırasında katmanların kilidini kademeli olarak aç.
- 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ı değerlendirebilirsin.
- Model topluluğu. Kritik uygulamalar için farklı yapılandırmalara sahip birden fazla model eğit ve doğruluğu artırmak üzere tahminlerini birleştir.
- Test zamanı artırma. Girdi 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 TTA'yı
--augmentile etkinleştir.
Daha Fazla Okuma#
Daha fazlasını öğrenmek istersen iyi bir başlangıç noktası, tüm ML alanlarında geniş ölçüde geçerli harika eğitim fikirleri içeren Karpathy'nin 'Sinir Ağlarını Eğitme Reçetesi'dir: 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.
İyi şanslar 🍀 ve başka soruların varsa bize bildirin!
SSS#
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ğitim kaybı iyileşmeye devam ederken bu değer sabitleniyor veya düşüyorsa bu, aşırı öğrenmenin bir işaretidir. Çözümler arasında daha fazla eğitim verisi eklemek, veri artırmayı artırmak veya düzenlileştirme tekniklerini uygulamak bulunur.
En uygun batch boyutu GPU belleğine bağlıdır. Daha büyük batch boyutları genellikle daha iyi batch normalizasyonu istatistikleri ve eğitim kararlılığı sağlar. Bellek yetersizliği yaşamadan donanımının işleyebileceği en büyük batch boyutunu kullan. Kurulumun için en uygun batch boyutunu otomatik olarak belirlemek üzere
--batch-size -1kullanabilirsin.Eğitimi hızlandırmak için şunları deneyebilirsin:
--device 0,1,2,3ile birden fazla GPU kullanmak, veri kümeni--cacheile önbelleğe almak ve batch boyutunu optimize etmek (desteklenen GPU'larda karışık hassasiyet otomatik olarak etkinleştirilir). Mutlak doğruluk kritik değilse YOLOv5s gibi daha küçük bir model varyantı kullanmayı da değerlendirebilirsin.
