CLIP apprenait aux encodeurs d'images et de texte à s'accorder en opposant chaque paire d'un batch à toutes les autres. SigLIP pose une question bien plus modeste, paire par paire : cette image et ce texte correspondent-ils, oui ou non ? Toute l'idée tient là — et c'est ce qui a fait de SigLIP, proposé par Google DeepMind en 2023 et aujourd'hui à sa deuxième génération, l'encodeur visuel par défaut d'une bonne part des modèles vision-langage open source récents, PaliGemma en tête.
Pour le reste, les deux modèles partagent la même architecture. Tout est identique jusqu'à l'ultime étape — encodeurs, embeddings, score de similarité. Seul le calcul de la perte, mis en évidence ci-dessous, diverge :
Le problème que SigLIP devait résoudre
CLIP (2021) entraîne deux encodeurs distincts — un pour les images, un pour le texte — de manière que les paires image-texte qui correspondent se rapprochent dans un espace d'embedding commun, et que les autres s'en éloignent. Le mécanisme repose sur une perte contrastive de type softmax : pour un batch de paires, on construit la matrice complète des scores de similarité, puis on normalise chaque ligne et chaque colonne par un softmax, comme s'il s'agissait d'une classification à classes — « laquelle de ces légendes correspond à cette image ? ».
Cela fonctionne, mais la normalisation softmax rend la perte de chaque paire dépendante de toutes les autres paires du batch. Il faut donc avoir construit la matrice entière avant de pouvoir calculer quoi que ce soit, ce qui consomme une mémoire croissant avec la taille du batch. S'y ajoute une asymétrie entre lignes et colonnes, qu'il faut traiter en deux passes : un softmax des images vers les textes, un autre des textes vers les images.
La solution : traiter chaque paire séparément
SigLIP — Sigmoid Loss for Language Image Pre-Training, de Xiaohua Zhai, Basil Mustafa, Alexander Kolesnikov et Lucas Beyer, Google DeepMind, ICCV 2023 — remplace le softmax par une perte sigmoïde. Chaque paire image-texte, correspondante ou non, est évaluée seule, comme une classification binaire. Pour la paire , le logit s'écrit :
où et sont les embeddings normalisés de l'image et du texte, une température apprise et un biais appris. La perte se réduit alors à une entropie croisée binaire par rapport à une étiquette valant pour la vraie paire () et pour toutes les autres. Ni ligne, ni colonne, ni terme de normalisation partagé :
Le biais appris compte plus qu'on ne l'imagine : avec négatifs pour chaque positif, la perte est d'emblée dominée par les négatifs. Les auteurs initialisent donc à une valeur fortement négative pour compenser ce déséquilibre en début d'entraînement.
Comme aucune paire n'a besoin d'informations venues d'une autre pour calculer sa propre perte, on ne construit jamais la matrice normalisée dense : chaque appareil traite son lot local de paires et n'échange que les embeddings bruts, sans statistiques softmax intermédiaires. L'opération est plus légère et bien plus facile à paralléliser — d'où les gains d'efficacité décrits ci-dessous.
Ce que ce choix a rapporté
Les résultats phares de l'article, d'après le résumé et la présentation à l'ICCV :
- Meilleur sur les petits batchs, et meilleur passage à l'échelle sur les grands. La perte sigmoïde supprime la dépendance du softmax à de très grands batchs pour obtenir un signal fiable, tout en se parallélisant à moindre coût lorsqu'on monte en échelle.
- La taille de batch sature autour de 32 000, bien en deçà des configurations à la CLIP, qui poussaient vers plusieurs centaines de milliers ; au-delà, jusqu'à un million, les gains deviennent marginaux.
- Un modèle SigLiT — la perte de SigLIP combinée au Locked-image Tuning — atteint 84,5 % de précision zero-shot sur ImageNet, en s'entraînant sur seulement quatre puces TPUv4 pendant deux jours.
C'est ce dernier chiffre qui a compté en pratique : un résultat de ce niveau n'exigeait plus un cluster d'entraînement de laboratoire.
Une architecture volontairement simple
Les encodeurs n'ont rien de novateur, et c'est précisément le propos de l'article. SigLIP est un double encodeur standard : un Vision Transformer pour les images, un encodeur de texte Transformer pour le texte, chacun produisant un unique embedding agrégé, que l'on compare par produit scalaire. Tout l'effort de conception porte sur la perte, pas sur les tours.
L'implémentation dans transformers de Hugging Face reflète exactement cette séparation — SiglipVisionModel, SiglipTextModel et un SiglipModel combiné —, à quoi s'ajoutent SiglipForImageClassification pour une tête de classification, la prise en charge de FlashAttention/SDPA et la quantification en int4 via bitsandbytes. La documentation signale deux pièges classiques : toujours passer padding="max_length" au tokenizer, car SigLIP a été entraîné sans la convention de longueur variable fondée sur [EOS] dont dépend CLIP ; et, pour la classification zero-shot, utiliser littéralement le gabarit "This is a photo of {label}.", celui sur lequel le modèle a été calibré.
from PIL import Image
import requests
from transformers import AutoProcessor, AutoModel
import torch
model = AutoModel.from_pretrained("google/siglip-so400m-patch14-384")
processor = AutoProcessor.from_pretrained("google/siglip-so400m-patch14-384")
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
texts = ["a photo of 2 cats", "a photo of 2 dogs"]
inputs = processor(text=texts, images=image, padding="max_length", return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
probs = torch.sigmoid(outputs.logits_per_image) # independent probabilities, not a softmax distribution
Notez la dernière ligne : la perte étant une sigmoïde, les scores obtenus à l'inférence sont des probabilités indépendantes pour chaque étiquette, et non une distribution dont la somme vaut 1 sur l'ensemble des légendes candidates. La différence est mince, mais bien réelle par rapport à la lecture des logits de CLIP.
Le so400m du nom de ce checkpoint mérite une note : il désigne un ViT « à forme optimisée » (SoViT-400m), issu d'un autre article de Google sur les formes de vision transformer optimales en calcul. Ce n'est donc pas une contribution de SigLIP, qui l'a simplement adopté comme l'une de ses variantes publiées, aux côtés des architectures ViT-B et ViT-L classiques.
SigLIP 2 : la même idée, généralisée
SigLIP 2: Multilingual Vision-Language Encoders with Improved Semantic Understanding, Localization, and Dense Features (Tschannen et al., Google DeepMind, février 2025) conserve la perte sigmoïde comme objectif de base et lui adjoint plusieurs ingrédients : un pré-entraînement par sous-titrage, des pertes auto-supervisées (auto-distillation et prédiction masquée, dans l'esprit de DINO et BEiT) et une sélection des données en cours d'entraînement. Le modèle est entraîné sur WebLI, soit environ 10 milliards d'images associées à 12 milliards de textes alternatifs en 109 langues. Il se décline en quatre tailles — B (86 M), L (303 M), So400m (400 M) et une nouvelle g (1 Md) —, plus une variante NaFlex qui accepte les rapports d'aspect natifs et plusieurs résolutions au lieu d'imposer un recadrage carré. Selon l'article, SigLIP 2 dépasse SigLIP 1 à chaque échelle comparable, en classification zero-shot, en recherche image-texte et comme tour de vision gelée alimentant des VLM en aval.
Pourquoi ce choix a compté bien au-delà de l'article
Les chiffres d'efficacité ont fait les titres, mais l'effet le plus durable est architectural. Parce que SigLIP est assez peu coûteux à pré-entraîner correctement, sans dispositif multi-pods à très grands batchs, il s'est imposé comme un choix par défaut simple et de qualité pour servir d'encodeur visuel gelé — ou légèrement affiné — dans les modèles vision-langage qui ont suivi. PaliGemma en est l'exemple le plus net, puisqu'il reprend directement l'encodeur So400m de SigLIP. Une fonction de perte qui lève une contrainte d'échelle devient ainsi un composant que d'autres équipes réutilisent sans avoir à le redémontrer : c'est en général ainsi qu'une bonne simplification se diffuse dans un domaine.