봉식이와 캔따개

CNN에 대해 쉽게 정리 본문

머신러닝, 딥러닝/이미지처리

CNN에 대해 쉽게 정리

봉식이누나 2021. 1. 22. 15:38
반응형

 

CNN이란?

CNN은 Convolution Neural Network의 약자이다.

말그대로 Convolution 작업을 수행하는 Neural Network라는 뜻이다.

 

CNN은 이미지를 분석하기 위한 패턴을 찾는데 유용한 알고리즘이고

이미지를 직접 학습하고 패턴을 사용해 이미지를 분류한다.

 

CNN은 기존에 image 인식에 사용하던 FCNN(Fully Connected Neural Network)이 가지고 있는 한계를 개선하기 위해 개발되었다.

 

 

 

 

FCNN

 

 

image 직렬화

 

 

FCNN은 input image를 픽셀의 행으로 직렬화 한 후, 이것을 입력 신호로 주는 방식으로 동작한다.

이러한 방식은 직렬화를 수행하는 과정에서 데이터의 형상이 무시된다는 문제점이 있다.

픽셀은 주변 픽셀과 관련이 있는데 fully connected layer에 집어넣기 위해 직렬화를 수행하면서 이러한 상관관계들을 잃게된다.

때문에 데이터의 전체 관계를 고려하지 못하게 된다는 문제점이 있다.

 

 

 

직렬화 과정에서 무시되는 상관관계

 

 

CNN은 이러한 문제점을 해결하기 위해 fully connected layer 앞부분에 convolution layer와 pooling layer를 추가했다.

 

 

 

 

CNN의 구조 (LeNet-5)

 

LeNet-5의 구조

 

3개의 convolution layer, 2개의 sub-sampling layer(pooling layer), 1개의 fully connected layer로 이루어져 있다.

input – C1 – S2 – C3 – S4 – C5 – F6 - output

 

 

C1 layer : 입력영상(32*32)을 6개의 5*5필터와 convolution 연산을 한다. 그 결과로 6장의 28*28 피쳐맵을 얻는다.

 

S2 layer : pooling 작업을 해준다. 2*2 필터를 stride 2로 설정하여 피쳐맵이 절반 크기로 축소한다. 6장의 14*14 피쳐맵을 얻는다.

 

C3 layer : 6장의 14*14 피쳐맵에 convolution 연산을 수행해서 16장의 10*10 피쳐맵을 산출해낸다.

 

S4 layer : pooling 작업을 통해 10*10 피쳐맵을 5*5로 만든다.

 

C5 layer : 16개의 5*5 영상을 받아 5*5 필터로 convolution을 수행하여 1*1 크기의 피쳐맵이 출력된다.

 

 

 

 

convolution layer

 

convolution layer 구조

 

convolution layer는 입력 데이터로부터 특징을 추출하는 역할을 한다.

convolution layer는 특징을 추출하는 기능을 하는 filter와

이 filter의 값을 비선형 값으로 바꾸어 주는 activation function(활성화 함수) 으로 이루어져있다.

 

 

 

filter

 

filter는 그 특징이 data에 있는지 없는지를 검출해주는 함수이다.

예를 들어 곡선을 검출해주는 필터가 있다고 하자.

필터는 왼쪽 그림처럼 행렬로 정의될 것이다.

 

 

 

 

쥐 엉덩이에 곡선 부분이 있을까

 

곡선이 있는 쥐 엉덩이 부분의 이미지와 필터를 곱하면 큰 값이 나온다.

 

 

 

 

 

쥐 머리 부분엔 곡선이 없다

 

 

곡선이 없는 부분에 필터를 적용해보면 결과값이 0에 수렴하게 된다.

 

 

 

즉, 필터는 입력받은 데이터에서 그 특성을 가지고 있으면 결과값이 크게 나오고, 특성을 가지고 있지 않으면 결과 값이 0에 가까운 값이 나오게 돼서 데이터가 그 특성을 가지고 있는지 없는지 여부를 알 수 있게 해준다.

 

 

 

 

 

convolution

 

convolution 연산 과정

 

 

filter를 원본 이미지에 적용하는 방식이 convolution 이다.

convolution은 필터를 일정 간격으로 이동시키면서 input data에 연산을 적용시키는 것을 말한다.

이 일정한 간격을 stride라고 한다.

그리고 필터를 적용해서 얻어낸 결과를 feature map이라고 한다.

 

이런 식으로 이미지 전체를 보는 것이 아니라 부분을 보는 것이 CNN의 핵심 아이디어라고 할 수 있다.

 

 

 

stride

 

