딥러닝에서 주로 이미지나 영상 데이터를 처리할 때 사용하는 CNN 아키텍처에 대한 정리

CNN (Convolutional Neural Network)

CNN 개요

  • CNN이란 Convolutional Neural Network의 약자로, 기존의 Deep Neural Network에서 이미지나 영상과 같은 데이터를 처리할 때 생기는 문제점들을 보완한 방법

  • 위 그림에서  16x16 이미지를 기존의 DNN으로 학습할 경우 28326개의 파라미터를 학습해야 하며, 이 과정에서 이미지를 1차원 형태로 직렬화하면서 픽셀들의 상관관계를 잃게됨
  • 따라서 DNN은 이미지나 영상의 전체 관계를 고려하지 못하게 되어 입력 데이터의 변형에 매우 취약하게 되므로, 이러한 문제를 해결하기 위해 나온 것이 CNN.

  • CNN 알고리즘은 Convolution과정과 Pooling과정을 통해 진행된다. Convolution Layer와 Pooling Layer를 복합적으로 구성하여 알고리즘을 만든다.
  • CNN 레이어 구조
    • Convolutional layer: convolution 연산을 수행하여 신경망의 복잡도를 낮추는 층
    • Pooling layer: pooling 연산을 수행하여 이미지의 특징을 추출하는 층
    • Fully Connected Layer: MLP와 같은 구조의 최종 출력층

Convolutional Layer

Convolution 연산

  • 입력 데이터(이미지)는 kernel(혹은 filter)라고 불리는 행렬과 convolution 연산을 수행함
  • convolution 연산을 통해 이미지 차원의 축소되고(Padding을 하지 않을 경우) 특징 맵(featrue map)이 만들어지게 된다.

  • 가중치에 편향(bias)를 더해주듯이 Convolution Layer에서도 편향을 더해주기도함

+full

+full

  • fully connected layer 와 비교하여 conv layer는 픽셀의 일부만 연결하고, 같은 가중치를 여러번 사용하여, 계산량을 줄이게됨.

Convolution 연산 파라미터

  • 필터 크기(Kernel Size): convolution 연산에서 사용되는 필터의 크기를 정한다.
    • 필터의 크기가 커질수록 더 많은 공간적 특징을 포착할 수 있다.
    • 너무 큰 필터의 경우 연산량이 증가하고 모델이 복잡해 질 수 있다.
  • 스트라이드(stride): 필터가 입력 데이터에서 convolution 연산을 수행하는 간격
    • 스트라이드가 커질수록 convolution연산을 수행횟수가 줄어들면서 모델의 크기가 줄어들지만 이미지의 정보 손실이 발생하게 된다.
  • 패딩(Padding): 출력 크기 조절을 위해 사용하는 기법. convolution연산을 수행하면서 작아진 특징 맵의 크기를 입력 맵과 동일하게 유지하기 위해 크기를 늘리고 주변을 ‘0’과 같은 무의미한 데이터로 채워 넣는다.
    • 정보 보존 및 출력 크기 조절 : 패딩을 수행할 경우 이미지의 중요한 특징이 가장자리에서 손실되지 않고 유지될 수 있다.
  • 스트라이드와 함께 사용하면 모델의 크기를 유지하면서 연산량을 줄일 수 있다.
  • 패딩 처리한 데이터는 학습 시 가중치 업데이트가 더 안정적으로 진행된다고 알려져 있다.

Pooling Layer

Pooling 연산

  • pooling 연산은 input 이미지를 정해진 경계 만큼 격자 형태로 분할한 뒤, 해당 분할된 영역 안에서 가장 큰 값(Max-Pooling) 하나만을 선택하거나, 분할 영역 안의 요소들의 평균값(Average-Pooling)을 취한다
  • 일반적으로는 거의 대부분의 경우 Max Pooling 연산을 많이 사용한다

