굴러가는 분석가의 일상

[CNN] 합성곱 신경망 개념 정리 본문

Computer Vision

[CNN] 합성곱 신경망 개념 정리

G3LU 2024. 2. 18. 22:56

※ 앞선 포스팅에서는 신경망을 학습할 때, 정확도와 효율을 높일수 있는 다양한 기법에 대해 알아보았습니다. 본 게시물에서는 이미지 인식분야에서 통상적으로 사용되는 Convolutional Nerual Network(CNN)에 대해 알아보도록 하겠습니다. 

 

💡 합성곱 신경망 소개

 

합성곱 신경망은 이미지 처리 성능이 좋은 인공 신경망 알고리즘 입니다. 합성곱 신경망은 이미지를 분석할 때,  3차원의 Tensor (Weight, Height, RGB)을 통해 표현이 되고, 각각의 픽셀을 하나의 변수로 간주하여 모델링을 하게 됩니다.  이를 기존의 인공 신경망(Neural Network)를 통해 학습한다면, Input Layer와 Hidden Layer의 너무 많은 가중치가 존재하므로, 학습하는데 어려움이 있습니다. 

 

위의 사진을 통해 예를 들어보도록 하겠습니다. 마리오를 3차원의 Tensor로 표현한다면, 2,520,000의 파라미터가 생성되는데 이것은 하나의 노드의 수 입니다. 또한, 여기에서 N개의 Hidden Layer가 추가하게되면, 파라미터의 수는 기하급수적으로 많아지게 되고, 이를 처리해야하는 가중치의 수는 매우 커집니다. 

 

또한, 이미지를 분석하는데 아래와 같은 문제점이 존재합니다. 

이미지 출처: 김성범 교수님의 Deep Neural Networks and Convolutional Neural Networks 영상

 

  • Spatially-Local Correlation : 인접 변수(픽셀)간 높은 상관관계를 가짐
  • Invairant Feature : 부분적 특성은 고정된 위치에 등장하지 않음 
  • 데이터의 공간적 구조 무시 : 3차원 형태인 이미지는 가중치를 곱하여 은닉층으로 전달하기 위해 1차원으로 변형 

이러한 문제점을 해결하기 위해 고안된 것이 합성곱 신경망 (Convolutional Neural Network) 입니다. 합성곱 신경망의 구조와 원리에 대해 알아보기전에 기존의 신경망과 합성곱 신경망의 차이점에 대해 간단하게 짚고 넘어가도록 하겠습니다. 

1.  각 층의 입출력 형상을 유지한다.
2. 이미지의 공간 정보를 유지하면서 인접 이미지와 차이가 있는 특징을 효과적으로 인식한다.
3. 복수 필터로 이미지의 특징을 추출하고 학습한다. 
4. 추출한 이미지의 특징을 모으고 강화하는 풀링층이 존재한다.
5. 필터를 공유 파라미터로 사용하기 때문에 기존의 신경망에 비해 파라미터 수가 매우 적다. 

 

위의 같은 이유로 인하여 합성곱 신경망은 이미지 관련 분야에서 큰 각광을 받고 있습니다!!! 


💡 합성곱 신경망 (CNN) 구조

 

합성곱 신경망은 합성곱층(Convolutional Layer)과 풀링층(Pooling Layer)을 거치면서 입력 이미지의 주요 특성 벡터(Feature Vector)를 추출하게 됩니다. 그 후 추출된 주요 특성 벡터들은 완전연결층(Fully Connected Layer)을 거치면서 1차원 벡터로변환되며, 마지막으로 출력층에서 소프트맥스 활성화 함수를 사용하여 최종 결과가 출력 됩니다. 그럼 이제 입력층부터 출력층까지에 대해 알아보도록 하겠습니다. 

 


📌  Convolutional Layer(합성곱층)

합성곱층은 입력 데이터에서 특성을 추출하는 중요한 역할을 수행합니다. 입력층을 통해 들어온 이미지에 대한 특성을 파악하기 위해 커널(Kernel)이나 필터(Filter)를 사용하게 됩니다. 이를 통해 3차원 데이터의 모든 영역을 훑으면서 특성을 추출하게 되는데, 이러한 결과물을 Feature Map이라고 칭합니다. 예시를 통해 알아보도록 하겠습니다. 

 

아래의 예시에서는 입력층(5x5), 커널/필터(3x3), 출력층(3x3)으로 구성되어 있으며, 합성곱 연산을 통해 출력층의 결과를 도출하게 됩니다.  

 

더불어, 완전연결 신경망에는 가중치 매개변수와 편향이 존재하는데, CNN에서는 필터의 매개변수가 그동안의 가중치에 해당됩니다. 

 

첫번째 단계

 

(1×1) + (2×0) + (3×1) + (2×1) + (1×0) + (0×1) + (3×0) + (0×1) + (1×0) = 6

 

