Deep Learning/Computer Vision

[VISION] Convolution Neural Network

언킴 2021. 10. 20. 11:49
반응형

CNN은 이미지에 주로 사용되는 것이라 볼 수 있다. 하지만 최근에는 이미지 뿐만 아니라 자연어처리에도 사용되고 여러 분야에서 다양하게 CNN을 활용한다. CNN은 convolution layer를 겹겹이 쌓아 분류 문제의 경우 class 만큼의 output을 만들어 낸다. 

 

CNN을 하기 위해서는 기본적으로 filter라는 개념을 짚고 넘어가야 한다. filter는 input데이터를 필터사이즈 만큼 곱해서 하나의 output을 출력하게 된다. 이 경우 해당 filter size만큼의 값들이 추출된다. 일반적으로 input 을 넣고 filter를 지난 후 nonlinear function(ReLU와 같은)을 거쳐 출력되며 padding이나 stride를 조정해 output 이미지의 사이즈를 조절할 수 있다. [자세한 내용은 여기를 참고]

 

 

AlexNet은 그때 당시의 GPU 성능이 좋지 않아서 아래의 그림과 같이 GPU를 나누어 학습을 진행했다. 요즘은 마지막의 fully connected layer를 많이 하는 방식보다는 앞단의 Conv layer를 늘려서 parameter수를 줄이는 방식으로 접근하고 있다. 

 

Conv layer를 늘리는데 어떻게 parameter수가 줄어드는가에 대한 의문점을 가질 수 있는데, 아래의 경우를 가지고 parameter수를 계산해보자. AlexNet의 경우 이미지 사이즈는 3x224x224로 3개의 채널을 가진 224x224 이미지가 input으로 들어왔다. 11x11 filter를 가지고 convolve하게 되는데 그떄의 parameter수는 11x11x3x48 이 된다. 이때의 11x11는 filter size가 되고 filter의 채널은 앞 단에 들어오는 이미지의 채널과 동일하게 된다. 만약 이대로 끝난다면 output의 parameter 수는 11x11x3이 될 것이다. 하지만 다음 output 이미지의 채널 수는 48개이기 때문에 11x11x3짜리 filter가 총 48개가 필요하다 그러므로 parameter수는 11x11x3x48x2이 된다. 마지막 x2는 총 두개로 병렬구조를 가지기 때문에 윗단의 parameter수 까지 고려한 값이다. 

 

그런식으로 계산하다보면 Dense layer로 가기 전의 layer의 paremeter수를 계산하면 13x13x128x2 가 되고, parameter의 수는 442K개가 된다. 그 후 Dense layer를 거치게 되면 13x13x128x2x2048x2 = 177M개로 parameter수가 기하급수적으로 증가하는 것을 볼 수 있다. 일반적으로 모델은 아무리 학습을 잘 시켰다 하더라도 parameter수가 증가하면 그만큼 Generate Performance가 줄어든다고 한다. 그렇기 때문에 최근에는 fully connected layer를 최소화하는 과정으로 앞단에 1x1 conv layer를 추가해 parameter수를 줄이는 과정을 행한다. 가장 대표적인 모델이 ResNet의 bottlenect architecture가 있다. 

 

 

 

1x1 conv layer는 똑같은 H,W 사이즈의 layer의 채널수를 줄여주기 위해 사용된다. 차원을 축소함으로써 parameter의 수를 줄여주는 효과를 보여준다. 1x1 convolution은 ResNet에만 활용되는 것이 아니라 DenseNet 등 여러가지 CNN 모델에서 자주 활용된다. [ 모델 소개는 여기를 참고]