왼쪽 stdrie 1, 오른쪽 stride 2

 

 

stride는 필터를 얼마만큼의 간격으로 이동시켜가며 convolution 연산을 수행할 지를 정하는 파라미터이다.

위의 사진을 보면 stride의 값 변화에 따른 결과값의 변화를 알 수 있다.

 

 

 

 

padding

 

 

 

input data에 필터를 적용한 내용을 보면 필터를 적용한 후의 크기가 필터 적용 전보다 작아진다는 것을 알 수 있다.

CNN에서는 여러 개의 convolution layer를 거치면서 필터를 적용 시키는데, 점점 결과 값이 작아지게 되면 처음에 비해서 output 이미지가 너무 작아지게 되기 때문에 이것을 방지하기 위해서 사용되는 것이 padding이다.

 

padding은 입력 이미지 가장자리에 특정 값으로 설정된 픽셀을 추가함으로써 입력 이미지와 출력 이미지 크기를 같거나 비슷하게 만드는 역할을 한다.

그리고 edge나 모서리 부분의 픽셀 정보도 충분히 활용할 수 있게 하는 역할도 하고있다.

 

padding 적용 전에는 모서리 픽셀 정보는 딱 한번밖에 이용되지 않는데, 만약 모서리 부분 픽셀에 중요한 정보가 담겨있다면? convolution 과정에서 정보가 유실되는 문제가 발생한다.

 

CNN에서는 주로 제로 패딩을 이용하는데 이미지의 가장자리에 0값을 갖는 픽셀을 추가하는 것을 제로 패딩이라고 한다.

 

 

 

 

activation function

 

 

 

filter들을 통해서 feature map이 추출되었다면 이 feature map에 활성화 함수를 적용하게 된다.

 

특징이 있는지 없는지 filter를 통해 추출한 값이 정량적인 값으로 나오는데, 너무 크거나 필요 없거나 튀는 데이터가 있을 수도 있기 때문에 데이터의 폭을 어느정도 조절해서 그 특징이 있을 가능성, 없을 가능성 이렇게 비선형값으로 바꾸어주는 과정이 필요하다. 이 때 쓰이는 함수가 activation 함수이다.

 

그 종류로는 계단함수, 시그모이드 함수, Tanh 함수, Relu함수 등이 있다.

 

 

계단함수 : 단순하게 0 이하이면 0, 0 이상이면 1 값으로 치환해주는 함수

 

시그모이드 함수 : 계단함수가 0과 1의 값만 가져서 맞다, 아니다로만 끝나는 것을 보완하며 미세한 값을 생성하는 것이 가능하게 나온 함수. 아무리 값이 많아도 0과 1사이로 변환시키기 때문에 layer가 많을수록 기울기가 0값에 수렴하는 문제를 가지고 있다.

 

시그모이드 함수의 사라지는 기울기 문제를 극복하기 위한 함수가 Relu함수이고 CNN에서는 Relu함수가 주로 사용된다.

 

Relu함수 : 0 이하의 값은 0으로 고정하고 0값을 초과할 경우 해당 값을 그대로 출력해주는 함수

 

 

 

 

 

 

pooling layer

 

 

봉식이...

 

 

convolution layer를 거쳐 나온 feature map 에서 모든 데이터가 필요하지는 않다.

고해상도 사진을 보고 물체를 판별할 수 있지만 저해상도 사진으로도 어떤 사진인지 판별할 수 있는 것과 같은 원리다.

판단에는 적당량의 데이터만 있어도 된다.

pooling layer를 거치면서 적당히 이미지 크기도 줄이고 특정 feature만 강조하게 된다.

 

 

 

추출된 activation map을 인위로 줄이는 이 작업을 pooling 혹은 sub-sampling이라고 한다.

pooling에는 여러가지 방법이 있는데, 어떠한 값을 대표값으로 두는지에 따라서 average, max, min pooling이 있다.

그 중 max pooling 기법이 많이 사용된다. CNN이 신경세포와 유사한 방식을 취하기 때문. 신경세포학적으로 보면 통상적으로 강한 신호만 전달되고 나머지는 무시한다.

 

max pooling은 특징의 값이 큰 값이 다른 특징들을 대표한다는 개념을 기반으로 하고 있다.

 

 

 

 

 

fully connected layer

 

 

 

앞에서 convolution layer와 pooling layer를 통해 feature들을 뽑아냈다면

이 추출된 feature 값을 fully connected layer를 통해 분류작업을 한다.

 

 

 

 

 

 

 

 

 

 

 

마지막으로 한번 더 CNN의 구조를 보면서 마무리...

반응형
Comments