İçeriğe geç

Ö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 AyarSıfırdan Eğitim
Başlangıç ağırlıklarıCOCO 80 sınıf) üzerinde önceden eğitilmişRastgele başlatma
KomutYOLO("yolo26n.pt")YOLO("yolo26n.yaml")
YakınsamaDaha hızlı - backbone zaten eğitilmiş backboneDaha yavaş - tüm katmanlar sıfırdan öğrenir
Veri gereksinimleriAlt kısım - önceden eğitilmiş özellikler, veri eksikliğini telafi ederDaha ü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ıflarCOCO 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 :

  1. 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.
  2. 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.
  3. 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.001 daha 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ÖneriGerekçe
Büyük veri kümesi, benzer alanfreeze=None (varsayılan)Aşırı uyum sorunu yaşamadan tüm katmanları uyarlayacak kadar veri
Küçük veri kümesi, benzer alanfreeze=10backbone korur, eğitilebilir parametre sayısını azaltır
Çok küçük veri kümesifreeze=23Yalnızca algılama başlığı eğitilir, böylece aşırı uyum riski en aza indirilir
COCO'dan çok uzak bir alanfreeze=NoneBackbone 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 ve patience doğ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.yaml sessizce sıfır etiket üret. Çalıştır yolo detect val model=yolo26n.pt data=your_data.yaml Eğ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 nc içinde data.yaml etiket 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_pw ters frekans sınıfı ağırlıklandırması uygulamak için (şöyle başlayarak: cls_pw=0.25 orta 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.5 veya mosaic=0.0.
  • Çözünürlüğü artır: küçük nesneler içeren veri kümeleri için şunu deneyin imgsz=1280 ayrı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.



📅 0 gün önce oluşturuldu ✏️ 0 gün önce güncellendi
raimbekovm

Yorumlar