SigLIP
SigLIP 使用成对 sigmoid 损失训练图像和文本编码器,而非 CLIP 的 softmax,从而降低内存占用。了解其工作原理、SigLIP 2 和代码。
SigLIP(语言图像预训练的 Sigmoid 损失)是 Google 研究人员提出的一种方法,用于在图像-描述配对数据上训练图像和文本编码器;它也是使用该方法训练出的模型系列的名称。与 CLIP 类似,它会学习一个共享的嵌入空间,使图像与描述该图像的文本彼此接近。两者的区别在于损失函数:SigLIP 会将批次中的每组图像-文本配对视为独立的是非问题,并用 sigmoid 评分;CLIP 则通过 softmax 要求每张图像从整个批次中选出自己的描述。该方法在2023 年 SigLIP 论文中提出,能够降低内存使用量,在较小的批次大小下表现更好,并使 SigLIP 编码器成为视觉语言模型(VLM)中常见的视觉组件。
Sigmoid 损失的工作方式#
对于包含 N 组图像-描述配对的批次,SigLIP 会计算每个图像嵌入与每个文本嵌入之间的相似度,得到 N×N 个分数。每个分数会乘以可学习温度参数 t,再加上可学习偏置 b,然后应用二元对数 sigmoid 损失:对角线上的 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 芯片上用两天训练出一个零样本 ImageNet 准确率达到 84.5% 的模型。
该损失也会影响推理时的分数:SigLIP 模型会为每个候选标签给出独立的匹配概率,因此一组标签的概率之和不一定为 1。
SigLIP 2#
SigLIP 2 于 2025 年 2 月发布,在保留 sigmoid 损失的同时,新增了图像描述解码器、自蒸馏、训练期间的掩码预测,以及在线数据整理。其编码器支持多语言,并提升了定位和密集特征能力;基于这些编码器构建的检测和分割任务会用到这些能力。NaFlex 变体可在保留图像原始宽高比的同时处理多种分辨率;模型提供 ViT-B、L、So400m 和 g 等规格,其中 So400m 是经过形状优化的 4 亿参数 ViT。
实际应用#
- 面向 VLM 的视觉编码器:Google 的 PaliGemma 使用 SigLIP So400m 图像编码器,Gemma 3 则使用 4 亿参数的 SigLIP 编码器处理图像输入。
- 零样本分类:无需训练分类器,即可用文本形式的标签对图像评分;借助 SigLIP 2,还能支持多种语言。
- 语义搜索:存储在向量数据库中的图像嵌入可通过文本查询或其他图像进行搜索。
- 数据集探索:Ultralytics Platform 会使用这类图像-文本编码器为经过分析的数据集中的每张图像生成嵌入,因此视觉相似的图像会聚集在其 Clustering 散点图中;Find similar images 会从其他数据集中返回最相似的图像;输入“门口附近的叉车”这样的搜索词,也会返回看起来符合描述的图像。










