1.CNN 등장배경

일반 DNN은 기본적으로 1차원 형태의 데이터를 사용한다. 따라서 이미지가 입력될 경우, 이것을 flatten 시켜서 한줄의 데이터로 만들게 된다. 이 과정에서 이미지의 공간적 정보가 손실되어, 특징 추출과 학습이 비효율적이고 정확도의 한계가 발생한다는 문제가 있었다. 그래서 CNN(Convolutional Neural Network)을 통해 이미지를 raw input으로 받음으로써, 공간적/지역적 정보를 그대로 유지한채 특성들의 계층을 빌드업하게 된다.

 

2.CNN의 주요 용어 정리

CNN에는 다음과 같은 용어들이 사용된다.

  • Convolution(합성곱)
  • 채널(Channel)
  • 필터(Filter)
  • 커널(Kernel)
  • 스트라이드(Strid)
  • 패딩(Padding)
  • 피처 맵(Feature Map)
  • 액티베이션 맵(Activation Map)
  • 풀링(Pooling) 레이어

 

2.1 합성곱 Convolution

  • 합성곱 연산이란 CNN 신경망의 핵심으로 이미지 처리에 사용되는 연산이다.
  • 이름 그대로 더하기(합성) 만을 사용한다.

그림 1: 합성곱 처리 절치, 출처: http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution

 

Feature extraction using convolution - Ufldl

 

deeplearning.stanford.edu

 

2.2 채널 Channel

  • -한 장의 사진은 3차원 데이터 : (세로 픽셀, 가로 픽셀, 컬러 채널) 
  • * 컬러 사진이면 컬러 채널 3개(RGB), 흑백 사진이면 컬러 채널 1개

 

2.3 필터 Filter & Stride

  • Input 을 통해 Feature Map을 얻어내기 위해서 Convolution 과정을 거쳐야 하는데 이때 Input과 Convolution 될 아이템이 Filter
  • 필터는 이미지의 특징을 찾아내기 위한 공용 파라미터. Filter를 Kernel이라고 하기도 한다.
  • 필터는 일반적으로 (4, 4)이나 (3, 3)과 같은 정사각 행렬로 정의됩니다.
  • CNN에서 학습의 대상은 필터 파라미터
  • 입력 데이터를 지정된 간격으로 순회하며 채널별로 합성곱을 하고 모든 채널(컬러의 경우 3개)의 합성곱의 합을 Feature Map로 만든다.
  • 여기서 지정된 간격으로 필터를 순회하는 간격을 Stride라고 한다.
  • stride를 1로 설정하면 한칸씩 이동을 하지만 stride를 2로 설정한다면 필터를 2칸씩 이동하면서 합성곱이 된다.

2.4 패딩 Padding

  • Convolution 레이어에서 Filter와 Stride에 작용으로 Feature Map 크기는 입력데이터 보다 작아진다.
  • Convolution 레이어의 출력 데이터가 줄어드는 것을 방지하는 방법이 패딩
  • 패딩은 입력 데이터의 외각에 지정된 픽셀만큼 특정 값으로 채워 넣는 것. 보통 패딩 값으로 0을 사용.

2.5 Pooling 레이어

  • 풀링 레이어는 컨볼루션 레이어의 출력 데이터를 입력으로 받아서 출력 데이터(Activation Map)의 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용
  • 플링 레이어를 처리하는 방법으로는 Max Pooling과 Average Pooning, Min Pooling이 있다. 정사각 행렬의 특정 영역 안에 값의 최댓값을 모으거나 특정 영역의 평균을 구하는 방식으로 동작
  • Max pooling과 Average Pooling의 동작 방식을 설명 일반적으로 Pooing 크기와 Stride를 같은 크기로 설정하여 모든 원소가 한 번씩 처리 되도록 설정

3. CNN 입출력, 파리미터 계산

