Özel Bir Veri Kümesinde YOLO Nasıl İnce Ayar (Fine-Tune) Yapılır
İnce ayar (fine-tuning) eğitilmiş bir modeli, rastgele başlatma yerine öğrenilmiş ağırlıklardan yola çıkarak yeni sınıfları tanıyacak şekilde uyarlar. Sıfırdan yüzlerce epoch boyunca eğitmek yerine, ince ayar önceden eğitilmiş olarak ayarla. özelliklerinden yararlanır ve özel veriler üzerinde çok daha kısa sürede yakınsamasını sağlar.
Bu kılavuz, temel kullanımdan YOLO26 gibi ileri tekniklere kadar özel veri kümeleri üzerinde katman dondurma ve iki aşamalı eğitim.
İnce Ayar vs Sıfırdan Eğitim
Önceden eğitilmiş bir model; kenar algılama, doku tanıma ve şekil anlama gibi genel görsel özellikleri milyonlarca görüntüden zaten öğrenmiştir. Transfer öğrenimi ince ayar yoluyla bu bilgiyi yeniden kullanır ve modele yalnızca yeni sınıfların neye benzediğini öğretir; bu yüzden daha hızlı yakınsar ve daha az veri gerektirir. Sıfırdan eğitim ise tüm bunları çöpe atar ve modeli her şeyi piksel düzeyindeki desenlerden başlayarak öğrenmeye zorlar, bu da önemli ölçüde daha fazla kaynak gerektirir.
| İnce Ayar (Fine-Tuning) | 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ş durumda | 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) |
Bir .pt dosyası YOLO("yolo26n.pt") ile yüklendiğinde, önceden eğitilmiş ağırlıklar modelde saklanır. Bundan sonra .train(data="custom.yaml") çağırmak, uyumlu tüm ağırlıkları otomatik olarak yeni model mimarisine aktarır, eşleşmeyen katmanları (sınıf sayısı farklı olduğunda tespit başlığı gibi) yeniden başlatır ve eğitime başlar. Manuel ağırlık yükleme, katman manipülasyonu veya özel transfer öğrenme kodu gerekmez.
Önceden Eğitilmiş Ağırlık Aktarımı Nasıl Çalışır
Önceden eğitilmiş bir modele, 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 tamamen aktarılır - bu katmanlar genel görsel özellikleri çıkarır ve şekilleri sınıf sayısından bağımsızdır.
- Tespit başlığı kısmen yeniden başlatılır - sınıflandırma çıktı katmanlarının (
cv3,one2one_cv3) şekilleri sınıf sayısına (80'e karşı 5) bağlıdır, bu yüzden 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. - Ağırlıkların büyük çoğunluğu aktarılır sınıf sayısı değiştirilirken. Yalnızca tespit başlığındaki sınıflandırmaya özel katmanlar yeniden başlatılır; 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 önceden eğitilmiş 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.
Temel İnce Ayar Örneği
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # load pretrained model
model.train(data="path/to/data.yaml", epochs=50, imgsz=640)Model Boyutu Seçme
Daha büyük modeller daha fazla kapasiteye sahiptir ancak güncellenecek daha fazla parametreye de sahiptir; bu da eğitim verisi 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 çizdiğinde ölçeklendirmek pratik bir yaklaşımdır. Optimal model boyutu; görevin karmaşıklığına, sınıf sayısına, veri kümesinin çeşitliliğine ve dağıtım için mevcut donanıma bağlıdır. Mevcut boyutlar ve performans karşılaştırmaları için tam YOLO26 model sayfasına bak göz at.
Optimizer ve Öğrenme Oranı Seçimi
Varsayılan optimizer=auto ayarı, toplam eğitim iterasyon sayısına göre optimizer'ı ve öğrenme oranını seçer:
- < 10.000 iterasyon (küçük veri kümeleri veya az epoch): Düşük, otomatik hesaplanan öğrenme oranıyla AdamW
- > 10.000 iterasyon (büyük veri kümeleri): YOLO26'da, (hibrit bir Muon+SGD optimizer) lr=0.01 ile
Çoğu ince ayar görevi için varsayılan ayar, manuel ayarlama gerektirmeden iyi çalışır. Optimizer'ı şu durumlarda açıkça ayarlamayı düşün:
- Eğitim kararsız (kayıp sıçramaları veya sapmaları): daha kararlı yakınsama için
optimizer=AdamW, lr0=0.001dene - Küçük bir veri kümesinde büyük bir modele ince ayar yaparken:
lr0=0.001gibi daha düşük bir öğrenme oranı önceden eğitilmiş özellikleri korumaya yardımcı olur
Ne zaman optimizer=autoAyarlayarak lr0 ve momentum değerleri göz ardı edilir. Öğrenme oranını manuel olarak kontrol etmek için optimizer'ı açıkça ayarla: optimizer=SGD, lr0=0.005.
Katmanları Dondurma
Dondurma, belirli katmanların eğitim sırasında güncellenmesini engeller. Bu, eğitimi hızlandırır ve veri kümesi model kapasitesine göre küçük olduğunda aşırı öğrenme riskini azaltır.
freeze parametresi bir tam sayı veya liste kabul eder. freeze=10 tam sayısı, ilk 10 katmanı dondurur (0'dan 9'a kadar, bu YOLO26'daki omurgaya karşılık gelir). Liste, kısmi omurga dondurma için freeze=[0, 3, 5] gibi katman indeksleri veya bir katman içindeki belirli dallar üzerinde hassas kontrol için freeze=["23.cv2"] gibi modül adı dizeleri 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 verisinin mevcut 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 riski minimize edilir |
| COCO'dan uzak alan | freeze=None | Omurga özellikleri iyi aktarılmayabilir ve yeniden eğitim gerekebilir |
Dondurma derinliği bir hiperparametre olarak da değerlendirilebilir; birkaç değer deneyip (0, 5, 10) 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: İnce ayar, sıfırdan eğitime göre daha hızlı yakınsar. Orta bir değerle başla ve doğrulama metrikleri plato çizdiğinde erken durdurmak içinpatiencekullan.patience: 100 olan varsayılan değer uzun eğitim süreçleri için tasarlanmıştır. Bunu 10-20'ye düşürmek, zaten yakınsamış süreçlerde zaman kaybetmeyi önler.warmup_epochs: Varsayılan ısınma (3 epoch), öğrenme oranını sıfırdan kademeli olarak artırır; bu da büyük gradyan güncellemelerinin ilk iterasyonlarda önceden eğitilmiş özelliklere zarar vermesini önler. İnce ayar için bile varsayılanı koruman önerilir.
Eğitim parametrelerinin tam listesi için şuraya bak: eğitim yapılandırma referansı.
İki Aşamalı İnce Ayar
İki aşamalı ince ayar, eğitimi iki faza böler. İlk aşama omurgayı dondurur ve sadece boyun ve başlığı eğiterek, 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 alana göre hassaslaştırmak için tüm modeli daha düşük bir öğrenme oranıyla eğitir.
Bu yaklaşım, hedef alan COCO'dan önemli ölçüde farklı olduğunda (tıbbi görüntüler, hava görüntüleri, mikroskopi) özellikle yararlıdır; burada omurganın uyarlanması gerekebilir ancak her şeyi bir kerede eğitmek kararsızlığa yol açar. Geri çağırma (callback) tabanlı otomatik bir çözüm için şuraya bak: Backbone'u Dondurma ve Dondurmayı Kaldırma.
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 Hatalar
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 ol.
- Veri kümesi yollarını kontrol et: hatalı yollar
data.yamlsessizce sıfır etiket üretir.yolo detect val model=yolo26n.pt data=your_data.yamletiketlerin doğru yüklendiğini doğrulamak için eğitimden önce çalıştır. - Düşük güven eşiği: eğer tahminler mevcut ancak filtreleniyorsa, çıkarım sırasında
conf=0.1kullanmayı dene. - Sınıf sayısını doğrula:
nciçindekidata.yamldeğerinin etiket dosyalarındaki gerçek sınıf sayısıyla eşleştiğinden emin ol.
Doğrulama mAP erken sabitleniyor
- Daha fazla veri ekle: ince ayar, özellikle çeşitli açılara, ışıklandırmaya ve arka planlara sahip farklı örnekler içeren ek eğitim verilerinden önemli ölçüde yararlanır.
- Sınıf dengesini kontrol et: yeterince temsil edilmeyen sınıflar düşük AP değerine sahip olacaktır. Ters frekans sınıf ağırlıklandırması uygulamak için
cls_pwkullan (orta dereceli dengesizlik içincls_pw=0.25ile başla, ciddi dengesizlik için1.0değerine çıkar). - Artırmayı azalt: çok küçük veri setleri için yoğun artırma, yardımcı olmaktan çok zarar verebilir.
mosaic=0.5veyamosaic=0.0. - Çözünürlüğü artır: küçük nesnelere sahip veri setleri için ayrıntıları korumak adına
imgsz=1280kullanmayı dene.
İnce ayar sonrası orijinal sınıflarda performans düşüyor
Buna felaket unutkanlığı denir; model, yalnızca yeni veriler üzerinde ince ayar yapıldığında önceden öğrenilmiş bilgileri kaybeder. Unutma, orijinal veri seti görsellerini yeni verilerle birlikte dahil etmeden büyük ölçüde önlenemez. Bunu azaltmak için:
- Veri setlerini birleştir: ince ayar sırasında yeni sınıfların yanında orijinal sınıf örneklerini de dahil et. Unutmayı önlemenin tek güvenilir yolu budur.
- Backbone ve neck kısımlarını dondur: hem backbone hem de neck kısımlarını dondurarak sadece tespit başlığının eğitilmesini sağlamak, çok düşük öğrenme hızıyla yapılan kısa ince ayar işlemleri için yardımcı olur.
- Daha az epoch için eğit: model yeni veriler üzerinde ne kadar uzun süre özel olarak eğitilirse, unutma o kadar artar.
SSS
YOLO üzerinde ince ayar yapmak için kaç görsele ihtiyacım var?
Sabit bir alt sınır yoktur; sonuçlar görevin karmaşıklığına, sınıf sayısına ve etki alanının COCO ile ne kadar benzer olduğuna bağlıdır. Daha çeşitli görseller (farklı ışıklandırma, açılar, arka planlar) ham miktardan daha önemlidir. Elindekilerle başla ve doğrulama metrikleri yetersiz kalırsa ölçeği büyüt.
Özel bir veri setinde YOLO26 üzerinde nasıl ince ayar yaparım?
Önceden eğitilmiş bir .pt dosyası yükle ve özel bir .train() yolunu belirterek data.yaml fonksiyonunu çağır. Ultralytics, ağırlık aktarımı, tespit başlığının yeniden başlatılması ve optimize edici seçimi gibi işlemleri otomatik olarak yönetir. Tam kod örneği için Temel İnce Ayar bölümüne bak.
İnce ayar yapılmış YOLO modelim neden hiçbir şey algılamıyor?
En yaygın nedenler, data.yaml içindeki hatalı yollar (sessizce sıfır etiket üretir), YAML içindeki nc ile gerçek etiket dosyaları arasındaki uyumsuzluk veya çok yüksek bir güven eşiğidir. Tam sorun giderme kontrol listesi için Yaygın Hatalar kısmına bak.
İnce ayar için hangi YOLO katmanlarını dondurmalıyım?
Bu, veri seti boyutuna ve etki alanı benzerliğine bağlıdır. COCO ile benzer etki alanına sahip küçük veri setleri için backbone'u dondurmak (freeze=10) aşırı uyumu engeller. COCO'dan çok farklı etki alanları için tüm katmanları dondurulmamış halde bırakmak (freeze=None), backbone'un uyum sağlamasına olanak tanır. Ayrıntılı öneriler için Katmanları Dondurma kısmına bak.
Yeni sınıflarda YOLO üzerinde ince ayar yaparken felaket unutkanlığını nasıl önlerim?
Eğitim verilerine yeni sınıfların yanında orijinal sınıf örneklerini de dahil et. Eğer bu mümkün değilse, daha fazla katmanı dondurmak (freeze=10 veya daha fazlası) ve daha düşük bir öğrenme hızı kullanmak, önceden eğitilmiş bilgilerin korunmasına yardımcı olur. Orijinal sınıflarda performans düşüyor bölümünü kontrol et.