코딩세상
[이미지] Convolutional Neural Network - Convolutional Neural Network 본문
- Convolutaional Layer
앞서 지금까지 사용한 커널들은 학습이 가능한 커널이었습니다. 즉, 커널 행렬의 각 값들이 퍼셉트론에서 배웠던 가중치(Weight)가 되게 됩니다.
이러한 커널들로 이루어진 Layer를 Convolutional Layer라고 부릅니다.
-> CNN 모델은 이러한 Layer 들이 쌓여서 구성됩니다.
- Layer 역할
CNN 모델은 이미지가 가지는 특정 Feature를 뽑아내도록 커널을 학습시킵니다.
앞서 배웠던 것처럼 커널의 모양에 따라 처리되는 이미지가 달랐던 것처럼 커널에 따라 추출하는 Feature를 다르게 학습시켜 이미지의 여러가지 정보를 뽑아낼 수 있게 합니다.
여기서 Feature는 이미지 내의 대각선, 원형, 색조 등등이 해당됩니다.
- Stride
이전 강의에서 커널이 이미지의 영역에 겹쳐지면서 행렬의 값을 계산하고 결과값을 도출하여 Feature Map을 생성하게 됩니다. 이때 우리는 커널이 한번에 이동하는 칸을 조절할 수 있는데 즉, Convolution 연산 과정을 조절하기 위한 Hyperparameter을 Stride라고 합니다.
(앞서 배웠듯이 HyperParameter는 사람이 직접 조절하면서 학습시키는 값들을 말합니다.)
지금까지 봤던 Convolution 연산의 예시는 모두 한칸씩 이동하였지만, 위 그림은 Stride가 2일 경우 커널이 2칸씩 이동하는 예를 보여주는 그림입니다.
- Padding
지금까지의 예시는 Convolution 연산 결과 Feature Map 사이즈가 원본 이미지보다 계속 줄어드는 것을 확인할 수 있습니다. 이러면 이미지가 가지고 있는 데이터의 일부가 손실되어 학습 시킬 때 제대로 된 결과를 도출해 낼 수 없다는 단점이 생기는데 이때 이미지 데이터에 Padding을 추가하여 Feature Map 사이즈가 줄어드는 현상을 방지함으로써 데이터의 손실을 줄일 수 있고, 이미지 테두리의 정보도 균일하게 사용할 수 있게 됩니다.
- Convolutional Layer의 의의
우리는 Convolutional Neural Network에 대해 공부하기 전 이미지에 최적화된 딥러닝 모델이라고 배웠었습니다. 그렇다면 왜 CNN은 이미지 특징을 잘 뽑아내는 것일까요?
- Convoultion 연산은 하나의 커널이 픽셀 간의 정보를 보게 만들기 때문이다.
- 하나의 커널이 이미지 전체 영역을 보고 학습하기 때문이다
그리고 여기서 CNN 모델의 경우 Parameter Sharing이라는 특징을 가지고 있습니다. 이는 커널이 가진 Parameter를 이미지의 모든 영역에서 공유하게 되고, 이것은 Parameter 개수를 FC Layer에 비해 극적으로 줄이게 되면서 과적합 방지에 유리하게 됩니다.
- Convolutional Layer 활성화 함수
우리는 앞선 내용에서 활성화 함수에 대해 배웠습니다. 그 중 Sigmoid 함수의 단점을 해결한 ReLU 함수에 대해 학습하였었는데 Convolution 연산 또한 선형 연산(모두 곱셈과 덧셈으로만 이루어져있다.)이기 때문에 ReLU함수를 적용할 수 있습니다.
따라서 FC Layer처럼 비선형성을 추가하기 위해 ReLU함수를 CNN모델에 사용합니다.(CNN은 주로 ReLU 함수를 사용합니다.)
- Pooling Layer
Pooling Layer은 CNN에서 Convolution Layer와 거의 항상 같이 쓰이는 Layer로써, 이 Layer는 Feature Map의 사이즈를 줄여서 Parameter의 개수를 줄여주는 역할을 합니다.(이를 통해 과적합을 조절할 수 있어 효과적인 학습을 진행할 수 있습니다.)
- Pooling Layer - Max Pooling
Pooling Layer에서 사용하는 방법 중 Max Pooling에 대해서 알아보겠습니다.
Pooling Layer에서 Max Pooling 방법이 사용되기 전 주어진 이미지나 Feature Map을 위 그림처럼 겹치지 않는 영역으로 분할합니다.
(위 그림은 각 영역의 크기가 2 X 2 가 되도록 분할하였습니다.)
이 때, 각 영역에서 최대값을 뽑아내어 새로운 Feature Map을 구성합니다.
- Pooling Layer - Average Pooling
다음으로 알아볼 방법은 Average Pooling입니다. 이 방법은 Average에서 유추 할 수 있는 것처럼 Max Pooling에서 했던 것처럼 균등하게 이미지나 Featrue Map의 영역을 나누고 이 영역값들의 평균을 계산하여 새로운 Feature Map을 구성하는 것입니다.
- Pooling Layer
위에서 배웠던 Pooling Layer에서 적용할 수 있는 방법 중 일반적으로 Max Pooling을 많이 사용합니다. -> Feature Map에서 존재하는 Feature 중 가장 영향력이 큰 Feature만 사용
만약 컬러 이미지커럼 Feature Map의 채널이 여러개면 각 채널별로 Pooling 연산을 수행하게 됩니다.
추가 Pooling Layer -
Global Average Pooling : 전체 Feature Map에서 하나의 평균 값을 계산
Global Max Pooling : 전체 Feature Map에서 하나의 최대값을 계산
-> 둘 다 마찬가지로 채널별로 연산을 진행하지만 여기선 Global Average Pooling을 많이 사용합니다.
- 분류기 (Classfier)
마지막으로 CNN모델에서 마지막 파트인 분류기에 대해 알아보겠습니다. CNN은 일반적으로 이미지를 분류하기 위한 목적으로 많이 사용되는데 이 때 CNN 해당 이미지가 어떤 label에 가장 근접한 값인지를 바탕으로 이미지를 분류하게 됩니다.
그러므로 CNN을 통과하여 계산된 Feature Map을 Fully-connected Layer(FC Layer)에 통과시켜 분류를 수행하게 되는데 이를 위해 우리는 Feature Map을 1차원으로 변형해줄 필요가 있습니다.
그러면 1차원으로 변형된 Feature Map은 특정 Label에 대해 높은 값을 가지게 되며 모델은 해당 Label로 이미지를 예측하게 됩니다.
# 출처 및 참고자료
엘리스 AI 트랙 7기 - [이론] Convolutional Neural Network
'인공지능' 카테고리의 다른 글
[자연어 처리] 텍스트 전처리 및 단어 임베딩 - 자연어 처리 (0) | 2023.09.24 |
---|---|
[이미지] Convolutional Neural Network - 대표적인 CNN 모델 (0) | 2023.09.20 |
[이미지] Convolutional Neural Network - 이미지와 Convolution 연산 (0) | 2023.09.17 |
[이미지] 이미지 데이터 - 딥러닝 이전의 이미지 처리 기법 (0) | 2023.09.12 |
[이미지] 이미지 데이터 - 딥러닝을 활용한 이미지 처리 사례 (0) | 2023.09.11 |