무냐의 개발일지

[3/18] 프로젝트_ VGG16 써서 transfer learning으로 Flower 데이터셋 예측 본문

Data Scientist Bootcamp

[3/18] 프로젝트_ VGG16 써서 transfer learning으로 Flower 데이터셋 예측

무냐코드 2024. 3. 18. 17:09

CNN모델의 2가지 구성

1. 합성곱층과 풀링층이 여러겹 쌓여있는 Convolutional base : 이미지로부터 특징을 효과적으로 추출하는 것 (feature extraction)

   - 낮은 레벨의 계층은 input에 가까운 계층으로, 이미지에서 주로 일반적인(general) 특징을 추출한다.
   - 높은 레벨의 계층은 output에 가까운 계층으로, 보다 구체적이고 특유한 특징을 추출한다.

2. 완전 연결 계층으로 이루어진 Classifier : 추출된 특징을 잘 학습해서 이미지를 알맞은 카테고리로 분류하는 것 (image classification)

 

 

데이터셋의 크기에 따라, 기존 모델을 얼만큼 학습시킬 것인지를 정한다

 

 

- VGG16 모델의 구조

 

  • 첫 번째 블록 : 2개의 Conv 레이어와 1개의 Pooling 레이어
  • 두 번째 블록 : 2개의 Conv 레이어와 1개의 Pooling 레이어
  • 세 번째 블록 : 3개의 Conv 레이어와 1개의 Pooling 레이어
  • 네 번째 블록 : 3개의 Conv 레이어와 1개의 Pooling 레이어
  • 다섯 번째 블록 : 3개의 Conv 레이어와 1개의 Pooling 레이어
  • 여섯 번째 블록 : 3개의 Dense 레이어
IMG_SHAPE = (IMG_SIZE, IMG_SIZE, 3)

# Create the base model from the pre-trained model VGG16
base_model = tf.keras.applications.VGG16(input_shape=IMG_SHAPE,
                                         include_top=False,
                                         weights='imagenet')

 

 

 

 

 

- 레이어 펼치기

마지막 단계에 Classifier를 구성하기 위해서는 Fully connected layer가 필수이다. 여기에 입력될 수 있는 벡터는 반드시 1차원이어야 한다. 그러기 위해, 우리 3차원 벡터를 1차원으로 변경해주는 방법 2가지 ( Flatten, Gloabl Averag Pooling)

 

| Global Average Pooling ? 

- 한 방에 feature를 1차원 벡터로 만들기 위함 

- 파라미터가 너무 많아지면 학습 시 over fitting이 발생할 수 있는 문제가 발생하곤 합니다. 따라서 필터에 사용된 파라미터 수를 줄여서 차원을 감소시킬 방법이 필요합니다. 이런 역할을 CNN에서 해 주는 레이어가 pooling layer 입니다. Max Pooling, Average Pooling, 등이 있는데, Global Average Pooling도 있다. 

- GAP(global average pooling)은 앞에서 설명한 Max(Average) Pooling 보다 더 급격하게 feature의 수를 줄입니다. 하지만 GAP의 목적은 앞에서 사용한 Pooling과 조금 다릅니다. GAP의 목적은 feature를 1차원 벡터로 만들기 위함입니다.

- GAP를 거치게 되면 shape은 (1, 1, Depth)로 바뀌게 된다. 

 

 

 

 

https://github.com/Jean-yun/Aiffel_project/blob/3344aa772fa5add64d7ca1359a46648904a59c89/PJ%2312_Computer_vision/%5BMainQuest_0318%5D%20Flower%20Classification(VGG16).ipynb