주제: 7-4 CLIP (이미지-텍스트 대조학습과 Zero-Shot 전이)
분류: vision
타입: concept
난이도: 중급
선수지식: 있음 — Contrastive Learning, Embedding, Transformer
문제 설정
기존 이미지 분류 모델은 다음 방식으로 학습됩니다.
Image → CNN → Classifier → Label
문제점:
- 각 task마다 다시 학습 필요
- 새 클래스에 일반화 어려움
CLIP (Contrastive Language–Image Pretraining)은 다음 질문에서 시작합니다.
"이미지와 텍스트를 같은 의미 공간에 놓을 수 있을까?"
목표:
그림으로 먼저 보기
원본 / 라이선스 · OpenAI · MIT License
원본 / 라이선스 · A potato hater · CC BY-SA 4.0
1. CLIP 핵심 아이디어
CLIP은 이미지와 텍스트를 각각 인코딩합니다.
Image → Image Encoder → image embedding
Text → Text Encoder → text embedding
그리고 두 embedding의 유사도를 학습합니다.
2. Dual Encoder 구조
CLIP은 두 개의 encoder를 사용합니다.
| Encoder | 입력 |
|---|---|
| Image Encoder | 이미지 |
| Text Encoder | 텍스트 |
embedding:
기호 의미
- f_img : image encoder
- f_txt : text encoder
- v : image embedding
- t : text embedding
왜 필요한가
이미지와 텍스트를 같은 벡터 공간으로 변환합니다.
3. Similarity 계산
CLIP은 cosine similarity를 사용합니다.
기호 의미
- v · t : 벡터 내적
- ||v|| : 벡터 노름
왜 중요한가
이미지와 텍스트 의미 유사도를 측정합니다.
4. Contrastive Learning
CLIP은 이미지-텍스트 쌍을 사용해 학습합니다.
Positive pair:
(image_i, text_i)
Negative pair:
(image_i, text_j)
손실 함수:
기호 의미
- τ : temperature
- v_i : image embedding
- t_i : matching text
왜 필요한가
정답 쌍은 가까워지고 다른 쌍은 멀어집니다.
5. Batch Contrastive Learning
CLIP은 batch 내 모든 pair를 negative로 사용합니다.
batch size = N
N positive pairs
N² possible pairs
목표:
6. Zero-Shot Classification
CLIP의 가장 큰 장점은 zero-shot classification입니다.
예:
"a photo of a cat"
"a photo of a dog"
classification:
기호 의미
- v : image embedding
- t_class : class text embedding
왜 중요한가
새 클래스도 학습 없이 분류 가능합니다.
7. Zero-Shot 직관
Image → embedding
Text prompts → embeddings
Similarity 비교 → class 선택
즉 classifier 대신 text prompt를 사용합니다.
8. CLIP 구조
Image → Vision Transformer / ResNet
Text → Transformer
↓
Embedding space
↓
Contrastive Loss
9. CLIP 장점
- 멀티모달 표현 학습
- zero-shot generalization
- 대규모 웹 데이터 활용 가능
10. CLIP 한계
- fine-grained classification 어려움
- prompt engineering 영향
- bias 문제
코드-수식 연결
| 개념 | 코드 | 설명 |
|---|---|---|
| image encoding | model.encode_image() |
이미지 embedding |
| text encoding | model.encode_text() |
텍스트 embedding |
| similarity | torch.cosine_similarity() |
유사도 계산 |
자주 하는 오해 5개
- CLIP은 이미지 분류 모델이라고 생각한다
- CLIP은 supervised classification이라고 생각한다
- zero-shot은 항상 높은 정확도를 낸다고 생각한다
- CLIP은 텍스트를 생성한다고 생각한다
- image encoder와 text encoder는 동일 모델이라고 생각한다
체크리스트 (스스로 설명 가능해야 하는 질문)
- CLIP은 이미지와 텍스트를 어떻게 같은 공간에 매핑하는가?
- contrastive learning은 어떤 방식으로 학습되는가?
- CLIP에서 cosine similarity는 어떤 역할을 하는가?
- zero-shot classification은 어떻게 가능한가?
- CLIP과 일반 이미지 분류 모델의 차이는 무엇인가?