Ö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 Ayar | Sıfırdan Eğitim | |
|---|---|---|
| Başlangıç ağırlıkları | COCO üzerinde önceden eğitilmiş (80 sınıf) | Rastgele başlatma |
| Komut | YOLO("yolo26n.pt") | YOLO("yolo26n.yaml") |
| Yakınsama | Daha hızlı - omurga (backbone) zaten eğitilmiş | Daha yavaş - tüm katmanlar sıfırdan öğrenir |
| Veri gereksinimleri | Daha düşük - önceden eğitilmiş özellikler daha az veriyi telafi eder | Daha yüksek - model tüm özellikleri yalnızca veri kümesinden öğrenmelidir |
| Ne zaman kullanılır | Doğal görüntüler içeren özel sınıflar | COCO'dan temel olarak farklı alanlar (tıp, uydu, radar) |
.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:
- 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.
- 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. - 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#
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.001deneyin - Büyük bir modeli küçük bir veri setinde fine-tune etme:
lr0=0.001gibi daha düşük bir öğrenme oranı, önceden eğitilmiş özellikleri korumaya yardımcı olur
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.
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 | Öneri | Gerekçe |
|---|---|---|
| Büyük veri kümesi, benzer alan | freeze=None (varsayılan) | Aşırı öğrenme olmadan tüm katmanları uyarlamak için yeterli veri |
| Küçük veri kümesi, benzer alan | freeze=10 | Omurga özelliklerini korur, eğitilebilir parametreleri azaltır |
| Çok küçük veri kümesi | freeze=23 | Yalnızca tespit başlığı eğitilir, aşırı öğrenme riskini en aza indirir |
| Alan COCO'dan uzak | freeze=None | Omurga ö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çinpatiencekullanı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.
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.yamliçindeki hatalı yollar sessizce sıfır etiket üretir. Etiketlerin doğru yüklendiğini onaylamak için eğitimden önceyolo 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.1deneyin. - Sınıf sayısını doğrula:
data.yamliçindekincdeğ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_pwkullanın (orta düzeyde dengesizlik içincls_pw=0.25ile başlayın, şiddetli dengesizlik için1.0değ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.5veyamosaic=0.0deneyin. - Çözünürlüğü artırın: küçük nesneleri içeren veri setleri için ayrıntıları korumak üzere
imgsz=1280deneyin.
İ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
.ptdosyası yükle ve özel birdata.yamldosyası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.yamliçinde (sessizce sıfır etiket üreten) yanlış yollar, YAML'dakincile 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=10veya ü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.