Ultralytics YOLO27:
Get Started

Model Eğitimi için Makine Öğrenimi En İyi Uygulamaları ve İpuçları#

Giriş#

Bir bilgisayarlı görü projesinde çalışırken en önemli adımlardan biri model eğitimidir. Bu adıma geçmeden önce hedeflerini tanımlaman ve verilerini toplaman ve etiketlemen gerekir. Verilerin temiz ve tutarlı olduğundan emin olmak için verileri ön işleme tabi tuttuktan sonra modelini eğitmeye geçebilirsin.

Model eğitimi, modeline görsel örüntüleri tanımayı ve verilerinden tahmin yapmayı öğretme sürecidir ve uygulamanın doğruluğunu doğrudan etkiler. Bu kılavuz, bilgisayarlı görü modellerini etkili biçimde eğitmene yardımcı olmak için en iyi uygulamaları, optimizasyon tekniklerini ve sorun giderme ipuçlarını ele alır.



İzle: Model Eğitimi İpuçları | Büyük Veri Kümeleri Nasıl İşlenir | Batch Boyutu, GPU Kullanımı ve Karma Hassasiyet

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 büyük bir etiketli görüntü kümesi verilir. Model, bu görüntülerde neler bulunduğuna ilişkin tahminler yapar; hataları hesaplamak için bu tahminler gerçek etiketler veya içeriklerle karşılaştırılır. Hatalar, model tahminlerinin gerçek değerlerden ne kadar saptığını gösterir.

Eğitim sırasında model, geri yayılım adı verilen bir süreçle yinelenecek şekilde tahminler yapar, hataları hesaplar ve parametrelerini günceller. Bu süreçte model, hataları azaltmak için iç parametrelerini (ağırlıklar ve yanlılıklar) ayarlar. Bu döngüyü birçok kez tekrarlayarak doğruluğunu kademeli olarak artırır. Zamanla şekiller, renkler ve dokular gibi karmaşık örüntüleri tanımayı öğrenir.

What is Backpropagation?

Bu öğrenme süreci, bilgisayarlı görü modelinin nesne algılama, örnek segmentasyonu, anlamsal segmentasyon ve görüntü sınıflandırma dâhil çeşitli görevleri yerine getirmesini mümkün kılar. Nihai hedef, modelin öğrendiklerini daha önce görmediği yeni görüntülere genelleyebilmesini ve böylece gerçek dünyadaki uygulamalarda görsel verileri doğru biçimde anlayabilmesini sağlamaktır.

Bir modeli eğitirken perde arkasında neler olduğunu artık bildiğimize göre, model eğitirken dikkate alınması gereken noktalara bakalım.

Büyük Veri Kümeleriyle Eğitim#

Bir modeli eğitmek için büyük bir veri kümesi kullanmayı planlarken dikkate alınması gereken birkaç farklı nokta vardır. Örneğin toplu iş boyutunu ayarlayabilir, GPU kullanımını denetleyebilir ve çok ölçekli eğitimi tercih edebilirsin. Şimdi bu seçeneklerin her birini ayrıntılı olarak ele alalım.

Toplu İş Boyutu ve GPU Kullanımı#

Büyük veri kümelerinde model eğitirken GPU'nu verimli kullanmak çok önemlidir. Toplu iş boyutu önemli bir etkendir. Bu, bir makine öğrenimi modelinin tek bir eğitim yinelemesinde işlediği veri örneği sayısıdır. GPU'nun desteklediği en yüksek toplu iş boyutunu kullanarak GPU'nun kapasitesinden tam olarak yararlanabilir ve model eğitiminin süresini kısaltabilirsin. Ancak GPU belleğinin tükenmesini önlemelisin. Bellek hatalarıyla karşılaşırsan model sorunsuz eğitilene kadar toplu iş boyutunu kademeli olarak azalt.



İzle: Ultralytics YOLO26 ile toplu çıkarım nasıl kullanılır | Python'da nesne algılamayı hızlandır 🎉

