CLIP (Contrastive Language-Image Pre-training) d’OpenAI est un modèle qui apprend à associer des images et leurs descriptions textuelles. En analysant son fonctionnement et la manière d’implémenter CLIP, vous aurez une compréhension complète d’OpenAI CLIP.
Introduction
En janvier 2021, OpenAI a introduit CLIP (Contrastive Language-Image Pre-Training), un classifieur zero-shot qui utilise sa compréhension de la langue anglaise pour classer des images sans avoir besoin d’être entraîné sur un jeu de données spécifique. Ce modèle applique les avancées récentes des transformateurs à grande échelle, similaires à GPT-3, au domaine de la vision.
Les résultats sont remarquablement impressionnants. Nous avons préparé un tutoriel CLIP et un notebook CLIP Colab pour vous permettre d’expérimenter le modèle sur vos propres images.
Qu’est-ce que OpenAI CLIP
CLIP, qui signifie Contrastive Language-Image Pre-training, est une méthode efficace pour apprendre à partir de supervision par langage naturel. Présenté en 2021 dans l’article “Learning Transferable Visual Models From Natural Language Supervision”, CLIP est un modèle d’embedding conjoint d’images et de texte.
CLIP est entraîné sur 400 millions de paires image-texte de manière auto-supervisée, en mappant à la fois le texte et les images dans le même espace d’embedding. Par exemple, une image d’un chien et la phrase “une image d’un chien” auraient des embeddings très similaires et seraient proches dans l’espace vectoriel. Cette capacité est significative car elle permet de créer diverses applications, comme la recherche dans une base d’images avec une description ou l’inverse.
Performances de CLIP
Efficacité d’entraînement : CLIP est l’un des modèles les plus efficaces, atteignant une précision de 41 % avec 400 millions d’images. Il surpasse d’autres modèles, comme la prédiction de sacs de mots (27 %) et le modèle de langage Transformer (16 %), pour le même nombre d’images. Cela indique que CLIP s’entraîne beaucoup plus rapidement que les autres modèles de son domaine.

Généralisation : CLIP a été entraîné sur une gamme variée de styles d’images, ce qui le rend bien plus flexible que des modèles comme ImageNet. Il est important de noter que CLIP généralise bien avec les images sur lesquelles il a été entraîné, mais peut ne pas être aussi efficace avec des images hors de son domaine d’entraînement. Voici quelques exemples des différents styles d’images :

Comment fonctionne CLIP
Architecture
Le modèle CLIP se compose de deux parties principales : un encodeur de texte et un encodeur d’image. L’encodeur de texte utilise un Transformer, une architecture qui a révolutionné le NLP depuis 2017, ce qui rend son inclusion peu surprenante. Pour une excellente explication visuelle, reportez-vous au blog suivant.
Pour l’encodeur d’image, les auteurs ont expérimenté deux modèles différents : ResNet-50 et Vision Transformer (ViT). ResNet-50, basé sur les réseaux de neurones convolutifs (CNN), était l’architecture de pointe originale pour la classification d’images. ViT, une adaptation plus récente du Transformer pour les images, divise chaque image en une séquence de patches, les traitant comme une séquence de tokens. Les auteurs ont constaté que le ViT s’entraînait plus rapidement.
Le plus grand modèle ResNet, RN50x64, a nécessité 18 jours d’entraînement sur 592 GPU V100, tandis que le plus grand Vision Transformer a nécessité 12 jours sur 256 GPU V100.
Les deux encodeurs (texte et image) ont été entraînés from scratch.
Nous entraînons CLIP from scratch sans initialiser l’encodeur d’image avec les poids d’ImageNet ni l’encodeur de texte avec des poids pré-entraînés.
Entraînement
Les auteurs ont d’abord tenté d’entraîner un modèle de légende d’image qui prédit la légende ou la description exacte d’une image donnée.
Notre approche initiale, similaire à VirTex, entraînait conjointement un CNN d’image et un transformer de texte from scratch pour prédire la légende d’une image. Cependant, nous avons rencontré des difficultés pour passer à l’échelle cette méthode efficacement.
Cependant, ils ont constaté que l’entraînement d’un modèle de légende d’image sur les 400 millions de paires (image, texte) n’était pas scalable. Ils ont donc opté pour une approche d’apprentissage contrastif de représentations. L’objectif de cette approche est d’apprendre un espace d’embedding où les paires d’exemples similaires sont proches, tandis que les paires dissemblables sont éloignées.
Dans un cadre typique d’apprentissage contrastif, on donne au modèle des exemples sous la forme (ancre, positif, négatif). Ici, l’ancre est une image d’une classe, par exemple un chien, le positif est une autre image de la même classe (un autre chien), et le négatif est une image d’une classe différente, comme un oiseau. Les images sont encodées, et le modèle est entraîné à minimiser la distance entre les embeddings de la même classe (distance(ancre, positif)) et à maximiser la distance entre les embeddings de classes différentes (distance(ancre, négatif)). Cela encourage le modèle à produire des embeddings très similaires pour les mêmes objets et des embeddings distincts pour des objets différents.

