working_helen

[CNN] Convolution Layer / Pooling layer 본문

교내 수업/인공지능

[CNN] Convolution Layer / Pooling layer

HaeWon_Seo 2024. 1. 21. 12:51

CNN의 구성 요소

  • Convolution Layer
  • Pooling Layers
  • Fully-Connected Layer
  • Activation Function
  • Normalization

 

출처 : https://www.linkedin.com/pulse/what-convolutional-neural-network-cnn-deep-learning-nafiz-shahriar/

 

 

CNN의 구성 요소 중 'Convolution Layer'와 'Pooling layer'에 대해 공부해본다.

 

1. Convolutional Neural Networks

2. Convolution layer 구조

3. convolution layer 계산

4. Pooling layer

 

 


1. Convolutional Neural Networks (CNN)

1) CNN의 등장 배경

출처 : https://wikidocs.net/64066

 

- Fully-Connected Layer만으로 구성된 Neural Networks는 1차원 벡터 형태의 input만 받을 수 있다.

- 위 그림과 같이 이미지 데이터를 input으로 사용하는 경우, 3차원 데이터를 1차원으로 평면화시키는 과정이 필요

- 이로 인해 변환 전에 가지고 있던, 이미지의 공간적인 구조(spatial structure)에 관한 정보가 손상

- 모델의 성능이 저하되는 문제가 발

 

==> 이미지의 공간 정보를 반영한 학습을 가능하게 만든 CNN

       convolution layer = 더 좋은 이미지 feature extraction을 위해 사용

- 이미지를 바로 fully-connected layer의 input으로 사용하지 않고,

- convolution layer를 통해 feature extraction을 진행한 후 input으로 사용함으로써 정보 손실을 줄인 모델

 

 

 

2) CNN의 특징 

- convolution filter를 통해 인접한 pixcel의 특징 반영함으로써 이미지의 공간 정보를 유지한 채로 학습 가능

- 여러개의 convolution filter를 사용해 이미지의 feature 추출

- 수백개의 convolution layer을 가질 수 있으며, 각 layer에선 이미지의 서로 다른 특징을 검출

- 그럼에도 모든 layer가 동일한 filter 파라미터를 사용하기 때문에 학습 파라미터가 매우 적음

 

 

 

3) CNN 구조

[ Feature Extraction : 이미지의 특징을 추출하는 부분 ] 

Convolution layer + Activation function

- input 이미지를 convolution fiter에 통과 → activation function 적용

- convolution fiter에서 이미지의 특정한 feature 추출

- 활성화 함수는 convolution layer 결과 임계치를 넘긴 픽셀의 값만 다음 계층에 전달

 

Pooling layer

- 비선형 downsampling으로 다음 계층의 input 및 파라미터 차원을 감소시켜주는 역할

- convolution layer 뒤에 선택적으로 사용

 

 

[ Classification : 이미지 클래스를 분류하는 부분 ]

Flatten layer

- 3차원 이미지 데이터를 1차원 벡터 형태로 변환해주는 역할

- convolution layer의 output이 fully-connected layer의 input으로 사용될 수 있도록 차원 조정

 

Fully-connected layer

- feature extraction이 반영된 1차원 벡터 input을 받아

- 이미지 classification 결과값 계산 

 

 

 

==> [ Image classfication 문제에서 CNN 모델 ] 

Convolution layer에서 feature 추출
- input image → convolution + pooling → image feature matrix
- 각각의 pixcel을 중심으로, 주변 pixcel의 정보도 반영하여 이미지의 feature 추출

Neural Network Classification model로 분류
- image feature matrix → flatten → image feature vector
- image feature vector → fully-connected layer → 각 label에 속할 probability vector
- 정답값과 loss 구하면서 SGD with backpropagate로 optimization

각 layer의 중간 과정에서 activation function + batch normalization 적절히 활용

 

 

 

 

 

 

2. Convolution layer 구조

1) channel 채널

- 이미지 = '높이x너비x채널'로 구성된 3차원 tensor

- 이미지의 채널이란 색 성분을 의미

- 흑백 이미지는 1가지 채널, 컬러 이미지는 Red/Blue/Green 3가지 채널로 구성

- 각 pixcel마다 0~225 사이의 컬러값을 가짐

출처 : https://wikidocs.net/64066

 

 

2) 필터(filter) / 커널(kernel)

- convolution layer에서 이미지의 feature를 찾아내기 위해 사용되는 공통 파라미터
- CNN에서 학습 대상은 필터 파라미터

 

 

3) 합성곱 연산(Convolution operation)

- 필터를 이용해 높이x너비 크기의 input 이미지를 시작점부터 끝까지 훑으면서

  (필터의 각 원소) x (필터와 겹쳐지는 위치의 이미지 원소) 값을 계산하고 모두 더한 값을

  ouput 이미지의 해당 위치의 출력값으로 계산하는 과정

 

