Convolution Neural Network
이미지 분류에서 가장 널리 사용되는 Neural Network 방식.
위에는 32*32의 이미지 하나가 있다. *3으로 3차원이 된 이유는 rgb를 표현하기 위함이다.
이 이미지를 filter 크기에 따라 부분으로 나누어 본다고 생각해보자.
이렇게 conv filter로 본 공간은 하나의 점으로 표시되고, 이 점이 Weight가 된다. filter는 image의 여러 면을 돌며 점을 만들어내고, 그 점이 모여 하나의 feature map을 만들어낸다.
feature map은 filter의 갯수만큼 모여서 하나의 새로운 image를 생성하게 된다.
w1x1 + w2x2 + w3x3 + ...... +b = y와 같은 hypothesis를 세울 수 있게 되고, 이를 최적화하기 위해 relu 등의 normalization 함수가 사용된다.
이 때 filter는 한 칸을 움직이며 weight를 만들어낼수도 있고 2칸 단위로 움직이며 weight를 만들어 낼 수도 있다. 이 칸을 stride라 한다.
filter의 갯수와 stride에 따라 output, 즉 feature map의 크기가 결정된다.
N * N 크기의 이미지에 F * F 크기의 filter를 적용시킨다 할 때, Output의 크기는
(N - F) / stride+1 의 값을 갖는다.
이 값이 실수이거나 음수인 경우, 적용시킬 수 없으므로 filter의 크기나 stride의 조절이 필요하다.
Problem
filter를 거친 이미지의 크기를 계산해보면 알겠지만, 기존의 이미지보다 크기가 작은 Output이 나온다.
이렇게 계속 이미지가 작아지다 보면 정보의 손실 등을 초래할 수 있으므로 zero padding 방법을 사용한다.
이미지 주위를 전부 0으로 한 바퀴 씌우는 과정이다. 이를 통해 이미지 크기의 손실 없이 feature map을 생성할 수 있게 된다.
Conclusion
zero padding을 통해 손실률을 낮춘 feature map들을 생성해냈다면, 이것들을 겹쳐서 새로운 image를 만들어내고, 그 이미지를 다시 filter를 거쳐 convolution하는 과정이 CNN의 큰 틀이다.
'인공지능 > CNN' 카테고리의 다른 글
CNN 2. Pooling, Fully Connected Layer (0) | 2020.04.14 |
---|