다음과 조건과 같은 이미지를 학습하는 CNN의 각 레이어별 입력 데이터와 출력 데이터의 Shape을 계산해 보고 네트워크가 학습시키는 파라미터의 개수를 계산해 보겠습니다. 예제로 사용할 CNN 모델 정보는 다음과 같습니다.

  • 입력데이터 Shape: (39, 31, 1)
  • 분류 클래스: 100

layerInput ChannelFilterOutput ChannelStrideMax Poolingactivation function

Convolution Layer 1 1 (4, 4) 20 1 X relu
Max Pooling Lyaer 1 20 X 20 2 (2, 2) X
Convolution Layer 2 20 (3, 3) 40 1 X relu
Max Pooling Lyaer 2 40 X 40 2 (2, 2) X
Convolution Layer 3 40 (2, 2) 60 1 1 relu
Max Pooling Lyaer 3 60 X 60 2 (2, 2) X
Convolution Layer 4 60 (2, 2) 80 1 1 relu
Flatten X X X X X X
fully connected Layer X X X X X softmax

컨볼루션 레이어의 학습 파라미터 수는 “입력채널수X필터폭X필터높이X출력채널수“로 계산됩니다.4

3.1 Layer 1의 Shape과 파라미터

Layer 1은 1개의 Convolution Layer와 1개의 Pooling Layer로 구성됩니다. 두 레이어의 출력 데이터 shape과 파라미터는 다음과 같이 계산할 수 있습니다.

3.1.1 Convolution Layer 1

Convolution Layer 1의 기본 정보는 다음과 같습니다.

  • 입력 데이터 Shape = (39, 31, 1)
  • 입력 채널=1
  • 필터=(4, 4)
  • 출력 채널=20
  • Stride = 1

입력 이미지에 Shape이 (4, 4)인 필터 20개를 적용할 경우에, 출력 데이터(Activation Map)의 Shape을 계산하는 과정은 <식 3>과 같습니다.

  •  

RowSize = (N-F) / Stride + 1
ColumnSize = (N - F) / Stride + 1

(39-4) + 1 / 1 = 36
(31-4)+1/1 = 28

<식 3>로 계산된 출력 데이터(Activation Map)의 Shape은 (36, 28, 20) 입니다. Convolution Layer 1에서 학습시킬 대상은 입력 채널 1, 필터 사이즈 (4, 4), 출력 채널 20개 입니다. 따라서 이 레이어의 학습 파라미터는 320개 (4X4X20) 입니다.

  • 입력 채널: 1
  • 출력 데이터(Activation Map) Shape: (36, 28, 20)
  • 학습 파라미터: 320개 (1 X 4 X 4 X 20)

3.1.2 Max Pooling Layer 1

Max Pooling Layer 1의 입력 데이터의 Shape은 (36, 28, 20)입니다. Max Pooling 크기가 (2, 2)이기 때문에 출력 데이터 크기는 <식 4>와 같이 계산될 수 있습니다.

  • 식 4. Max Pooling Layer 1의 출력 데이터 크기 계산

OutputRowSize = InputRowSize / PoolingSize
OutputColumnSize = InputColumnSize / PoolingSize

 

36/2=18
28/2 = 14

<식 4>으로 계산된 출력 데이터의 Shape은 (18, 14, 20) 입니다. Max Pooling Layer에서 학습 파라미터가 없습니다.

  • 입력 채널: 20
  • 출력 데이터 Shape: (18, 14, 20)
  • 학습 파라미터: 0

3.2 Layer 2의 Shape과 파라미터

Layer 2는 1개의 Convolution Layer와 1개의 Pooling Layer로 구성됩니다. 두 레이어이 출력 데이터 shape과 파라미터는 다음과 같이 계산할 수 있습니다.

3.2.1 Convolution Layer 2

Convolution Layer 2의 기본 정보는 다음과 같습니다.

  • 입력 데이터 Shape = (18, 14, 20)
  • 입력 채널 = 20
  • 필터 = (3, 3, 40)
  • 출력 채널 = 40
  • Stride = 1

