경량화된 커스텀 CLIP (Contrastive Language-Image Pre-training) 모델을 설계하고 Flickr8K으로 학습해보는 프로젝트입니다.
- 경량화된 아키텍처: ResNet Vision Encoder + Transformer 기반 Text Encoder
- 모듈화된 설계: Vision/Text 인코더를 독립적으로 교체 가능
# 기본 설정으로 학습
python train.py
# 하이퍼파라미터 조정
python train.py --epochs 30 --batch_size 16 --lr 5e-5 --weight_decay 1e-3 --gpupython evaluate.py \
--checkpoint {model_path} \
--data_dir {dataset_path} \
--tokenizer_path {tokenizer_path} \
--gpupython demo.py --num_images 5Mini-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 |
- 파라미터 수가 작고 적은 데이터셋으로 학습하여 최종 성능이 낮지만, loss가 줄고 acc, recall이 상승하여 잘 학습되는 것을 확인할 수 있음
- 모델 사이즈를 키우고, 더 많은 데이터셋으로 학습하면 더 좋은 성능을 보여줄 것으로 예상
Flickr8K 데이터셋에서 랜덤하게 선택된 이미지들에 대한 제로샷 분류 결과입니다.


