본문 바로가기
컴퓨터비전/CNN

[딥러닝] GAP(Global Average Pooling)

by PIAI 2022. 3. 14.

GAP의 필요성

 

CNN에는 많은 Convolution layer를 쌓기 때문에 많은 필터가 있습니다. 그만큼 차원의 수가 많습니다. 

예를들어 (8, 8, 512)의 Feature map들을 Flatten으로 1차원 형태로 바꾸면 8 x 8 x 512 = 32,768 의 파라미터가 생기고 여기서 100개의 뉴런으로 구성된 Layer에 연결하면 32,768,000개의 파라미터가 생깁니다. 파라미터가 너무 많아지면서 학습 시 over fitting이 발생할 수도 있습니다.

 

GAP의 구현

 

 

 

  • 위의 그림과 같이 채널별로 평균 값을 추출합니다.
  • 앞서 말한 Flatten처럼 GAP의 목적은 feature를 1차원 벡터로 만들기 위함입니다. Flatten과는 반대로 파라미터 수를 줄일 수 있습니다.
  • 이는 충분히 채널수가 많을 경우 적용하고, 채널수가 적으면 Flatten이 더 나을 수도 있습니다.

 

코드

 

from tensorflow.keras.layers import GlobalAveragePooling2D

input = Input(shape=(IMAGE_SIZE, IMAGE_SIZE, 3))

x = Conv2D(filters=64, kernel_size=(3, 3), padding='same')(input)
x = GlobalAveragePooling2D()(x)
x = Dense(50, activation='relu')(x)

model = Model(inputs=input_tensor, outputs=output)

 

댓글