본문 바로가기
  • 紹睿: 자유롭고 더불어 사는 가치있는 삶
Study/모두를 위한 딥러닝 시즌1

Lec 11-1,2 : ConvNet의 Conv 레이어 만들기 / max pooling과 full network

by 징여 2018. 5. 28.
반응형

Convolutional Network


ConvNet은 아래와 같이 구성된다.




Image를 하나의 입력으로 받는 것이 아니라, 이미지의 일부분씩 처리한다.


그 일부분을 Filter라고 하는데, Filter를 걸치게 되면 하나의 값을 뽑아내게 된다.



Filter는  Wx+b를 이용해서 하나의 값으로 나타내게 된다. (Weight에 따라 결정되게 되겠다.)

Filter에서는 W값이 변하지 않는! 똑같은 값을 가지고 옆으로 넘기면서 하나의 값들을 뽑아내게 된다.


예를 들어서 

- 7x7x3 image가 3x3x3 filter를 걸치면, 5x5 output이 나오게 된다.(Stride 1)

- Stride2의 경우는 3x3 output


output의 사이즈는 NxN의  image에서 Filter FxF 라고 할때,

(N-F)/stride+1 로 값을 구할 수 있다.


위의 예시의 경우

만약 stride3일 경우 (7-3)3+1 = 2.33이 되기 떄문에, 이러한 경우는 사용못한다.


그런데, filter를 통과할 경우 결과의 image가 점점 작아지게 된다. image가 점점 작아진다는 의미는 image에 대한 정보가 점점 줄어주는 것을 의미하며,

이것을 방지하기 위해 padding을 사용한다.


padding은 image테두리를 모두 0으로 채우는 것말한다.



출처:https://taewanmerepo.github.io/2018/01/cnn/padding.png

(그림같은경우 패딩은 2가 되겠다.)


padding을 사용하면, image가 작아지는 것을 방지하고 테두리가 어느곳인지 알수있게 된다.


padding이 1인경우, 

7x7 -> 9x9가 되고 7x7 output을 얻을수 있다!



swiping image

32x32x3 image -> 6 filters(5x5x3) -> activation maps(28,28,6) *(32-5)/1 +1 = 28

6filters를 적용한 activateion maps는 6개의 정보를 얻을 수 있기 때문에 (28,28, 6)이 된다


이렇게 나온 activation 에 또 다시, 10 filter(5x5x6)을 적용하면 24 24 10 .. 이런식으로 진행된다.


그렇다면 weight의 갯수는 5x5x3가 되며, 

weigth의 값은 NN과 마찬가지로 처음에는 random하게 초기화하고 우리가 가진 데이터로 학습을 하게 된다.






Pooling layer(sampling)


image에서 filter처리를해서 conv layer를 만드는데,

여기에서 한 conv layer만 뽑아 resize를 하는 것을 pooling (sampling)이라고 한다.

pooling을 하여 값을 쌓으면 pooling layers가 된다.


max pooling


4x4 -> 2x2의 값이 나오는데, max pooling은 filter 중 가장 큰값을 뽑는 것을 이야기 한다.

pooling한 값의 사이즈는 pooling 의 filter사이즈와 stride에 따라 달라질 것이다.



convolution과 pooling의 구성은 내 마음대로 해도된당!

그리고 마지막에 pooling을 하게 되고, 나온 값에 다시, 원하는 만큼의 깊이에 NN(또는 Fully connected network)에 넣어서 마지막 값을 계산하게 된다.


convolutional network를 직접 눈으로 확인하구싶으신 분들은 아래사이트가시면 됩니당.

https://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html

반응형

댓글