목차
CNN(Convolutional Neural Network, 합성곱 신경망)은 기본적으로 Convolution layer - Pooling layer - FC layer 순으로 진행된다.
전체적인 구조는 이미지(Input) → 특징 추출 단계(Feature Extraction) → 이미지 분류 단계(Classification) → 인식결과(Output) 으로 나뉜다.
Convolution layer
Filter (Kernal)
Convolution layer에는 수많은 filter들이 있다. 연산에서 이러한 filter들을 통해 feature들을 추출한다.
Convolution filter는 위와 같이 전체 이미지를 차례대로 움직이면서(window sliding) 특징값을 추출해내는 것이다. 전체 이미지에서 특정 filter의 모양과 일치하게 되면 그 부분에서 큰 값을 갖게된다. 이러한 filter가 전체 이미지를 순회하고 나면 전체 이미지에서 해당 filter와 유사한 모양을 가진 부분에 대한 feature들만 얻을 수 있게 된다.
딥러닝에서는 이러한 과정을 통해 “특정 filter에 부합하는 feature 정보를 얻었다” 라고 말하게 된다.
→ filter의 개수는 feature의 개수와 같다.
•
수직선을 파악하는 vertical filter, 수평선을 파악하는 horizontal filter
(n, n)이미지가 (f, f)필터와 convolution 연산을 진행한 경우, 출력 이미지의 크기는 (n-f+1, n-f+1)가 된다.
Channel
이미지는 보통 RGB의 3가지 channel로 구성된다. 따라서 연산량을 줄이기 위해(오차를 줄이기 위해) 전처리에서 이미지를 흑백(channel=1)으로 만들어 처리하는 경우가 많다.
input data의 channel 수와 filter의 channel 수는 같아야 한다.
Padding
Convolution에는 두 가지 문제가 있다.
•
Convolution 연산마다 원본 이미지의 크기가 축소된다는 것.
•
필터가 원본 이미지 위를 이동할 때, 이미지의 모서리에 있는 픽셀은 한 번 만 사용되는 반면, 이미지의 가운데 있는 픽셀은 여러번 사용된다는 것.
이 두 가지 문제를 해결하기 위해 Padding이라는 새로운 개념이 도입되었다.
Padding은 원본 이미지에 추가적인 경계선을 덧댐으로써, 원본 이미지의 크기를 유지한다.
(왼쪽) padding을 안한 경우, (오른쪽) Zero-padding인 경우
(n, n)이미지에 대해 p만큼 padding하고 (f, f)필터로 convolution 연산을 진행한 경우, 출력 이미지의 크기는 (n+2p-f+1, n+2p-f+1)가 된다.
Stride
Stride는 입력 이미지에서 필터를 몇 칸 씩 건너뛰며 적용할지를 의미한다.
Stride=2 이라면, 한 칸씩 건너뛰며 필터를 적용한다.
(왼쪽) stride = 1인 경우, (오른쪽) stride = 2인 경우
(n, n)이미지에 대해 p만큼 padding하고 (f, f)필터로 s만큼 stride 하여 convolution 연산을 진행한 경우, 출력 이미지의 크기는 ((n+2p-f)/s+1, (n+2p-f)/s+1)가 된다.
Pooling layer
이미지의 크기를 계속 유지한 채 Fully Connected layer로 가게 된다면 연산량이 기하급수적으로 늘 것이다. 적당히 크기도 줄이고, 특정 feature를 강조할 수 있어야 하는데 그 역할을 Pooling layer에서 한다.
Pooling에는 3가지 처리 유형이 있다.
1.
Max Pooling
2.
Average Pooling
3.
Min Pooling
CNN에서는 주로 Max Pooling을 사용한다.
Max Pooling은 입력 이미지를 필터 크기만큼의 여러 영역으로 나눈 다음, 필터를 이동하며 필터 영역 내에서 최대값을 뽑으며 진행된다.
이렇게 하면 노이즈가 감소하고 속도가 빨라지며 영상의 분별력이 좋아진다고 한다. (뚜렷)
Pooling layer의 흥미로운 특징 중 하나는, Convolution layer는 특징을 뽑아내는 적합한 filter를 학습하는 반면에, Pooling layer는 학습하는 파라미터가 없다는 것이다.
따라서 Pooling layer에서 f, s는 모두 하이퍼파라미터로 주어진다.
→ Pooling은 원본 이미지를 유지하며 크기를 줄이는 용도로 사용된다.
여기까지가 CNN의 특징 추출 단계이다.