공돌이 공룡의 서재

[개념] CNN : Convolution의 의미에 대하여 본문

딥러닝

[개념] CNN : Convolution의 의미에 대하여

구름위의공룡 2021. 3. 12. 23:55

* CS231N 5장 강의안과 다른 논문들을 공부하면서 알게 된 내용들을 바탕으로 정리하였습니다.

 

현재 컴퓨터 비전에서 CNN을 이용한 모델들이 압도적이다. 최근에서야 Vision Transformer를 시작으로, Convolution을 쓰지 않는 모델들이 나오기 시작했지만 여전히 state-of-art 모델들 대부분이 CNN 기반으로 이루어져 있다.

 

그렇다면 이미지에 대해 처리를 할 때 왜 Convolution 연산이 효과적인지, 한계가 있다면 무엇인지 자세히 다뤄보고자 한다.

 

 


VS Fully Connected layer (=FC layer)

 

다음과 같은 크기의 이미지가 있다고 생각해보자.

 

depth는 channel 과 비슷한 의미로 쓰이는데, 인풋 이미지의 경우 grayscale 인 경우와 RGB 인 경우 각각 1과 3의 값을 갖는다. 

 

이런 형태의 이미지가 주어졌을 때, FC layer에선 1차원의 입력을 받고 hidden layer로 연결되기 때문에, 값을 쭉 펼쳐야 한다.(=Flatten) 이후 hidden layer의 weight matrix와 계산한 다음, 그 값을 activation layer로 넘겨준다.

 

 

MNIST 문제라 보고 분류하고자 하는 클래스가 10개라고 가정!

이 과정에서 문제점이 생긴다. 이미지 원본에 있는 공간적인 정보, 즉 spatial information 이 손실 또는 왜곡된다. 예를 들면 다음과 같다. 

 

빨간색 픽셀과 파란색 픽셀은 실제로는 이웃하는 픽셀이다. 그런데 FC layer로 넘겨주기 위해 1D로 펼치고 나면 위치가 32만큼 차이나게 된다. '이웃하는 픽셀' 라는 정보를 잃게 되고, 각 픽셀이 6의 영역인지 아닌지에 대한 정보만 남는다.  MNIST 같은 숫자를 인식하는 문제말고 더 복잡한 형태의 사물들을 분류하고자 한다면? 성능이 떨어질 수 밖에 없다.

 

Convolution layer는 이러한 문제를 해결하여 공간적인 정보를 보존한다는 특징이 있다. 

 

그렇다면 어떤 원리로 보존하는 것이 가능할까?

* stride, kernel size, padding에 대한 구체적인 설명은 생략하겠다.

* 연산 과정 자체를 알고 싶다면 이 링크를 참고하시길 바란다.


출처: https://towardsdatascience.com/a-comprehensive-guide-to-convolutional-neural-networks-the-eli5-way-3bd2b1164a53

 weight 값을 갖고 있는 필터와 입력 이미지의 특정 영역(window라 하자)끼리 convolution 연산을 수행한다. 이 window가 이미지 전체에 대해 sliding하면서 결과를 만들어내는데, 이렇게 만들어진 결과를 feature map이라고 한다. 여기서 필터를 몇 개 쓰느냐에 따라서 output의 depth(channel)을 결정한다. 

 

 

 이 때, 왼쪽 그림을 보면 한 필터가 input image를 처리하는 과정을 살펴보자. depth 하나하나와 구분하는 것이 아니라, depth 전체에 대해 연산을 수행하는 것이 보인다. input을 32x32x1 3개로 만들고, 이들 각각에 대해서 filter와 연산을 수행한다면,(depthwise) input의 depth 값이 높을 경우 연산 양도 많아지고 무엇보다 각 depth마다 weight가 공유가 안 되므로 구해야할 parameter가 수가 급격히 늘어난다. 그래서 depth 전체에 대해 계산하는데 이를 parameter sharing이라고 한다. 추가로 언급하자면, 이 parameter sharing convolution을 쓰지 않고 depthwise 연산을 하는 모델로 MobileNet 이 나왔다. 기존의 convolution layer의 원리를 알고 본다면 논문을 읽을 때 더 도움이 될 것 같다.

 

 다시 핵심으로 돌아가서, 공간적인 정보를 보존할 수 있는 이유는 바로 window를 기반으로 한 연산이라는 점에 있다. window의 크기에 따라서 이웃하고 있는 픽셀들의 값과 위치가 같이 고려된다. 우리가 어떤 이미지를 파악할 때 이미지를 있는 그대로 바라보지, 1차원으로 펼치고 파악하지 않는다. 사람이 이미지를 파악하는 방식과 유사하다고 볼 수 있다. 

 

 이처럼 window 기반 convolution 연산에는 또 하나 장점이 있다. 바로 object의 이동에도 robust, 즉 잘 적용이 된다는 점이다. object가 이미지 내에서 어디에 위치해 있든간에, window 안의 픽셀들과 filter를 convolution했을 때 해당 object가 있다/없다 에 대한 정보를 얻어낼 수 있기 때문이다.


 

Comments