[모두의 딥러닝] CNN Introduction
📗강의노트/모두의 딥러닝

[모두의 딥러닝] CNN Introduction

728x90
반응형

Sung Kim 님의 "모두의 딥러닝" 강의노트입니다

좋은 강의 감사드립니다!

https://www.youtube.com/watch?v=mQGwjrStQgg&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm&index=5



각각의 부분을 바라보는 Neuron들이 있다는 것!

이미지를 잘라서 각각의 입력을 보게됨 

이 층을 Conv layer라고 함. 사시에 ReLU 층을 넣고 중간에 Pooling을 해주기도 함 

그다음 FC( Fully Connected ) NN으로 구성해서 labeling을 해준다. Softmax classify를 해주는 것이다. 

  1. 처음에 이미지를 입력으로 받아들인다.

마지막 3은 색상을 말한다

고양이가 보는 것 처럼 하나의 부분을 먼저 본다. 마지막 3은 항상 같은 값 

필터의 크기 ( 한꺼번에 얼마나 보고싶은지 ) 는 사용자 설정에 따라 다르다
필터는 하나의 숫자이다!

5x5x3의 숫자가 포함되어 있다. 
X1,x2,x3,x4,x5를 한 값으로 만들어야 한다. 
여기에 각각 w1,2,3,4,5를 곱해주고 +b를 해주면 “ 하나의 숫자(Y) “로 만들어진다. W이 숫자를 결정하는 Filter의 값이 되는 것이다!

W의 값은 변하지 않는다. 즉 똑같은 필터를 가지고 다른 부분의 이미지도 봐야한다. 옆으로 쭉쭉 넘기면서 점차적으로 각각의 값들을 가져오고 아래로 이동한다. 

이런 과정을 통해 과연 몇 개의 값을 모을 수 있을 까??

 

이미지가 7x7이고  한 번에 읽는 필터의 크기가 3x3이라고 하자

위 처럼 아예 한 칸씩 움직이면서 본다. 
옆으로 5번 아래로 5번 갈 수 있다. 

5 X 5 output을 얻을 수 있다.

한 칸씩 움직였는데 이 값은 “ Stride “ 라고 부른다. stride=1이라는 것은 한 칸씩 움직인다는 뜻이다. 

Stride = 2 일 때는 
3 x 3 output을 얻을 수 있다. 

( 이미지의 크기 - 필터의 크기) / 몇 칸씩 움직일지 + 1 하면 output이 나온다. 

stride가 커질 수록 숫자가 작아지는데, 이는 우리가 정보를 잃고 있다는 것을 뜻한다. 

그래서 고안한 것이 Padding이다. 

Padding을 사용하는 이유는 다음과 같다.

  1. 그림이 급격하게 작아지는 것을 방지하기 위함이고
  2. 이미지의 모서리 부분이라는 것을 인식시키기 위해서 

Pading 1하면 전체가 7 -> 9로 바뀐다. 그 후 (N-F)/stride + 1 하면 된다. 
padding을 하면 input이미지와 Conv layer을 통과한 이미지가 같은 사이즈로 나오게 된다. 

기존의 이미지 = padding한 output 을 같게 해주는 것이 일반적이다.

Zero-padding일 경우 (F-1)/2를 통해 pad없는 ouput사이즈를 알 수 있다. 

필터를 계속 쌓아준다. 

각각 filter의 W는 다르기 때문에 나오는 값이 다를 수 있다.

6개의 filter를 사용하면 (? ,? , filter의 갯수 )
여기서는 (28,28,6)이 된다
( N-F )/stride + 1공식에 따라 ( 32 - 5 ) / 1 + 1이기에 28이라는 값이 나온다.

이렇게 하는 것이 Convolutional layer의 계층이다.

전체 점이 모인 하나의 Activation map은 "전체 이미지를 Convolution 연산한 결과"이다.

한 번하는 것이 아니라 여러 번 할 수 있다. 

가운데를 Activation map이라고 부른다. (28,28,6) -> (24,24,10)

처음에 6개의 필터를 사용한 것이고 두 번째로는 10개의 필터를 사용한 것이다. 
다음 필터의 크기를 구할 때 (5x5x6)에서  6인 이유는 앞의 filter의 갯수와 같아야하기 때문이다. 

W의 갯수는  5x5x3이고 마지막의 W갯수는 5x5x6이다.
이 값들은 다른 NN과 마찬가지로 랜덤하게 초기화하고 그리고 가지고 있는 데이터로 학습을 하게 된다. 

+)
 1. conv를 해주면 input이 filter를 통해 계산되며 가로세로는 작아지게 된다.

2. 하지만 padding을 사용하면 input과 filter로 conv한 결과의 가로세로가 같아지게 만들 수 있다.
이렇게 conv를 거치면 더이상 이미지 데이터는 아니게 된다.

이미지에서 필터를 통해서 어떤 특성을 추출한 값들이 되는 것이다.

이렇게 이미지를 CNN 끝까지 나가면 이것은 고양이다, 강아지다 라는 식으로 정의한 라벨을 맞추는지 보게 되고, 이게 틀리다면 backpropagation 을 통해 필터의 값들 (=weight)들을 조금씩 조정해 가면서 학습시키게 된다.


728x90
반응형