YOLO26 için Eğitim modu bağımsız değişkenleri içindeki batch parametresini GPU kapasitenle eşleşecek şekilde ayarlayabilirsin. Tek bir hızlandırıcıda batch=-1, modeli profiller ve yaklaşık %60 bellek kullanımını hedefleyen bir toplu iş boyutu seçer; batch=0.70 gibi bir kesir farklı bir kullanım oranını hedefler. Çoklu GPU çalıştırmalarında, aygıt sayısının katı olan açık bir genel toplu iş boyutu gerekir. CPU ve Apple silicon üzerinde AutoBatch uyarı verir ve batch=16 değerine geri döner.

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ğitmeyi içeren akıllı bir stratejidir. Özellikle model geliştirmenin ve test etmenin ilk aşamalarında zamandan ve kaynaklardan tasarruf sağlayabilir. Zamanın kısıtlıysa veya farklı model yapılandırmalarını deniyorsan alt küme eğitimi iyi bir seçenektir.

YOLO26'da alt küme eğitimini fraction parametresiyle kolayca uygulayabilirsin. Eğitim verilerinin %10'u için fraction=0.1 gibi bir oran, tam olarak 300 eğitim görüntüsü için fraction=300 gibi bir tam sayı veya her bölümü sınırlayıp test görüntülerini atlamak için fraction=[300, 100, 0] gibi bir [train, val, test] listesi kullan. İki öğeli [300, 100] gibi listeler test bölümünün tamamını bırakır. NDJSON veri kümeleri, indirmeden önce eşit aralıklı kayıtlar seçer; böylece tekrarlanan çalıştırmalarda aynı alt küme yeniden kullanılır. Bu teknik, tüm veri kümesini kullanmaya karar vermeden önce hızlı yinelemeler ve ayarlama yapılmasını sağlar.

Çok Ölçekli Eğitim#

Çok ölçekli eğitim, modelini farklı boyutlardaki görüntüler üzerinde eğiterek genelleme yeteneğini geliştiren bir tekniktir. Modelin farklı ölçek ve uzaklıklardaki nesneleri algılamayı öğrenebilir ve daha dayanıklı hâle gelebilir.

Örneğin YOLO26'yı eğitirken scale parametresini ayarlayarak ölçek artırmayı etkinleştirebilirsin. Bu parametre, farklı uzaklıklardaki nesneleri taklit etmek için eğitim görüntülerinin boyutunu belirtilen bir katsayıyla ayarlar. Örneğin scale=0.5 ayarı, eğitim sırasında görüntüleri 0,5 ile 1,5 arasında rastgele bir katsayıyla yakınlaştırır. Bu parametreyi yapılandırmak, modelinin çeşitli görüntü ölçeklerini görmesini ve farklı nesne boyutları ile senaryolardaki algılama yeteneklerini geliştirmesini sağlar.

Ultralytics ayrıca multi_scale parametresiyle görüntü boyutuna dayalı çok ölçekli eğitimi destekler. Görüntüleri yakınlaştırıp ardından imgsz boyutuna göre dolduran/kırpan scale parametresinden farklı olarak multi_scale, her toplu işte imgsz değerini değiştirir (model adım boyutuna yuvarlanır). Örneğin imgsz=640 ve multi_scale=0.25 ile eğitim boyutu, adım boyutlarıyla 480'den 800'e kadar örneklenir (ör. 480, 512, 544, ..., 800); multi_scale=0.0 ise sabit boyutu korur.

Önbelleğe Alma#

Önbelleğe alma, makine öğrenimi modellerinin eğitim verimliliğini artırmak için önemli bir tekniktir. Önceden işlenmiş görüntüleri bellekte saklayarak GPU'nun verilerin diskten yüklenmesini beklediği süreyi azaltır. Böylece model, disk G/Ç işlemlerinden kaynaklanan gecikmeler olmadan sürekli veri alabilir.

