Classification d'images « zero-shot »

Modèles multimodaux avec Hugging Face

James Chapman

Curriculum Manager, DataCamp

CLIP

  • Préapprentissage contrastif langage‑image
  • Évalue la similarité entre images et texte
  • Entraîné sur 400 M de paires image‑texte
  • Deux encodeurs :
    • Encodeur de vision
    • Encodeur de texte
  • Les bonnes correspondances image‑texte donnent des tableaux similaires

Schéma d'encodage texte et image de CLIP

1 https://openai.com/index/clip/
Modèles multimodaux avec Hugging Face

Apprentissage « zero-shot »

  • Réaliser des tâches pour lesquelles le modèle n'a pas été entraîné

Classement « zero-shot » d'un avion

1 https://openai.com/index/clip/
Modèles multimodaux avec Hugging Face

Cas d'usage : catégorisation de produits

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.

Photo d'une chemise du jeu de données

Modèles multimodaux avec Hugging Face

Apprentissage « zero-shot » avec 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
Modèles multimodaux avec Hugging Face

Le score CLIP

  • Similarité entre l'image encodée et la description encodée
  • Va de 100 (accord parfait) à 0 (aucun accord)
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
Modèles multimodaux avec Hugging Face

Passons à la pratique !

Modèles multimodaux avec Hugging Face

Preparing Video For Download...