이미지 처리 모델 개요(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 이상의 향상을 보임