YOLO Vision 2026:

Özel Bir Veri Kümesinde YOLO Nasıl İnce Ayar Yapılır?#

Fine-tuning, rastgele başlatma yerine öğrenilen ağırlıklardan başlayarak önceden eğitilmiş bir modeli yeni sınıfları tanıyacak şekilde uyarlar. Yüzlerce epoch boyunca sıfırdan eğitmek yerine, fine-tuning önceden eğitilmiş COCO özelliklerinden yararlanır ve özel veriler üzerinde çok daha kısa sürede yakınsar.

Bu kılavuz, YOLO26 modelini özel veri setleri üzerinde ince ayar (fine-tuning) yapmayı, temel kullanımdan katman dondurma ve iki aşamalı eğitim gibi gelişmiş tekniklere kadar ele alır.

İnce Ayar ve Sıfırdan Eğitim Karşılaştırması#

Önceden eğitilmiş bir model, milyonlarca görüntüden genel görsel özellikleri (kenar tespiti, doku tanıma, şekil algılama) halihazırda öğrenmiştir. Fine-tuning yoluyla Transfer learning, bu bilgiyi yeniden kullanır ve modele yalnızca yeni sınıfların neye benzediğini öğretir; bu nedenle daha hızlı yakınsar ve daha az veri gerektirir. Sıfırdan eğitmek ise bunların hepsini atar ve modelin her şeyi piksel düzeyindeki kalıplardan başlayarak sıfırdan öğrenmesini zorunlu kılar; bu da çok daha fazla kaynak gerektirir.

İnce AyarSıfırdan Eğitim
Başlangıç ağırlıklarıCOCO üzerinde önceden eğitilmiş (80 sınıf)Rastgele başlatma
KomutYOLO("yolo26n.pt")YOLO("yolo26n.yaml")
YakınsamaDaha hızlı - omurga (backbone) zaten eğitilmişDaha yavaş - tüm katmanlar sıfırdan öğrenir
Veri gereksinimleriDaha düşük - önceden eğitilmiş özellikler daha az veriyi telafi ederDaha yüksek - model tüm özellikleri yalnızca veri kümesinden öğrenmelidir
Ne zaman kullanılırDoğal görüntüler içeren özel sınıflarCOCO'dan temel olarak farklı alanlar (tıp, uydu, radar)
İnce ayar ekstra kod gerektirmez

.pt dosyası YOLO("yolo26n.pt") ile yüklendiğinde, önceden eğitilmiş ağırlıklar modelde saklanır. Ardından .train(data="custom.yaml") çağrılması, uyumlu tüm ağırlıkları otomatik olarak yeni model mimarisine aktarır, eşleşmeyen katmanları yeniden başlatır (sınıf sayısı farklı olduğunda tespit başlığı gibi) ve eğitime başlar. Manuel ağırlık yükleme, katman manipülasyonu veya özel transfer learning kodu gerekmez.

Önceden Eğitilmiş Ağırlık Aktarımı Nasıl Çalışır?#