- input 이미지의 채널과 같은 크기의 채널을 가지는 filter를 사용

Feautre map = 필터로 입력 데이터를 합성곱 한 결과 

출처 : http://taewan.kim/post/cnn/

 

 

 

4) Stride와 Padding

Stride

- 합성곱 연산에서 필터는 일정한 간격으로 이미지 상에서 이동하며 계산을 진행

- Stride = 필터가 이동하는 일정한 간격

- 이미지 크기를 줄이는 일종의 Downsampling 기능

 

예시 : 5 × 5 이미지에 Stride가 2이고, 크기가 3 × 3인 필터로 합성곱 연산한 경우

          2 × 2의 크기의 feature map을 output으로 생성

출처 : https://wikidocs.net/64066

 

 

Padding

- 합성곱 연산 결과, input 이미지보다 feature map의 크기가 더 작아지는 특성이 존재

- Padding = 합성곱 연산 이후에도 이미지 크기가 동일하게 유지되도록, 합성곱 연산 전 input 이미지의 가장자리 외각에 지정된 크기와 값(주로 0)을 가지는 pixcel을 추가해주는 과정

출처 : https://wikidocs.net/64066

 

 

 

 

 

3. convolution layer 계산

 

  • H : input 이미지 높이
  • W : input 이미지 너비 
  • S : Strid 크기
  • P : padding 크기
  • FH : filter 높이
  • FW : filter 너비 
  • C_in : input 이미지의 채널
  • C_out : 사용하는 filter 개수
  • OH : output 이미지의 높이
  • OW : output 이미지의 너비
  • N : 이미지 데이터 batch 크기

 

1) shape of filter

- 하나의 convolution layer에 여러개의 필터 → C_out개 사용 

- 각 필터마다 feature map 1개씩 생성  사용한 filter 개수 = output 이미지의 채널 = C_out 

- 각 채널마다 filter 1개씩 적용 → filter의 채널 = input 이미지의 채널 = C_in 

 

==> filter의 크기 = (C_out) x (C_in) x FH x FW

 

2) output volume size

- H x W 크기의 이미지에, P 만큼 padding이 추가되고, S 크기의 stride로 필터링 했을때

- output 이미지 1개의 높이와 너비

 

==> OH = (H+2P-FH)/S +1

       OW = (W+2P-FW)/S +1

 

 

 

3) convolution layer 계산 예제

 

① output volume size

OH = (H+2P-FH)/S +1 = (32+2*2-5)/1 +1 = 32

OW = (W+2P-FW)/S +1 = (32+2*2-5)/1 +1 = 32

C_out = 10

==> ouput volume size = C_out x OH x OW = 10 x 32 x 32

 

 

② number of parameter

= filter 개수 x (shape of filter + bias 1개)

= C_out x (C_in x FH x FW + 1)

= 10 x (3 x 5 x 5 +1)

 

 

③ number of operations

= (output volume size) x (shape of filter)

= (10 x 32 x 32) x (3 x 5 x 5)

 

 

 

 

 

 

4. Pooling layer

 

1) Pooling의 역할

- 이미지 크기를 줄이는 Downsampling 기능을 수행하는 layer 

- convolution layer의 output 이미지에 사용됨 

 

2) 하이퍼 파라미터

  • Kernel size : Pooling filter의 크기
  • Stride : Pooling filter의 이동 간격
  • Pooling function : Pooling하는 방법
    - Max Pooling : filter에 해당되는 범위 내 pixcel의 최댓값을 결과값으로
    - Average Pooling : filter에 해당되는 범위 내 pixcel들의 평균값을 결과값으로

 

3) Pooling layer 계산

  • C : input 이미지 채널 = output 이미지 채널
  • H / W : input 이미지 높이 / 너비
  • K : Kernel Size
  • S : Stride 크기
  • OH / OW : output 이미지 높이 / 너비

① output volume size

OH = (H-K)/S +1

OW = (W-K)S +1

채널 수 C는 input의 값이 그대로 유지

==> output volume size = C x OH x OW

 

② number of parameter

NONE!! Pooling에는 학습에 필요한 파라미터가 사용되지 않음!

 

③ number of computation

= (output volume size) x (shape of filter)

= (C x OH x OW) x (K x K)

Pooling에서는 filter의 채널 수가 1개!

 

 

 

 

 

 

 

Reference

https://kr.mathworks.com/discovery/convolutional-neural-network.html
https://wikidocs.net/64066
http://taewan.kim/post/cnn/
https://velog.io/@kbm970709/%EC%8B%A0%EC%9E%85%EC%83%9D-%EC%84%B8%EB%AF%B8%EB%82%98-Lecture-7-Convolutional-Networks-DL-for-CV