입력 이미지에 Shape이 (3, 3)인 필터 40개를 적용할 경우 출력 데이터(Activation Map)의 Shape을 계산하는 과정은 <식 5>과 같습니다.

  • 식 5. Convolution Layer 2의 Activation Map 크기 계산
    RowSize = (18-3)+1/1 = 16
    ColumnSize = (14-3)+1/1 = 12

<식 5>로 계산된 출력 데이터(Activation Map)의 Shape은 (16, 12, 40)입니다. Convolution Layer 1에서 학습시킬 대상은 입력 채널 20, 필터 사이즈 (3, 3), 출력 필터 40개입니다. 따라서 이 레이어의 학습 파라미터는 7200개 (20 X 3 X 3 X 40) 입니다.

  • 입력 채널: 20
  • 출력 데이터(Activation Map) Shape: (16, 12, 40)
  • 학습 파라미터: 7,200개 (20X3X3X40)

3.2.2 Max Pooling Layer 2

Max Pooling Layer 2의 입력 데이터의 Shape은 (16, 12, 40)입니다. Max Pooling 크기가 (2, 2)이기 때문에 출력 데이터 크기는 <식 6>와 같이 계산될 수 있습니다.

  • 식 6. Max Pooling Layer 2의 출력 데이터 크기 계산
    16/2 = 8
    12/2 = 6

<식 6>로 계산된 출력 데이터(Activation Map)의 Shape은 (8, 6, 40) 입니다. Max Pooling Layer에서 학습 파라미터가 없습니다.

  • 입력 채널: 40
  • 출력 데이터 Shape: (8, 6, 40)
  • 학습 파라미터: 0

3.3 Layer 3의 Shape과 파라미터

Layer 3도 1개의 Convolution Layer와 1개의 Pooling Layer로 구성됩니다. 두 레이어이 출력 데이터 shape과 파라미터는 다음과 같이 계산할 수 있습니다.

3.3.1 Convolution Layer 3

Convolution Layer 3의 기본 정보는 다음과 같습니다.

  • 입력 데이터 Shape = (8, 6, 40)
  • 입력 채널 = 40
  • 필터=(3, 3)
  • 출력 채널 = 60
  • Stride = 1

입력 이미지에 Shape이 (3, 3)인 필터 60개를 적용할 경우 출력 데이터(Activation Map)의 Shape을 계산하는 과정은 <식 7>과 같습니다.

  • 식 7. Convolution Layer 3의 Activation Map 크기 계산
    RowSize = (8-3)+1/1 = 6
    ColumnSize = (6-3)+1/1 = 4

<식 7>로 계산된 출력 데이터(Activation Map)의 Shape은 (6, 4, 60)입니다. Convolution Layer 1에서 학습시킬 대상은 (3, 3) 필터 60개입니다. 따라서 이 레이어의 학습 파라미터는 21,600개 (40X3X3X60) 입니다.

  • 입력 채널: 40
  • 출력 데이터(Activation Map) Shape: (6, 4, 60)
  • 학습 파라미터: 21,600개 (40X3X3X60)

3.3.2 Max Pooling Layer 3

Max Pooling Layer 3의 입력 데이터의 Shape은 (6, 4, 60)입니다. Max Pooling 크기가 (2, 2)이기 때문에 출력 데이터 크기는 <식 8>과 같이 계산될 수 있습니다.

  • 식 8. Max Pooling Layer 3의 출력 데이터 크기 계산
    6/2 = 3
    4/2 = 2

<식 8>로 계산된 출력 데이터(Activation Map)의 Shape은 (3, 2, 60)입니다. Max Pooling Layer에서 학습 파라미터가 없습니다.

  • 입력 채널: 60
  • 출력 데이터 Shape: (3, 2, 60)
  • 학습 파라미터: 0

3.4 Layer 4의 Shape과 파라미터

Layer 3도 1개의 Convolution Layer로 구성됩니다. 이 레이어의 출력 데이터 shape과 파라미터는 다음과 같이 계산할 수 있습니다.

3.4.1 Convolution Layer 4

Convolution Layer 4의 기본 정보는 다음과 같습니다.

  • 입력 데이터 Shape = (3, 2, 60)
  • 입력 채널 = 60
  • 필터=(2, 2)
  • 출력 채널 = 80
  • Stride = 1

입력 이미지에 Shape이 (2, 2)인 필터 80개를 적용할 경우 출력 데이터(Activation Map)의 Shape을 계산하는 과정은 <식 9>과 같습니다.

  • 식 9. Convolution Layer 4의 Activation Map 크기 계산

<식 9>로 계산된 출력 데이터(Activation Map)의 Shape은 (2, 1, 80)입니다. Convolution Layer 1에서 학습시킬 대상은 입력 채널 60, 필터 사이즈 (2, 2), 출력 채널 80개입니다. 따라서 이 레이어의 학습 파라미터는 19,200개 (60X2X2X80)입니다.

  • 입력 채널: 60
  • 출력 데이터(Activation Map) Shape: (2, 1, 80)
  • 학습 파라미터: 19,200개 (2X2X80)

3.5 Flatten Layer의 Shape

Flatten Layer는 CNN의 데이터 타입을 Fully Connected Neural Network의 형태로 변경하는 레이어입니다. Flatten 레이어에는 파라미터가 존재하지 않고, 입력 데이터의 Shape 변경만 수행합니다.

  • 입력 데이터 Shape =(2, 1, 80)
  • 출력 데이터 Shape =(160, 1)

3.6 Softmax Layer

이 레이어의 입력 데이터 Shape은 (160, 1)입니다. 이 네트워크의 분류 클래스가 100개이기 때문에 최종 데이터의 Shape은 (100, 1)입니다.

  • 입력 데이터의 shape: (160, 1)
  • 출력 데이터의 shape: (100, 1)

이때 Weight Shape은 (100, 160)입니다. Softmax 레이어이 파라미터는 160,000개 (100X160)입니다.

3.7 전체 파라미터 수와 레이어별 Input/Output 요약

layerinput channelFilteroutput channelStridePooling활성함수Input ShapeOutput Shape파라미터 수

Convolution
Layer 1
1 (4, 4) 20 1 X relu (39, 31, 1) (36, 28, 20) 320
Max Pooling
Lyaer 1
20 X 20 2 (2, 2) X (36, 28, 20) (18, 14, 20) 0
Convolution
Layer 2
20 (3, 3) 40 1 X relu (18, 14, 20) (16, 12, 40) 7,200
Max Pooling
Lyaer 2
40 X 40 2 (2,2) X (16, 12, 40) (8, 6, 40) 0
Convolution
Layer 3
40 (2, 2) 60 1 1 relu (8, 6, 40) (6, 4, 60) 21,600
Max Pooling
Lyaer 3
60 X 60 (2, 2) 60 X (6, 4, 60) (3, 2, 60) 0
Convolution
Layer 4
60 (2, 2) 80 1 1 relu (3, 2, 60) (2, 1, 80) 19,200
Flatten X X X X X X (2, 1, 80) (160, 1) 0
fully
connected
Layer
X X X X X softmax (160, 1) (100, 1) 160,000
합계 X X X X X softmax (160, 1) (100, 1) 208,320

이 CNN을 그림 9와 같이 표현할 수 있습니다.

그림 9: 예제 CNN 이미지

'딥러닝 이론' 카테고리의 다른 글

Meta Learning  (0) 2022.08.22
*NAS(neural architecture search)  (0) 2022.07.28
*Transformer  (0) 2022.07.06
RNN & LSTM  (0) 2022.07.06
최적화 주요 용어 이해하기  (0) 2022.06.23

+ Recent posts