본문 바로가기
Artificial Intelligence/Neural Networks

[ CNN ] pooling이란? (tf.keras.layers.MaxPool2D)

by SuperMemi 2020. 3. 16.
반응형

pooling (tf.keras.layers.MaxPool2D)


Pooling 이란.

CNN에서 pooling이란 간단히 말하자면 특징을 뽑아내는 과정이라고 할 수 있다.


먼저 CNN의 pooling 이전의 진행 과정을 간단히 살펴보자.


CNN이라는 게 결국 이미지 속에서 여러가지 특징들을 low level(여러가지 단순한 모양의 선)부터 high level(선이 모여진 어떤 형태의 모양)까지 찾아내서 이미지를 추론하는 딥러닝과정이다.


Pooling이전의 단계를 간단하게 설명하자면,

첫번째, convolution layer에서 filter(learnable parameter)을 이용해 이미지 feature map을 계산하는 과정이 있다.
두번째, 그 계산 결과를 activation function을 이용해 nonlinearity 를 부여해주는 과정이 있다.

convolution layer filters & activation function


그 다음, convolution layer의 계산 결과(feature maps)를 pooling(sub sampling)하는 과정이다.

Max pooling


Pooling 의 종류.


1. Max Pooling : 정해진 크기 안에서 가장 큰 값만 뽑아낸다.
2. Average Pooling : 정해진 크기 안의 값들의 평균을 뽑아낸다.
그외에도 다른 pooling의 종류가 있다...


Pooling의 목적


1. input size를 줄임(Down Sampling).
: 텐서의 크기를 줄이는 역할을 한다.

2. overfitting을 조절
: input size가 줄어드는 것은 그만큼 쓸데없는 parameter의 수가 줄어드는 것이라고 생각할 수 있다. 훈련데이터에만 높은 성능을 보이는 과적합(overfitting)을 줄일 수 있다.

3. 특징을 잘 뽑아냄.
: pooling을 했을 때, 특정한 모양을 더 잘 인식할 수 있음.

4. 지역적 이동에 노이즈를 줌으로써 일반화 성능을 올려준다. maxpooling의 경우 주어진 픽셀중 큰것만 뽑기때문에 모양이 조금 달라지는 특성을 가지고 있다.


tf.keras.layers.MaxPool2D


먼저 함수가 어떻게 이뤄지는지를 아는 것이 중요하다.
기본은 이렇다.

tf.keras.layers.MaxPool2D(
    pool_size=(2, 2), 
    strides=None, 
    padding='valid', 
    data_format=None, 
    **kwargs
)

하나씩 알아보자.

- pool_size : pooling에 사용할 filter의 크기를 정하는 것.(단순한 정수, 또는 튜플형태 (N,N))
- strides : pooling에 사용할 filter의 strides를 정하는 것.
- padding : "valide"(=padding을 안하는것) or "same"(=pooling결과 size가 input size와 동일하게 padding)


데이터 형태 shape

Input shape:

  • If data_format='channels_last': 4D tensor with shape (batch_size, rows, cols, channels).
  • If data_format='channels_first': 4D tensor with shape (batch_size, channels, rows, cols).

Output shape:

  • If data_format='channels_last': 4D tensor with shape (batch_size, pooled_rows, pooled_cols, channels).
  • If data_format='channels_first': 4D tensor with shape (batch_size, channels, pooled_rows, pooled_cols).


실제 코드

pool = keras.layers.MaxPool2D(pool_size=(2, 2), strides=(2, 2), padding='SAME')(conv2d)

# 이때, conv2d는 convolutional 계산 결과이다(feature maps)


[출처]
https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/
https://lueseypid.tistory.com/255
https://www.edwith.org/boostcourse-dl-tensorflow/lecture/43743/

반응형