Accueil / Factory / Algos ML / CLIP (multimodal) — factory / algos ML / modèles multimodaux

MODÈLE CLIP.

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.

Texte + imageClassification sans entraînementRecherche d'imagesModèle pré-entraînéNiveau : avancé

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceBon classement sans exemple, dépassé par un modèle entraîné
InterprétabilitéScores de similarité lisibles, raisons invisibles
VitesseVecteurs d'images calculés une fois, recherche instantanée
Facilité de réglageLe choix des libellés fait l'essentiel du résultat
Tolérance aux données brutesPhotos variées acceptées, cadrages et lumières compris
EN 30 SECONDES

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.

1. Deux encodeurs, un seul espace

Un encodeur d'images et un encodeur de texte transforment chacun leur entrée en un vecteur de même taille.

2. Apprendre par paires

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.

3. Comparer pour classer ou chercher

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.

LE CAS MÉTIER

petites annonces · marketplace / e-commerce
EN ENTRÉE

Des photos et une liste de rubriques

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.

EN SORTIE

Une rubrique proposée par photo

Chaque photo reçoit une probabilité par rubrique. On range automatiquement les annonces au score net et on envoie les autres en vérification.

CE QU'ON MESURE

L'exactitude sur un échantillon vérifié

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.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Classer des photos dans des catégories sans base d'entraînement étiquetée
  • Rechercher des images par description dans une photothèque ou un catalogue
  • Repérer les doublons et les photos très proches entre annonces
  • Pré-étiqueter un jeu d'images avant d'entraîner un classifieur dédié

NON

  • Détails fins (référence exacte d'une pièce, petit défaut) : entraîner un modèle de vision dédié
  • Compter ou localiser des objets : utiliser un détecteur comme YOLO
  • Libellés en français avec le CLIP d'origine : il a appris en anglais, préférer un modèle multilingue
  • Lire le texte présent dans une image : passer par un outil d'OCR
LES 3 CHOIX QUI COMPTENT

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.

Formulation des libellés

É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.

Taille du modèle

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.

Seuil de confiance

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.

LE CODE MINIMAL

données simulées dans le code
# 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.

QUESTIONS FRÉQUENTES

Qu'est-ce qu'un modèle multimodal ?

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.

Qu'est-ce que la classification zero-shot ?

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.

CLIP fonctionne-t-il en français ?

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.

LES ALGOS VOISINS

à comparer avant de choisir
la méthode d'entraînement

Apprentissage contrastif

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 texte

Embeddings

Des vecteurs dont la proximité mesure le sens. CLIP en produit pour les images comme pour les textes.

Voir la fiche →
l'encodeur d'images

Vision Transformer

Découpe l'image en tuiles et leur applique l'attention. C'est l'architecture de l'encodeur d'images du code.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →