Skip to content

Latest commit

 

History

History
90 lines (61 loc) · 2.62 KB

File metadata and controls

90 lines (61 loc) · 2.62 KB

Mini-CLIP: 경량화된 CLIP 모델

경량화된 커스텀 CLIP (Contrastive Language-Image Pre-training) 모델을 설계하고 Flickr8K으로 학습해보는 프로젝트입니다.

주요 특징

  • 경량화된 아키텍처: ResNet Vision Encoder + Transformer 기반 Text Encoder
  • 모듈화된 설계: Vision/Text 인코더를 독립적으로 교체 가능

사용법

1. 모델 학습

# 기본 설정으로 학습
python train.py

# 하이퍼파라미터 조정
python train.py --epochs 30 --batch_size 16 --lr 5e-5 --weight_decay 1e-3 --gpu

2. 모델 평가

python evaluate.py \
    --checkpoint {model_path} \
    --data_dir {dataset_path} \
    --tokenizer_path {tokenizer_path} \
    --gpu

3. 데모 실행

python demo.py --num_images 5

파일 구조

Mini-CLIP/
├── mini_clip.py          # 메인 CLIP 모델
├── vision_encoder.py     # Vision encoder 구현
├── text_encoder.py       # Text encoder + Tokenizer
├── dataset.py           # 데이터셋 로더
├── train.py            # 학습 스크립트
├── evaluate.py         # 상세 평가 스크립트
├── demo.py            # 데모 스크립트
└── requirements.txt   # 의존성 패키지

실험 결과

Flickr8K 데이터셋에서 Mini-CLIP 모델로 실험을 진행하였습니다.

모델 구성

모델 Vision Encoder Text Encoder Embed Dim 학습 Epochs
Mini-CLIP ResNet18 (frozen) Transformer (Tiny) 256 30

성능 결과

지표 Mini-CLIP
Validation Image→Text Acc 41.97%
Validation Text→Image Acc 43.60%
Validation Recall@1 7.05%
Validation Recall@5 25.65%
Validation Recall@10 36.46%
Training Loss (최종) 1.535
Validation Loss (최종) 2.516

학습 곡선

Mini-CLIP Training Curves

  • 파라미터 수가 작고 적은 데이터셋으로 학습하여 최종 성능이 낮지만, loss가 줄고 acc, recall이 상승하여 잘 학습되는 것을 확인할 수 있음
  • 모델 사이즈를 키우고, 더 많은 데이터셋으로 학습하면 더 좋은 성능을 보여줄 것으로 예상

데모 결과

Flickr8K 데이터셋에서 랜덤하게 선택된 이미지들에 대한 제로샷 분류 결과입니다.

Mini-CLIP Demo Result 1

Mini-CLIP Demo Result 2