SigLIP
SigLIP обучает энкодеры изображений и текста с помощью попарной сигмоидной функции потерь вместо softmax, используемого в CLIP, сокращая расход памяти. Как это работает, SigLIP 2 и код.
SigLIP (сигмоидная функция потерь для предварительного обучения на изображениях и текстовых описаниях) — это метод исследователей Google для обучения кодировщиков изображений и текста на парах изображений и подписей к ним, а также название семейства обученных с его помощью моделей. Как и CLIP, этот метод обучается общему пространству эмбеддингов, в котором изображение и описывающая его подпись оказываются близко друг к другу. Разница заключается в функции потерь: SigLIP рассматривает каждую пару «изображение — текст» в пакете как отдельный вопрос с ответом «да» или «нет» и оценивает её с помощью сигмоиды, вместо того чтобы предлагать каждому изображению выбрать подпись из всего пакета с помощью softmax. Это изменение, представленное в статье о SigLIP за 2023 год, снижает потребление памяти, лучше работает с небольшими размерами пакета и сделало кодировщики SigLIP распространённым компонентом компьютерного зрения в визуально-языковых моделях (VLMs).
Как работает сигмоидная функция потерь#
Для пакета из N пар «изображение — подпись» SigLIP вычисляет сходство каждого эмбеддинга изображения с каждым текстовым эмбеддингом, получая N×N оценок. Каждую оценку умножают на обучаемую температуру t, прибавляют обучаемое смещение b и применяют бинарную логарифмическую сигмоидную функцию потерь: N истинных пар на диагонали помечаются как совпадения, а остальные N² − N пар — как несовпадения. Начальная температура равна 10, а смещение — −10. Так обучение начинается с предположения, что почти все пары не совпадают, что предотвращает большие начальные обновления из-за дисбаланса: на одно положительное совпадение для изображения приходится N − 1 отрицательных.
Приведённый ниже код на PyTorch вычисляет эту функцию потерь для четырёх пар: сначала с правильными подписями, затем со сдвинутыми на одну позицию:
import torch
import torch.nn.functional as F
# Normalized embeddings for 4 image-caption pairs: row i of each tensor belongs together
torch.manual_seed(0)
images = F.normalize(torch.randn(4, 64), dim=-1)
texts = F.normalize(images + 0.05 * torch.randn(4, 64), dim=-1)
# Learnable temperature and bias, at the values SigLIP initializes them to
t, b = 10.0, -10.0
# Every image-text pair is its own binary problem: +1 for a match, -1 for the other 12 pairs
labels = 2 * torch.eye(4) - 1
for name, captions in [("matched", texts), ("shuffled", texts.roll(1, dims=0))]:
logits = t * images @ captions.T + b
loss = -F.logsigmoid(labels * logits).sum() / 4
print(f"{name} captions: loss {loss:.2f}")Выводятся значения matched captions: loss 1.21 и shuffled captions: loss 10.50. Когда подписи сдвинуты, каждая диагональная пара, помеченная как совпадение, на самом деле не совпадает, и функция потерь увеличивается почти в девять раз.
Слагаемое функции потерь для каждой пары зависит только от этой пары, поэтому полную матрицу N×N не нужно целиком размещать на одном устройстве. Каждый ускоритель оценивает свои изображения относительно собственных текстов, затем передаёт их текстовые эмбеддинги следующему ускорителю и повторяет вычисления:
Функцию потерь softmax нельзя разделить таким образом, потому что вероятность для каждого изображения нормализуется по всем подписям в пакете.
SigLIP и CLIP#
Обе модели обучают два кодировщика с помощью контрастивного обучения, но нормализация функции потерь выполняется по-разному:
- CLIP: кросс-энтропия с softmax для каждой строки и каждого столбца матрицы сходства пакета. Она вычисляется после того, как каждое устройство собирает эмбеддинги со всех остальных устройств.
- SigLIP: независимая бинарная функция потерь для каждой пары. В статье SigLIP превзошла функцию потерь с softmax при небольших размерах пакета, а выигрыш от увеличения пакета постепенно сходил на нет: достаточным оказался размер 32k. В сочетании с замороженным предварительно обученным кодировщиком изображений эта модель за два дня обучения на четырёх чипах TPUv4 достигла точности 84,5% на ImageNet в режиме zero-shot.
Функция потерь также влияет на оценки во время инференса: модель SigLIP независимо оценивает вероятность совпадения для каждой метки-кандидата, поэтому сумма вероятностей набора меток не обязана равняться 1.
SigLIP 2#
SigLIP 2, выпущенная в феврале 2025 года, сохраняет сигмоидную функцию потерь и добавляет декодер генерации подписей, самодистилляцию и предсказание маскированных данных во время обучения, а также онлайн-курацию данных. Кодировщики стали мультиязычными, а также лучше определяют местоположение объектов и извлекают плотные признаки, важные для построенных на их основе задач детекции и сегментации. Вариант NaFlex обрабатывает изображения с разным разрешением, сохраняя их исходное соотношение сторон. Модели доступны в размерах ViT-B, L, So400m и g, причём So400m — это оптимизированная по форме ViT с 400 миллионами параметров.
Примеры применения в реальных условиях#
- Кодировщики изображений для VLM: В PaliGemma от Google используется кодировщик изображений SigLIP So400m, а Gemma 3 применяет для обработки изображений кодировщик SigLIP с 400 миллионами параметров.
- Классификация zero-shot: Текстовые метки оцениваются относительно изображения без обучения классификатора. SigLIP 2 поддерживает множество языков.
- Семантический поиск: Поиск по эмбеддингам изображений, хранящимся в векторной базе данных, выполняется по текстовым запросам или другим изображениям.
- Исследование наборов данных: Платформа Ultralytics кодирует каждое изображение анализируемого набора данных с помощью такого кодировщика изображений и текста. Поэтому визуально похожие изображения оказываются рядом на диаграмме рассеяния Clustering, функция Find similar images находит ближайшие похожие изображения из других наборов данных, а текстовый поиск, например «погрузчик у дверного проёма», также находит изображения, соответствующие описанию.










