CLIP, publié par OpenAI en 2021, transforme images et textes en vecteurs d'un même espace : une photo de chat et la phrase « a photo of a cat » s'y retrouvent proches. On peut alors classer des photos avec une simple liste de libellés, sans entraînement, ou retrouver une image en la décrivant.
Un documentaliste qui a appris, sur des centaines de millions de photos légendées, quelle légende va avec quelle image. Montrez-lui une photo et cinq légendes possibles : il désigne la plus probable.
Un encodeur d'images et un encodeur de texte transforment chacun leur entrée en un vecteur de même taille.
Sur 400 millions de paires image-légende collectées sur le web, le modèle apprend à rapprocher chaque image de sa légende et à l'éloigner des légendes des autres images du lot. C'est de l'apprentissage contrastif.
Pour classer une photo, on compare son vecteur à ceux des libellés écrits. Pour chercher, on compare une description aux vecteurs de toutes les images de la base.
Les photos déposées avec les annonces, et les rubriques du site écrites en toutes lettres. Aucune photo étiquetée n'est nécessaire. Le code utilise deux photos publiques du jeu COCO.
Chaque photo reçoit une probabilité par rubrique. On range automatiquement les annonces au score net et on envoie les autres en vérification.
On étiquette à la main quelques centaines de photos et on mesure la part bien classée, rubrique par rubrique. Les rubriques souvent confondues, comme canapé et fauteuil, désignent les libellés à reformuler.
CLIP s'utilise sans entraînement : les choix portent sur le modèle et les libellés. Noms donnés pour transformers de Hugging Face.
Écrire « a photo of a sofa » plutôt que « sofa » améliore le classement, car c'est le format des légendes vues à l'entraînement. Moyenner plusieurs formulations par catégorie aide encore.
ViT-B/32, celui du code, est rapide et léger ; ViT-L/14 est plus précis mais plus lourd. Des familles ouvertes comme OpenCLIP ou SigLIP existent en plusieurs tailles.
Les probabilités se répartissent entre les libellés proposés : une photo hors sujet reçoit quand même un libellé. Ajouter une rubrique « autre » et un seuil au-dessous duquel on ne décide pas.
# Petites annonces : CLIP en Python
import requests
import torch
from PIL import Image
from transformers import CLIPModel, CLIPProcessor
# Petit modèle public d'OpenAI ; rubriques en anglais, langue d'entraînement de CLIP
modele = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processeur = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
# Deux photos publiques du jeu COCO, en guise de photos d'annonces
urls = ["http://images.cocodataset.org/val2017/000000039769.jpg",
"http://images.cocodataset.org/val2017/000000000285.jpg"]
photos = [Image.open(requests.get(u, stream=True).raw) for u in urls]
rubriques = ["a photo of a cat", "a photo of a dog", "a photo of a bear",
"a photo of a sofa", "a photo of a kitchen"]
# Images et textes projetés dans le même espace, puis comparés deux à deux
entrees = processeur(text=rubriques, images=photos, return_tensors="pt", padding=True)
with torch.no_grad():
sorties = modele(**entrees)
proba = sorties.logits_per_image.softmax(dim=1) # une ligne par photo, une colonne par rubrique
for i, url in enumerate(urls):
meilleure = proba[i].argmax().item()
print(url.split("/")[-1], "->", rubriques[meilleure], "| probabilité :", round(proba[i, meilleure].item(), 2))
CLIP se pratique en Python (transformers, open_clip) : pas d'équivalent R courant.
Un modèle qui traite plusieurs types de données, par exemple du texte et des images, dans un même cadre. CLIP relie les deux dans un espace commun ; les assistants récents vont plus loin et décrivent une image en langage naturel.
Classer des données dans des catégories pour lesquelles le modèle n'a vu aucun exemple étiqueté. Avec CLIP, il suffit d'écrire les catégories : la photo est rangée dans celle dont la description est la plus proche.
Le CLIP d'OpenAI a été entraîné sur des légendes en anglais et donne de moins bons résultats en français. On traduit les libellés en anglais, ou l'on prend un modèle multilingue, comme certaines variantes d'OpenCLIP ou SigLIP 2.
Rapprocher ce qui va ensemble et éloigner le reste. CLIP l'applique à des paires image-texte.
Voir la fiche → la même idée pour le texteDes vecteurs dont la proximité mesure le sens. CLIP en produit pour les images comme pour les textes.
Voir la fiche → l'encodeur d'imagesDécoupe l'image en tuiles et leur applique l'attention. C'est l'architecture de l'encodeur d'images du code.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus