CLIP apprenait aux encodeurs d'images et de texte à s'accorder entre eux en faisant s'affronter chaque paire d'un batch contre toutes les autres. SigLIP pose une question bien plus modeste, paire par paire : cette paire image-texte correspond-elle, oui ou non ? C'est toute l'idée, et c'est pourquoi SigLIP — d'abord proposé par Google DeepMind en 2023, aujourd'hui à sa deuxième génération — est devenu discrètement l'encodeur visuel par défaut d'une large part des modèles vision-langage open source récents, PaliGemma en tête.
Les deux modèles partagent par ailleurs la même architecture. Tout, jusqu'à la dernière étape — les encodeurs, les embeddings, le score de similarité — est identique ; seule l'étape de la perte, mise 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 sorte que les paires image-texte qui correspondent se retrouvent proches dans un espace d'embedding partagé, et que les paires qui ne correspondent pas se retrouvent éloignées. Il le fait avec une perte contrastive de type softmax : pour un batch de paires image-texte, on construit la matrice complète des scores de similarité, puis on normalise chaque ligne et chaque colonne avec un softmax, en traitant cela comme un problème de classification à classes — « laquelle de ces légendes correspond à cette image ? »
Cela fonctionne, mais la normalisation softmax fait que la perte de chaque paire dépend de toutes les autres paires du batch à cette étape. Il faut avoir matérialisé la matrice entière avant de pouvoir calculer quoi que ce soit, ce qui coûte une mémoire qui croît avec la taille du batch et crée une asymétrie entre lignes et colonnes qu'il faut gérer avec deux passes (un softmax images-vers-textes, un autre textes-vers-images).
La solution : traiter chaque paire indépendamment
SigLIP — Sigmoid Loss for Language Image Pre-Training, Xiaohua Zhai, Basil Mustafa, Alexander Kolesnikov et Lucas Beyer, Google DeepMind, ICCV 2023 — remplace le softmax par une perte de type sigmoïde. Chaque paire image-texte, qu'elle corresponde ou non, est évaluée seule, comme un problème de classification binaire : pour la paire , le logit est
où et sont les embeddings (normalisés) de l'image et du texte, est une température apprise, et est un biais appris. La perte n'est alors qu'une entropie croisée binaire par rapport à une étiquette de pour la vraie paire () et pour chaque paire non correspondante — pas de ligne, pas de colonne, pas de terme de normalisation partagé :
Le biais appris compte plus qu'il n'y paraît : avec négatifs pour chaque positif dans un batch, la perte est au départ dominée par les négatifs, donc les auteurs initialisent fortement négatif pour contrebalancer ce déséquilibre en début d'entraînement.
Comme aucune paire n'a besoin d'informations provenant d'une autre paire pour calculer sa propre perte, on ne construit jamais la matrice normalisée dense — chaque appareil peut calculer son lot local de paires et n'a besoin d'échanger que les embeddings bruts, pas des statistiques softmax intermédiaires. C'est une opération plus petite, plus facilement parallélisable, et c'est toute la raison des gains d'efficacité présentés ci-dessous.
Ce que cela leur a rapporté
Les résultats phares de l'article, d'après le résumé et la présentation à l'ICCV :
- Meilleur sur de petits batchs, et passe encore mieux à 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 quand on monte en échelle.
- La taille de batch sature autour de 32k, bien en dessous des configurations à la CLIP qui poussaient vers des centaines de milliers ; les gains à aller jusqu'à un batch d'1M sont marginaux.
- Un modèle SigLiT — la perte de SigLIP combinée au Locked-image Tuning — a atteint 84,5 % de précision zero-shot sur ImageNet en entraînant sur seulement quatre puces TPUv4 pendant deux jours.
Ce dernier chiffre est celui qui comptait en pratique : un résultat de cet ordre ne nécessitait plus un cluster d'entraînement à l'échelle d'un laboratoire.
Une architecture délibérément simple
Rien n'est novateur dans les encodeurs — 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é, comparés par produit scalaire. Tout l'effort de conception porte sur la perte, pas sur les tours.
L'implémentation dans transformers de Hugging Face expose exactement cette séparation — SiglipVisionModel, SiglipTextModel, et un SiglipModel combiné — plus SiglipForImageClassification pour le cas d'une tête de classification, ainsi que le support de FlashAttention/SDPA et de la quantification int4 via bitsandbytes. Deux détails d'usage que la documentation signale comme faciles à mal faire : toujours passer padding="max_length" au tokenizer (SigLIP a été entraîné sans la convention de longueur variable basée sur [EOS] dont dépend CLIP), et pour la classification zero-shot, utiliser le gabarit de prompt littéral "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
Remarquez la dernière ligne : comme la perte est une sigmoïde, les scores au moment de l'inférence sont des probabilités indépendantes par étiquette, plutôt qu'une distribution qui doit sommer à 1 sur l'ensemble de vos légendes candidates — une différence petite mais réelle par rapport à la manière de lire les logits de CLIP.
Le so400m dans ce nom de checkpoint mérite une note : c'est un ViT « à forme optimisée » (SoViT-400m) issu d'un article séparé de Google sur les formes de vision transformer optimales en calcul, pas quelque chose introduit par SigLIP lui-même — SigLIP l'a simplement adopté comme l'une de ses variantes publiées, aux côtés de dorsaux 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 y ajoute plusieurs éléments de recette d'entraînement : un pré-entraînement basé sur le sous-titrage, des pertes auto-supervisées (auto-distillation et prédiction masquée, dans l'esprit de DINO/BEiT), et une curation de données en ligne. Il est entraîné sur WebLI, environ 10 milliards d'images associées à 12 milliards de textes alternatifs dans 109 langues, et se décline en quatre tailles — B (86M), L (303M), So400m (400M), et une nouvelle g (1B) — plus une variante NaFlex qui accepte les ratios d'aspect natifs et plusieurs résolutions plutôt que d'imposer un recadrage carré fixe. Selon l'article, SigLIP 2 surpasse SigLIP 1 à chaque échelle de modèle comparable, en classification zero-shot, en recherche image-texte, et en tant que tour de vision gelée alimentant des VLM en aval.
Pourquoi ce choix de conception a fini par compter au-delà de l'article
Les chiffres d'efficacité font la une, mais l'effet le plus durable est architectural : parce que SigLIP est assez peu coûteux à bien pré-entraîner sans configuration d'entraînement multi-pods à grands batchs, il est devenu un choix par défaut facile et de haute qualité à greffer comme encodeur de vision gelé (ou légèrement ajusté) dans les modèles vision-langage ultérieurs — PaliGemma en étant l'exemple le plus clair, utilisant directement l'encodeur So400m de SigLIP. Une fonction de perte qui a levé une contrainte d'échelle s'est transformée en un composant que d'autres équipes pouvaient réutiliser sans avoir à le redériver — c'est ainsi qu'une bonne simplification se propage habituellement dans un domaine.
Liens
- Sigmoid Loss for Language Image Pre-Training (arXiv:2303.15343) — l'article original de SigLIP, ICCV 2023
- SigLIP 2 (arXiv:2502.14786) — multilingue, features plus denses, NaFlex
- Documentation
transformersde Hugging Face pour SigLIP - Documentation Hugging Face pour SigLIP 2
- google/siglip-so400m-patch14-384 — le checkpoint à forme optimisée utilisé ci-dessus
- PaliGemma — un VLM construit sur l'encodeur de vision SigLIP