Work3 : Food 101

개발 로그 ③

Food 101 ViT 모델을 활용한 101개 클래스의 음식 이미지 분류

개요

   다양한 딥러닝 모델 경험, 성능 비교를 위해 Food 101 데이터셋을 활용한 101개 음식 이미지 분류 모델을 구현했습니다.

   이 작업은 Vision Transformer모델로 구현했으며, 총 101,000장의 이미지를 학습, 검증, 테스트 데이터셋으로 분할하여 학습 및 성능 평가를 진행했습니다.

사용 기술

데이터셋 Food 101
활용 모델 Vision Transformer (Pretrained on ImageNet)
프레임워크 PyTorch, TorchVision
시각화 Matplotlib
개발 환경 Google Colab

데이터 수집 및 처리 과정

ㆍ 총 101,000장의 Food 101 공개 데이터셋 사용

ㆍ 데이터 증강 → HorizontalFlip, Rotation(20°), ColorJitter, Normalize

ㆍ 데이터 분할 → Train (75,750장), Test (25,250장)

모델 구조

ㆍ Patch Embedding
          └ 입력 Shape : (B, C, H, W) → 출력 Shape: (B, 14×14, 768)

ㆍ Class Token 추가 & Position Embedding 적용

ㆍ 12 × [Encoder Block]
          └  12 × [MultiheadAttention → Skip Connection → MLP → Skip Connection]

ㆍ MLP Head
          └  Class Token을 이용해 최종 클래스 예측

학습 설정 및 결과

Model   :  Vision Transformer (ViT-Base, Patch Size = 16, Image Size = 224)

Loss Function   :  CrossEntropyLoss

Optimizer   :  AdamW (learning rate = 0.00003, weight decay = 0.00001)

Scehduler   :  ReduceLROnPlateau (patience = 5)

Epochs   :  15회

Accuracy   :  65.44%

Training Curve   :
    

고찰

ㆍ 초기 모델 구성
      - ViT Model 직접 구현
      - Train / Val / Test 분할 데이터셋 구성
      - 20~30 Epoch 학습 도중 과적합 발생 → 정확도 : 약 50%

ㆍ 개선 과정 ①
      - timm 라이브러리의 ViT-Base 모델로 전환
      - 데이터 증강 수정:
       └ MixUp 기법 적용 후 재학습 (강화) → MixUp 및 RandomRotation 제거 후 재학습 (축소)
      - 동일하게 20~30 Epoch 학습 도중 과적합 발생 → 정확도 : 약 50%

ㆍ 개선 과정 ②
      - Validation Dataset 제거
      - 최초 데이터 증강 구성으로 복귀

ㆍ 최종 결과
      - 정확도 : 65.44%

ㆍ 느낀 점
      - 검증 데이터 분할의 악영향 → 원인 불명
        └ 모델의 높은 학습시간, 제한적인 PC 환경으로 충분한 실험 반복이 어려움
        └ 검증데이터 분류 과정에서 클래스간 불균일한 데이터 분류, 학습데이터의 축소 등을 의심