Makine Öğrenimi En İyi Uygulamaları ve Model Eğitimi İçin İpuçları
Giriş
Bir bilgisayarlı görü projesi üzerinde çalışırken atılacak en önemli adımlardan biri model eğitimidir. Bu adıma ulaşmadan önce hedeflerini tanımlaman ve verilerini toplayıp etiketlemen gerekir. Verilerin temiz ve tutarlı olduğundan emin olmak için ön işleme yaptıktan sonra modelini eğitmeye geçebilirsin.
Watch: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and Mixed Precision
Peki, model eğitimi nedir? Model eğitimi, modeline görsel kalıpları tanımayı ve verilerine dayalı tahminler yapmayı öğretme sürecidir. Bu süreç, uygulamanın performansını ve doğruluğunu doğrudan etkiler. Bu rehberde, bilgisayarlı görü modellerini etkili bir şekilde eğitmen için en iyi uygulamaları, optimizasyon tekniklerini ve sorun giderme ipuçlarını ele alacağız.
Makine Öğrenimi Modeli Nasıl Eğitilir
Bir bilgisayarlı görü modeli, hataları en aza indirmek için iç parametreleri ayarlanarak eğitilir. Başlangıçta modele geniş bir etiketli görüntü seti verilir. Model bu görüntülerde ne olduğuna dair tahminlerde bulunur ve hataları hesaplamak için tahminler gerçek etiketlerle veya içeriklerle karşılaştırılır. Bu hatalar, modelin tahminlerinin gerçek değerlerden ne kadar saptığını gösterir.
Eğitim sırasında model iteratif olarak tahminler yapar, hataları hesaplar ve geriye yayılım adı verilen bir süreçle parametrelerini günceller. Bu süreçte model, hataları azaltmak için iç parametrelerini (ağırlıklar ve sapmalar) ayarlar. Bu döngüyü birçok kez tekrarlayarak model doğruluğunu kademeli olarak artırır. Zamanla şekiller, renkler ve dokular gibi karmaşık kalıpları tanımayı öğrenir.
This learning process makes it possible for the computer vision model to perform various tasks, including object detection, instance segmentation, semantic segmentation, and image classification. The ultimate goal is to create a model that can generalize its learning to new, unseen images so that it can accurately understand visual data in real-world applications.
Artık bir modeli eğitirken arka planda neler olduğunu bildiğimize göre, model eğitirken göz önünde bulundurulması gereken noktalara bakalım.
Büyük Veri Kümelerinde Eğitim
Bir modeli eğitmek için büyük bir veri kümesi kullanmayı planlarken düşünmen gereken birkaç farklı husus vardır. Örneğin, yığın boyutunu (batch size) ayarlayabilir, GPU kullanımını kontrol edebilir, çok ölçekli eğitimi kullanmayı seçebilirsin vb. Şimdi bu seçeneklerin her birini detaylıca inceleyelim.
Yığın Boyutu ve GPU Kullanımı
Büyük veri kümeleri üzerinde model eğitirken, GPU'nu verimli bir şekilde kullanman anahtardır. Yığın boyutu önemli bir faktördür. Bu, bir makine öğrenimi modelinin tek bir eğitim iterasyonunda işlediği veri örneği sayısıdır. GPU'nun desteklediği maksimum yığın boyutunu kullanarak, yeteneklerinden tam olarak yararlanabilir ve model eğitim süresini kısaltabilirsin. Ancak, GPU belleğinin tükenmesinden kaçınmalısın. Bellek hatalarıyla karşılaşırsan, model sorunsuz bir şekilde eğitilene kadar yığın boyutunu kademeli olarak azalt.
Watch: How to Use Batch Inference with Ultralytics YOLO26 | Speed Up Object Detection in Python 🎉
With respect to YOLO26, you can set the batch_size parameter in the training configuration to match your GPU capacity. Also, setting batch=-1 in your training script will automatically determine the batch size that can be efficiently processed based on your device's capabilities. By fine-tuning the batch size, you can make the most of your GPU resources and improve the overall training process.
Alt Küme Eğitimi
Alt küme eğitimi, modelini daha büyük veri kümesini temsil eden daha küçük bir veri kümesi üzerinde eğitmeni içeren akıllı bir stratejidir. Özellikle ilk model geliştirme ve test aşamalarında zaman ve kaynak tasarrufu sağlayabilir. Zamanın kısıtlıysa veya farklı model yapılandırmalarıyla denemeler yapıyorsan, alt küme eğitimi iyi bir seçenektir.
YOLO26 söz konusu olduğunda, fraction parametresini kullanarak alt küme eğitimini kolayca uygulayabilirsin. Bu parametre, eğitim için veri kümenin ne kadarlık bir kısmını kullanacağını belirtmeni sağlar. Örneğin, fraction=0.1 ayarı, modelini verilerin %10'u üzerinde eğitecektir. Bu tekniği, tüm veri kümesini kullanarak bir model eğitmeye karar vermeden önce hızlı iterasyonlar yapmak ve modelini ayarlamak için kullanabilirsin. Alt küme eğitimi, hızlı ilerleme kaydetmene ve potansiyel sorunları erkenden tespit etmene yardımcı olur.
Çok Ölçekli Eğitim
Çok ölçekli eğitim, modelini farklı boyutlardaki görüntüler üzerinde eğiterek genelleme yeteneğini artıran bir tekniktir. Modelin, nesneleri farklı ölçeklerde ve uzaklıklarda tespit etmeyi öğrenebilir ve daha dayanıklı hale gelebilir.
Örneğin, YOLO26'yı eğitirken scale parametresini ayarlayarak çok ölçekli eğitimi etkinleştirebilirsin. Bu parametre, eğitim görüntülerinin boyutunu belirli bir faktöre göre ayarlar ve farklı mesafelerdeki nesneleri simüle eder. Örneğin, scale=0.5 ayarı, eğitim sırasında görüntüleri rastgele olarak 0.5 ile 1.5 arasında bir faktörle yakınlaştırır. Bu parametreyi yapılandırmak, modelinin çeşitli görüntü ölçeklerini deneyimlemesini ve farklı nesne boyutları ile senaryolarda algılama yeteneklerini geliştirmesini sağlar.
Ultralytics also supports image-size multi-scale training via the multi_scale parameter. Unlike scale, which zooms images and then pads/crops back to imgsz, multi_scale changes imgsz itself each batch (rounded to the model stride). For example, with imgsz=640 and multi_scale=0.25, the training size is sampled from 480 up to 800 in stride steps (e.g., 480, 512, 544, ..., 800), while multi_scale=0.0 keeps a fixed size.
Önbellekleme
Önbellekleme, makine öğrenimi modellerini eğitmenin verimliliğini artırmak için önemli bir tekniktir. Ön işlenmiş görüntüleri bellekte depolayarak, önbellekleme GPU'nun verilerin diskten yüklenmesini beklemesiyle geçen süreyi azaltır. Model, disk G/Ç işlemlerinin neden olduğu gecikmeler olmadan verileri sürekli olarak alabilir.
YOLO26'yı eğitirken önbellekleme cache parametresi kullanılarak kontrol edilebilir:
cache=True: Veri kümesi görüntülerini RAM'de depolar, en yüksek erişim hızını sağlar ancak bellek kullanımını artırır.cache='disk': Görüntüleri diskte depolar, RAM'den daha yavaştır ancak her seferinde yeni veri yüklemekten daha hızlıdır.cache=False: Önbelleklemeyi devre dışı bırakır, tamamen disk G/Ç'sine güvenir, bu en yavaş seçenektir.
Karma Hassasiyetli Eğitim
Karma hassasiyetli eğitim, hem 16 bit (FP16) hem de 32 bit (FP32) kayan noktalı türleri kullanır. FP16'nın daha hızlı hesaplama gücü ve FP32'nin gereken yerlerde hassasiyeti koruma özelliği birleştirilerek her ikisinin de güçlü yönlerinden yararlanılır. Sinir ağı işlemlerinin çoğu, daha hızlı hesaplama ve daha düşük bellek kullanımından yararlanmak için FP16'da gerçekleştirilir. Bununla birlikte, ağırlık güncelleme adımları sırasında doğruluğu sağlamak için modelin ağırlıklarının bir ana kopyası FP32'de tutulur. Aynı donanım kısıtlamaları dahilinde daha büyük modelleri veya daha büyük yığın boyutlarını işleyebilirsin.
To implement mixed precision training, you'll need to modify your training scripts and ensure your hardware (like GPUs) supports it. Many modern deep learning frameworks, such as PyTorch and TensorFlow, offer built-in support for mixed precision.
YOLO26 ile çalışırken karma hassasiyetli eğitim oldukça basittir. Eğitim yapılandırmanda amp bayrağını kullanabilirsin. amp=True ayarı, Otomatik Karma Hassasiyet (AMP) eğitimini etkinleştirir. Karma hassasiyetli eğitim, model eğitim sürecini optimize etmenin basit ama etkili bir yoludur.
Önceden Eğitilmiş Ağırlıklar
Önceden eğitilmiş ağırlıkları kullanmak, modelinin eğitim sürecini hızlandırmanın akıllıca bir yoludur. Önceden eğitilmiş ağırlıklar, büyük veri kümeleri üzerinde halihazırda eğitilmiş modellerden gelir ve modeline bir başlangıç avantajı sağlar. Transfer öğrenimi, önceden eğitilmiş modelleri yeni ve ilgili görevlere uyarlar. Önceden eğitilmiş bir modele ince ayar yapmak, bu ağırlıklarla başlamayı ve ardından kendi veri kümen üzerinde eğitime devam etmeyi içerir. Bu eğitim yöntemi, daha hızlı eğitim süreleri ve genellikle daha iyi performans sağlar çünkü model temel özelliklere dair sağlam bir anlayışla başlar.
pretrained parametresi, YOLO26 ile transfer öğrenimini kolaylaştırır. pretrained=True ayarı varsayılan önceden eğitilmiş ağırlıkları kullanacaktır veya özel bir önceden eğitilmiş modele giden yolu belirtebilirsin. Önceden eğitilmiş ağırlıkları ve transfer öğrenimini etkili bir şekilde kullanmak, modelinin yeteneklerini artırır ve eğitim maliyetlerini düşürür.
Büyük Veri Kümelerini İşlerken Dikkate Alınması Gereken Diğer Teknikler
Büyük bir veri kümesini işlerken dikkate alınması gereken birkaç teknik daha var:
- Öğrenme Oranı Zamanlayıcıları: Öğrenme oranı zamanlayıcıları uygulamak, eğitim sırasında öğrenme oranını dinamik olarak ayarlar. İyi ayarlanmış bir öğrenme oranı, modelin minimum değerleri geçmesini önleyebilir ve kararlılığı artırabilir. YOLO26 eğitilirken,
lrfparametresi nihai öğrenme oranını başlangıç oranının bir fraksiyonu olarak ayarlayarak öğrenme oranı zamanlamasını yönetmeye yardımcı olur. - Dağıtık Eğitim: Büyük veri kümelerini işlemek için dağıtık eğitim oyunun kurallarını değiştirebilir. Eğitim iş yükünü birden fazla GPU veya makineye yayarak eğitim süresini kısaltabilirsin. Bu yaklaşım, özellikle önemli hesaplama kaynaklarına sahip kurumsal ölçekli projeler için değerlidir.
Eğitim İçin Gereken Epoch Sayısı
Bir modeli eğitirken epoch, tüm eğitim veri kümesi üzerinden tam bir geçişi ifade eder. Bir epoch sırasında model, eğitim kümesindeki her örneği bir kez işler ve öğrenme algoritmasına göre parametrelerini günceller. Modelin zamanla öğrenmesini ve parametrelerini iyileştirmesini sağlamak için genellikle birden fazla epoch gerekir.
Sıkça sorulan bir soru, modelin kaç epoch eğitilmesi gerektiğini belirlemektir. İyi bir başlangıç noktası 300 epoch'tur. Model erken aşırı uyum (overfit) sağlarsa epoch sayısını azaltabilirsin. 300 epoch'tan sonra aşırı uyum gerçekleşmezse, eğitimi 600, 1200 veya daha fazla epoch'a uzatabilirsin.
Ancak ideal epoch sayısı, veri kümenin boyutuna ve proje hedeflerine göre değişebilir. Daha büyük veri kümeleri modelin etkili bir şekilde öğrenmesi için daha fazla epoch gerektirebilirken, daha küçük veri kümeleri aşırı uyumu önlemek için daha az epoch'a ihtiyaç duyabilir. YOLO26 ile ilgili olarak, eğitim betiğinde epochs parametresini ayarlayabilirsin.
Erken Durdurma
Erken durdurma, model eğitimini optimize etmek için değerli bir tekniktir. Doğrulama performansını izleyerek, model iyileşmeyi durdurduğunda eğitimi durdurabilirsin. Böylece hesaplama kaynaklarından tasarruf edebilir ve aşırı uyumu önleyebilirsin.
Süreç, eğitimi durdurmadan önce doğrulama metriklerinde bir iyileşme için kaç epoch bekleneceğini belirleyen bir sabır (patience) parametresi ayarlamayı içerir. Modelin performansı bu epochlar içinde iyileşmezse, zaman ve kaynak israfını önlemek için eğitim durdurulur.
YOLO26 için, eğitim yapılandırmanda sabır parametresini ayarlayarak erken durdurmayı etkinleştirebilirsin. Örneğin, patience=5 ifadesi, doğrulama metriklerinde ardışık 5 epoch boyunca bir iyileşme olmazsa eğitimin duracağı anlamına gelir. Bu yöntemi kullanmak, eğitim sürecinin verimli kalmasını ve aşırı hesaplama olmadan optimum performansa ulaşmasını sağlar.
Bulut ve Yerel Eğitim Arasında Seçim Yapmak
Modelini eğitmek için iki seçenek vardır: bulut eğitimi ve yerel eğitim.
Bulut eğitimi ölçeklenebilirlik ve güçlü donanım sunar; büyük veri kümeleri ve karmaşık modelleri işlemek için idealdir. Google Cloud, AWS ve Azure gibi platformlar, yüksek performanslı GPU ve TPU'lara isteğe bağlı erişim sağlayarak eğitim sürelerini hızlandırır ve daha büyük modellerle denemeler yapılmasına olanak tanır. Ancak bulut eğitimi, özellikle uzun süreler için maliyetli olabilir ve veri aktarımı maliyetleri ve gecikmeyi artırabilir.
Yerel eğitim daha fazla kontrol ve özelleştirme sağlar; ortamını belirli ihtiyaçlara göre düzenlemene ve devam eden bulut maliyetlerinden kaçınmana olanak tanır. Uzun vadeli projeler için daha ekonomik olabilir ve verilerin kendi tesisinde kaldığı için daha güvenlidir. Ancak yerel donanım kaynak sınırlamalarına sahip olabilir ve bakım gerektirebilir, bu da büyük modeller için daha uzun eğitim sürelerine yol açabilir.
Bir İyileştirici (Optimizer) Seçmek
Bir iyileştirici, modelin ne kadar iyi performans gösterdiğini ölçen kayıp fonksiyonunu en aza indirmek için sinir ağının ağırlıklarını ayarlayan bir algoritmadır. Daha basit bir ifadeyle iyileştirici, hataları azaltmak için parametrelerine ince ayar yaparak modelin öğrenmesine yardımcı olur. Doğru iyileştiriciyi seçmek, modelin ne kadar hızlı ve doğru öğrendiğini doğrudan etkiler.
Model performansını iyileştirmek için iyileştirici parametrelerine de ince ayar yapabilirsin. Öğrenme oranını ayarlamak, parametreleri güncellerken atılacak adımların boyutunu belirler. Kararlılık için orta düzeyde bir öğrenme oranıyla başlayıp, uzun vadeli öğrenmeyi iyileştirmek için zamanla kademeli olarak azaltabilirsin. Ayrıca, momentumu ayarlamak, geçmiş güncellemelerin mevcut güncellemeler üzerinde ne kadar etkiye sahip olacağını belirler. Momentum için yaygın bir değer yaklaşık 0.9'dur; genellikle iyi bir denge sağlar.
Yaygın İyileştiriciler
Farklı iyileştiricilerin çeşitli güçlü ve zayıf yönleri vardır. Şimdi birkaç yaygın iyileştiriciye bir göz atalım.
-
SGD (Stokastik Gradyan İnişi):
- Model parametrelerini, kayıp fonksiyonunun parametrelere göre gradyanını kullanarak günceller.
- Basit ve verimlidir ancak yakınsaması yavaş olabilir ve yerel minimumlarda takılıp kalabilir.
-
Adam (Uyarlanabilir Moment Tahmini):
- Hem momentumlu SGD'nin hem de RMSProp'un avantajlarını birleştirir.
- Gradyanların birinci ve ikinci momentlerinin tahminlerine dayanarak her parametre için öğrenme oranını ayarlar.
- Gürültülü veriler ve seyrek gradyanlar için oldukça uygundur.
- Verimlidir ve genellikle daha az ayarlama gerektirir, bu da onu YOLO26 için önerilen bir iyileştirici yapar.
-
RMSProp (Kök Ortalama Kare Yayılımı):
- Gradyanı son gradyan büyüklüklerinin hareketli ortalamasına bölerek her parametre için öğrenme oranını ayarlar.
- Gradyan kaybolma probleminin üstesinden gelmeye yardımcı olur ve yinelemeli sinir ağları için etkilidir.
-
MuSGD (Muon + SGD hibriti):
- Büyük ölçekli eğitimde gelişmiş kararlılık için SGD tarzı güncellemeleri Muon'dan ilham alan davranışla birleştirir.
- SGD benzeri genelleme istediğinde ancak standart SGD'den daha pürüzsüz bir yakınsama gerektiğinde iyi bir tercihtir.
- Özellikle YOLO26 eğitim tarifleri için uygundur; emin değilsen
optimizer=autoile başla ve veri kümen üzerinde MuSGD ile karşılaştır.
YOLO26 için optimizer parametresi, SGD, MuSGD, Adam, AdamW, NAdam, RAdam ve RMSProp dahil olmak üzere çeşitli iyileştiriciler arasından seçim yapmanı sağlar veya model yapılandırmasına göre otomatik seçim için auto olarak ayarlayabilirsin.
yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGDToplulukla Bağlantı Kurmak
Bilgisayarlı görü meraklılarından oluşan bir topluluğun parçası olmak, problemleri çözmene ve daha hızlı öğrenmene yardımcı olabilir. İşte bağlantı kurmanın, yardım almanın ve fikir paylaşmanın bazı yolları.
Topluluk Kaynakları
- GitHub Sorunları (Issues): YOLO26 GitHub deposunu ziyaret et ve sorular sormak, hataları bildirmek ve yeni özellikler önermek için Issues sekmesini kullan. Topluluk ve geliştiriciler oldukça aktiftir ve yardıma hazırdır.
- Ultralytics Discord Sunucusu: Diğer kullanıcılar ve geliştiricilerle sohbet etmek, destek almak ve deneyimlerini paylaşmak için Ultralytics Discord sunucusuna katıl.
Resmi Dokümantasyon
- Ultralytics YOLO26 Belgeleri: Çeşitli bilgisayarlı görü projeleri hakkında ayrıntılı rehberler ve yararlı ipuçları için resmi YOLO26 belgelerine göz at.
Bu kaynakları kullanmak, zorlukları çözmene ve bilgisayarlı görü topluluğundaki en son trendler ve uygulamalarla güncel kalmana yardımcı olacaktır.
Önemli Çıkarımlar
Bilgisayarlı görü modellerini eğitmek, iyi uygulamaları takip etmeyi, stratejilerini optimize etmeyi ve ortaya çıkan sorunları çözmeyi gerektirir. Yığın boyutlarını ayarlama, karma hassasiyetli eğitim ve önceden eğitilmiş ağırlıklarla başlama gibi teknikler, modellerinin daha iyi çalışmasını ve daha hızlı eğitilmesini sağlayabilir. Alt küme eğitimi ve erken durdurma gibi yöntemler zaman ve kaynak tasarrufu yapmana yardımcı olur. Toplulukla bağlantıda kalmak ve yeni trendleri takip etmek, model eğitim becerilerini geliştirmeye devam etmeni sağlayacaktır.
SSS
Ultralytics YOLO ile büyük bir veri kümesini eğitirken GPU kullanımını nasıl iyileştirebilirim?
GPU kullanımını iyileştirmek için eğitim yapılandırmandaki batch_size parametresini GPU'nun desteklediği maksimum boyuta ayarla. Bu, GPU'nun yeteneklerinden tam olarak yararlanmanı sağlar ve eğitim süresini kısaltır. Bellek hatalarıyla karşılaşırsan, eğitim sorunsuz çalışana kadar yığın boyutunu kademeli olarak azalt. YOLO26 için, eğitim betiğinde batch=-1 ayarını yapmak, verimli işleme için en uygun yığın boyutunu otomatik olarak belirleyecektir. Daha fazla bilgi için eğitim yapılandırmasına bak.
Karma hassasiyetli eğitim nedir ve YOLO26'da nasıl etkinleştiririm?
Karma hassasiyetli eğitim, hesaplama hızı ve hassasiyet arasında denge sağlamak için hem 16 bit (FP16) hem de 32 bit (FP32) kayan noktalı türleri kullanır. Bu yaklaşım, model doğruluğundan ödün vermeden eğitimi hızlandırır ve bellek kullanımını azaltır. YOLO26'da karma hassasiyetli eğitimi etkinleştirmek için eğitim yapılandırmanda amp parametresini True olarak ayarla. Bu, Otomatik Karma Hassasiyet (AMP) eğitimini etkinleştirir. Bu optimizasyon tekniği hakkında daha fazla ayrıntı için eğitim yapılandırmasına bak.
Çok ölçekli eğitim, YOLO26 model performansını nasıl artırır?
Çok ölçekli eğitim, farklı boyutlardaki görüntüler üzerinde eğiterek modelin farklı ölçeklerde ve mesafelerde daha iyi genelleme yapmasını sağlar ve model performansını artırır. YOLO26'da, eğitim yapılandırmasında scale parametresini ayarlayarak çok ölçekli eğitimi etkinleştirebilirsin. Örneğin, scale=0.5 0.5 ile 1.5 arasında bir yakınlaştırma faktörü örnekler ve ardından imgsz değerine geri döndürmek için doldurma/kırpma yapar. Bu teknik, farklı mesafelerdeki nesneleri simüle ederek modelin çeşitli senaryolarda daha dayanıklı olmasını sağlar. Ayarlar ve daha fazla ayrıntı için eğitim yapılandırmasına göz at.
YOLO26'da eğitimi hızlandırmak için önceden eğitilmiş ağırlıkları nasıl kullanabilirim?
Önceden eğitilmiş ağırlıkları kullanmak, temel görsel özelliklere zaten aşina olan bir modelden yararlanarak eğitimi büyük ölçüde hızlandırabilir ve model doğruluğunu artırabilir. YOLO26'da, eğitim yapılandırmasında pretrained parametresini True olarak ayarlaman veya özel önceden eğitilmiş ağırlıklarına giden yolu sağlaman yeterlidir. Transfer öğrenimi adı verilen bu yöntem, büyük veri kümelerinde eğitilmiş modellerin özel uygulamana etkili bir şekilde uyarlanmasını sağlar. Önceden eğitilmiş ağırlıkların nasıl kullanılacağı ve sağladığı faydalar hakkında daha fazla bilgiyi eğitim yapılandırma kılavuzunda bulabilirsin.
Bir modeli eğitmek için önerilen epoch sayısı nedir ve bunu YOLO26'da nasıl ayarlarım?
Epoch sayısı, model eğitimi sırasında eğitim veri kümesi üzerinden yapılan tam geçişleri ifade eder. Tipik bir başlangıç noktası 300 epoch'tur. Modelin erken aşırı uyum sağlarsa sayıyı azaltabilirsin. Alternatif olarak, aşırı uyum gözlemlenmezse, eğitimi 600, 1200 veya daha fazla epoch'a uzatabilirsin. Bunu YOLO26'da ayarlamak için eğitim betiğinde epochs parametresini kullan. İdeal epoch sayısını belirleme konusunda ek tavsiyeler için epoch sayısı bölümüne bak.