본문 바로가기

인공지능/CNN

CNN 1. Convolution Neural Network

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