Pooling 연산 역할

  • 특징 다운샘플링(Feature Downsampling): 모델 데이터의 크기를 감소시키면서도 모델의 중요한 특징을 유지한다.
  • 변이에 대한 강건함(Intensivity) 유지: 풀링 연산이 진행되는 지역 안에서 가장 두드러지는 특징만 추출함으로서 입력 이미지의 작은 변화나 왜곡에 대해서도 모델이 안정성을 유지하도록 만든다.
  • 과적합(Overfitting) 방지: 특징 개수를 감소시키면서 모델의 파라미터를 줄이고, 과적합의 위험을 감소시킨다.
  • 추상화 수준 증가: 이미지의 추상화 수준을 높여 더 고차원의 특징을 추출할 수 있게 한다.

Fully Connected Layer(Flatten Layer)

  • Convolution과 Pulling 연산을 반복하여 차원이 축소된 이미지는 flatten 연산을 통해 1차원 벡터로 변환되고, 이 벡터값이 Fully Connected layer를 통과하면서 출력을 발생시킨다. 이 부분의 작동 방식은 MLP와 동일.

CNN의 전체 구조 및 과정

+full

  • 입력 이미지를 Convolution과 Max-Pooling을 통해 깊이를 깊게하고 size를 줄여준 후, 4x4xn2의 데이터를 1차원의 데이터로 만들고(Flatten) 1차원으로 만든 데이터를 DNN 네트워크를 통해 최종 output을 출력함.

다중 채널 이미지(RGB, RGBA, CMYK…)

  • 채널별 특징 학습 : 다중 채널일 경우 각 색상 채널에서 특징이 학습된다. 각 채널 간의 관계와 채널 간의 패턴을 모두 학습해야 한다.
  • 데이터 전처리 시 모든 입력 이미지가 동일한 크기의 채널 구성(동일한 이미지 형식)으로 전처리 되어야 한다.

  • 위 그림에서 다중 채널 이미지가 도입된 CNN 모델에서 Convoultion-Pulling 연산과 date dimenstion의 변화를 보여줌.
  • 여러개의 필터(커널)을 사용할 수 있고, 각 필터의 채널의 입력(input)데이터의 채널과 같아야함. 필터들을 거쳐 출력(output)의 채널은 필터의 개수가 됨.

+full

  • 컬러 이미지에 대해 각 필터에서는 R, G, B 각 채널에 대한 컨볼루션 연산 결과를 모두 합하여 출력(피처맵)이 됨

CNN 기반 모델

AlexNet: 2012년 ImageNet 챌린지에서 우승한 모델. 딥러닝 기반 이미지 인식의 시초. CNN의 기본적인 구조를 따르지만, 여러 개의 GPU를 사용하여 더 깊고 넓은 네트워크를 훈련시킨 최초의 모델 중 하나이다.

VGGNet: 깊은 층의 구조로 유명하며, 이미지 인식에서 좋은 성능을 보이는 모델로 일관된 컨볼루션 필터 크기(3x3)를 사용하여 네트워크의 깊이를 극대화한 모델. 단순화된 구조이지만 깊이를 통한 성능 향상에 중점을 둔다.

ResNet: 깊은 신경망에서의 소실 문제를 해결한 모델로, 많은 연구와 프로젝트에서 사용된다. ‘잔차 연결(Residual Connection)‘이라는 개념을 도입하여 깊은 네트워크에서 발생하는 기울기 소실 문제를 해결한다. 잔차 연결이란 간단히 말해 이전 레이어의 출력을 몇 레이어를 건너뛰고 다음 레이어의 입력으로 직접 추가하는 방식을 말한다.

Inception (GoogleNet): 다양한 크기의 컨볼루션 필터를 병렬적으로 사용하여, 이미지의 다양한 스케일에 대응할 수 있게 한다. 이는 ‘Inception 모듈’이라는 독특한 구조를 통해 구현된다.

EfficientNet: 네트워크의 깊이, 너비, 그리고 해상도를 균형 있게 확장하는 방식으로 설계되었다. CNN을 더 효율적으로 확장하기 위한 새로운 방법론을 제시한다.


참고