konvolúciós neurális hálózatok (cnn)home.mit.bme.hu/~engedy/nn/nn-cnn.pdfaz előző óráról,...
TRANSCRIPT
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ózatKonvolú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
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).
A szűrő mindig a bemenet összes csatornájára értelmezett, azonos a “mélységük”
32
32
3
553
Konvolúciós neurális hálózatKonvolúciós réteg
32
32
3
5
5
3A konvolúció ererdménye egy skalár: a skaláris szorzata a kép adott részének, és a szűrőnek.
5*5*3-as szűrő, w
Konvolúciós neurális hálózatKonvolúciós réteg
32
32
3
5
5
3 Az összes lehetséges helyen kiszámolva
5*5*3-as szűrő, w
Eredmény: aktivációs térkép
28
28
1
Konvolúciós neurális hálózatKonvolúciós réteg
32
32
3
Legyen több 5*5*3-as szűrő is: w1, w2
28
28
2
aktivációs térképek
Konvolúciós neurális hálózatKonvolúciós réteg
32
32
3
Legyen több 5*5*3-as szűrő is: w1, w2
28
28
2
aktivációs térképek
Konvolúciós neurális hálózatKonvolúciós réteg
32
32
3
28
28
6
aktivációs térképekAz aktivációs térképeket egymásra rakjuk, mint az RGB csatornákat.
Pl. 32*32*3-as kép, 6 db 5x5-ös szűrőkimenete 28x28x6
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ózatKonvolúciós rétegekből álló hálózat: előző kimeneti térfogat a következő bemenete
32
32
3
6 5x5x3 konvolúció,ReLU
10 3x3x6 konvolúció,ReLU
6
1028
28 26
26
K NxNx10 konvolúció,ReLU
...
A szűrők, mint tulajdonság-érzékelők
A konvolúció közelebbről
7x7-es kép3x3-as szűrő
Aktivációs térkép 5x5 lesz.
Lépésköz (stride)
7x7-es kép3x3-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)
Kérdés: hármasával léptetve mekkora lesz az aktivációs térkép?
Semekkora! Nem illenek össze!
Kimenet mérete:(N - F) / stride + 1?
N
N
F
F
PaddingProblé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
0 0
0 0
0 0
0 0 0 0 0 0 0 0 0
7x7-es kép3x3-as szűrő1-es lépésköz1 padding
Aktivációs térkép 7x7 lesz.
Konvolúciós réteg összefoglalásBemenet: W1 * H1 * D1Szűrők száma: KSzűrők mérete: FLépésköz: SPadding: P
Kimenete W2 * H2 * D2, ahol:W2 = (W1 - F + 2P) / S + 1H2 = (H1 - F + 2P) / S + 1D2 = K
Szűrő paramétereinek száma: F*F*D1 +1 (bias)
A réteg összes paraméterének száma: K*F*F*D1 + K
Konvolúciós réteg összefoglalásBemenet: W1 * H1 * D1Szűrők száma: KSzűrők mérete: FLépésköz: SPadding: P
Kimenete W2 * H2 * D2, ahol:W2 = (W1 - F + 2P) / S + 1H2 = (H1 - F + 2P) / S + 1D2 = K
Szűrő paramétereinek száma: F*F*D1 +1 (bias)
A réteg összes paraméterének száma: K*F*F*D1 + 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éreteAttól függ, hogy az asszimetrikus
paddinget hogyan jelöljük (0.5)
Ö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
1 4 5 4
2 1 2 3
6 4
4 5
2 * 2 max pooling, 2-es lépésközzel
3 2
2 3.5
2 * 2 average pooling, 2-es lépésközzel
Értelmezés: van -e valahol az ablakon belül az adott jellemző? Pontos helye nem számít.
Értelmezés: az ablakon belül mennyire van jelen átlagosan az adott jellemző?
Összevonó rétegBemenet: W1 * H1 * D1Mérete: FLépésköz: S
Kimenete W2 * H2 * D2, ahol:W2 = (W1 - F) / S + 1H2 = (H1 - F) / S + 1D2 = D1
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”
Upconvolution3 * 3 upconvolution, 2-es lépésköz,0.5 padding
Ahol átlapolódik, ott összeadjuk
Bemenet: 2 * 2
A bemenettel súlyozzuk a szűrőt
A paddingre eső részt eldobjuk
Kimenet: 4 * 4
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éldaAlexNet[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
x
x
- 3*3-as területet- 5*5-ös területet- 7*7-es területet
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) = 27C2 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*HWC2
- 1 db 7*7: - C*(7*7*C) = 49C2 paraméter (biast nem számolva)- ReLU: H*W*C*1- Szorzás+összeadás művelet: H*W*C*(7*7*C)=49*HWC2
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ásokGoogLeNet 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 learning1. Tanítsunk pl. az ImageNet adatkészleten
Rögzítsük a súlyokat
3. Közepes adatkészlet esetén finomhangoljuk
Itt tanítsunk
2. Kis adatkészlet esetén használjuk jellemzővektor kinyerésre
Rögzítsük a súlyokat
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ásokA 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