제로샷 이미지 분류

Hugging Face로 배우는 멀티모달 모델

James Chapman

Curriculum Manager, DataCamp

CLIP

  • 대비적 언어-이미지 사전학습(Contrastive Language-Image Pre-training)
  • 이미지와 텍스트의 유사도 점수화
  • 4억 개 이미지-텍스트 쌍으로 학습
  • 두 인코더:
    • 비전 인코더
    • 텍스트 인코더
  • 잘 맞는 이미지-텍스트는 비슷한 벡터를 생성

CLIP 텍스트 및 이미지 인코딩 다이어그램

1 https://openai.com/index/clip/
Hugging Face로 배우는 멀티모달 모델

제로샷 학습

  • 학습하지 않은 작업도 수행

비행기 제로샷 학습 순위

1 https://openai.com/index/clip/
Hugging Face로 배우는 멀티모달 모델

사용 사례: 상품 분류

from datasets import load_dataset
import matplotlib.pyplot as plt

dset = "rajuptvs/ecommerce_products_clip"
dataset = load_dataset(dset)

print(dataset["train"][0]["Description"])
plt.imshow(dataset["train"][0]["image"]) plt.show()
Blive High quality premium Full sleeves printed 
Shirt direct from the manufacturers.Gives you 
a clean and classy look while also 
making you feel comfortable.Trusted 
brand online and no compromise on quality.

데이터셋의 셔츠 이미지

Hugging Face로 배우는 멀티모달 모델

CLIP으로 제로샷 학습

model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")


categories = ["shirt", "trousers", "shoes", "dress", "hat", "bag", "watch"]
inputs = processor(text=categories, images=dataset["train"][0]["image"], return_tensors="pt", padding=True) outputs = model(**inputs)
probs = outputs.logits_per_image.softmax(dim=1)
categories[probs.argmax().item()]
shirt
Hugging Face로 배우는 멀티모달 모델

CLIP 점수

  • 인코딩된 이미지와 설명의 유사도
  • 범위: 100(완전 일치) ~ 0(불일치)
from torchmetrics.functional.multimodal import clip_score


image = dataset["train"][0]["image"] description = dataset["train"][0]["Description"]
from torchvision.transforms import ToTensor image = ToTensor()(image)*255
score = clip_score(image, description, "openai/clip-vit-base-patch32")
print(f"CLIP score: {score}")
CLIP score: 28.495952606201172
Hugging Face로 배우는 멀티모달 모델

연습해 봅시다!

Hugging Face로 배우는 멀티모달 모델

Preparing Video For Download...