사용법 (제로샷 이미지 분류)

사용법 (제로샷 이미지 분류)

SigLIP은 Transformers에서 pipeline 또는 AutoModel로 쉽게 쓸 수 있어요. 텍스트와 이미지 사이의 유사도 점수를 계산해서 제로샷 이미지 분류를 할 수 있어요.

pipeline으로 간단하게

from transformers import pipeline

image = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
candidate_labels = ["a Pallas cat", "a lion", "a Siberian tiger"]

pipeline = pipeline(task="zero-shot-image-classification", model="google/siglip-base-patch16-224", device=0)
pipeline(image, candidate_labels=candidate_labels)

AutoModel으로 직접

import requests
import torch
from PIL import Image

from transformers import AutoModel, AutoProcessor

model = AutoModel.from_pretrained("google/siglip-base-patch16-224", device_map="auto", attn_implementation="sdpa")
processor = AutoProcessor.from_pretrained("google/siglip-base-patch16-224")

url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
image = Image.open(requests.get(url, stream=True).raw)
candidate_labels = ["a Pallas cat", "a lion", "a Siberian tiger"]
texts = [f'This is a photo of {label}.' for label in candidate_labels]
inputs = processor(text=texts, images=image, padding="max_length", return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model(**inputs)

logits_per_image = outputs.logits_per_image
probs = torch.sigmoid(logits_per_image)
print(f"{probs[0][0]:.1%} that image 0 is '{candidate_labels[0]}'")

시그모이드 손실 모델답게, 출력 로짓에 torch.sigmoid를 적용해 확률로 바꿔요.

더 알아보기