본문 바로가기
밑바닥 딥러닝/딥러닝 개념

CNN(Convolutional neural network)_개념

by sxlvxrjxms2s2itsmes2s2 2023. 6. 30.

CNN은 이미지를 분류하기 위해 개발된 네트워크이다.

이미지는 픽셀로 되어있는데 픽셀의 색을 컴퓨터가 이해할 수 있도록 숫자로 변경을 한 후 신경망을 통해 계산을 한다.

 

딥러닝 이전의 머신러닝을 활용한 이미지 분류 순서는 먼저 이미지의 특징을 찾는다. 이미지의 특징을 찾은 후에 분류를 진행한다.(의사결정나무 랜덤 포레스트, K 근접이웃...)

 

딥러닝은 여러 신경망을 넣어보고 결과값을 판단한다. 감으로 layer를 쌓아서 계산을 해보니 머신러닝보다 빠르게 학습이 가능하고 정확도 또한 높기 때문에 딥러닝을 사용하는 것이다.

딥러닝은 자체적으로 역전파 방식을 활용하여 계산 시스템이 업데이트되기 때문에 좀 더 쉽게 모델을 만들 수 있다.

 

CNN은 Convloution layer와 Pooling layer의 조합으로 만들어진 모델을 통틀어 CNN모델이라고 한다.

(LeNet, AlexNet, VGG, ResNets, GAN..등이 모두 포함된다.)

 

CNN특징

CNN은 크게 2가지로 나눠진다. 하나는 특징을 추출하는 feature extraction로 이루어져 있고, 다른 하나는 feature extraction를 통과한 이후에 결과값을 도출해 주는 Classification으로 이루어져있다. 이때 Convolution layer와 Pooling layer가 섞여 있는것이 feature extraction이고, fully-connected layer로 이루어 진것이 Classification이다.

  • image classification(이미지 분류-지도학습)에서 가장 많이 사용하고 있다.
  • 일반적으로 convolution layer, pooling layer, fully-connected layer로 구성되어 있다.
  • feature extraction 역할(특징을 뽑아낸다) - Convolution, Pooling layer
  • classification 역할(물체를 판단한다) - Fully-connected layer

 

Convolution Layer

convolution layer의 기본 특징은 이미지의 특징을 판단하는 것에 있다. 컴퓨터는 이미지에서 물체를 판별할 때 다른 위치에 있는 같은 물체를 다른 물체라고 판단한다. 이러한 문제를 해결해주는 것이 convolution layer이다. 이미지 크기보다 작은 필터를 사용하여 필터로 특징을 판별한다는 점을 인지하자. (필터는 CNN의 핵심 구성 요소로서 입력 데이터로부터 지역적인 패턴을 인식하고 특징을 추출하는 역할)

 

이미지는 보통 입력으로 많이 받는다. 아래 예는 32x32픽셀 이미지이기 때문에 2D convolution layer를 사용한다.

여기서 channel은 RGB로 받기 때문에 3개인 것이고 흑백일 경우 channel은 1이 될 것이다.

 

Convolution Layer - Filter 적용

하나의 합성곱 계층에는 입력되는 이미지의 채널 개수만큼 필터가 존재하며 각 채널에 할당된 필터를 적용함으로써 합성곱 계층의 출력 이미지가 생성된다.

위의 예에서 필터 같은 경우에는 현재 5x5x3 filter인데, 부를 때는 5x5 필터라고 부르지만 실제 들어있는 개수는 25개가 아니고 75개이다. 왜냐하면 계산을 위해 앞의 이미지 channal에서 받아오는 것이기 때문에 항상 image와 filter의 3은 같은 숫자여야한다.

 

예를 들어 높이x너비x채널이 4x4x1인 텐서 형태의 입력 이미지에 대해 3x3크기의 필터를 적용하는 합성곱 계층에서는 그림과 같이 이미지와 필터에 대한 합성곱 연산을 통해 2x2x1 형태의 이미지가 생성된다.

위 예시에서는 편향을 더하는 것이 생략되어있다.

 

합성곱의 연산과정은 이렇다.

Convolution 연산과정 (padding 추가되어 있음)

위의 그림에서 kernel이 filter라고 보면 된다. 그리고 input이 input feature map이고 output이 oup feature map이라고 보면된다.

 