Önceden eğitilmiş bir model, farklı sayıda sınıfa sahip bir veri kümesinde (örneğin, COCO'nun 80 sınıfından 5 özel sınıfa) ince ayar yapıldığında, Ultralytics şekil duyarlı ağırlık aktarımı gerçekleştirir:

  1. Omurga ve boyun (neck) tamamen aktarılır - bu katmanlar genel görsel özellikleri çıkarır ve şekilleri sınıf sayısından bağımsızdır.
  2. Detection head kısmen yeniden başlatılır - sınıflandırma çıkış katmanları (cv3, one2one_cv3) sınıf sayısı ile (80'e karşı 5) ilişkilendirilen şekillere sahiptir, bu nedenle aktarılamazlar ve rastgele başlatılırlar. Başlıktaki kutu regresyon katmanları (cv2, one2one_cv2), sınıf sayısından bağımsız olarak sabit şekillere sahiptir, bu nedenle normal şekilde aktarılırlar.
  3. Sınıf sayısı değiştirildiğinde ağırlıkların büyük çoğunluğu aktarılır. Örneğin, YOLO26n'yi COCO'dan (80 sınıf) 5 sınıflı bir veri kümesine ince ayar yapmak, 708 ağırlık tensöründen 606'sını aktarır: yalnızca sınıf sayısına bağlı sınıflandırma katmanları yeniden başlatılırken, omurga, boyun ve kutu regresyon dalları bozulmadan kalır.

Önceden eğitilmiş modelle aynı sayıda sınıfa sahip veri kümeleri için (örneğin, COCO ön eğitimli ağırlıkların başka bir 80 sınıflı veri kümesinde ince ayar yapılması), tespit başlığı dahil ağırlıkların %100'ü aktarılır.

Sınıf Adı Takma Adlarıyla Sınıfları Aktarma#

Ultralytics, büyük/küçük harf ve boşlukları dikkate almadan, sınıf adına göre veri setleri arasında eşleşen sınıf başlığı (classification-head) satırlarını aktarır. Eşdeğer sınıflar farklı adlar kullandığında, yüklemeden önce bellek içindeki kaynak kontrol noktası sınıflarını yeniden adlandırın. Bu, aksi takdirde eşleşmemiş olarak değerlendirilip rastgele başlatılacak olan paylaşılan kavramlar için önceden eğitilmiş sınıflandırma ağırlıklarını korur.

Bu Objects365 v2 - COCO örneği, yüklenen kontrol noktasındaki kaynak sınıfları yeniden adlandırır; train() bunları önceden eğitilmiş ağırlıklar olarak iletir:

from ultralytics import YOLO

# Source Objects365 v2 name -> target COCO name
ALIASES = {
    "wild bird": "bird",
    "handbag/satchel": "handbag",
    "luggage": "suitcase",
    "bowl/basin": "bowl",
    "orange/tangerine": "orange",
    "monitor/tv": "tv",
    "stuffed toy": "teddy bear",
    "hair dryer": "hair drier",
}

model = YOLO("path/to/yolo26s-objects365.pt")
model.model.names = {i: ALIASES.get(name, name) for i, name in model.model.names.items()}
model.train(data="coco.yaml", epochs=100, imgsz=640)

Temel İnce Ayar Örneği#

Örnek
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # load pretrained model
model.train(data="custom.yaml", epochs=50, imgsz=640)

Model Boyutu Seçme#

Daha büyük modeller daha fazla kapasiteye ancak güncellenecek daha fazla parametreye de sahiptir, bu da eğitim verileri sınırlı olduğunda aşırı öğrenme (overfitting) riskini artırabilir. Daha küçük bir modelle (YOLO26n veya YOLO26s) başlamak ve doğrulama metrikleri plato çizerse ölçeği büyütmek pratik bir yaklaşımdır. Optimum model boyutu; görevin karmaşıklığına, sınıf sayısına, veri setinin çeşitliliğine ve dağıtım için mevcut donanıma bağlıdır. Mevcut boyutlar ve performans kıyaslamaları için tam YOLO26 model page sayfasına bakın.

Optimize Edici ve Öğrenme Oranı Seçimi#

Varsayılan optimizer=auto ayarı, toplam eğitim yinelemesi sayısına göre optimizatörü ve öğrenme oranını seçer:

  • < 10.000 yineleme (küçük veri kümeleri veya az sayıda epoch): Düşük, otomatik hesaplanmış bir öğrenme oranıyla AdamW
  • > 10.000 iterasyon (büyük veri setleri): lr=0.01 ile MuSGD (hibrit bir Muon+SGD optimizatörü)

Çoğu ince ayar görevi için, varsayılan ayar manuel ayarlama olmaksızın iyi çalışır. Optimize ediciyi şu durumlarda açıkça ayarlamayı düşün:

  • Eğitim kararsızsa (kayıp (loss) ani yükseliyor veya sapma gösteriyorsa): daha kararlı bir yakınsama için optimizer=AdamW, lr0=0.001 deneyin
  • Büyük bir modeli küçük bir veri setinde fine-tune etme: lr0=0.001 gibi daha düşük bir öğrenme oranı, önceden eğitilmiş özellikleri korumaya yardımcı olur
Otomatik optimize edici, manuel lr0'ı geçersiz kılar

optimizer=auto olduğunda, lr0 ve momentum değerleri yok sayılır. Öğrenme oranını manuel olarak kontrol etmek için optimizatörü açıkça ayarlayın: optimizer=SGD, lr0=0.005.

Katmanları Dondurma#

Dondurma (freezing), eğitim sırasında belirli katmanların güncellenmesini engeller. Bu, veri seti model kapasitesine göre küçük olduğunda eğitimi hızlandırır ve overfitting riskini azaltır.

freeze parametresi bir tamsayı veya liste kabul eder. Tamsayı freeze=10, ilk 10 katmanı (0-9 indeksleri) dondurur; bu da YOLO26 omurgasının (backbone) çoğunu kapsar. Omurga 0-10 katmanlarını kapsar, bu nedenle freeze=10 son C2PSA bloğunu (katman 10) eğitilebilir bırakır; tüm omurgayı dondurmak için freeze=11 kullanın. Bir liste, kısmi omurga dondurma için freeze=[0, 3, 5] gibi katman indeksleri veya bir katmandaki belirli dallar üzerinde hassas kontrol için freeze=["23.cv2", "23.one2one_cv2"] gibi modül adı dizeleri (burada tespit başlığının her iki kutu regresyon dalı) içerebilir.

Örnek
model.train(data="custom.yaml", epochs=50, freeze=10)

Doğru dondurma derinliği, hedef alanın önceden eğitilmiş veriye ne kadar benzediğine ve ne kadar eğitim verisi olduğuna bağlıdır:

SenaryoÖneriGerekçe
Büyük veri kümesi, benzer alanfreeze=None (varsayılan)Aşırı öğrenme olmadan tüm katmanları uyarlamak için yeterli veri
Küçük veri kümesi, benzer alanfreeze=10Omurga özelliklerini korur, eğitilebilir parametreleri azaltır
Çok küçük veri kümesifreeze=23Yalnızca tespit başlığı eğitilir, aşırı öğrenme riskini en aza indirir
Alan COCO'dan uzakfreeze=NoneOmurga özellikleri iyi aktarılamayabilir ve yeniden eğitim gerektirebilir

Dondurma derinliği bir hiperparametre olarak da ele alınabilir - birkaç değer denemek (0, 5, 10) ve doğrulama mAP'sini karşılaştırmak, belirli bir veri kümesi için en iyi ayarı bulmanın pratik bir yoludur.

İnce Ayar İçin Temel Hiperparametreler#

İnce ayar genellikle sıfırdan eğitime göre daha az hiperparametre ayarı gerektirir. En önemli parametreler şunlardır:

  • epochs: Fine-tuning, sıfırdan eğitmekten daha hızlı yakınsar. Orta düzeyde bir değerle başlayın ve doğrulama metrikleri plato çizdiğinde erken durdurmak için patience kullanın.
  • patience: Varsayılan 100 değeri uzun eğitim çalıştırmaları için tasarlanmıştır. Bunu 10-20'ye düşürmek, halihazırda yakınsamış çalıştırmalarda zaman kaybetmeyi önler.
  • warmup_epochs: Varsayılan warmup (3 epoch) öğrenme oranını sıfırdan kademeli olarak artırır; bu, büyük gradyan güncellemelerinin erken iterasyonlarda önceden eğitilmiş özelliklere zarar vermesini önler. Fine-tuning için bile varsayılanı korumanız önerilir.

Eğitim parametrelerinin tam listesi için training configuration reference sayfasına bakın.

İki Aşamalı İnce Ayar#

İki aşamalı ince ayar, eğitimi iki faza ayırır. İlk aşama omurgayı dondurur ve yalnızca boyun ve başlığı eğitir; bu, tespit katmanlarının önceden eğitilmiş özellikleri bozmadan yeni sınıflara uyum sağlamasına olanak tanır. İkinci aşama tüm katmanları çözer ve omurgayı hedef alan için iyileştirmek amacıyla tüm modeli daha düşük bir öğrenme oranıyla eğitir.

Bu yaklaşım, hedef alanın COCO'dan önemli ölçüde farklı olduğu durumlarda (tıbbi görüntüler, hava görüntüleri, mikroskopi) özellikle yararlıdır; bu gibi durumlarda omurganın uyarlanması gerekebilir ancak her şeyi aynı anda eğitmek kararsızlığa neden olur. Geri çağrı (callback) tabanlı bir yaklaşım ile otomatik dondurmayı kaldırma için Freezing and Unfreezing the Backbone bölümüne bakın.

İki aşamalı ince ayar
from ultralytics import YOLO

# Stage 1: freeze backbone, train head and neck
model = YOLO("yolo26n.pt")
model.train(data="custom.yaml", epochs=20, freeze=10, name="stage1", exist_ok=True)

# Stage 2: unfreeze all, fine-tune with lower lr
model = YOLO("runs/detect/stage1/weights/best.pt")
model.train(data="custom.yaml", epochs=30, lr0=0.001, name="stage2", exist_ok=True)

Yaygın Tuzaklar#

Model tahmin üretmiyor#

  • Yetersiz eğitim verisi: çok az örnekle eğitim, en yaygın nedendir; model çok az veriden öğrenemez veya genelleme yapamaz. Diğer nedenleri araştırmadan önce sınıf başına yeterince çeşitli örnek olduğundan emin olun.
  • Veri seti yollarını kontrol edin: data.yaml içindeki hatalı yollar sessizce sıfır etiket üretir. Etiketlerin doğru yüklendiğini onaylamak için eğitimden önce yolo detect val model=yolo26n.pt data=custom.yaml çalıştırın.
  • Güven eşiğini (confidence threshold) düşürün: tahminler varsa ancak filtreleniyorsa, çıkarım sırasında conf=0.1 deneyin.
  • Sınıf sayısını doğrula: data.yaml içindeki nc değerinin etiket dosyalarındaki gerçek sınıf sayısıyla eşleştiğinden emin ol.

Doğrulama mAP'si erken düzleşiyor#

  • Daha fazla veri ekleyin: ince ayar, ek eğitim verilerinden, özellikle çeşitli açılar, aydınlatma ve arka planlara sahip örneklerden önemli ölçüde faydalanır.
  • Sınıf dengesini kontrol edin: yeterince temsil edilmeyen sınıfların AP'si düşük olacaktır. Ters frekans sınıf ağırlıklandırması uygulamak için cls_pw kullanın (orta düzeyde dengesizlik için cls_pw=0.25 ile başlayın, şiddetli dengesizlik için 1.0 değerine çıkarın).
  • Artırmayı (augmentation) azaltın: çok küçük veri setleri için yoğun artırma, faydadan çok zarar verebilir. mosaic=0.5 veya mosaic=0.0 deneyin.
  • Çözünürlüğü artırın: küçük nesneleri içeren veri setleri için ayrıntıları korumak üzere imgsz=1280 deneyin.

İnce ayardan sonra orijinal sınıflarda performans düşüyor#

Bu, felaket unutma (catastrophic forgetting) olarak bilinir; model, yalnızca yeni veriler üzerinde ince ayar yapıldığında önceden öğrendiği bilgileri kaybeder. Unutma, orijinal veri kümesi görüntülerini yeni verilerle birlikte dahil etmeden çoğunlukla kaçınılmazdır. Bunu azaltmak için:

  • Veri kümelerini birleştirin: ince ayar sırasında orijinal sınıfların örneklerini yeni sınıflarla birlikte dahil edin. Unutmayı önlemenin tek güvenilir yolu budur.
  • Omurga ve boynu dondurun: hem omurgayı hem de boynu dondurmak, böylece yalnızca tespit başlığı eğitilir, çok düşük öğrenme oranlı kısa ince ayar süreçleri için yardımcı olur.
  • Daha az epoch için eğitin: model yeni veriler üzerinde ne kadar uzun süre özel olarak eğitilirse, unutma o kadar artar.

SSS#

  • Sabit bir minimum yoktur; sonuçlar görevin karmaşıklığına, sınıf sayısına ve alanın COCO'ya ne kadar benzer olduğuna bağlıdır. Ham miktardan ziyade daha çeşitli görüntüler (çeşitli aydınlatma, açılar, arka planlar) önemlidir. Elindekilerle başla ve doğrulama metrikleri yetersizse artır.

  • Önceden eğitilmiş bir .pt dosyası yükle ve özel bir data.yaml dosyasının yoluyla birlikte .train() fonksiyonunu çağır. Ultralytics, ağırlık transferi, algılama kafası yeniden başlatılması ve optimizatör seçimini otomatik olarak yönetir. Eksiksiz kod örneği için Temel İnce Ayar bölümüne göz at.

  • En yaygın nedenler; data.yaml içinde (sessizce sıfır etiket üreten) yanlış yollar, YAML'daki nc ile gerçek etiket dosyaları arasındaki uyumsuzluk veya çok yüksek olan bir güven eşiğidir. Kapsamlı bir sorun giderme kontrol listesi için Common Pitfalls bölümüne bakın.

  • Bu, veri seti boyutuna ve alan benzerliğine bağlıdır. COCO'ya benzer bir alana sahip küçük veri setleri için omurgayı dondurmak (freeze=10) overfitting'i önler. COCO'dan çok farklı alanlar için tüm katmanları dondurulmamış bırakmak (freeze=None), omurganın uyum sağlamasına olanak tanır. Ayrıntılı öneriler için Freezing Layers bölümüne bakın.

  • Eğitim verilerine yeni sınıflarla birlikte orijinal sınıfların örneklerini de dahil edin. Bu mümkün değilse, daha fazla katmanı dondurmak (freeze=10 veya üzeri) ve daha düşük bir öğrenme oranı kullanmak, önceden eğitilmiş bilginin korunmasına yardımcı olur. Daha fazla ayrıntı için Performance degrades on original classes bölümüne bakın.

Katkıda Bulunanlar

Yorumlar