Convolutions, Image Features

Kategori: Deep Learning , 01 Nisan 2020 , JanFranco


Featurelar, resimdeki ilgi çekici kısımlardır. Bu kısımlar kenarlar, köşeler, patternler olabilir. Convolution işlemi basit olarak şöyle özetlenebilir, bir input görüntü ve bir filtremiz var. Bu filtremiz, input image üzerinde geziniyor ve bir output elde ediliyor. Biraz daha detaya inelim:


0   123   127   167   124

54   45   124   136   163          0   1   0      _   _   _

64   76    65   241   188          1   0  -1      _   _   _  

36  235   222   215   171          0   1   0      _   _   _

23  221   124   199    34

Input Img - Filter (or Activation Map) - Feature Map
Convolution işleminde, işlemin uygulanacağı resme Input img, resmin üzerinde gezinecek filtreye filter veya kernel, oluşan yeni resme feature map veya output denir. Yukarıda 3 adet matris görüyoruz. Burada convolution işlemi uygulayıp, feature map çıkarımı yapacağız. İlk olarak kernelin ortasındaki değer olan 0, Input image'daki 45'in üzerine gelecek şekilde, kernel input img üzerine gelir. 0 değerinin üstünde 0, 123 değeri üstünde 1, 127 değeri üstünde 0, 54 değeri üstünde 1, 45 değeri üstünde 0, 124 değeri üstünde -1, 64 değeri üstünde 0, 76 değeri üstünde 1, 65 değeri üstünde 0 değerleri olmuş oldu. Üst üste gelen değerler çarpılıp toplanır ve feature mapteki ilk kareye sonuç yazılır:

(0*0) + (123*1) + (127*0) + (54*1) + (45*0) + (124*-1) + (64*0) + (76*1) + (65*0) = 129

Elde edilen 129 değeri Feature Mapteki (0,0) bölgesine yanı ilk kutucuğa yazılır.


129 _  _

 _  _  _

 _  _  _
Daha sonra filtre bir birim sağa kaydırılır. Bir birim zorunluluğu yoktur ancak bu örnekte bir birim kaydıracağız. İlerideki yazılarımda bu parametreden bahsedeceğim. Bir birim kaydırdık ve üst üste gelen değerleri tekrar çarpıp toplayalım:

(123*0) + (127*1) + (167*0) + (45*1) + (124*0) + (136*-1) + (76*0) + (65*1) + (241*0) = 101

Elde edilen 101 değeri Feature Mapteki (0,1) bölgesine yazılır.


129 101  _

 _   _   _

 _   _   _
Filtreyi bir birim sağa kaydıralım ve tekrar aynı işlemleri yapalım:

(127*0) + (167*1) + (124*0) + (124*1) + (136*0) + (163*-1) + (65*0) + (241*1) + (188*0) = 369

369 değeri valid bir değer olmadığından, Feature Mapteki (0,3) bölümüne 255 değeri yazılır.


129 101 255

 _   _   _

 _   _   _
Son olarak bir alt satıra geçelim ve aynı işlemleri tekrarlayalım:

(54*0) + (45*1) + (124*0) + (64*1) + (76*0) + (65*-1) + (36*0) + (235*1) + (222*0) = 279

Aynı şekilde 279 değeri bizim için valid bir değer değil bu sebeple (1,0) bölümüne 255 değeri yazılır.


129 101 255

255  _   _

 _   _   _
Convolution işlemi bu şekildedir. Peki bunu neden yapıyoruz? Bu filtrelerin bir anlamı var mı? Filtreleri nasıl oluşturuyoruz? Kerneller, algoritma tarafından random bir şekilde oluşturuluyor. Biz boyutlarını belirleyebiliyoruz. Random bir şekilde oluşturulan kerneller input img üzerinde gezinip bir output üretiyor. Bu output bizim için bir özelliktir. Farklı özellik çıkarımları yapıp (kenar bulma, köşe bulma, pattern bulma gibi) training işlemini gerçekleştiriyoruz. Training işleminde tahmin edeceğiniz üzere kerneldeki değerleri güncelliyoruz.

Convolution işleminin sonunda üretilen Feature Mapler, bir sonraki katmanın girdisidir. Genellikle ilk katmanlarda kenar bulma, köşe bulma gibi low-level özellikler çıkarılır. Daha derin katmanlarda high-level özellikler çıkarılır.


Sonraki Yazı: Depth, Stride, Padding
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın