Konvolúciós neurális hálózatok (CNN)
Konvolúció Jelfeldolgozásban: Diszkrét jelek esetén diszkrét konvolúció: Képfeldolgozásban 2D konvolúció (szűrők):
Konvolúciós neurális hálózat Konvolúciós réteg Kép, pl.: 32*32*3 (sorok, oszlopok, csatornák (RGB)) Konvolúciós ablak (szűrő), pl.: 5*5*3 32 32 5 3 5 Konvolváljuk a képet a szűrővel: húzzuk végig a kép minden részén, és számoljuk ki az adott résszel a konvolúciót (skalárszorzatot). 3 A szűrő mindig a bemenet összes csatornájára értelmezett, azonos a mélységük
Konvolúciós neurális hálózat Konvolúciós réteg 5 5*5*3-as szűrő, w 32 5 3 A konvolúció ererdménye egy skalár: a skaláris szorzata a kép adott részének, és a szűrőnek. 32 3
Konvolúciós neurális hálózat Konvolúciós réteg Eredmény: aktivációs térkép 5*5*3-as szűrő, w 5 5 32 3 3 Az összes lehetséges helyen kiszámolva 32 28 1 28
Konvolúciós neurális hálózat Konvolúciós réteg Legyen több 5*5*3-as szűrő is: w1, w2 aktivációs térképek 32 28 3 32 2 28
Konvolúciós neurális hálózat Konvolúciós réteg Legyen több 5*5*3-as szűrő is: w1, w2 aktivációs térképek 32 28 3 32 2 28
Konvolúciós neurális hálózat Konvolúciós réteg Az aktivációs térképeket egymásra rakjuk, mint az RGB csatornákat. aktivációs térképek Pl. 32*32*3-as kép, 6 db 5x5-ös szűrő kimenete 28x28x6 32 28 3 32 6 28 A konvolúció egy lineáris művelet: az aktivációs térképre alkalmazunk valamilyen nemlinearitást is.
Konvolúciós neurális hálózat Konvolúciós rétegekből álló hálózat: előző kimeneti térfogat a következő bemenete 28 26... 32 32 6 5x5x3 konvolúció, ReLU 28 10 3x3x6 konvolúció, ReLU 10 26 K NxNx10 konvolúció, ReLU 3 6
A szűrők, mint tulajdonság-érzékelők
A konvolúció közelebbről 7x7-es kép 3x3-as szűrő Aktivációs térkép 5x5 lesz.
Lépésköz (stride) 7x7-es kép 3x3-as szűrő Ne egyesével, hanem pl.: kettesével léptessük a szűrőt! Aktivációs térkép 3x3 lesz. Kérdés: hármasával léptetve mekkora lesz az aktivációs térkép?
Lépésköz (stride) N F Kérdés: hármasával léptetve mekkora lesz az aktivációs térkép? F? Semekkora! Nem illenek össze! Kimenet mérete: (N - F) / stride + 1 N
Padding Probléma: a kimenetek térbeli mérete egyre csak csökken! Megoldás: párnázzuk ki 0-val a bemenetet. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7x7-es kép 3x3-as szűrő 1-es lépésköz 1 padding Aktivációs térkép 7x7 lesz. 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Konvolúciós réteg összefoglalás Bemenet: W 1 * H 1 * D 1 Szűrők száma: K Szűrők mérete: F Lépésköz: S Padding: P Szűrő paramétereinek száma: F*F*D 1 +1 (bias) A réteg összes paraméterének száma: K*F*F*D 1 + K Kimenete W 2 * H 2 * D 2, ahol: W 2 = (W 1 - F + 2P) / S + 1 H 2 = (H 1 - F + 2P) / S + 1 D 2 = K
Konvolúciós réteg összefoglalás Bemenet: W 1 * H 1 * D 1 Szűrők száma: K Szűrők mérete: F Lépésköz: S Padding: P Kimenete W 2 * H 2 * D 2, ahol: W 2 = (W 1 - F + 2P) / S + 1 H 2 = (H 1 - F + 2P) / S + 1 D 2 = K Attól függ, hogy az asszimetrikus paddinget hogyan jelöljük (0.5) Szűrő paramétereinek száma: F*F*D 1 +1 (bias) A réteg összes paraméterének száma: K*F*F*D 1 + K Gyakran kettő hatvány (32,64, 512, ) Általában 3*3, néha 5*5, esetleg 1*1 Általában 1 vagy 2. Általában szokott lenni, hogy ne változzon a kimenet mérete
Összevonó réteg (pooling layer) Csökkenti a reprezentáció méretét, így kezelhetőbbé téve azt Minden aktivációs térképen a többitől függetlenül működik MAX pooling, average pooling
MAX pooling, average pooling 1 2 2 4 6 3 0 2 2 * 2 max pooling, 2-es lépésközzel 6 4 4 5 Értelmezés: van -e valahol az ablakon belül az adott jellemző? Pontos helye nem számít. 1 4 5 4 2 1 2 3 2 * 2 average pooling, 2-es lépésközzel 3 2 2 3.5 Értelmezés: az ablakon belül mennyire van jelen átlagosan az adott jellemző?
Összevonó réteg Bemenet: W 1 * H 1 * D 1 Mérete: F Lépésköz: S Kimenete W 2 * H 2 * D 2, ahol: W 2 = (W 1 - F) / S + 1 H 2 = (H 1 - F) / S + 1 D 2 = D 1 Nem visz új paramétert a hálózatba, mert egy rögzített függvényt számol Tipikusan 2 vagy 3 Gyakorlatilag mindig 2
Teljesen összekötött réteg (fully connected, FC) A bemeneti térfogat minden eleme össze van kötve a FC réteg minden neuronjával, mint egy klasszikus MLP-ben. Tipikusan utolsó réteg(ek)ként szokás használni CNN-ben: a konvolúciós rétegek a jellemzők kiemelését végzik, a FC rétegek pedig pl. az osztályozást.
Upconvolution Probléma: A konvolúciós réteg tipikusan változatlanul hagyja, vagy csökkenti a reprezentáció térbeli méretét. Bizonyos alkalmazásokban szükséges a reprezentáció térbeli növelése (upsampling) A módszer azonos azzal, ahogy a visszaterjesztés fázisban a gradienssel számolunk Elnevezése még nem egységes convolution transpose backward strided convolution 1/2 strided convolution deconvolution
Upconvolution A paddingre eső részt eldobjuk 3 * 3 upconvolution, 2-es lépésköz, 0.5 padding Bemenet: 2 * 2 A bemenettel súlyozzuk a szűrőt Kimenet: 4 * 4 Ahol átlapolódik, ott összeadjuk
Az előző óráról, emlékeztető - ILSVRC 2012 - Alex Krizhevsky, Ilya Sutskever, Geoffrey E Hinton Imagenet classification with deep convolutional neural networks Ez az első tisztán neurális hálózatos megoldás, ami az azévi legjobb eredményt éri el (addig SVM) Innentől kezdve lesz mainstream a deep learning AlexNet: 8 réteg, 35k paraméter 15.4% top-5 hiba 2014 - Simonyan and Zisserman, VGGNet 19 réteg, 138M paraméter 7.3% top-5 hiba 2014 - Szegedy et al., GoogLeNet 6.9% top-5 hiba 22 réteg, 5M paraméter 2015 - He et al., ResNet 3.6% top-5 hiba 152 réteg
Néhány példa AlexNet [Krizhevsky et al. 2012] [227x227x3] INPUT [55x55x96] CONV1: 96 11x11 filters at stride 4, pad 0 [27x27x96] MAX POOL1: 3x3 filters at stride 2 [27x27x96] NORM1: Normalization layer [27x27x256] CONV2: 256 5x5 filters at stride 1, pad 2 [13x13x256] MAX POOL2: 3x3 filters at stride 2 [13x13x256] NORM2: Normalization layer [13x13x384] CONV3: 384 3x3 filters at stride 1, pad 1 [13x13x384] CONV4: 384 3x3 filters at stride 1, pad 1 [13x13x256] CONV5: 256 3x3 filters at stride 1, pad 1 [6x6x256] MAX POOL3: 3x3 filters at stride 2 [4096] FC6: 4096 neurons [4096] FC7: 4096 neurons [1000] FC8: 1000 neurons (class scores) - ReLU - Norm rétegek (már nem használják) - tanító adat kiegészítés - dropout 0.5 (csak FC-ben) - batch méret 128 - SGD Momentum 0.9 - Learning rate 1e-2, kézzel tizedelve, amikor a validációs pontosság már nem csökken - L2 súlyfelejtés 5e-4-7 CNN együttes: 18.2% -> 15.4%
Néhány példa GoogLeNet [Szegedy et al., 2014] - 6.7% top-5 hiba Inception module - Kevesebb paraméter, ennek ellenére jobb eredmények
Szűrő méret választási megfontolások - Kérdés: mekkora területet lát egy 3*3-as szűrő kimeneti neuronja? - Kérdés 2: mekkora területet lát két egymás utáni 3*3-as szűrő második rétegében egy kimeneti neuron? - Kérdés 2: mekkora területet lát három egymás utáni 3*3-as szűrő harmadik rétegében egy kimeneti neuron?
Szűrő méret választási megfontolások x - 3*3-as területet - 5*5-ös területet - 7*7-es területet x x H*W*C bemeneti térfogat, (a számítás során a térfogat állandó marad végig) - Hány paramétere és nemlinearitása van 3 db egymás utáni 3*3-as szűrőnek? - Hány paramétere és nemlinearitása van egy ugyanekkora területet látó 7*7- es szűrőnek?
Szűrő méret választási megfontolások - 3 db 3*3: - 3*C*(3*3*C) = 27C 2 paraméter (biasokat nem számolva) - ReLU: H*W*C*3 - Szorzás+összeadás művelet: 3*H*W*C*(3*3*C)=27*HWC 2-1 db 7*7: - C*(7*7*C) = 49C 2 paraméter (biast nem számolva) - ReLU: H*W*C*1 - Szorzás+összeadás művelet: H*W*C*(7*7*C)=49*HWC 2 3 db 3*3 szűrő esetén kevesebb paraméterünk van (gyorsabb konvergencia), kevesebbet kell számolni (gyorsabb működés), és több nemlinearitást használunk (vagyis bonyolultabb függvényt is képesek vagyunk reprezentálni)
Szűrő méret választási megfontolások - 1*1-es szűrő? - Skalárszorzat egy pixel mentén a csatornákon a szűrővel - Csatornaszám-csökkentésre alkalmas Bottleneck sandwitch
Szűrő méret választási megfontolások
Szűrő méret választási megfontolások GoogLeNet legújabb verziójában már megjelennek ezek az ötletek [Szegedy et al, Rethinking the Inception Architecture for Computer Vision 11 Dec 2015 ]
Transfer learning - Hogyan tanítsunk konvolúciós neurális hálókat? - Sok adat kell hozzá? - Nem, ha... - Sokáig kell futtatni a tanítást, nagy GPU-n? - Nem, ha... - Használjunk egy már megtanított nagy hálót (pl.: ImageNet adatokon) - Az utolsó pár rétegét cseréljük le a saját rendszerünkre - Tanítsuk a saját adatainkkal az utolsó pár réteget. - Finomíthatjuk a háló elejét is. - Ez a tipikus tanítási forma, nem a kivétel!
Transfer learning 1. Tanítsunk pl. az ImageNet adatkészleten 2. Kis adatkészlet esetén használjuk jellemzővektor kinyerésre 3. Közepes adatkészlet esetén finomhangoljuk Rögzítsük a súlyokat Rögzítsük a súlyokat Itt tanítsunk Itt tanítsunk
Transfer learning - Kevés tanítóminta esetén (< 1M kép) - Keressünk egy hasonló képeket tartalmazó, nagy mintaszámú tanítóhalmazt, tanítsuk meg vele a CNN-ünket - Transfer learning az eredeti tanítóhalmazra - Nincs lehetőségünk/erőforrásunk nagy adathalmazzal tanítani - Töltsünk le egy előre megtanított CNN-t - Caffe ConvNet könyvtárban van egy ún. Model Zoo, amiben előre tanított modellek találhatóak - https://github.com/bvlc/caffe/wiki/model-zoo
Hivatkozások A prezentáció a következő helyekről vett tartalmakkal készült: CS231n: Convolutional Neural Networks for Visual Recognition, Stanford University http://cs231n.stanford.edu/syllabus.html