Une visualisation de l’apprentissage contrastif. Source : https://www.v7labs.com/blog/contrastive-learning-guide
La même approche peut être appliquée au texte, ainsi qu’à des combinaisons de texte et d’images. Par exemple, dans CLIP, un seul exemple d’entraînement pourrait être composé d’une ancre (une image d’un chien), d’un positif (la légende “une image d’un chien”) et d’un négatif (la légende “une image d’un oiseau”).
CLIP généralise encore cette approche en utilisant une perte multi-classes N-pair, une extension de la méthode standard qui implique plusieurs négatifs et positifs pour chaque ancre. Comme décrit dans l’article :
Étant donné un batch de N paires (image, texte), CLIP est entraîné à prédire lesquelles des N × N paires (image, texte) possibles dans le batch se sont réellement produites. Pour ce faire, CLIP apprend un espace d’embedding multimodal en entraînant conjointement un encodeur d’image et un encodeur de texte à maximiser la similarité cosinus des embeddings d’image et de texte des N paires réelles du batch tout en minimisant la similarité cosinus des embeddings des N² − N paires incorrectes. Il optimise une perte d’entropie croisée symétrique sur ces scores de similarité.
Ingénierie des prompts et ensemblage
Avec l’essor des modèles de langage, l’ingénierie des prompts est devenue une pratique courante pour obtenir de bons résultats des modèles génératifs. Étant donné que l’encodeur de texte de CLIP est un modèle Transformer, les auteurs ont jugé l’ingénierie des prompts cruciale pour obtenir de bonnes performances zero-shot. Ils ont observé que dans leur jeu de données de pré-entraînement, il était relativement rare que le texte associé à l’image soit un mot unique, comme “chien” représentant une étiquette de classe. Le plus souvent, le texte était une phrase complète, comme une légende ou une description de l’image. En conséquence, les auteurs ont constaté que le prompt “a photo of a {object}” était un bon choix par défaut, bien que des prompts plus spécialisés fonctionnent mieux dans certains cas. Par exemple, pour les images satellites, “a satellite photo of a {object}” était plus efficace.
Les auteurs ont également expérimenté l’ensemblage de modèles, une technique où les prédictions de plusieurs modèles sont combinées pour produire la sortie finale. Cette approche est couramment utilisée en apprentissage automatique pour traiter les problèmes de variance élevée et de faible biais (surapprentissage). Pour CLIP, l’ensemble a été construit en utilisant de nombreux prompts différents pour créer des classifieurs.
L’ingénierie des prompts et l’ensemblage ont tous deux amélioré significativement les performances sur ImageNet.
Sur ImageNet, nous faisons l’ensemble de 80 prompts de contexte différents, ce qui améliore les performances de 3,5 % supplémentaires par rapport au seul prompt par défaut discuté ci-dessus. Considérés ensemble, l’ingénierie des prompts et l’ensemblage améliorent la précision sur ImageNet de près de 5 %.
Applications de OpenAI CLIP
OpenAI CLIP a un large éventail d’applications et de cas d’utilisation dans l’analyse image-texte. Voici quelques-unes des principales applications et cas d’utilisation de CLIP :
- Classification d’images : CLIP peut classer des images dans différentes classes ou catégories en fonction de leur contenu. Il peut prédire l’étiquette de classe la plus pertinente pour une image donnée.
- Recherche d’images : CLIP peut retrouver des images pertinentes en fonction d’une requête textuelle donnée. Il peut trouver des images sémantiquement similaires au texte d’entrée.
- Modération de contenu : CLIP peut être utilisé pour détecter et modérer automatiquement le contenu inapproprié ou choquant dans les images et le texte.
- Légende d’images : CLIP peut générer des légendes ou des descriptions pour des images en fonction de leur contenu.
- Réponse à des questions visuelles : CLIP peut répondre à des questions sur des images en fonction de leur contenu.
Implémenter OpenAI CLIP avec Huggingface Transformers
Vous pouvez utiliser CLIP sur votre machine locale avec seulement quelques lignes de code en utilisant la bibliothèque HuggingFace Transformers ! Commencez par importer la bibliothèque et charger le modèle pré-entraîné.
import transformers
model = transformers.CLIPModel.from_pretrained(“openai/clip-vit-base-patch32”)
processor = transformers.CLIPProcessor.from_pretrained(“openai/clip-vit-base-patch32”)
Ensuite, créez deux listes : l’une contenant des légendes ou descriptions, et l’autre contenant des images. Les images peuvent être représentées soit par des URL, soit par des images PIL.
import PIL.Image
images = [PIL.Image(“for_example_a_dog_image.jpeg”)]
possible_classes = [“an image of a bird”, “an image of a dog”, “an image of a cat”]
Invoquez le processeur, qui tokenise à la fois les textes et les images et les prépare pour l’entrée dans le modèle. Ce processus ressemble à l’appel d’un tokenizer dans le cas d’utilisation standard uniquement texte. Étant donné un lot de descriptions, un padding est appliqué pour garantir qu’elles aient toutes la même longueur pour le stockage en tenseur, et un tronquage est utilisé pour limiter les phrases longues à la longueur de séquence maximale (qui, comme mentionné précédemment, est de 76). Enfin, passez les entrées tokenisées au modèle, qui les transmet ensuite aux encodeurs de texte et d’image.
with torch.no_grad():
inputs = processor(text=descriptions, images=images, return_tensors=“pt”, padding=True, truncation=True)
outputs = model(**inputs)
Maintenant, nous pouvons obtenir la matrice des produits scalaires en utilisant deux fonctions différentes. Utilisez logits_per_image pour récupérer une matrice de produits scalaires de forme [num_of_images, num_of_text], et logits_per_text pour obtenir la matrice de forme [num_of_text, num_of_images].
dot_products_per_image = outputs.logits_per_image
dot_products_per_text = outputs.logits_per_text
Enfin, si vous le souhaitez, nous pouvons appliquer une fonction softmax à ces matrices pour obtenir une distribution de probabilité pour chaque image.
probabilities = dot_products_per_image.softmax(dim=1)
Limitations de l’utilisation de OpenAI CLIP
Bien que l’article explore de nombreuses expériences et résultats, il est important de reconnaître que CLIP présente plusieurs limitations.
Premièrement, en raison de la décision de conception mentionnée plus tôt, CLIP n’est pas un modèle génératif et ne peut pas effectuer des tâches telles que la génération de légendes d’images. Cependant, d’autres IA génératives peuvent effectuer plus de travail que OpenAI CLIP. Par exemple :

