- Veri setini düzenlemek: klasör yapısı ve bölme
- Veriyi yüklemek ve veri artırma
- Mimari seçimi: sıfırdan küçük bir CNN mi, transfer öğrenme mi?
- Eğitim: kayıp, doğrulama ve erken durdurma
- Değerlendirme: karışıklık matrisi ve sınıf bazlı ölçütler
- Hata analizi ve iyileştirme
- Bu beceriyi Mindset programlarında nerede çalışırsınız?
- Sık sorulan sorular
Kendi Veri Setinizle Görüntü Sınıflandırma Modeli Eğitmek
Görüntü sınıflandırma modeli, bir görüntüye önceden tanımlı sınıflardan birini atar. Kendi veri setinizi düzenlemeyi, veri artırma ve transfer öğrenme ile eğitmeyi, sonucu karışıklık matrisiyle değerlendirmeyi ve hataları incelemeyi öğrenirsiniz.
Bir bakışta
- Görüntü sınıflandırma, bir görüntüye tek bir etiket atar. Nesnenin yerini bulmak ya da pikselleri ayırmak başka görevlerdir; burada soru yalnızca bu görüntü hangi sınıfa ait olduğudur.
- Veri kalitesi mimariden önce gelir. Doğru etiketlenmiş, sınıflara dengeli dağılmış ve gerçek kullanımı yansıtan görüntüler modelin üst sınırını belirler.
- Önce eğitim, doğrulama ve test olarak ayırın; sonra veri artırın. Artırma yalnız eğitim verisine uygulanır, yoksa değerlendirme güvenilmez olur.
- Az veriyle başlıyorsanız transfer öğrenme çoğu zaman en verimli yoldur. Önceden eğitilmiş bir modelin ayrıntı öğrenen katmanlarını kendi sınıflarınıza uyarlarsınız.
- Doğruluk tek başına yetmez; karışıklık matrisi hangi hataların yapıldığını gösterir. Hangi sınıfın hangisiyle karıştığı, modeli nasıl iyileştireceğinizi söyler.
Veri setini düzenlemek: klasör yapısı ve bölme
Çoğu çerçeve, görüntüleri sınıf adıyla adlandırılmış klasörlerde bekler: eğitim, doğrulama ve test için ayrı üst klasörler, her birinin içinde sınıf başına bir klasör. Etiket, görüntünün bulunduğu klasörün adından okunur. Bu düzen, etiket dosyası yazma zahmetini ortadan kaldırır ve veri setini göz kontrolüyle denetlemeyi kolaylaştırır.
Bölmeyi görüntülerin ait olduğu gruba göre yapın. Aynı ürünün, aynı hastanın ya da aynı sahnenin birden çok fotoğrafı varsa bunlar tek bir bölmede kalmalıdır; aksi hâlde model eğitimde gördüğü sahneyi doğrulamada tanır ve başarısı olduğundan iyi görünür. Bu hata veri sızıntısıdır ve en sık görülen yanıltıcı sonuç kaynağıdır.
Bölmeden önce veri setinin sağlığına bakın: bozuk dosyalar, çok küçük ya da farklı çözünürlüklü görüntüler, yanlış klasördeki örnekler. Sınıfların sayıca dengesiz olup olmadığını da kontrol edin; bir sınıf veri setinin büyük kısmını oluşturuyorsa model hep o sınıfı tahmin ederek bile yüksek doğruluk gösterebilir. Dengesizlik varsa sınıf ağırlıkları ya da ek veri toplama gerekir.
Önce böl, sonra artır: sızıntıyı engellemenin yolu
Sık hata ve doğrusu
Veriyi yüklemek ve veri artırma
Klasör yapısı hazırsa Keras gibi çerçevelerde görüntüler tek çağrıyla veri kümesi olarak yüklenir:
import tensorflow as tf
train_ds = tf.keras.utils.image_dataset_from_directory("veri/train", image_size=boyut) val_ds = tf.keras.utils.image_dataset_from_directory("veri/val", image_size=boyut)
Burada boyut, tüm görüntülerin yeniden boyutlandırılacağı yükseklik ve genişliği veren bir değişkendir. Model sabit boyutlu girdi bekler; boyutu görevdeki ayrıntı düzeyine göre seçin. Küçük kusurları ayırt etmeniz gerekiyorsa çok küçültmek bilgiyi yok eder.
Veri artırma, eğitim görüntülerinden çeşitli varyasyonlar üretir: yatay çevirme, hafif döndürme, yakınlaştırma, parlaklık değişimi gibi. Amaç modelin gerçek hayatta karşılaşacağı çeşitliliğe hazırlanmasıdır. Ancak dönüşümü göreve uydurun: metin ya da yön taşıyan nesnelerde yatay çevirme anlamı bozar, kusur tespitinde aşırı döndürme gerçek dışı örnekler üretebilir. Artırmayı yalnız eğitim verisine uygulayın; doğrulama ve test görüntüleri olduğu gibi kalmalıdır.
Mimari seçimi: sıfırdan küçük bir CNN mi, transfer öğrenme mi?
Küçük bir CNN, evrişim katmanlarını birbiri ardına dizen basit bir yapıdır. Öğrenmek ve basit görevler için uygundur:
model = tf.keras.Sequential([ tf.keras.layers.Rescaling(olcek), tf.keras.layers.Conv2D(filtre_sayisi, cekirdek, activation="relu"), tf.keras.layers.MaxPooling2D(), tf.keras.layers.Flatten(), tf.keras.layers.Dense(sinif_sayisi, activation="softmax") ])
Rescaling piksel değerlerini küçük bir aralığa çeker, Conv2D yerel örüntüleri yakalayan filtreler öğrenir, MaxPooling2D boyutu küçültür, Flatten çıktıyı düzleştirir ve son Dense katmanı her sınıf için bir olasılık üretir. Sınıf sayısı kadar çıkış birimi olması gerektiğini unutmayın.
Gerçek projelerde çoğu zaman transfer öğrenme tercih edilir: büyük bir görüntü veri kümesinde eğitilmiş modelin evrişim katmanlarını alır, üzerine kendi sınıflarınızı tahmin eden yeni bir çıkış katmanı eklersiniz. Önce yalnızca yeni katmanı eğitir, sonra gerekirse temel modelin son katmanlarını düşük öğrenme hızıyla ince ayara açarsınız. Bu yaklaşım az veriyle de iyi sonuç verir. Dikkat edilecek nokta, temel modelin beklediği girdi ön işlemesini aynen uygulamanızdır.
Eğitim: kayıp, doğrulama ve erken durdurma
Modeli derlerken kayıp işlevini ve ölçütü belirlersiniz. Birden çok sınıf varsa çok sınıflı çapraz entropi, iki sınıf varsa ikili çapraz entropi kullanılır. Eğitimi başlatırken eğitim ve doğrulama verisini birlikte verin:
model.compile(optimizer="adam", loss="sparse_categorical_crossentropy", metrics=["accuracy"]) model.fit(train_ds, validation_data=val_ds, epochs=tur_sayisi)
Her turdan sonra eğitim ve doğrulama kaybını birlikte izleyin. Eğitim kaybı düşmeye devam ederken doğrulama kaybı yükselmeye başlıyorsa model ezberliyordur. Bu durumda erken durdurma kullanın: doğrulama başarısı iyileşmeyi bırakınca eğitimi durdurur ve en başarılı ağırlıkları geri yükler. Aşırı öğrenmeye karşı veri artırma, bırakma (dropout) katmanları ve daha küçük bir model de yardımcı olur.
Öğrenme hızı en etkili ayarlardır. Çok yüksekse kayıp dalgalanır, çok düşükse eğitim yavaş ilerler. Transfer öğrenmede ince ayar sırasında özellikle düşük tutulur.
Değerlendirme: karışıklık matrisi ve sınıf bazlı ölçütler
Doğruluk, doğru tahminlerin oranıdır ama dengesiz veride yanıltır. Hastalık ya da kusur gibi nadir bir sınıfı arıyorsanız, her şeye olumsuz diyen bir model bile yüksek doğruluk gösterebilir. Bu yüzden sonucu karışıklık matrisiyle okuyun.
İkili bir görevde matris dört kutudan oluşur: doğru olumlu (gerçekten olumlu, olumlu denmiş), doğru olumsuz, yanlış olumlu (olumsuz olduğu hâlde olumlu denmiş) ve yanlış olumsuz (olumlu olduğu hâlde kaçırılmış). Çok sınıflı görevde matris her sınıf için satır ve sütun taşır; köşegen doğru tahminleri, köşegen dışı hücreler karışan sınıf çiftlerini gösterir.
Bu dört kutudan kesinlik (olumlu denenlerin ne kadarı gerçekten olumlu) ve duyarlılık (gerçek olumluların ne kadarı yakalandı) çıkarılır. Hangisinin önemli olduğu işe bağlıdır: kusurlu ürünü kaçırmak pahalıysa duyarlılık, gereksiz alarmlar maliyetliyse kesinlik öncelik kazanır.
Dört kutu, iki farklı hata türünü ayırır
İkili görevde karışıklık matrisi
Hata analizi ve iyileştirme
Matristen sonra modelin yanıldığı görüntüleri tek tek açıp bakın. Yanlış sınıflandırılan örneklerde çoğunlukla bir örüntü çıkar: aynı arka plan, belirli bir ışık koşulu, bulanık çekim, yanlış etiketlenmiş görüntü ya da iki sınıfın gerçekten benzemesi. Bu örüntü size ne yapacağınızı söyler. Etiket hatası varsa veriyi düzeltin, belirli bir koşul eksikse o koşuldan örnek toplayın, sınıflar çok benziyorsa sınıf tanımını gözden geçirin.
Modelin gerçekte neye baktığını da kontrol edin. Model, nesne yerine arka plandaki bir ipucuna dayanıyor olabilir; örneğin tüm kusurlu ürün fotoğraflarının aynı tezgâhta çekilmiş olması gibi. Isı haritası gibi yorumlama yöntemleri bu tür kısa yolları açığa çıkarır.
Son olarak gerçek koşullarla sınayın. Test kümesi başarısı, modelin sahada karşılaşacağı görüntülerle örtüşmüyorsa yanıltır. Kullanım ortamından yeni görüntüler toplayıp modeli bunlarla değerlendirin ve zamanla veri kayması oluşup oluşmadığını izleyin.
Sık yapılan hatalar:
- Veri sızıntısını fark etmeden iyi sonuç sanmak.
- Yalnız doğruluğa bakmak.
- Artırmayı doğrulama verisine de uygulamak.
- Temel modelin ön işlemesini atlamak.
- Hata analizi yapmadan modeli büyütmeye çalışmak.
Bu beceriyi Mindset programlarında nerede çalışırsınız?
Bilgisayarlı Görü (Computer Vision) Programı, evrişimli sinir ağlarını, transfer öğrenme ve veri artırmayı, ardından nesne algılama ve segmentasyonu ayrı modüllerde işler. Görüntü verisiyle çalışan veri bilimciler ve mühendisler için sınıflandırmadan başlayıp ilgili görevlere ilerlemek açısından uygundur.
Data Science Bootcamp Python temellerini, Veri Bilimci Programı (Yapay Zeka Odaklı) ise derin öğrenmede pratik uygulamaları kapsar.
İlgili Mindset programı
Bilgisayarlı Görü (Computer Vision) Programı
Sık sorulan sorular
Görüntü sınıflandırma için kaç görüntü gerekir?
Sabit bir sayı yoktur; sınıf sayısına, sınıflar arası benzerliğe ve yaklaşıma bağlıdır. Transfer öğrenme az veriyle bile işe yarar. Her sınıf için çeşitli koşulları kapsayan örnekler, çok sayıda benzer fotoğraftan daha değerlidir.
GPU olmadan model eğitilebilir mi?
Küçük modeller ve küçük veri setleri işlemcide de eğitilebilir, ama süre uzar. Transfer öğrenmede yalnız son katmanı eğitmek hesap yükünü azaltır. Büyük veri setleri için bulut tabanlı GPU ortamları yaygın bir seçenektir.
Modelim eğitimde iyi, yeni görüntülerde kötü. Neden?
Büyük olasılıkla aşırı öğrenme ya da eğitim ile gerçek veri arasındaki farktır. Veri artırmayı, bırakma katmanlarını ve erken durdurmayı deneyin; veri sızıntısı olup olmadığını ve eğitim görüntülerinin gerçek koşulları yansıtıp yansıtmadığını kontrol edin.
Görüntü sınıflandırma ile nesne tespiti arasındaki fark nedir?
Sınıflandırma görüntüye tek bir etiket verir. Nesne tespiti ise görüntüdeki nesnelerin yerini kutularla bulur ve her birine etiket atar. Görüntüde tek baskın nesne varsa sınıflandırma yeterli olabilir; birden çok nesne ya da konum bilgisi gerekiyorsa tespit gerekir.
Dengesiz sınıflarla nasıl başa çıkılır?
Nadir sınıf için daha fazla örnek toplamak en sağlam çözümdür. Alternatif olarak sınıf ağırlıkları kullanabilir, nadir sınıfa veri artırma uygulayabilir ve başarıyı doğruluk yerine sınıf bazlı kesinlik ile duyarlılıkla değerlendirebilirsiniz.