SigLIP

SigLIP

项目地址: https://github.com/google-research/big_vision/blob/main/big_vision/trainers/proj/image_text/siglip.py
论文: Sigmoid Loss for Language Image Pre-Training

背景

在CLIP预训练时使用softmax函数会产生数值不稳定现象,因此作者尝试采用sigmoid函数来实现损失计算。作者发现sigmoid函数能提高训练效率,并且显存占用比softmax小,能够以此来增大batch size。在16k batch size以内,sigmoid效果显著高于softmax,之后逐渐缩小

方法

Softmax 损失:

Sigmoid 损失:

初始阶段,负样本数量众多会主导损失,为了纠正初始阶段的偏差,引入类似温度t的可学习偏差b,初始化t=lg10,b=-10

高效的“分块”实现

由于sigmoid不像softmax一样需要其他样本来计算损失(每个样本损失都是独立项),因此可以通过分块来实现快速计算。

SigLIP2

项目地址: https://github.com/google-research/big_vision/blob/main/big_vision/configs/proj/image_text/README_siglip2.md
论文: SigLIP 2

背景

在第二次迭代中,我们将原版图文训练目标与多项先前独立开发的技术扩展为统一的方案——包括基于字幕的预训练、自监督损失(自蒸馏、掩蔽预测)和在线数据管理。凭借这些改进,SigLIP 2 模型在所有模型规模上的核心能力(包括零样本分类、图文检索以及在为视觉语言模型 (VLM) 提取视觉表征时的迁移性能)均优于 SigLIP 同类模型。

数据

  • WebLI 数据集,包含 100 亿图片和 120 亿文本,涵盖 109 种语言
  • Adam 优化器,lr=1e-3,decay=1e-4,
  • batch size=32k
  • 余弦衰减学习率策略,warmup=20k
  • 共 400 亿样本对
  • 2048 块 TPUv5e 芯片
  • 完全数据分片并行策略 FSDP

训练策略

Stage1:预训练

  1. 结合 SigLIP 和 LocCa 损失,权重 1:1
  2. Decoder 同时训练 3 个目标(相当于 3 次前向传递)
  3. 对于所有模型尺寸,patch size=16,图像分辨率256(因此图像 seqlen 也是 256)

Stage2:自蒸馏和掩码预测

  1. 自蒸馏:设计 local-to-global consistency loss,视觉编码器充当学生网络,获取图像的局部视图,训练学生网络来匹配具有完整视图的教室网络。教师参数是通过对学生参数在前几次迭代中进行指数移动平均值 (EMA) 计算得出的
  2. 掩码预测:将学生网络中的 50% 图像 embedding mask,然后训练学生网络匹配教室网络的特征,损失同上
  3. 在预训练完成 80% 的时候添加这两个损失,并用学生参数初始化教师模型,计算 SigLIP 和 LocCa 损失时保留原始图像。

Stage3:自适应分辨率

  1. SigLIP 2 从原始检查点(序列长度 256,patch size 16)恢复训练,在训练完成 95% 时进行调整。模型会根据目标序列长度调整位置嵌入大小,并在新分辨率下继续训练,同时应用所有损失函数。
  2. 使用NaFlex技术来实现自适应分辨率,首先调整图像尺寸,确保其维度为 patch size 的整数倍。调整后的图像被分割成 patch,如果序列长度小于目标长度,则添加包含 patch 坐标和填充信息的数据。使用抗锯齿双线性方法调整位置嵌入大小,以匹配调整后输入的非正方形 patch 网格。
  3. NaFlex 训练从默认 SigLIP 2 检查点开始,这些检查点初始阶段使用非纵横比保持的方式调整至 256px(序列长度 256)进行训练。在训练完成 90% 时,切换至纵横比保持的调整方式,并从 128、256、576、784、1024 序列长度中均匀采样。

SigLIP
https://guokent.github.io/papernotes/siglip/
作者
Kent
发布于
2025年8月12日
许可协议