You are on page 1of 35

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

5
3 5 Konvolváljuk a képet a szűrővel: húzzuk
32 végig a kép minden részén, és számoljuk ki
az adott résszel a konvolúciót
(skalárszorzatot).
32

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*3-as szűrő, w
5

5
A konvolúció ererdménye egy skalár:
3 a skaláris szorzata a kép adott
32 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

3 Az összes lehetséges 28
32
helyen kiszámolva
28
32
1
3
Konvolúciós neurális hálózat
Konvolúciós réteg
aktivációs térképek
Legyen több 5*5*3-as
szűrő is: w1, w2

28
32
28
32
2
3
Konvolúciós neurális hálózat
Konvolúciós réteg
aktivációs térképek
Legyen több 5*5*3-as
szűrő is: w1, w2

28
32
28
32
2
3
Konvolúciós neurális hálózat
Konvolúciós réteg
aktivációs térképek
Az 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

28
32

28
32
6
3 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
...
6 5x5x3 10 3x3x6 K NxNx10
32
konvolúció, konvolúció, konvolúció,
ReLU ReLU 26 ReLU
32 28 10

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?

Semekkora! Nem illenek össze!

Kimenet mérete:
F
? (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 7x7-es kép
3x3-as szűrő
0 0 1-es lépésköz
1 padding
0 0

0 0 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: W1 * H1 * D1 Szűrő paramétereinek száma:
Szűrők száma: K F*F*D1 +1 (bias)
Szűrők mérete: F
Lépésköz: S A réteg összes paraméterének
Padding: P száma: K*F*F*D1 + K

Kimenete W2 * H2 * D2, ahol:


W2 = (W1 - F + 2P) / S + 1
H2 = (H1 - F + 2P) / S + 1
D2 = K
Konvolúciós réteg összefoglalás
Bemenet: W1 * H1 * D1 Szűrő paramétereinek száma:
Szűrők száma: K F*F*D1 +1 (bias)
Szűrők mérete: F
Lépésköz: S A réteg összes paraméterének
Padding: P száma: K*F*F*D1 + K

Kimenete W2 * H2 * D2, ahol:


Gyakran kettő hatvány (32,64, … 512, …)
W2 = (W1 - F + 2P) / S + 1
H2 = (H1 - F + 2P) / S + 1 Általában 3*3, néha 5*5, esetleg 1*1
D2 = K Általában 1 vagy 2.

Általában szokott lenni, hogy ne változzon a kimenet


Attól függ, hogy az asszimetrikus mérete
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

2 * 2 max pooling,
2-es lépésközzel Értelmezés: van -e valahol
1 2 2 4 6 4 az ablakon belül az adott
jellemző? Pontos helye nem
6 3 0 2 4 5 számít.

1 4 5 4 2 * 2 average pooling,
2-es lépésközzel
3 2 Értelmezés: az ablakon
2 1 2 3 belül mennyire van jelen
2 3.5 átlagosan az adott jellemző?
Összevonó réteg
Bemenet: W1 * H1 * D1 Nem visz új paramétert a hálózatba,
Mérete: F mert egy rögzített függvényt számol
Lépésköz: S

Kimenete W2 * H2 * D2, ahol:


W2 = (W1 - F) / S + 1
H2 = (H1 - F) / S + 1
Tipikusan 2 vagy 3
D2 = D 1
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

A bemenettel
súlyozzuk a szűrőt
Bemenet: 2 * 2
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
- ReLU
[27x27x96] NORM1: Normalization layer - Norm rétegek (már nem használják)
[27x27x256] CONV2: 256 5x5 filters at stride 1, pad 2 - tanító adat kiegészítés
[13x13x256] MAX POOL2: 3x3 filters at stride 2 - dropout 0.5 (csak FC-ben)
[13x13x256] NORM2: Normalization layer
- batch méret 128
[13x13x384] CONV3: 384 3x3 filters at stride 1, pad 1
[13x13x384] CONV4: 384 3x3 filters at stride 1, pad 1 - SGD Momentum 0.9
[13x13x256] CONV5: 256 3x3 filters at stride 1, pad 1 - Learning rate 1e-2, kézzel tizedelve,
[6x6x256] MAX POOL3: 3x3 filters at stride 2 amikor a validációs pontosság már
[4096] FC6: 4096 neurons nem csökken
[4096] FC7: 4096 neurons
[1000] FC8: 1000 neurons (class scores)
- 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
- 3*3-as területet
- 5*5-ös területet
x - 7*7-es területet

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) = 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á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 2. Kis adatkészlet 3. Közepes adatkészlet
ImageNet esetén használjuk esetén finomhangoljuk
adatkészleten jellemzővektor
kinyerésre

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

You might also like