이때 우리는 미니배치를 하기 떄문에 이미지를 하나만 하는것이아니라 여러개를 학습하기 때문에 input feature map이 여러개가 되고, 따라서 실제는 3차원이 아니라 4차원이라고 할 수 있다. 여기서 2D convolution layer라고 한 이유는 연산 시 상하좌우로만 이동하여 연산하기 때문에 2D라고 이름 지어 진것이다. 실제 사용되는 형태는 4D Tensors로 사용되고 tensorflow에서도 4차원으로 입력을 줘야한다. 

 

연산의 옵션

Stride

보통은 연산 시 한칸씩 이동하여 계산을 한다. 하지만 한칸이 아니라 여러칸씩 이동이 가능하다.

위의 경우 (7, 7) 이미지가 2칸씩 stride 한 결과값은 (3, 3)이 된다.

 

이미지 대해 필터를 적용할 때는 필터의 이동량을 의미하는 스트라이드를 설정해야한다.

CNN을 구현할 때 합성곱 계층의 스트라이드는 주로 1로 설정된다.

 

Padding

위의 그림에서 알 수 있듯이 입력 이미지에 대해 합성곱을 수행하면 출력 이미지의 크기는 입력 이미지의 크기보다 작아지게 된다. (4x4 였던 입력 이미지가 합성곱을 수행하며 2x2의 출력 이미지 크기를 갖게된다.)

이를 해결하기 위해 padding을 이용한다.

 

패딩은 입력 이미지의 가장자리에 특정 값을 추가하여 입력 이미지와 출력 이미지의 크기를 같거나 비슷하게 만든다.

CNN에서는 주로zero-padding을 사용하는데 이는 이미지의 가장자리에 0 값의 픽셀을 추가하는 것이다.

padding을 안한 경우 / zero-padding을 수행한 경우

  • filter가 3x3 인 경우는 주위에 1줄을 패딩을 하면 size가 유지된다.
  • filter가 5x5 인 경우는 주위에 2줄을 패딩을 하면 size가 유지된다.
  • filter가 7x7 인 경우는 주위에 3줄을 패딩을 하면 size가 유지된다.

 

활성화 함수

딥러닝 네트워크에서는 노드에 들어오는 값들에 대해 곧바로 다음 레이어로 전달하지 않고 주로 비선형 함수를 통과시킨 후 전달한다. 이때 사용하는 함수를 활성화 함수(Activation Function) 이라 부른다.

활성화 함수는 중요한 딥러닝의 기초 개념이다.

 

Pooling layer

이미지의 크기를 유지한 채 Fully Connected layer로 가게되면 연산량이 기하급수적으로 늘어난다. 따라서 적당히 크기를 줄이고 특정 feature를 강조할 수 있어야 한다. 이 역할을 Pooling layer가 수행한다.

Pooling layer의 목적은 특징을 강화하는데 있다. 사용법은 위의 convolution layer랑 비슷하지만, 값들 중 특정값만 유지하고 나머지 값은 버린다. Pooling layer의 종류에는 max pooling, average pooling, overlapping Pooling이 있다. 

 

- Max Pooling

- Average Pooling

- Min Pooling

 

Max Pooling

일반적으로 Pooling layer의 stride는 선택 영역의 높이 또는 너비의 크기와 동일하게 설정된다.

Max pooling는 가장 큰 값만을 추출한다.

 

이미지 데이터의 특징은 인접 픽셀들 간 유사도가 매우 높다는 것이다. 따라서 이미지는 픽셀 수준보다 특정 속성을 갖는 선택 영역 수준으로 표현될 수 있다. CNN에서는 이러한 Pooling layer을 이용함으로써 다양한 이점을 얻는다.

 

Fully connected layer

지금까지 설명한 내용은 특징 추출을 위한 작업이었고 그 다음부터는 분류작업이다.

이미지 특징을 추출하여 이것이 무엇을 의미하는 데이터인지 분류한다.

 

2가지 종류의 layer가 존재한다

- Flatten layer

: 데이터 타입을 fully connected 네트워크 형태로 변경, 입력 데이터의 shape 변경만 수행

- Softmax layer

: classification 수행