이미지 처리 모델 개요(CLIP, RAM) - 100-hours-a-week/5-yeosa-wiki GitHub Wiki
1. CLIP vs RAM++: 이미지 태깅 모델 비교
항목 | CLIP | RAM++ |
---|---|---|
출시 | 2021 (OpenAI) | 2023 (Xinyu Huang 외) |
모델 구조 | Vision Transformer (ViT-B/32 등) + Text Transformer | Swin Transformer (Large) + BERT Encoder |
입력 형식 | 이미지 + 텍스트 쌍 (e.g. “a photo of a cat”) | 이미지만 입력 |
출력 방식 | 이미지와 텍스트의 cosine similarity로 가장 유사한 텍스트 선택 | 사전 정의된 4,585개 태그에 대해 multi-label 분류 (sigmoid로 확률 예측) |
태깅 방식 | Open vocabulary (프롬프트에 따라 자유롭게 태깅 가능) | Fixed vocabulary (정해진 태그셋 기반 자동 태깅) |
텍스트 처리 | CLIP의 text encoder로 직접 입력된 프롬프트 임베딩 | 사전 학습된 4585개 태그에 대한 label classifier 사용 (텍스트 임베딩은 inference에 사용되지 않음) |
모델 크기 | ViT-B/32 기준 약 151M 파라미터 | Swin-L 기반으로 약 200M 이상 추정 |
추론 속도 | 빠름 (batch inference에 매우 최적화) | 느림 (리소스 많이 소모) |
장점 | - 자유로운 텍스트 입력 가능- 다양한 zero-shot 태스크 가능- 빠른 추론 | - 높은 정확도- 세밀한 태그셋 제공- 텍스트 없이 이미지만으로 태깅 가능 |
단점 | - 태그 정제 필요 (프롬프트 설계 중요)- 구체성 낮은 경우도 있음 | - 느린 추론 속도- 태그셋 고정- 커스텀 태그 추가 어려움 |
2. CLIP (Contrastive Language–Image Pre-training) 요약
a. 참고 자료
b. 모델 구조 및 동작 원리
- Dual Encoder 구조: 이미지와 텍스트를 각각 인코딩하는 두 개의 별도 인코더를 사용합니다.
- 이미지 인코더: ResNet 또는 Vision Transformer (ViT) 기반
- 텍스트 인코더: Transformer 기반
- Contrastive Learning 방식으로 학습:
- 대규모 (이미지, 텍스트) 쌍 데이터셋 (400M pairs)으로 학습
- 동일한 배치 내에서 올바른 이미지-텍스트 쌍은 유사도 증가, 잘못된 쌍은 유사도 감소
- 유사도는 cosine similarity 기반으로 계산
- Zero-Shot Prediction 가능:
- 클래스 이름이나 설명을 문장으로 만들어 텍스트 인코더에 넣으면, CLIP은 그 텍스트와 가장 잘 어울리는 이미지를 분류할 수 있습니다.
- 예: “A photo of a dog”와 같은 프롬프트로 분류 가능
c. 학습 방식
- 데이터셋: 웹에서 수집한 4억 개의 (이미지, 텍스트) 쌍 (WIT: WebImageText)
- 학습 목적:
- 주어진 이미지에 대한 올바른 텍스트를 맞히는 contrastive objective 최적화
- 성능 효율성:
- 기존 이미지 캡셔닝 기반 모델보다 학습 효율이 4배 이상 뛰어남
- 대규모 데이터셋과 단순한 contrastive loss 덕분에 빠른 확장성과 좋은 일반화 성능을 보임
d. 성능 요약
- Zero-shot 분류 성능:
- ImageNet Top-1 기준 76.2% 정확도 (ResNet-50과 동등 성능, 학습 데이터는 사용하지 않음)
- 다른 30여 개 데이터셋에서도 zero-shot 상태에서 기존 fully-supervised 모델과 경쟁 가능한 성능 달성
- 강점:
- OCR, 감정 인식, 지역 식별, 동작 인식 등 다양한 태스크에서 우수한 성능
- 일반적인 object 분류에서 높은 zero-shot 성능
- 프롬프트 엔지니어링과 앙상블을 활용하면 성능을 더 끌어올릴 수 있음
- 한계:
- 고도 특화된 분야(예: 의료 영상, 위성 이미지 등)에서는 성능 저하
- 일부 fine-grained 분류에서 task-specific 학습보다 낮은 성능
e. 모델 크기 및 구조
- ViT-B/32:
- 약 149M 파라미터
- 입력 이미지 크기: 224×224
- ViT-L/14:
- 약 428M 파라미터
- 입력 이미지 크기: 224×224
- ViT-L/14@336px:
- ViT-L/14 모델을 336×336 해상도로 fine-tuning한 버전
3. RAM++ (Recognize Anything Plus) 요약
a. 참고자료
b. 핵심 구조 및 개선된 작동 원리
- 통합 정렬 프레임워크 (ITTA):
- 이미지-텍스트-태그 **3요소(image-tag-text triplets)**를 정렬하는 alignment decoder 사용
- 기존 CLIP (ITC)나 BLIP (ITM) 방식보다 multi-tag recognition에 최적화
- 다중 계층의 텍스트 감독 (Multi-grained Text Supervision):
- 기존 글로벌 텍스트 + 개별 태그 감독 결합
- *LLM(GPT-3.5)**을 활용해 태그를 더 풍부하게 설명하는 태그 설명(tag description) 생성
- ex:
"corgi"
→"a small dog with short legs and a fox-like face"
- 자동 리웨이팅 (Automatic Re-weighting):
- LLM이 생성한 50개의 태그 설명을 가중치 조절하여 이미지 특성과 가장 잘 맞는 설명을 우선 반영
c. 학습 및 데이터 구성
- 학습 규모:
- RAM++-4M: 약 400만 이미지
- RAM++-14M: 약 1400만 이미지
- 훈련 데이터:
- COCO, Visual Genome, SBU, CC-3M, CC-12M
- 태그 수:
- 약 4,585개
- 텍스트 인코더: CLIP의 텍스트 인코더 (고정)
- 이미지 인코더: Swin Transformer (Base or Large)
d. 성능 요약
-
Zero-shot 태그 인식 (mAP 기준)
Benchmark CLIP RAM RAM++ OpenImages-Common 76.6 86.5 86.6 ImageNet-Common 57.0 71.4 72.4 OpenImages-Uncommon 70.2 68.8 75.4 ImageNet-Uncommon 56.6 48.4 55.0 HICO (행동 문구) 29.8 32.9 37.7 -
RAM++은 모든 벤치마크에서 기존 SOTA 대비 4~10 mAP 이상의 향상을 보임