프로그래밍/머신러닝 & 딥러닝

합성곱 신경망 (Convolutional Neural Network, CNN) 개념 및 구조

Jay_rock 2022. 10. 21. 10:59

합성곱 신경망은 이미지나 영상을 처리할 때 많이 사용되는 신경망입니다. 합성곱 신경망을 사용할 때 이미지를 한 번에 계산하는 것이 아닌 국소적인 부분을 계산함으로써 시간과 자원을 줄이고 이미지의 특징을 파악할 수 있는 신경망입니다.

 

Convolutional Neural Network Architecture

Convolutional Neural Network Architecture (source : https://medium.com/techiepedia/binary-image-classifier-cnn-using-tensorflow-a3f5d6746697)

CNN은 다음과 같이 크게 5개의 층으로 나눌 수 있다. 앞의 세 개의 층은 Feature Extraction을, 뒤의 두 개의 층은 Classification을 위한 층으로 구분할 수 있다. 

 

 

 

이제 각각의 층이 어떤 역할을 하는지 자세하게 알아보자!

1. 입력층 (Input Layer)

이미지 데이터가 입력되는 층으로 높이, 너비, 채널로 구성된 3차원 데이터가 입력됩니다. 여기서 채널은 그레이 스케일일 때 1, 칼라(RGB)이면 3의 값을 갖습니다. 

RGB channel (source : https://e2eml.school/convert_rgb_to_grayscale.html)

 

 

 

2. 합성곱층 (Convolutional Layer)

합성곱층은 입력된 이미지에서 특성을 추출하는 역할을 합니다. 특성을 추출하기 위해 커널 및 필터를 사용하는데 스트라이드의 간격에 따라 순차적으로 적용합니다. 입력 이미지와 필터/커널의 대응되는 위치의 값을 곱한 후 모두 더해 값을 매긴다. 계산 방식은 다음과 같다

stride = 2 일 때 Grayscale 이미지 합성곱 계산 방식

RGB 이미지인 경우 채널이 3개이므로 필터 채널도 3이 되어 각각 색(R,G,B)마다 다른 가중치 값을 곱해준다. 이 때 필터 개수가 3개가 아닌 1개인 것을 주의하자! (채널 값이 3) 물론 필터가 2개 이상인 경우도 있다. 이 경우에는 결과 값이 필터의 개수만큼 출력된다.

 

모든 영역에서 계산이 끝나면 결과로 이미지의 특성을 갖고 있는 특성 맵(feature map)이 추출된다. 

 

 

 

3. 풀링층 (Pooling Layer)

풀링층은 합성곱층과 유사하게 특성 맵의 차원을 다운 샘플링(이미지의 사이즈를 줄임)하여 연산량을 감소시키고 특성 벡터를 추출하여 학습을 효과적이게 한다.

풀링에는 다음 두 가지가 사용된다.

  • 최대 풀링(Max Pooling) : 영역에서 가장 큰 값을 사용
  • 평균 풀링(Average Pooling) : 영역의 평균 값을 사용

CNN에서는 보통 최대 풀링을 사용한다. 그 이유는 평균 풀링을 사용하게 되면 값들을 모두 평균으로 만들어, 중요한 가중치를 갖는 값이 평균으로 인해 희미해질 수 있기 때문이다. 

풀링 역시 스트라이드 간격에 따라 순차적으로 진행된다.연산 방식은 다음과 같다.

stride =2 일 때, Max Pooling 연산

Max Pooling은 해당 영역에서 가장 큰 값을 해당 영역의 출력 값으로 사용한다. Average Pooling은 해당 영역의 평균 값을 구하여 해당 영역의 출력 값으로 사용한다.

 

 

 

4. 완전연결층(Fully Connected Layer)

앞서 입력된 이미지 데이터를 합성곱층과 풀링층에서 차원을 축소시킨 후에, 축소되어 나온 특성맵을 3차원 벡터에서 1차원 벡터로 펼쳐 계산한다. 분류를 위해 완전연결층 신경망으로 풀어서 계산한다.

 

Flattening ( source : https://www.superdatascience.com/blogs/convolutional-neural-networks-cnn-step-3-flattening)

 

 

 

5. 출력층 (Output Layer)

마지막으로 출력층에서는 분류를 위해 Softmax activation function이 사용된다. 그 이유는 분류된 데이터가 어떤 레이블에 속하는지 확률로 비교하기 위해 사용된다. 가장 높은 확률 값을 갖는 레이블이 최종 값으로 결정된다.