YOLO26 eğitilirken önbelleğe alma, cache parametresiyle denetlenebilir:

  • cache=True: Veri kümesi görüntülerini RAM'de saklar; en hızlı erişim hızını sunar ancak bellek kullanımını artırır.
  • cache='disk': Görüntüleri diskte saklar; RAM'den yavaştır ancak her seferinde yeni veriler yüklemekten hızlıdır.
  • cache=False: Önbelleğe almayı devre dışı bırakır ve tamamen disk G/Ç işlemlerine dayanır; bu en yavaş seçenektir.

Karma Hassasiyetli Eğitim#

Karma hassasiyetli eğitim, hem 16 bitlik (FP16) hem de 32 bitlik (FP32) kayan noktalı türleri kullanır. Daha hızlı hesaplama için FP16, gerektiğinde hassasiyeti korumak için FP32 kullanılarak her iki türün güçlü yanlarından yararlanılır. Daha hızlı hesaplama ve daha düşük bellek kullanımından yararlanmak için sinir ağının işlemlerinin çoğu FP16 ile yapılır. Ancak ağırlık güncelleme adımlarında doğruluğu sağlamak için model ağırlıklarının ana kopyası FP32 olarak tutulur. Aynı donanım kısıtları içinde daha büyük modelleri veya daha büyük toplu iş boyutlarını kullanabilirsin.

Mixed precision FP16 training benefits

