En İyi YOLOv5 Eğitim Sonuçları İçin İpuçları
📚 Bu kılavuz, YOLOv5 🚀 ile en iyi mAP ve eğitim sonuçlarının nasıl elde edileceğini açıklamaktadır.
Çoğu zaman, modellerde veya eğitim ayarlarında herhangi bir değişiklik yapmadan iyi sonuçlar elde edilebilir, veri kümeniz yeterince büyük ve iyi etiketlenmişse. İlk başta iyi sonuçlar alamazsanız, iyileştirmek için atabileceğiniz adımlar vardır, ancak kullanıcılara herhangi bir değişiklik yapmadan önce önce tüm varsayılan ayarlarla eğitim yapmalarını öneririz. Bu, bir performans temeli oluşturmaya ve iyileştirme alanlarını belirlemeye yardımcı olur.
Eğitim sonuçlarınızla ilgili sorularınız varsa mümkün olan maksimum miktarda bilgi sağlamanızı öneririz eğer sonuç grafikleri (eğitim kayıpları, doğrulama kayıpları, P, R, mAP), PR eğrisi dahil olmak üzere yardımcı bir yanıt bekliyorsanız, karmaşıklık matrisi, eğitim mozaikleri, test sonuçları ve labels.png gibi veri seti istatistikleri görüntüleri. Bunların hepsi şurada bulunur: project/name
dizini, genellikle yolov5/runs/train/exp
.
Aşağıda, YOLOv5 eğitimlerinde en iyi sonuçları almak isteyen kullanıcılar için eksiksiz bir kılavuz hazırladık.
Veri Kümesi
- Sınıf başına resim sayısı. Sınıf başına ≥ 1500 resim önerilir
- Sınıf başına örnekler. Sınıf başına ≥ 10000 örnek (etiketli 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ı havalardan, farklı aydınlatmalardan, farklı açılardan, farklı kaynaklardan (çevrimiçi kazınmış, yerel olarak toplanmış, farklı kameralar) vb. görüntüler öneriyoruz.
- Etiket tutarlılığı. Tüm görüntülerdeki tüm sınıfların tüm örnekleri etiketlenmelidir. Kısmi etiketleme işe yaramayacaktır.
- Etiket doğruluğu. Etiketler her nesneyi yakından çevrelemelidir. Bir nesne ile sınırlayıcı kutusu arasında boşluk bulunmamalıdır. Hiçbir nesnenin etiketi eksik olmamalıdır.
- Etiket doğrulaması. Görünüm
train_batch*.jpg
etiketlerinizin doğru göründüğünü doğrulamak için eğitim başlangıcında, örneğin şunu görün: örnek mozaik. - Arka plan resimleri. Arka plan resimleri, Yanlış Pozitifleri (FP) azaltmak için bir veri kümesine eklenen, nesne içermeyen resimlerdir. FP'leri azaltmaya yardımcı olmak için yaklaşık %0-10 arka plan resmi öneriyoruz (referans için COCO'da 1000 arka plan resmi vardır, toplamın %1'i). Arka plan resimleri için etiket gerekmez.
Model Seçimi
YOLOv5x ve YOLOv5x6 gibi daha büyük modeller neredeyse tüm durumlarda daha iyi sonuçlar verecektir, ancak daha fazla parametreye sahiptir, eğitmek için daha fazla CUDA belleği gerektirir ve çalıştırılması daha yavaştır. Mobil dağıtımlar için YOLOv5s/m'yi, bulut dağıtımları için YOLOv5l/x'i öneriyoruz. Tüm modellerin tam karşılaştırması için README tablomuzu inceleyin.
-
Önceden eğitilmiş ağırlıklardan başlayın. Küçük ila orta ölçekli veri kümeleri için önerilir (örn. VOC, VisDrone, GlobalWheat). Modelin adını şuraya iletin:
--weights
argümanı. Modeller otomatik olarak şuradan indirilir: 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şlayın. Geniş veri kümeleri için önerilir (örn. COCO, Objects365, OIv6). İlgilendiğiniz model mimarisi YAML'sini boş bir ile birlikte iletin.
--weights ''
argümanı: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ğitin. train.py ayarlarının tam listesi train.py argüman ayrıştırıcısında bulunabilir.
- Epoklar. 300 epok ile başlayın. Erken aşırı uyum sağlarsa epok sayısını azaltabilirsiniz. 300 epoktan sonra aşırı uyum oluşmazsa, daha uzun süre, yani 600, 1200 vb. epok eğitin.
- Görüntü boyutu. COCO, şu çözünürlükte eğitilir:
--img 640
, veri setindeki çok sayıda küçük nesne nedeniyle bu durum daha yüksek çözünürlüklerde eğitimden fayda sağlayabilir, örneğin--img 1280
. Çok sayıda küçük nesne varsa, özel veri kümeleri yerel veya daha yüksek çözünürlükte eğitimden fayda sağlayacaktır. En iyi çıkarım sonuçları aynı çözünürlükte elde edilir.--img
eğitimin hangi çözünürlükte çalıştırıldığı gibi, örneğin eğer şu çözünürlükte eğitim yapıyorsanız--img 1280
ayrıca şurada test etmeli ve tespit etmelisiniz:--img 1280
. - Toplu iş boyutu. En büyüğünü kullanın
--batch-size
donanımınızın izin verdiği. Küçük toplu boyutlar yetersiz sonuçlar verir. toplu normalleştirme (batch normalization) istatistiklerdir ve kaçınılmalıdır. Şunu kullanabilirsiniz:--batch-size -1
GPU'nuz için en uygun toplu iş boyutunu otomatik olarak seçmek için. - Öğrenme oranı. Varsayılan öğrenme oranı çizelgesi çoğu durumda iyi sonuç verir. Daha hızlı yakınsama için şunu kullanmayı deneyebilirsiniz:
--cos-lr
işareti, dönemler boyunca bir kosinüs eğrisini izleyerek öğrenme oranını kademeli olarak azaltan kosinüs öğrenme oranı planlamasını etkinleştirmek için kullanılır. - Veri artırma. YOLOv5, birden fazla eğitim görüntüsünü birleştiren mozaik gibi çeşitli artırma teknikleri içerir. Son birkaç epoch için şunu kullanmayı düşünün:
--close-mosaic 10
eğitimi dengelemeye yardımcı olabilecek mozaik artırmayı devre dışı bırakmak için. - Hiperparametreler. Varsayılan hiperparametreler şurada: hyp.scratch-low.yamlHerhangi bir şeyi değiştirmeyi düşünmeden önce, önce varsayılan hiperparametrelerle eğitim yapmanızı ö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 sağlayacaktır. Gibi kayıp bileşeni kazancı hiperparametrelerinde azalma
hyp['obj']
bu, söz konusu kayıp bileşenlerinde aşırı öğrenmeyi azaltmaya yardımcı olacaktır. Bu hiperparametreleri optimize etmenin otomatik bir yöntemi için şuraya bakın: Hiperparametre Evrimi Eğitimi. - Karma duyarlıklı eğitim. ile karma duyarlıklı eğitimi etkinleştirin
--amp
model doğruluğundan ödün vermeden eğitimi hızlandırmak ve bellek kullanımını azaltmak için. - Çoklu GPU eğitimi. Birden fazla GPU'nuz varsa şunu kullanın:
--device 0,1,2,3
eğitimi bunlar arasında dağıtmak için, bu da eğitim süresini önemli ölçüde azaltabilir. - Erken durdurma. Kullanım
--patience 50
doğrulama metrikleri 50 epoch boyunca iyileşmezse eğitimi durdurmak, zamandan tasarruf etmek ve aşırı öğrenmeyi önlemek için.
Gelişmiş Optimizasyon Teknikleri
- Transfer öğrenimi. Özel veri kümeleri için, önceden eğitilmiş ağırlıklarla başlayın ve modeli özel görevinize uyarlamak için eğitim sırasında katmanları kademeli olarak çözün.
- Model budama. Eğitimden sonra, gereksiz ağırlıkları kaldırmak ve önemli performans kaybı olmadan model boyutunu küçültmek için modelinizi budamayı düşünün.
- Model topluluğu. Kritik uygulamalar için, farklı konfigürasyonlara sahip birden fazla model eğitin ve gelişmiş doğruluk için tahminlerini birleştirin.
- Test zamanı artırma. ile çıkarım sırasında TTA'yı etkinleştirin
--augment
giriş görüntüsünün artırılmış versiyonlarından elde edilen sonuçların ortalamasını alarak tahmin doğruluğunu artırmak için.
Daha Fazla Okuma
Daha fazla bilgi edinmek isterseniz, başlamak için iyi bir yer Karpathy'nin 'Sinir Ağlarını Eğitme Tarifi' olabilir. Bu kaynak, tüm ML alanlarında geniş çapta uygulanabilecek harika eğitim fikirleri sunmaktadır: https://karpathy.github.io/2019/04/25/recipe/
Eğitim ayarları ve yapılandırmaları hakkında daha detaylı bilgi için, mevcut tüm parametrelerin kapsamlı açıklamalarını sağlayan Ultralytics eğitim ayarları dökümanlarına bakın.
İyi şanslar 🍀 ve başka sorularınız olursa bize bildirin!
SSS
Modelimin aşırı öğrenmeye (overfitting) maruz kalıp kalmadığını nasıl anlarım?
Eğitim kaybı azalmaya devam ederken doğrulama kaybı artmaya başlarsa, modeliniz aşırı öğreniyor olabilir. Doğrulama mAP'sini izleyin; eğitim kaybı iyileşmeye devam ederken plato çiziyorsa veya azalı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 teknikleri uygulamak yer alır.
YOLOv5 eğitimi için optimum toplu iş boyutu nedir?
Optimum toplu iş boyutu, GPU belleğinize bağlıdır. Daha büyük toplu iş boyutları genellikle daha iyi toplu iş normalleştirme istatistikleri ve eğitim kararlılığı sağlar. Donanımınızın bellek yetersiz kalmadan kaldırabileceği en büyük toplu iş boyutunu kullanın. Şunu kullanabilirsiniz: --batch-size -1
kurulumunuz için en uygun toplu iş boyutunu otomatik olarak belirlemek için.
YOLOv5 eğitimini nasıl hızlandırabilirim?
Eğitimi hızlandırmak için şunu deneyin: --amp ile karma duyarlıklı eğitimi etkinleştirme, --amp
, ile birden fazla GPU kullanma --device 0,1,2,3
, veri kümenizi önbelleğe alma ile --cache
, ve yığın boyutunuzu optimize etme. Mutlak doğruluk kritik değilse, YOLOv5s gibi daha küçük bir model varyantı kullanmayı da düşünebilirsiniz.