두번째 단계

 

(2×1) + (3×0) + (4×1) + (1×1) + (0×0) + (1×1) + (0×0) + (1×1) + (1×0) = 9


위의 같은 연산을 총 9번의 단계를 걸친다면, 합성곱 연산을 마친 Feature Map(합성곱 계층 연산의 입출력 결과)이 아래와 같이 도출이 됩니다.

6 9 11
10 4 4
7 7 4

 

Convolution Layer에서 합성곱 연산이 일어날 때, 고려해야할 요소에 대해 알아보도록 하겠습니다.

 

 

✔️ Padding 

 

패딩(Padding)은 합성곱 연산을 수행하기 전, 입력 데이터(이미지) 주변을 특정값으로 채워 늘리는 과정이며, 대부분 Zero Padding을 사용합니다. 데이터의 공간적 크기는 합성곱층을 수행할때마다 작아지며 입력과 출력의 Feature Map의 크기가 달라지게 됩니다. 이에 가장자리의 정보들이 사라지는 문제가 발생하기에 이를 방지하기 위해 패딩을 사용하게 됩니다. 

가장자리의 정보들이 사라진다는 무슨 뜻일까요?
→예시를 통해 알아보도록 하겠습니다. 입력 데이터와 필터가 있다고 가정해보겠습니다.  이에 합성곱 연산을 수행하게 된다면 첫번 째 Column의 값들은 한번의 연산으로 Feature Map의 값이 도출이되는 반면에, 2~n번째의 Column 의 값들은 한번 이상의 연산을 수행하게 됩니다. 이해가 잘 안되신다면 위의 GIF를 참조해보시길 바랍니다. 



위의 예시를 통해 알아보도록 하겠습니다. 처음에 크기가 (4,4)인 입력 데이터에 패딩(=zero-padding)이 추가되어 (6,6) 형태를 가지게 됩니다. 이에 (3,3) 크기의 필터를 적용하면 (4,4) 크기의 출력 데이터가 됩니다. 또한 만약 패딩의 크기를 2로 설정하면 입력 데이터의 크기는 (8,8)이 되고 3으로 설정하면 (10,10) 되는 것을 알 수 있습니다. 이에 Padding(패딩)은 주로 출력 크기를 조정할 목적으로 사용됩니다. 

 

✔️ Stride 

스트라이드(Stride)는 입력 데이터에 필터를 적용할 때 이동할 간격을 조절하는 것을 뜻합니다. 스트라이드를 사용하게 되면, 출력 특징 맵의 크기가 입력에 비해 줄어들게 되므로, 계산량을 현저하게 감소시킬 수 있을뿐더러 다양한 Stride 값으로 피처 추출의 다양성이라는 장점을 이끌어 낼수 있습니다. 

 

✔️ 3차원 데이터 합성곱 연산

이미지는 가로와 세로에 더해서 채널까지 고려하면 3차원 데이터의 형태를 가지고 있습니다. 3차원 합성곱 연산에서 주의할 점은 입력 데이터의 채널 수와 필터의 채널 수가 같아야 한다는 점 입니다. 아래의 예시를 통해 알아보도록 하겠습니다. 

 

 

 


📌  Pooling Layer (풀링층) 

Pooling Layer(풀링층)은 일정 Spatial 영역의 정보를 축약하는데 사용되는 CNN의 중요한 구성입니다. 풀링층은 Convolution Layer(합성곱층)과 비슷하게 특성 맵의 차원을 다운 샘플링하여 계산량을 줄이고, 추출된 특징의 로컬 불변성을 향상시킵니다. 이를 통해 주요한 특성 벡터를 추출하여 학습을 효과적으로 수행할 수 있도록 해줍니다. 

 

풀링 연산에는 아래의 사진과 같이 두가지 기법이 사용됩니다. 

 

  • 최대 풀링(Max-Pooling) : Feature Map에서 최댓값을 추출 → 이미지 관련 분야에서 가장 많이 사용됨
  • 평균 풀링(Average-Pooling) : Feature Map에서 평균을 반환

📌  Flattening Layer (평탄화 계층) & Fully Connected Layer (완전연결층) 

 

여태까지 CNN의 Feature Extraction 항목인 합성곱층과 풀링층에 대해 알아보았습니다. 마지막으로 Classification 항목에 대해 알아보도록 하겠습니다. Classification 항목에는 평탄화된 층과 완전연결층으로 구성되어 있습니다. 

 

Pooling Layer에서 도출된 3차원의 벡터는 Flattening Layer(평탄화된 층)를 거치게 되면서 1차원 벡터로 변환이 되고, 이렇게 변환된 1차원 벡터는 Fully Connected Layer(완전연결층)은 1차원 벡터를 입력으로 받아 출력을 생성하게 됩니다.