Karma hassasiyetli eğitimi uygulamak için eğitim betiklerini değiştirmen ve donanımının (GPU'lar gibi) bunu desteklediğinden emin olman gerekir. PyTorch ve TensorFlow gibi birçok modern derin öğrenme çerçevesi, karma hassasiyet için yerleşik destek sunar.

YOLO26 ile karma hassasiyetli eğitimi kullanmak kolaydır: AMP varsayılan olarak açıktır (amp=True). CUDA GPU'da YOLO, eğitimin başında bir defalık yetenek denetimi yapar ve denetim başarısız olursa tam FP32'ye geri döner; CPU ve Apple silicon üzerinde AMP tamamen atlanır. FP32'yi zorlamak için amp=False ayarını kullan.

Önceden Eğitilmiş Ağırlıklar#

Önceden eğitilmiş ağırlıkları kullanmak, modelinin eğitim sürecini hızlandırmanın akıllı bir yoludur. Önceden eğitilmiş ağırlıklar, büyük veri kümelerinde zaten eğitilmiş modellerden gelir ve modeline başlangıç avantajı sağlar. Aktarım öğrenmesi, önceden eğitilmiş modelleri yeni ve ilişkili görevlere uyarlar. Önceden eğitilmiş bir modeli ince ayarlarken bu ağırlıklarla başlayıp belirli veri kümen üzerinde eğitime devam edersin. Model temel özellikleri sağlam biçimde öğrendiği için bu eğitim yöntemi daha kısa eğitim süreleri ve çoğu zaman daha iyi performans sağlar.

Önceden eğitilmiş ağırlıklar model bağımsız değişkeninden gelir; bu nedenle model=yolo26n.pt zaten COCO ağırlıklarıyla başlar. pretrained parametresi bu ağırlıkların korunup korunmayacağını (True, varsayılan), atılıp atılmayacağını (False) veya başka bir kontrol noktasıyla değiştirilip değiştirilmeyeceğini (pretrained=path/to/best.pt) denetler. Bir *.yaml modelinde pretrained=True ayarını yapmak tek başına ağırlıkları indirmez. Aktarım öğrenmesinin tüm iş akışı için YOLO'yu Özel Bir Veri Kümesi Üzerinde İnce Ayarlama bölümüne bak.

Büyük Veri Kümeleriyle Çalışırken Dikkate Alınması Gereken Diğer Teknikler#

Büyük bir veri kümesiyle çalışırken dikkate alınması gereken birkaç teknik daha var:

  • Öğrenme oranı zamanlayıcıları: Öğrenme oranı zamanlayıcılarını uygulamak, eğitim sırasında öğrenme oranını dinamik olarak ayarlar. İyi ayarlanmış bir öğrenme oranı, modelin minimum noktaları aşmasını önleyebilir ve kararlılığı artırabilir. YOLO26 eğitilirken lrf parametresi, son öğrenme oranını başlangıç oranının kesri olarak belirleyerek öğrenme oranı zamanlamasını yönetmeye yardımcı olur. Katman başına öğrenme oranları veya gradyan kırpma gibi hiçbir bağımsız değişkenin sunmadığı davranışlar için eğitici alt sınıfı oluştur.
  • Dağıtık eğitim: Büyük veri kümelerini işlemek için dağıtık eğitim büyük fark yaratabilir. Eğitim iş yükünü birden fazla GPU veya makineye dağıtarak eğitim süresini kısaltabilirsin. Bu yaklaşım, önemli hesaplama kaynaklarına sahip kurumsal ölçekli projeler için özellikle değerlidir.
  • Kanallar-son bellek biçimi: CUDA eğitimi, daha yavaş olduğu ölçüldüğü Windows dışında, PyTorch 1.11 ve daha yeni sürümlerde varsayılan olarak daha hızlı NHWC bellek düzenini kullanır. Bu biçimi zorlamak için channels_last=True, NCHW biçimini korumak için channels_last=False ayarını kullan; PyTorch 1.10 ve öncesinde, CPU'da ve MPS'de varsayılan biçim NCHW olarak kalır.

Eğitim İçin Epoch Sayısı#

Model eğitiminde bir epoch, eğitim veri kümesinin tamamından bir kez geçilmesini 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 zaman içinde öğrenip parametrelerini iyileştirmesi için genellikle birden fazla epoch gerekir.

Sıkça sorulan sorulardan biri, modelin kaç epoch boyunca eğitileceğinin nasıl belirleneceğidir. 300 epoch, iyi bir başlangıç noktasıdır. Model erken aşırı uyum gösterirse epoch sayısını azaltabilirsin. 300 epoch sonrasında aşırı uyum görülmezse eğitimi 600, 1200 veya daha fazla epoch'a uzatabilirsin.

Ancak ideal epoch sayısı, veri kümesinin boyutuna ve proje hedeflerine göre değişebilir. Daha büyük veri kümelerinde modelin etkili biçimde öğrenmesi için daha fazla epoch gerekebilirken, daha küçük veri kümelerinde aşırı öğrenmeyi önlemek için daha az epoch gerekebilir. YOLO26 için 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 gelişmeyi bıraktığında eğitimi durdurabilirsin. Böylece hesaplama kaynaklarından tasarruf edebilir ve aşırı öğrenmeyi önleyebilirsin.

Bu süreç, eğitimi durdurmadan önce doğrulama metriklerinde bir iyileşme beklemek üzere kaç epoch bekleneceğini belirleyen bir sabır parametresinin ayarlanmasını içerir. Modelin performansı bu epoch'lar boyunca iyileşmezse zaman ve kaynak israfını önlemek için eğitim durdurulur.

Early stopping to prevent model overfitting

YOLO26 için eğitim yapılandırmanda sabır parametresini ayarlayarak erken durdurmayı etkinleştirebilirsin. Örneğin patience=5, doğrulama metriklerinde art arda 5 epoch boyunca iyileşme olmazsa eğitimin duracağı anlamına gelir. Bu yöntemi kullanmak, aşırı hesaplama yapmadan eğitim sürecinin verimli olmasını ve en iyi performansa ulaşmasını sağlar.

Bulut Eğitimi ile Yerel Eğitim Arasında Seçim Yapma#

Modelini eğitmek için iki seçeneğin var: bulut eğitimi ve yerel eğitim.

Bulut eğitimi ölçeklenebilirlik ve güçlü donanım sunar; büyük veri kümelerini ve karmaşık modelleri işlemek için idealdir. Google Cloud, AWS ve Azure gibi platformlar, yüksek performanslı GPU'lara ve TPU'lara isteğe bağlı erişim sağlayarak eğitim sürelerini kısaltır ve daha büyük modellerle deneyler yapılmasına olanak tanır. Ancak bulut eğitimi, özellikle uzun süreli kullanımlarda pahalı olabilir; veri aktarımı da maliyetleri ve gecikmeyi artırabilir.

Yerel eğitim daha fazla kontrol ve özelleştirme olanağı sunar; ortamını belirli ihtiyaçlara göre düzenlemene ve devam eden bulut maliyetlerinden kaçınmana imkân verir. Uzun vadeli projelerde daha ekonomik olabilir ve verilerin şirket içinde kaldığından 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 eğitim sürelerinin uzamasına yol açabilir.

Optimizasyon Algoritması Seçimi#

Optimizasyon algoritması, modelin performansını ö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 optimizasyon algoritması, hataları azaltmak için parametrelerini düzenleyerek modelin öğrenmesine yardımcı olur. Doğru optimizasyon algoritmasını seçmek, modelin ne kadar hızlı ve doğru öğrendiğini doğrudan etkiler.

Model performansını iyileştirmek için optimizasyon algoritması parametrelerini de hassas ayarlayabilirsin. Öğrenme oranını ayarlamak, parametreleri güncellerken atılan adımların büyüklüğünü belirler. Kararlılık için orta düzeyde bir öğrenme oranıyla başlayıp uzun vadeli öğrenmeyi iyileştirmek amacıyla bu oranı zaman içinde kademeli olarak düşürebilirsin. Ayrıca momentum değerini belirlemek, geçmiş güncellemelerin mevcut güncellemeler üzerindeki etkisini ayarlar. Momentum için yaygın bir değer yaklaşık 0.9'dur. Bu değer genellikle iyi bir denge sağlar.

Yaygın Optimizasyon Algoritmaları#

Farklı optimizasyon algoritmalarının çeşitli güçlü ve zayıf yönleri vardır. Yaygın optimizasyon algoritmalarından birkaçına 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ılabilir.
  • Adam (Uyarlamalı Moment Tahmini):

    • Momentum kullanan SGD ile RMSProp'un avantajlarını bir araya getirir.
    • Gradyanların birinci ve ikinci moment tahminlerine göre her parametrenin öğrenme oranını ayarlar.
    • Gürültülü veriler ve seyrek gradyanlar için oldukça uygundur.
    • Verimlidir ve genellikle daha az ayarlama gerektirir. Daha kısa eğitim çalıştırmalarında YOLO26'nın optimizer=auto ayarı, Adam yerine onunla yakından ilişkili AdamW'yi seçer.
  • RMSProp (Karekök Ortalama Yayılımı):

    • Gradyanı, yakın zamandaki gradyan büyüklüklerinin hareketli ortalamasına bölerek her parametrenin öğrenme oranını ayarlar.
    • Kaybolan gradyan sorununu ele almaya yardımcı olur ve tekrarlayan sinir ağlarında etkilidir.
  • MuSGD (Muon + SGD hibriti):

    • Büyük ölçekli eğitimde kararlılığı artırmak için SGD tarzı güncellemeleri Muon'dan esinlenen davranışlarla birleştirir.
    • SGD benzeri genelleme istiyor ancak standart SGD'den daha pürüzsüz bir yakınsamaya ihtiyaç duyuyorsan iyi bir seçenektir.
    • YOLO26 eğitim tarifleri için özellikle uygundur; emin değilsen optimizer=auto ile başlayıp veri kümen üzerinde MuSGD ile karşılaştır.

YOLO26'da optimizer parametresi; SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam ve RMSProp dâhil çeşitli optimizasyon algoritmaları arasından seçim yapmanı sağlar. Ayrıca eğitim iterasyonlarının sayısına göre otomatik seçim yapmak için parametreyi auto olarak ayarlayabilirsin.

yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGD

Toplulukla Bağlantı Kurma#

Bilgisayarlı görü meraklılarından oluşan bir topluluğun parçası olmak, sorunları çözmene ve daha hızlı öğrenmene yardımcı olabilir. Bağlantı kurmanın, yardım almanın ve fikir paylaşmanın bazı yolları şunlardır.

Topluluk Kaynakları#

  • GitHub Issues: YOLO26 GitHub deposunu ziyaret et ve soru sormak, hata bildirmek ve yeni özellikler önermek için Issues sekmesini kullan. Topluluk ve bakım ekibi oldukça aktif ve yardıma hazı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.

Resmî Dokümantasyon#

  • Ultralytics YOLO26 Belgeleri: Çeşitli bilgisayarlı görü projelerine yönelik ayrıntılı kılavuzlar ve yararlı ipuçları için resmî YOLO26 belgelerine göz at.

Bu kaynakları kullanmak, zorlukları aşmana ve bilgisayarlı görü topluluğundaki en son trendleri ve uygulamaları takip etmene yardımcı olur.

Öne Çıkan Noktalar#

Bilgisayarlı görü modellerini eğitmek; iyi uygulamaları izlemeyi, 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 sağlar. Toplulukla bağlantıda kalmak ve yeni trendleri takip etmek, model eğitimi becerilerini geliştirmeye devam etmene yardımcı olur.

Sık Sorulan Sorular#

  • GPU kullanımını iyileştirmek için batch parametresini GPU'nun desteklediği en yüksek değere ayarla. Tek bir hızlandırıcıda batch=-1, modeli profiller ve yaklaşık %60 bellek kullanımını hedefler. CPU ve Apple silicon üzerinde batch=16 değerine geri döner; birden fazla GPU ile çalıştırmalarda ise cihaz sayısının katı olan açık bir genel yığın boyutu gerekir. Daha fazla bilgi için Train modu bağımsız değişkenleri sayfasına bak.

  • Karma hassasiyetli eğitim, hesaplama hızı ile hassasiyeti dengelemek için hem 16 bitlik (FP16) hem de 32 bitlik (FP32) kayan nokta türlerini kullanır. YOLO26'da bu özellik amp=True aracılığıyla varsayılan olarak etkindir; FP32'yi zorunlu kılmak için amp=False değerini ayarla. CPU ve Apple silicon üzerinde AMP atlanır. Daha fazla ayrıntı için Train modu bağımsız değişkenleri sayfasına bak.

  • Çok ölçekli eğitim, farklı boyutlardaki görüntülerle eğitim yaparak modelin farklı ölçeklere ve uzaklıklara daha iyi genelleme yapmasını sağlar ve böylece model performansını artırır. YOLO26 bunun için birbirinden ayrı iki parametre sunar. scale=0.5, 0.5 ile 1.5 arasında bir yakınlaştırma faktörü örnekler ve ardından sabit bir imgsz boyutuna geri doldurur veya kırpar; multi_scale=0.25 ise her yığında imgsz değerinin kendisini adım değerleriyle değiştirir. Ayarlar ve daha fazla ayrıntı için Train modu belgelerine göz at.

  • Ö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. Ağırlıkları model bağımsız değişkeniyle, örneğin model=yolo26n.pt biçiminde yükle; ardından pretrained, bu ağırlıkların korunmasına mı (True, varsayılan), atılmasına mı (False) yoksa başka bir kontrol noktasındaki ağırlıklarla değiştirilmesine mi (pretrained=path/to/best.pt, ağırlıkları bir model=*.yaml yapısına aktarma yöntemi) karar verir. Daha fazla bilgi için Train modu belgelerine bak.

Yorumlar