본문 바로가기

Deep Learning/Convolution Neural Network

LeNet-5

본 글은 LeNet-5의 구조에 대해 정리한 글이며 convolution layer에 대한 글은 아래 링크를 참고하시기를 바랍니다.

 

Convolution Layer 개요

본 글에서는 Convolution Layer에서 합성곱 연산이 어떻게 이루어지는지에 대해 정리한 글입니다. 더보기 ▼ Contents 1. Convolution v.s. Cross correlation 2. Convolution Layer가 필요한(사용하는) 이유 3. Convolution L

iy322.tistory.com


LeNet-5은 [Figure 1]과 같이 input layer를 제외하고 총 $7$개의 layer로 구성되어 있습니다.

[Figure 1] LeNet-5 구조: Input -> Conv -> Avg Pooling -> Conv -> Average Pooling -> Fully Connected -> Output

 

[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] $C_3$

※ 그림 출처 - 박재한님의 LeNet-5의 이해

[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$ 벡터를 산출합니다.

마찬가지로 비선형성을 추가하기 위하여 활성화 함수를 적용합니다.

 


 

▶ 참고자료

[1]. LeNet-5 논문

 

'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