본문 바로가기
ML | DL/딥러닝 이론|실습

CNN(Convolutional Neural Networks) 이론 설명

by Leeys 2020. 10. 30.
반응형

CNN 이란?

- 이미지, 영상, 음성을 분석하기 위해 패턴을 찾는데 유용한 알고리즘으로, 데이터에서 이미지를 직접 학습하고 패턴을 사용해 이미지를 분류한다.

일반적인 DNN은 기본적으로 1차원의 데이터를 사용해서 학습을 해야한다. 하지만 이미지 데이터는 

640 x 640 이런 식으로 표현된다. 이 아무 처리없이 1차원으로 바꾸면 형체를 알 수 없을 정도로

데이터의 손실이 일어난다. 이를 해결한게 CNN 이다.

 

CNN은 크게 두단계로 나누는데

 

1. 전처리 과정 feature extraction

2. 분류 과정 classification

 

아래 그림을 보면 더 이해가 잘 될것이다.

 

그림 1

 

위의 그림은 CNN의 전체 과정을 담은 것이다. 크기가 32 x 32 ~ 5 x 5까지 줄어드는것을 볼수 있는데,

이는 그림 데이터의 중요한 특성만 뽑은 것이다. 아래 그림을 보자

 

 

1)RGB채널을 나눈다.

 

2)padding을 통해 0으로 채워진 픽셀을 만든다. 예를들면 6x6에 padding을 1만큼 추가하면 8x8이 된다. 이 행렬에 3x3의 filter를 주면 다시 6x6이 된다. - 데이터가 너무 작아지는것을 방지하기위해(정보 소실방지)

 

2)kernel size만큼의 행렬이 stride 값씩 이동하며 각각 이미지에 행렬에 filter를 추출한다. (보통 kernel = filter 인데 keras 에서 kernel_size랑 filter 값을 따로 설정할 수 있어서 이렇게 설명함)

 

3)합성곱이 된 값들을 모두 더해서 Feature Map을 만든다.

 

4)활성화 함수(ReLu 같은)를 적용한다.

 

5)Activation Map이 추출된다

 

이 과정이 끝나면,

 

 

그림 1의 SubSampling 과정이 바로 이거다.

Pooling에 Activation Map이 input 값으로 사용되며, 크기를 줄이고 특정 부분을 강조하기 위해 사용된다. 여러가지 방법이 있는데 CNN은 Max Pooling을 사용한다고 한다. (Max Pooling, Min Pooling, Average Pooling 등이 있다.)

 

간단히 위 그림의 색깔별에 가장 큰 값을 사용한다고 생각하면 된다.

이것은 선택적인 방법으로, 그림 1에 보다시피 데이터가 너무 많아지면 학습하는데 오랜 시간이 걸릴수 있기 때문에

데이터의 크기를 줄이는데 사용한다. 또한 데이터의 일부분이 소실되기 때문에 overfitting을 예방 할 수 있다.

 

최종적으로 Classification을 하기 전 과정에 Fully Connected Layer를 생성하여 2차원 배열인

데이터들을 1차원으로 바꿔주는 작업을 한다(DNN은 1차원 데이터로만 학습이 가능하다) 파이썬 keras에서는 FlattenLayer를 뜻한다.

 

 

 

keras에서 CNN모델 구현에 사용하는 파라미터를 알고 싶다면 추천합니다.

tykimos.github.io/2017/01/27/CNN_Layer_Talk/

컨볼루션 신경망 레이어 이야기

이번 강좌에서는 컨볼루션 신경망 모델에서 주로 사용되는 컨볼루션(Convolution) 레이어, 맥스풀링(Max Pooling) 레이어, 플래튼(Flatten) 레이어에 대해서 알아보겠습니다. 각 레이어별로 레이어 구성

tykimos.github.io

 

반응형

댓글