Derin Öğrenmede Bilgisayarlı Görü
Bu yazımda, bilgisayarlı görü uygulamalarında neredeyse evrensel olarak kullanılan derin öğrenme modeli türü olan evrişimsel sinir ağlarını (convolutional neural networks- CNN- convents) kavramını ele alacağız.
Evrişimsel sinir ağını (CNN) detaylı bir şekilde incelemeye başlamadan önce bilgisayarlı görü (computer vision) kavramından bahsedelim.
Bilgisayarlı görü, yapay zeka ve makine öğreniminin bir alt alanı olarak sayılabilen ve genel öğrenme algoritmalarından yararlanarak (özellikle görüntü üzerinde çalışılacağı zaman evrişimsel sinir ağları olmak üzere bir çok derin öğrenme algoritmaları); nesne algılama, yüz tanıma, eylem ve etkinlik tanıma, insan duruşu tahmini gibi çeşitli uygulamaların gerçekleşmesini sağlayan bir alandır.
Bilgisayarla görü uygulamalarında neredeyse evrensel olarak kullanılan derin öğrenme modeli türü olan evrişimsel sinir ağını inceleyelim.
Evrişimsel Sinir Ağı (CNN — Convents)
Evrişimsel sinir ağı (CNN- Convents), görüntü tanıma ve sınıflandırma, nesne algılama ve takibi gibi alanlarda kullanılan bir derin öğrenme alt dalıdır. Görüntüyü çeşitli katmanlarla işleyerek, görüntünün belirli kategoriler altında sınıflandırılmasını sağlamaktadır (Örn., kedi, köpek, araba, bisiklet).
Evrişimsel sinir ağı, yoğun bir şekilde bağlantılı bir ağ ile karşılaştırıldığında daha iyi çalışmaktadır. Karşılaştırma sonucunun böyle olmasını sağlayan birkaç CNN özelliği bulunmaktadır:
- Bir görselin bir bölgesinde deseni öğrendikten sonra, unutmamakta ve karşılaşacağı yeni bir yerde yeniden öğrenmeye gerek kalmadan tanıyabilmektedir. Bu özellik, görüntü işleme uygulamalarında CNN verilerini daha verimli kılmaktadır.
- Kalıpların uzamsal hiyerarşilerinin öğrenilmesini sağlamaktadır. Görselde de görebileceğiniz gibi öncelikle birinci evrişimsel katmanı (convolutional layer) ile kenarlar gibi küçük yerel kalıplar öğrenilmiş, ardından ikinci evrişimsel katman ile de birinci katmanların özelliklerinden oluşan daha büyük kalıplar öğrenilmiştir.
Evrişim işlemi (convolution operation), iki uzamsal eksen (yükseklik ve genişlik) ve bir derinlik ekseni (veya kanal ekseni- örn. RGB) olmak üzere feature maps adı verilen 3D tensörler üzerinde çalışmaktadır.
Örneğin, şekilde, kırmızı, yeşil ve mavi olmak üzere üç renk düzlemiyle ayrılmış bir RGB görüntüsü verilmiştir. Görüntünün boyutu, (yükseklik, genişlik, derinlik) olarak temsil edilen (4, 4, 3)’tür. Derinliğin 3 olması sebebi, RGB görüntünün kırmızı, yeşil ve mavi olmak üzere üç kanalı olmasıdır. Siyah-beyaz bir görüntü için ise derinlik 1'dir (gri seviyeler).
Evrişim işlemi, feature maplerden bazı kısımları çıkarmakta ve bu kısımlara filtreleme uygulayarak yeni bir feature map üretmektedir. Bu feature map yine genişliği ve yüksekliği olan bir 3D tensör olmaktadır. Ancak derinlik isteğe bağlı olabilmektedir. Bunun sebebi, çıktı derinliğinin, katmanın bir parametresi olması ve bu derinliğin eksenindeki farklı kanalların artık RGB girişinde olduğu gibi belirli renkleri temsil etmek yerine filtreleri temsil etmesidir.
Örneğin (28, 28, 1) — (yükseklik, genişlik, gri seviye derinliği) boyutunda bir feature map alınmakta ve (26, 26, 32) boyutunda bir feature map çıkarılmaktadır. Burada 32 değeri görselin kaç kez filtrelendiğini ifade etmektedir.
Evrişimler iki anahtar parametre ile tanımlanmaktadır:
- Görsellerden çıkarılan kısımların boyutu, bu boyutlar genellikle 3 × 3 veya 5 × 5'tir.
- Çıktı değerinin derinliği, evrişim tarafından hesaplanan filtre sayısını göstermektedir. 32 ile başlamakta ve 64 ile bitmektedir.
Örneğin, bir giriş resmi 3 × 3 parçalara bölünmekte, ardından bu parçalar 1D şekil vektörüne dönüştürülmekte (evrişim çekirdeği adı verilen aynı öğrenilmiş ağırlık matrisine sahip bir tensör ürünü aracılığıyla) ve son olarak bütün bu vektörler uzamsal olarak tekrardan birleştirilerek 3D feature map elde edilmektedir.
Ek olarak, çıkış yüksekliği ve genişliğinin, giriş yüksekliği ve genişliğinden iki nedenden dolayı farklı olabileceği unutulmamalıdır:
- Giriş özelliği haritasını doldururken karşılaşılabilen sınır efektleri
- Stride’ların kullanımı
Border Effects (Sınır Efektleri), Padding (Dolgu), Stride (Adım) Kavramları
5 × 5 feature map 3× 3'lük bir pencereyi ortalaması istendiğinde, ortalayabileceği yalnızca 9 karo vardır. Bu nedenle, çekirdek kenarlardan (ortalanmadığı yerden) kaymaya başlamakta ve boyutu ne olursa olsun orijinal görüntüyü biraz küçülmesi sebep olmaktadır. Bu durum sınır efektleri (border effects) olarak adlandırılmaktadır.
Önceki paragraflarda, girdi ile çıktı boyutlarının her zaman aynı olmadığından bahsetmiştik. Ancak padding (dolgu) kullanarak aynı uzamsal boyutlara sahip bir çıktı feature map elde edilebilmektedir. Padding, orijinal görüntüye çekirdeğe destek olacak yeni satırlar ve sütunlar eklemekten ibarettir.
Çıktı boyutunu etkileyebilecek bir diğer kavram ise stride (adım) kavramıdır. Filtrenin ana görsel üzerindeki piksel kaymalarının sayısıdır. Stride’ın artması durumunda featue map boyutunda küçülme meydana gelmektedir.
Feature map boyutsallığını azaltan ve yukarıdaki evrişim katmanı adımlarına göre daha iyi sonuç veren bir başka işlem de max-pooling ( maksimum havuzlama) işlemidir.
Max-Pooling (Maksimum Havuzlama) Kavramı
Pooling layer (havuzlama katmanı), görüntüler çok büyük olduğunda her bir haritanın boyutsallığını önemli bilgileri tutarak azaltılmasını sağlamaktadır. Diğer bir değişle, parametre sayısını azaltmaktadır.
Max-pooling (maksimum havuzlama) ise bir pooling tekniğidir. Feature mapten ayrılan her bir bölge için maksimum değeri hesaplayan ve bunu altörneklenmiş (downsampling) bir feature map oluşturmak için kullanan bir havuzlama işlemidir. Genellikle bir evrişim katmanından sonra kullanılmaktadır.
Özetle, feature map, evrişim ve max-pooling gibi evrişimsel sinir ağlarının (CNN- convents) temellerinden bahsettik. Son olarak, derin öğrenmede küçük veri kümeleriyle görüntü sınıflandırılması gerçekleştirebilmek için kullanılan tekniklerden bahsederek yazımızı sonlandıralım.
- Küçük bir veri setinde sıfırdan evrişimsel sinir ağı (CNN-convents) eğitimi:
Sahip olduğunuz az miktarda veriyi kullanarak sıfırdan model oluşturulması sonucu doğruluğu çok yüksek olmayan (örn. %71) ve overfittinge (fazla uydurma) sahip sonuçlar elde edilebilmektedir.
Kısaca overffitting kavramını hatırlamamız gerekirse, öğrenilecek çok az örneğe sahip olunması durumunda yeni verilere genelleme yapabilecek bir modelin eğitilmesinin engellenmesi durumuydu.
Ancak veri büyütme (data augmentation) kullanılarak, bilgisayarlı görüde overfitting azaltılabilmektedir (doğruluğun %71'den %82'ye çıkması gibi). Peki bunu nasıl yapmaktadır? Eğitim görüntülerine bir dizi rastgele ancak gerçekçi dönüşüm uygulayarak daha fazla eğitim verisi üretme yaklaşımını benimsemektedir. Bu da modelin verilerin daha fazla yönüne maruz kalmasını ve daha iyi genelleştirmeyi sağlamaktadır.
- Önceden eğitilmiş bir evrişimsel sinir ağı kullanma:
Önceden eğitilmiş bir ağ kullanmak, küçük görüntü veri kümelerinde derin öğrenmeye yönelik yaygın ve oldukça etkili bir yaklaşımdır. Bunun sebebi, önceden eğitilmiş bir ağın daha önce büyük bir veri kümesinde, genellikle büyük ölçekli bir görüntü sınıflandırma görevinde eğitilmiş bir ağ olmasıdır.
Önceden eğitilmiş bir ağı kullanmanın iki yolu vardır: feature extraction (özellik çıkarma) (sizi %90 ila %96 arasında bir doğruluğa ulaştırır) ve fine-tuning (ince ayar yapmak) ( bu sizi %97'lik bir nihai doğruluğa ulaştıracaktır).
Feature extraction (Özellik çıkarma): Önceden eğitilmiş bir ağın evrişimli tabanını almak, yeni verileri bu ağ üzerinden çalıştırmak ve çıktının üstünde yeni bir sınıflandırıcı eğitmekten oluşmaktadır. Özellik çıkarma yoluyla yeni bir veri kümesinde mevcut bir convnet’i yeniden kullanmak kolaydır. Bu, küçük görüntü veri kümeleriyle çalışmak için değerli bir tekniktir.
Fine-tuning (ince ayar ): Belirli bir görev için önceden eğitilmiş bir modeli alan ve ardından ikinci bir benzer görevi gerçekleştirmesi için modeli ayarlayan veya değiştiren bir süreçtir. Evrişim tabanındaki alt katmanlar daha genel, yeniden kullanılabilir özellikleri kodlarken, daha üstteki katmanlar daha özel özellikleri kodlaması sebebiyle yalnızca en üstteki iki veya üç katmana fine-tuning uygulanması tavsiye edilmektedir.
Kaynaklar
- FRANCOIS CHOLLET- Deep Learning with Python
- https://paperswithcode.com/method/max-pooling
- https://deeplizard.com/learn/video/5T-iXNNiwIs