Özel bir veri YOLO nasıl ince ayarlayabilirim?
İnce ayarlama, önceden eğitilmiş bir modeli rastgele başlatma yerine öğrenilmiş ağırlıklardan yola çıkarak yeni sınıfları tanıyacak şekilde uyarlar. Yüzlerce döngü boyunca sıfırdan eğitim yapmak yerine, ince ayarlama önceden eğitilmiş modeli kullanır COCO özelliklerinden yararlanır ve çok daha kısa sürede özel veriler üzerinde yakınsama sağlar.
Bu kılavuz, temel kullanımdan katman dondurma ve iki aşamalı eğitim gibi ileri tekniklere kadar, özel veri kümeleri üzerinde YOLO26'nın ince ayarını ele almaktadır.
İnce Ayar mı, Yoksa Sıfırdan Eğitim mi?
Önceden eğitilmiş bir model, milyonlarca görüntüden genel görsel özellikleri (kenar algılama, doku tanıma, şekil kavrama) zaten öğrenmiştir. İnce ayarlama yoluyla yapılan aktarım öğrenimi, bu bilgileri yeniden kullanır ve modele yalnızca yeni sınıfların neye benzediğini öğretir; bu nedenle daha hızlı yakınsamaya ulaşır ve daha az veri gerektirir. Sıfırdan eğitim ise tüm bunları bir kenara bırakır ve modeli piksel düzeyindeki kalıplardan başlayarak her şeyi öğrenmeye zorlar; bu da önemli ölçüde daha fazla kaynak gerektirir.
| İnce Ayar | Sıfırdan Eğitim | |
|---|---|---|
| Başlangıç ağırlıkları | COCO 80 sınıf) üzerinde önceden eğitilmiş | Rastgele başlatma |
| Komut | YOLO("yolo26n.pt") | YOLO("yolo26n.yaml") |
| Yakınsama | Daha hızlı - backbone zaten eğitilmiş backbone | Daha yavaş - tüm katmanlar sıfırdan öğrenir |
| Veri gereksinimleri | Alt kısım - önceden eğitilmiş özellikler, veri eksikliğini telafi eder | Daha üst düzey - 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 temelden farklı alanlar COCO tıp, uydu, radar) |
İnce ayar yapmak için ek kod yazmaya gerek yoktur
Bir .pt dosya şu şekilde yüklenir: YOLO("yolo26n.pt")önceden eğitilmiş ağırlıklar modelde saklanır. Çağırma .train(data="custom.yaml") Bundan sonra, uyumlu tüm ağırlıkları otomatik olarak yeni model mimarisine aktarır, uyuşmayan katmanları (örneğin, sınıf sayısı farklı olduğunda algılama katmanı gibi) yeniden başlatır ve eğitimi başlatır. Manuel ağırlık yükleme, katman düzenleme veya özel aktarım öğrenimi 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 80 sınıfından 5 özel sınıfa) ince ayarlandığında, Ultralytics şekil farkındalıklı ağırlık aktarımı Ultralytics :
- Backbone boyun katmanları tamamen aktarılır – bu katmanlar genel görsel özellikleri çıkarır ve şekilleri sınıf sayısından bağımsızdır.
- Algılama başlığı kısmen yeniden başlatıldı - sınıflandırma çıktı katmanları (
cv3,one2one_cv3) sınıf sayısına bağlı şekillere sahiptir (80'e karşı 5), bu nedenle aktarılamazlar ve rastgele başlatılırlar. Kutu regresyon katmanları (cv2,one2one_cv2) başındaki öğeler, 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ında değişiklik yapıldığında ağırlıkların büyük çoğunluğu aktarılır. Yalnızca algılama başlığındaki sınıfa özgü katmanlar yeniden başlatılır; backbone, boyun ve kutu regresyon dalları ise değişmeden kalır.
Önceden eğitilmiş modelle aynı sınıf sayısına sahip veri kümeleri için (örneğin, COCO ağırlıkların başka bir 80 sınıflı veri kümesinde ince ayarlanması), algılama başlığı da dahil olmak üzere ağırlıkların %100'ü aktarılır.
Temel Ayarlama Örneği
Örnek
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # load pretrained model
model.train(data="path/to/data.yaml", epochs=50, imgsz=640)
yolo detect train model=yolo26n.pt data=path/to/data.yaml epochs=50 imgsz=640
Model Boyutu Seçimi
Daha büyük modeller daha fazla kapasiteye sahiptir ancak güncellenmesi gereken parametre sayısı da daha fazladır; bu durum, eğitim verileri sınırlı olduğunda aşırı uyum riskini artırabilir. Daha küçük bir modelle (YOLO26n veya YOLO26s) başlamak ve yalnızca doğrulama metrikleri sabit bir seviyeye ulaştığında modeli büyütmek pratik bir yaklaşımdır. Optimum 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 YOLO26 model sayfasının tamamına bakın.
Optimizer ve Öğrenme Hızı Seçimi
Varsayılan optimizer=auto Bu ayar, toplam eğitim yineleme sayısına göre optimizeri ve öğrenme hızını seçer:
- < 10,000 iterations (small datasets or few epochs): AdamW with a low, auto-calculated learning rate
- > 10.000 yineleme (büyük veri kümeleri): lr=0,01 değerinde MuSGD (SGD hibritSGD )
Çoğu ince ayar işlemi için, varsayılan ayar herhangi bir manuel ayarlamaya gerek kalmadan iyi sonuç verir. Aşağıdaki durumlarda optimizeri açıkça ayarlamayı düşünün:
- Eğitim istikrarsız (kayıp ani artışlar veya sapmalar): şunu deneyin
optimizer=AdamW, lr0=0.001daha istikrarlı bir yakınsama için - Küçük bir veri kümesinde büyük bir modeli ince ayarlamak: daha düşük bir öğrenme hızı, örneğin
lr0=0.001önceden eğitilmiş özelliklerin korunmasına yardımcı olur
Otomatik optimize edici, manuel lr0 ayarını geçersiz kılar
Ne zaman optimizer=auto, 'in lr0 ve momentum değerleri göz ardı edilir. Öğrenme hızını manuel olarak kontrol etmek için, optimizeri açıkça ayarlayın: optimizer=SGD, lr0=0.005.
Dondurma Katmanları
Dondurma, eğitim sırasında belirli katmanların güncellenmesini engeller. Bu, eğitim sürecini hızlandırır ve veri kümesi model kapasitesine göre küçük olduğunda aşırı uyum sorununu azaltır.
freeze Bu parametre bir tamsayı ya da bir liste kabul eder. Bir tamsayı freeze=10 ilk 10 katmanı sabitler (0'dan 9'a kadar; bu, backbone karşılık gelir). Bir liste, şu şekilde katman indeksleri içerebilir: freeze=[0, 3, 5] kısmi backbone için veya şu tür modül adı dizeleri: freeze=["23.cv2"] bir katman içindeki belirli dallar üzerinde ayrıntılı kontrol sağlamak için.
Örnek
model.train(data="custom.yaml", epochs=50, freeze=10)
model.train(data="custom.yaml", epochs=50, freeze=[0, 1, 2, 3, 4])
# Freeze the box regression branch of the detection head
model.train(data="custom.yaml", epochs=50, freeze=["23.cv2"])
Doğru dondurma derinliği, hedef alanın önceden eğitilmiş verilere ne kadar benzediğine ve ne kadar eğitim verisi 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ı uyum sorunu yaşamadan tüm katmanları uyarlayacak kadar veri |
| Küçük veri kümesi, benzer alan | freeze=10 | backbone korur, eğitilebilir parametre sayısını azaltır |
| Çok küçük veri kümesi | freeze=23 | Yalnızca algılama başlığı eğitilir, böylece aşırı uyum riski en aza indirilir |
| COCO'dan çok uzak bir alan | freeze=None | Backbone yeterince aktarılmayabilir ve yeniden eğitim gerekebilir |
Dondurma derinliği de bir hiperparametre olarak değerlendirilebilir; birkaç değeri (0, 5, 10) denemek ve doğrulama mAP karşılaştırmak, belirli bir veri kümesi için en uygun ayarı bulmanın pratik bir mAP .
İnce Ayar için Temel Hiperparametreler
İnce ayar, genellikle sıfırdan eğitmeye kıyasla daha az hiperparametre ayarlaması gerektirir. En önemli parametreler şunlardır:
epochs: İnce ayar, sıfırdan eğitmeye kıyasla daha hızlı yakınsamaya ulaşır. Orta düzeyde bir değerle başlayın vepatiencedoğrulama göstergeleri sabit bir seviyeye ulaştığında erken durmak.patience: Varsayılan değer olan 100, uzun süreli eğitim çalıştırmaları için tasarlanmıştır. Bu değeri 10-20'ye düşürmek, zaten yakınsama aşamasına gelmiş çalıştırmalarda zaman kaybını önler.warmup_epochs: Varsayılan ısınma aşaması (3 döngü), öğrenme hızını sıfırdan kademeli olarak artırır; bu da, ilk yinelemelerde büyük gradyan güncellemelerinin önceden eğitilmiş özelliklere zarar vermesini önler. İnce ayar yaparken bile varsayılan ayarın korunması tavsiye edilir.
Eğitim parametrelerinin tam listesi için eğitim yapılandırma kılavuzuna bakın.
İki Aşamalı İnce Ayar
İki aşamalı ince ayar, eğitimi iki aşamaya ayırır. İlk aşamada backbone dondurulur backbone yalnızca boyun ile kafa katmanları eğitilir; böylece algılama katmanları, önceden eğitilmiş özellikleri bozmadan yeni sınıflara uyum sağlayabilir. İkinci aşamada ise tüm katmanların dondurması kaldırılır ve hedef alan backbone iyileştirmek amacıyla tüm model daha düşük bir öğrenme hızıyla eğitilir.
Bu yaklaşım, hedef alanın COCO önemli ölçüde farklı olduğu durumlarda COCO tıbbi görüntüler, hava fotoğrafları, mikroskopi) özellikle yararlıdır; bu tür durumlarda backbone uyarlanması backbone , ancak her şeyi aynı anda eğitmek istikrarsızlığa yol açabilir. Geri çağırma tabanlı bir yaklaşımla otomatik çözme hakkında bilgi için bkz. Backbone Dondurulması ve Çözülmesi.
İ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)
Sık Karşılaşılan Hatalar
Model herhangi bir tahmin üretmiyor
- Yetersiz eğitim verisi: Çok az örnekle yapılan eğitim en yaygın nedendir; model, çok az veriyle öğrenemez veya genelleme yapamaz. Diğer nedenleri araştırmadan önce, her sınıf için yeterince çeşitli örneklerin bulunduğundan emin olun.
- Veri kümesi yollarını kontrol et: içindeki hatalı yollar
data.yamlsessizce sıfır etiket üret. Çalıştıryolo detect val model=yolo26n.pt data=your_data.yamlEğitime başlamadan önce etiketlerin doğru şekilde yüklendiğinden emin olun. - Daha düşük güven eşiği: Tahminler mevcut ama filtrelenip çıkarılmışsa, şunu deneyin
conf=0.1çıkarım sırasında. - Sınıf sayısını kontrol et: sağlamak
nciçindedata.yamletiket dosyalarındaki gerçek sınıf sayısıyla eşleşir.
Doğrulama mAP erken bir aşamada mAP
- Daha fazla veri ekleyin: İnce ayarlamadan, özellikle farklı açılar, ışıklandırma ve arka planlara sahip çeşitli örnekler içeren ek eğitim verileriyle önemli ölçüde fayda sağlanır.
- Sınıf bakiyesini kontrol et: Yeterince temsil edilmeyen sınıfların AP düşük olacaktır. Kullan
cls_pwters frekans sınıfı ağırlıklandırması uygulamak için (şöyle başlayarak:cls_pw=0.25orta derecede dengesizlik durumunda, miktarı1.0(ciddi dengesizlik durumunda). - Dolguyu azaltın: Çok küçük veri kümeleri söz konusu olduğunda, aşırı veri genişletme yarardan çok zarar verebilir. Şunu deneyin
mosaic=0.5veyamosaic=0.0. - Çözünürlüğü artır: küçük nesneler içeren veri kümeleri için şunu deneyin
imgsz=1280ayrıntıları korumak için.
İnce ayarlamadan sonra orijinal sınıflarda performans düşer
Buna "katastrofik unutma" denir; model, yalnızca yeni verilerle ince ayar yapıldığında daha önce öğrenilen bilgileri kaybeder. Yeni verilerin yanı sıra orijinal veri kümesindeki görüntüler de dahil edilmezse, bu unutma durumu çoğunlukla kaçınılmazdır. Bunu hafifletmek için:
- Veri kümelerini birleştirin: ince ayar sırasında yeni sınıfların yanı sıra orijinal sınıfların örneklerini de dahil edin. Bu, bilgilerin unutulmasını önlemenin tek güvenilir yoludur.
- backbone boynu dondur: Hem backbone boynu dondurarak yalnızca algılama kafasının çalışmasını sağlamak, çok düşük öğrenme hızıyla yapılan kısa ince ayar çalıştırmalarında yardımcı olur.
- Daha az epoch boyunca eğitin: Model yeni verilerle özel olarak ne kadar uzun süre eğitilirse, unutma o kadar artar.
SSS
YOLO ince ayarlamak için kaç tane görüntüye ihtiyacım var?
Sabit bir minimum değer yoktur; sonuçlar görevin karmaşıklığına, sınıf sayısına ve alanın COCO ne kadar benzediğine bağlıdır. Çeşitlilik içeren görüntüler (farklı ışıklandırma, açı ve arka planlar), salt sayıdan daha önemlidir. Elinizdekiyle başlayın ve doğrulama ölçütleri yetersiz kalırsa ölçeği genişletin.
YOLO26'yı özel bir veri kümesinde nasıl ince ayarlayabilirim?
Önceden eğitilmiş bir modeli yükle .pt dosya ve çağrı .train() özel bir dosyanın yolu ile data.yaml. Ultralytics halleder ağırlık aktarımı, algılama kafasının yeniden başlatılması ve optimizasyon aracının seçimi. Bkz. Temel Ayarlamalar Tam kod örneği için ilgili bölüme bakın.
Neden ince ayarları yapılmış YOLO hiçbir şey algılamıyor?
En yaygın nedenler, data.yaml (sessizce sıfır etiket üreten), şu ikisi arasındaki uyumsuzluk nc YAML dosyasında ve gerçek etiket dosyalarında ya da çok yüksek bir güven eşiği. Bkz. Sık Karşılaşılan Hatalar sorun giderme için eksiksiz bir kontrol listesi.
İnce ayar için hangi YOLO dondurmalıyım?
Bu, veri kümesinin büyüklüğüne ve alan benzerliğine bağlıdır. COCO benzer bir alana sahip küçük veri kümeleri için, backbone sabitlemek backbonefreeze=10) aşırı uyumlanmayı önler. COCO'dan çok farklı veri kümeleri için, tüm katmanları dondurulmamış halde bırakmak (freeze=None) backbone uyum backbone olanak tanır. Bkz. Dondurma Katmanları ayrıntılı öneriler için.
YOLO yeni sınıflar YOLO ince ayarlarken, katastrofik unutmayı nasıl önleyebilirim?
Eğitim verilerine yeni sınıfların yanı sıra orijinal sınıfların örneklerini de ekleyin. Bu mümkün değilse, daha fazla katmanı dondurun (freeze=10 (veya daha yüksek) ve daha düşük bir öğrenme hızı kullanmak, önceden eğitilmiş bilginin korunmasına yardımcı olur. Bkz. Orijinal sınıflarda performans düşüyor daha fazla ayrıntı için.