본 글은 LeNet-5의 구조에 대해 정리한 글이며 convolution layer에 대한 글은 아래 링크를 참고하시기를 바랍니다.
LeNet-5은 [Figure 1]과 같이 input layer를 제외하고 총 $7$개의 layer로 구성되어 있습니다.
[Part 1: Feature Extractor]
Local 영역(혹은 특정 영역)에 대하여 합성곱 연산을 활성화 함수와 함께 적용한 이후(→ convolution + non-linearity), 풀링(pooling or sub-sampling)을 적용하는 것을 2번 박복합니다.
[Part 2: Classification]
추출된 특성을 바탕으로 $2$개의 full connected layer를 사용하여 최종 output을 산출합니다.
본 글에서는 convolution layer, sub-sampling layer, fully connected layer에 대해서 다음과 같이 명시하도록 하겠습니다.
- $C_i$: convolution layer
- $S_i$: sub-sampling layer
- $F_i$: fully connected layer
- $i$: layer index
본격적으로 LeNet-5 구조에 대해 설명하겠습니다.
0. Input Data
- 입력 데이터는 $32 \times 32 \times 1$로 흑백 이미지 입니다.
Feature Extractor
[$1$-th layer] $C_1$: Convolution layer
첫 번째 층은 convolution layer로 $5 \times 5 \times 1$ 크기인 필터(혹은 커널)을 6개 사용하였으며 stride(이동 간격)은 $1$로 설정하였습니다.
- Input channel: $1$ (→ 입력 데이터의 채널 수와 같아야 합니다.)
- Output channel: $6$ (→ output인 feature map의 채널 수는 $6$이 됩니다.)
$C_1$을 통해 $28 \times 28 \times 6$인 feature map이 산출됩니다.
$$O = \dfrac{I - F}{S} + 1 = \dfrac{32 - 5}{1} + 1 = 28$$
비선형성을 추가하기 위하여 활성화 함수를 사용합니다.
- 활성화 함수(activation function) 종류: sigmoid function, tanh function ReLU function 등
※ Trainable parameter 개수
학습해야 하는 weight의 개수는 다음과 같습니다.
- (가중치 * 입력 데이터의 채널 개수 + bias) * (feature map의 채널 개수) = $(5*5*1 + 1) * 6 = 156$
[$2$-nd layer] $S_2$: Pooling layer
두 번째 층은 sub-sampling layer로 크기가 $2 \times 2$인average pooling filter를 사용하였으며 stride는 $2$로 설정하였습니다.
※ Average pooling 대신 Max pooling을 사용하여도 무방합니다.
Pooling layer를 통과하면 최종적으로 $14 \times 14 \times 6$인 feature map이 산출됩니다.
※ Trainable parameter 개수
학습해야 하는 weight의 개수는 다음과 같습니다.
- (가중치+ bias) * (feature map의 채널 개수) = $(1 + 1) * 6 = 12$
[$3$-rd layer] $C_3$: Convolution layer
세 번째 층은 convolution layer로 크기가 $5 \times 5 \times 6$인 필터(혹은 커널)을 $16$개 사용하였으며 stride(이동 간격)은 1로 설정하였습니다.
- Input channel: $6$ (→ 입력 데이터의 채널 수와 같아야 합니다.)
- Output channel: $16$ (→ output인 feature map의 채널 수는 $16$이 됩니다.)
$C_3$을 통해 $10 \times 10 \times 16$인 feature map이 산출됩니다.
$$O = \dfrac{14 - 5}{1} + 1 = 10$$
마찬가지로 비선형성을 추가하기 위하여 활성화 함수도 적용합니다.
※ Trainable parameter 개수
학습해야 하는 weight의 개수는 다음과 같습니다.
[Figure 2]는 채널이 $6$개인 입력 데이터에서 채널이 $16$개인 feature map을 산출하는 방법을 설명해주는 그림입니다. $X$는 합성곱 연산에 사용되었음을 의미하며 행은 input channel, 열은 output channel입니다.
"회색 영역"
- $5 \times 5 \times 3$인 커널(혹은 필터)를 6개 사용하여 $10 \times 10 \times 6$인 feature map을 생성하였습니다.
- Trainable parameter 개수 = $(5*5*3 + 1)*6 = 456$
"노란색 영역"
- $5 \times 5 \times 4$인 커널(혹은 필터)를 6개 사용하여 $10 \times 10 \times 6$인 feature map을 생성하였습니다.
- Trainable parameter 개수 = $(5*5*4 + 1)*6 = 606$
"주황색 영역"
- $5 \times 5 \times 4$인 커널(혹은 필터)를 3개 사용하여 $10 \times 10 \times 3$인 feature map을 생성하였습니다.
- Trainable parameter 개수 = $(5*5*4 + 1)*3 = 303$
"초록색 영역"
- $5 \times 5 \times 6$인 커널(혹은 필터)를 1개 사용하여 $10 \times 10 \times 1$인 feature map을 생성하였습니다.
- Trainable parameter 개수 = $(5*5*6 + 1)*1=151$
4가지의 영역을 통해 결과적으로 $10 \times 10 \times 16$인 feature map이 산출되며 trainable parameter의 총 개수는 $1516$개 입니다.
[$4$-th layer] $S_4$: Pooling layer
네 번째 층은 sub-sampling layer로 크기가 $2 \times 2$인 average pooling filter를 사용하였으며 stride는 $2$로 설정하였습니다.
$S_4$를 통과하면 최종적으로 $5 \times 5 \times 16$인 feature map이 산출됩니다.
※ Trainable parameter 개수
학습해야 하는 weight의 개수는 다음과 같습니다.
- (가중치+ bias) * (feature map의 채널 개수) = $(1 + 1) * 16 = 32$
[$5$-th layer] $C_5$: Convolution layer
다섯 번째 층은 convolution layer로 크기가 $5 \times 5 \times 16$인 필터(혹은 커널)을 $120$개 사용하였으며 stride(이동 간격)은 1로 설정하였습니다.
- Input channel: $16$ (→ 입력 데이터의 채널 수와 같아야 합니다.)
- Output channel: $120$ (→ output인 feature map의 채널 수는 $120$이 됩니다.)
$C_5$를 통해 $1 \times 1 \times 120$인 feature map이 산출됩니다.
$$O = \dfrac{I - F}{S} + 1 = \dfrac{5 - 5}{1} + 1 = 1$$
비선형성을 추가하기 위하여 활성화 함수를 사용합니다.
- 활성화 함수(activation function) 종류: sigmoid function, tanh function ReLU function 등
※ Trainable parameter 개수
학습해야 하는 weight의 개수는 다음과 같습니다.
- (가중치 * 입력 데이터의 채널 개수 + bias) * (feature map의 채널 개수) = $(5*5*16 + 1) * 120 = 48120$
Classifier
Feature extractor part인 첫번째 층부터 다섯 번째 층으로부터 특성을 추출하였습니다. 마지막 $2$개의 층은 추출된 특성을 토대로 최종 output을 산출하는 clasifier part입니다.
[$6$-th layer] $F_6$: Flatten Layer & Fully Connected Layer
$C_5$에서 산출된 feature map의 크기는 $1 \times 1 \times 120$으로 이를 flatten하면 $1 \times 120$인 벡터가 만들어집니다.
$F_6$은 $1 \times 120$ 벡터를 입력받아 $1 \times 84$ 벡터를 출력합니다.
비선형성을 추가하기 위하여 활성화 함수를 적용합니다.
[$7$-th layer] Output Layer
$F_6$으로부터 산출된 $1 \times 84$ 벡터를 입력받아 최종 output인 $1 \times 10$ 벡터를 산출합니다.
마찬가지로 비선형성을 추가하기 위하여 활성화 함수를 적용합니다.
▶ 참고자료
'Deep Learning > Convolution Neural Network' 카테고리의 다른 글
Semantic Segmentation (1): Sliding Window (0) | 2024.03.20 |
---|---|
Computer Vision Task 개요 (0) | 2024.03.20 |
Convolution Layer 개요 (0) | 2024.03.18 |