딥러닝에서 주로 이미지나 영상 데이터를 처리할 때 사용하는 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에서도 편향을 더해주기도함
- 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의 전체 구조 및 과정
- 입력 이미지를 Convolution과 Max-Pooling을 통해 깊이를 깊게하고 size를 줄여준 후, 4x4xn2의 데이터를 1차원의 데이터로 만들고(Flatten) 1차원으로 만든 데이터를 DNN 네트워크를 통해 최종 output을 출력함.
다중 채널 이미지(RGB, RGBA, CMYK…)
- 채널별 특징 학습 : 다중 채널일 경우 각 색상 채널에서 특징이 학습된다. 각 채널 간의 관계와 채널 간의 패턴을 모두 학습해야 한다.
- 데이터 전처리 시 모든 입력 이미지가 동일한 크기의 채널 구성(동일한 이미지 형식)으로 전처리 되어야 한다.
- 위 그림에서 다중 채널 이미지가 도입된 CNN 모델에서 Convoultion-Pulling 연산과 date dimenstion의 변화를 보여줌.
- 여러개의 필터(커널)을 사용할 수 있고, 각 필터의 채널의 입력(input)데이터의 채널과 같아야함. 필터들을 거쳐 출력(output)의 채널은 필터의 개수가 됨.
- 컬러 이미지에 대해 각 필터에서는 R, G, B 각 채널에 대한 컨볼루션 연산 결과를 모두 합하여 출력(피처맵)이 됨
CNN 기반 모델
AlexNet: 2012년 ImageNet 챌린지에서 우승한 모델. 딥러닝 기반 이미지 인식의 시초. CNN의 기본적인 구조를 따르지만, 여러 개의 GPU를 사용하여 더 깊고 넓은 네트워크를 훈련시킨 최초의 모델 중 하나이다.
- NIPS-2012-imagenet-classification-with-deep-convolutional-neural-networks-Paper.pdf
- https://proceedings.neurips.cc/paper/2012/hash/c399862d3b9d6b76c8436e924a68c45b-Abstract.html
VGGNet: 깊은 층의 구조로 유명하며, 이미지 인식에서 좋은 성능을 보이는 모델로 일관된 컨볼루션 필터 크기(3x3)를 사용하여 네트워크의 깊이를 극대화한 모델. 단순화된 구조이지만 깊이를 통한 성능 향상에 중점을 둔다.
- Very Deep Convolutional Networks for Large-Scale Image Recognition.pdf (Simonyan and Zisserman)
- https://arxiv.org/pdf/1409.1556.pdf
ResNet: 깊은 신경망에서의 소실 문제를 해결한 모델로, 많은 연구와 프로젝트에서 사용된다. ‘잔차 연결(Residual Connection)‘이라는 개념을 도입하여 깊은 네트워크에서 발생하는 기울기 소실 문제를 해결한다. 잔차 연결이란 간단히 말해 이전 레이어의 출력을 몇 레이어를 건너뛰고 다음 레이어의 입력으로 직접 추가하는 방식을 말한다.
- He_Deep_Residual_Learning_CVPR_2016_paper.pdf (He et al.)
- https://openaccess.thecvf.com/content_cvpr_2016/html/He_Deep_Residual_Learning_CVPR_2016_paper.html
Inception (GoogleNet): 다양한 크기의 컨볼루션 필터를 병렬적으로 사용하여, 이미지의 다양한 스케일에 대응할 수 있게 한다. 이는 ‘Inception 모듈’이라는 독특한 구조를 통해 구현된다.
- Szegedy_Going_Deeper_With_2015_CVPR_paper.pdf (Szegedy et al.)
- https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Szegedy_Going_Deeper_With_2015_CVPR_paper.pdf
EfficientNet: 네트워크의 깊이, 너비, 그리고 해상도를 균형 있게 확장하는 방식으로 설계되었다. CNN을 더 효율적으로 확장하기 위한 새로운 방법론을 제시한다.
- EfficientNet_ Rethinking Model Scaling for Convolutional Neural Networks.pdf (Tan and Le)
- https://proceedings.mlr.press/v97/tan19a/tan19a.pdf