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)
'컴퓨터비전 > CNN' 카테고리의 다른 글
[딥러닝] Kears의 전처리와 데이터 로딩의 이해 (0) | 2022.03.16 |
---|---|
[딥러닝] 전이 학습(Transfer Learning) (0) | 2022.03.15 |
[딥러닝] 데이터 증강(Data Augmentation) (2) | 2022.03.14 |
[딥러닝] 배치 정규화(Batch Normalization) (0) | 2022.03.13 |
[딥러닝] CNN(Convolutional Neural Network)의 이해 (1) | 2022.03.11 |
댓글