Le LLM de novita.ai réalisant une légende d’image
D’autres IA génératives comme novita.ai peuvent compenser les lacunes de CLIP en appliquant des API correspondantes.
Les auteurs notent que CLIP est encore loin d’être un état de l’art et qu’il n’est comparable qu’à un ResNet avec une couche linéaire par-dessus. Il généralise mal à certaines tâches ; par exemple, il n’atteint que 88 % de précision sur le jeu de données facile de reconnaissance de chiffres manuscrits MNIST, probablement parce qu’il n’y a pas d’images similaires dans ses données d’entraînement et que CLIP ne fait pas grand-chose pour résoudre ce problème.
CLIP est entraîné sur des paires image-texte non filtrées et non organisées provenant d’Internet, ce qui fait que le modèle apprend de nombreux biais sociaux. Ces préoccupations sont similaires à celles des grands modèles de langage (LLM) actuels, pour lesquels des techniques comme RLFHF (Robust Low-Frequency Hacking Framework) et Direct Preference Optimization tentent d’atténuer ces biais.
De plus, dans l’implémentation originale, la longueur maximale de séquence pour l’encodeur de texte Transformer était plafonnée à 76. Cette limitation vient du fait que l’ensemble de données est principalement composé d’images et de légendes courtes. Par conséquent, utiliser le modèle pré-entraîné prêt à l’emploi peut ne pas bien fonctionner avec des textes plus longs, car ils seraient tronqués après 76 tokens, étant donné que le modèle a été entraîné avec des textes courts.
Orientations futures dans l’analyse image-texte avec CLIP
Le succès d’OpenAI CLIP a ouvert de nouvelles possibilités pour l’avenir de l’analyse image-texte. Les chercheurs et les développeurs explorent continuellement des applications et des avancées innovantes dans ce domaine.
Une direction future est l’intégration de CLIP avec d’autres modalités, comme l’audio et la vidéo, pour permettre une analyse multimodale. Cela permettrait à CLIP de comprendre et d’analyser des données multimédia complexes, conduisant à des résultats plus complets et précis.
De plus, les avancées dans l’apprentissage auto-supervisé et l’apprentissage non supervisé de représentations peuvent encore améliorer les performances et les capacités de généralisation de CLIP. Ces avancées peuvent débloquer de nouveaux potentiels pour CLIP dans divers domaines, notamment la santé, la robotique et l’analyse de contenu multimédia.
L’avenir de l’analyse image-texte avec CLIP est prometteur, et les recherches et développements en cours continueront de repousser les limites de ce domaine passionnant.
Conclusion
OpenAI CLIP marque un bond significatif dans l’analyse image-texte, en utilisant des transformateurs à grande échelle et l’apprentissage contrastif pour classer des images en fonction de descriptions en langage naturel. Sa polyvalence permet de nombreuses applications innovantes, bien qu’il fasse face à des limitations telles que des difficultés avec des tâches hors de son domaine d’entraînement, une longueur de séquence plafonnée pour le texte, et des biais sociaux hérités de ses données d’entraînement non filtrées.
Des techniques comme l’ingénierie des prompts et l’ensemblage ont amélioré ses performances, et les avancées futures dans l’intégration d’autres modalités, comme l’audio et la vidéo, ainsi que l’apprentissage auto-supervisé et non supervisé, promettent d’améliorer encore les capacités de CLIP. Les recherches et développements en cours dans ce domaine laissent présager un avenir radieux pour une analyse multimédia plus complète et précise.
novita.ai, la plateforme tout-en-un pour une créativité sans limites qui vous donne accès à 100+ API. De la génération d’images au traitement du langage, en passant par l’amélioration audio et la manipulation vidéo, avec un paiement à l’utilisation économique, elle vous libère des tracas de la maintenance des GPU tout en construisant vos propres produits. Essayez-la gratuitement.
Lectures recommandées
Moteur d’inférence LLM Novita AI : le plus grand débit et l’inférence la moins chère disponible
