transformers에서 CLIP 사용법

transformers에서 CLIP 사용법

Hugging Face transformers는 OpenAI CLIP 모델을 네이티브로 지원해요. 핵심 클래스는 CLIPModel, **CLIPProcessor**예요.

핵심 클래스

  • CLIPModel — 이미지·텍스트 인코더를 합친 모델
  • CLIPProcessorCLIPImageProcessorCLIPTokenizer를 묶은 전처리기
  • CLIPVisionModel — 이미지 인코더 단독
  • CLIPTextModel — 텍스트 인코더 단독
  • CLIPVisionConfig, CLIPTextConfig — 설정 클래스

사용 흐름

from transformers import CLIPProcessor, CLIPModel
from PIL import Image
import requests

model = CLIPModel.from_pretrained("openai/clip-vit-large-patch14")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-large-patch14")

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(text=["a photo of a cat"], images=image, return_tensors="pt", padding=True)

outputs = model(**inputs)
logits_per_image = outputs.logits_per_image
probs = logits_per_image.softmax(dim=1)

출력 필드

  • logits_per_image — 이미지 별로 텍스트와의 유사도 로짓
  • logits_per_text — 텍스트 별 유사도 로짓
  • text_embeds, image_embeds — 각각의 임베딩

참고

  • 인코더는 CLIPVisionModel/CLIPTextModel로 분리해 임베딩만 뽑을 수도 있어요.
  • ViT 계열 체크포인트는 openai/clip-vit-base-patch32, openai/clip-vit-large-patch14이 대표적이에요.

더 알아보기