[Deep Learning] CNN

스르륵·2021년 6월 25일
0

부트캠프 정리하기

목록 보기
12/12
post-custom-banner

Convolutional Neural Network.
컴퓨터 비전에서 뛰어난 성능을 보여주는 네트워크.
CNN의 발전으로 지금 현재 딥러닝이 있다고 할 수 있을 것 같다. CNN이 두각을 드러낸 덕분에 다시 딥러닝이 주목받을 수 있었고 하드웨어의 발전(GPU..)과 맞물려 만개한 것이다.

Convolution?

convolution이라는 과정 자체가 처음보는 연산이었다.

출처: Youtube 모두를위한딥러닝 시즌2

위의 그림과 같이 input image와 filter가 존재하는데, 필터가 이미지를 스캔하면서 같은 위치에 있는 픽셀값을 곱하고 곱해진 값을 모두 더하여 하나의 값이 나오는 과정이 convolution이다. 위 그림에서는 input image에서 노란색으로 된 부분이 필터가 씌워진 부분이고 해당 부분에서 계산이 슬라이드 위쪽에 써있다. 그리고 output에 동일한 위치에 4가 들어간다.

이때, 원래 input image(정사각형으로 가정)의 길이가 N픽셀이고 필터가 FxF크기라면, output feature map의 크기는 (NF)Stride+1\frac{(N - F)}{Stride} + 1이 된다. Stride는 필터가 몇 칸씩 움직이는지를 의미한다.

위의 input image는 흑백 사진이라고 할 수 있다. 채널이 1개 뿐이니까. 이때 channel, filter, kernel 같은 용어들이 나오는데 뒤죽박죽 섞여서 쓰이는 경우를 많이 봐서 짚고 넘어간다.

Input image의 컬러를 나타내기 위해 RGB같은 것들이 channel을 이룬다. 따라서 컬러 사진은 같은 크기의 R channel, G channel , B channel 총 3개의 채널이 input으로 들어간다. 그리고 각각의 채널에 대해 filter가 적용된다.

Filter는 앞서 말했듯이 convolution 연산을 위해 stride 만큼씩 이동하며 연산하는 것이다. input channel에 관계없이 filter의 갯수에 따라 output channel의 수가 정해진다.

출처: Youtube 모두를위한딥러닝 시즌2 이 사진 처럼 각 channel에 대해 filter가 적용되고 각 filter 별로 output이 나오기 때문에 output channel의 수는 filter의 수와 일치한다.

Kernel은 단순히 filter와 같은 의미이다.

Pooling

CNN 구조에서 pooling layer는 중요한 역할을 한다. 일종의 sub-sampling으로 convolution을 통해 나온 feature map의 크기를 줄이고, 위치나 이동에 더 robust한 feature를 만들어준다.

위치나 이동에 강인하다? --> convolution의 결과는 input의 특정 위치 등을 기록하기 때문에 동일한 대상이 다른 위치에 나온다거나, 크롭된 이미지 등을 전혀 다른 데이터로 인식하게 된다. 해당 input에 overfitting 된다고도 할 수 있다.

따라서 overfitting을 피하기 위해 down sampling과 유사한 방법을 통하여 더욱 특징적인 feature보다는 큰 범위에서, 구조적인 특징을 잘 뽑아낼 수 있도록 한다.
CNN에서는 pooling이 주로 사용되며 그 중에서도 Max Pooling이 사용된다.

Max Pooling은 간단하다. filter의 픽셀들 중 가장 큰 값만 남기고 제거하는 것이다. Pooling을 통해 feature map의 특징들을 요약된 버전으로 만들고 더 포괄적인 특성으로 만들게 된다.

CNN 활용

대표적인 CNN 모델들에 대해 얕게 조사해보았다.

1. AlexNet

2012년의 ILSVRC(ImageNet Large Scale Visual Recognition Challenge)에서 우승을 차지한 CNN 모델이다. 이 모델이 우승한 것을 계기로 CNN이 대두될 수 있었다고 한다.

227x227x3 의 input size이다. 그림 속의 224가 오타라고 한다.
227의 input과 11x11의 filter, stride 4, 그리고 96개의 filter로 구성되어 output size는 55x55x96이 된다. (22711)/4+1(227 - 11) / 4 + 1
AlexNet은 최초로 ReLU를 사용한 CNN이기 때문에 중요한 의미가 있다고 한다.

2. GoogleNet

AlexNet과 같이 GoogleNet도 2014년에 열린 같은 대회에서 우승한 모델이다.

총 22개의 층으로 구성되었다. 이 모델에서는 Inception Module이 중요한 역할을 했다고 한다. 이 모듈을 통해 연산량을 줄이고 다양한 종류의 특성을 도출했다고 한다.

3. ResNet

ResNet은 마이크로소프트가 개발한 모델로 2015년 ILSVRC에서 우승했다.
ResNet의 가장 큰 특징은 Residual Block이다.

솔직히 수학적으로 어떻게 효율을 보이고 하는지는 잘 모르겠다. 다만 컨셉은 shortcut을 통해 모델이 더욱 깊어지더라도 잘 학습할 수 있도록 만들어준 것이라고 한다.

profile
기록하는 블로그
post-custom-banner

0개의 댓글