基础学习(16) CLIP 和 SigLIP 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档文章目录前言1 CLIP1.1 CLIP 想解决什么问题?1.1.1 传统视觉模型的问题: 类别是固定的1.1.2 CLIP 的核心想法用自然语言监督视觉模型1.2 CLIP的数据空间: WIT(4 亿对)1.3 CLIP的 模型结构: 两个 encoder1.3.1 对照训练1.3.2 symmetric cross entropy loss1.3.3 推理1.3.4 prompt engineering 为什么重要2 SigLIP2.1 SigLIP 首先不是推翻 CLIP2.2 CLIP softmax 的痛点2.3 SigLIP 的改进2.4 改成 sigmoid之后各种好处总结前言CLIP 和 SigLIP 都是由 Google、OpenAI 等顶级团队提出的多模态预训练模型它们的核心任务都是将图像和文本映射到同一个向量空间从而实现“看图识字”或“用文字搜图”。CLIP是OpenAI 在 2021 年发表的论文《Learning Transferable Visual Models From Natural Language Supervision》从自然语言监督中学习可迁移的视觉模型是多模态深度学习领域的开山之作 。它所提出的 CLIPContrastive Language-Image Pre-training 模型彻底改变了计算机视觉CV的研究范式 。虽然它们的目的相同但背后的损失函数Loss Function有本质区别这也让 SigLIP 在效率和性能上更胜一筹。1 CLIP1.1 CLIP 想解决什么问题?1.1.1 传统视觉模型的问题:类别是固定的CLIP 开篇就说, 当前SOTA 的 书觉熊通常训练成预测一组固定的, 预先定义好的类别. 这种监督形式会限制模型的通用行, 因为如果要识别新的 数据概念 ,那么 就要额外标注数据.举个例子:传统 ImageNet 分类器大概是image → ResNet / ViT → 1000 类 softmax它只能在固定类别里选dog / cat / car / airplane / cup / …如果你想让它识别a robot gripper holding a red block传统分类器没有这个类别就很难直接做。1.1.2 CLIP 的核心想法用自然语言监督视觉模型所以CLIP就用了一个朴素的想法: 直接从图像相关的原始文本中学习, 是一种更广泛的监督来源. CLIP 提出的预训练任务是: 预测哪段 caption 和 哪张image 匹配. 这个 任务在 4亿个互联网 image-text pairs 上训练.所以 CLIP 任务不是识别 : 图片属于某个固定的类别,而是: 判断image 和 ext 是否匹配比如图片:对应的 text 就是: text: “一只边境牧羊犬”1.2 CLIP的数据空间: WIT(4 亿对)CLIP的工作中 构建了一个新的数据集包含 400 million image-text pairs来自互联网公开来源为了覆盖尽可能广的视觉概念构建过程中使用了 50 万个 query并且每个 query 最多包含约 20,000 个 image-text pairs论文把这个数据集称为 WIT / WebImageText。再强调下:CLIP 不是靠人工标注的固定类别训练而是靠互联网上图片旁边自然存在的文本训练。举个例子:ImageNet: 人规定类别 → 图片对应类别 idCLIP: 互联网上的图文对 → 图片和自然语言描述对齐所以CLIP 庚容易学到下面这种更开放的词汇red cup wooden table a dog running on grass a person holding a phone a robot arm1.3 CLIP的 模型结构: 两个 encoder这张图很经典: 左边(1) 是训练 (2) (3) 组成了 推理结构很清晰, 其中要注意的是(1)的 这个矩阵1.3.1 对照训练假设一个 batch 有 N 对图文(image_1, text_1)(image_2, text_2)…(image_N, text_N)图片encoder 和 text encoder 后 会将将 一把 batch 内的 图像做两两 相似度, 就得到下面这张表text_1text_2text_3…text_Nimage_1✓✗✗…✗image_1✗✓✗…✗image_1✗✗✓…✗………………image_N✓✗✗…✓对角线是正样本image_i ↔ text_i非对角线是负样本image_i ↔ text_j, j ≠ i论文明确说给定一个 batch里面有 N 对真实的 image-text pair。CLIP 会把这 N 张图和 N 段文本两两组合得到 N × N 个候选配对。其中只有对角线上的 N 个配对是真实配对其余 N² − N 个都是错误配对。训练时CLIP 希望真实配对的图文 embedding 余弦相似度更高错误配对的相似度更低。最后在这个 N × N 相似度矩阵上优化一个双向的 cross-entropy loss也就是论文说的 symmetric cross entropy loss。这种双塔流程图作者也给出了为代码内容很简单,不赘述1.3.2 symmetric cross entropy loss有个细节作者解释了 info NCE 和 cross entropy, 其实我认为是一回事, 不必在意细节称呼. 在文中, 它专门用于自监督学习如 SimCLR 变体、CLIP且 其对称性是为了消除单向对比带来的表征偏置Bias图找文本的 loss (axis 0 )L I → T − 1 N ∑ i 0 N − 1 log ⁡ exp ⁡ ( Logits i , i ) ∑ j 0 N − 1 exp ⁡ ( Logits i , j ) {L}_{I \to T} -\frac{1}{N} \sum_{i0}^{N-1} \log \frac{\exp(\text{Logits}_{i,i})}{\sum_{j0}^{N-1} \exp(\text{Logits}_{i,j})}LI→T​−N1​i0∑N−1​log∑j0N−1​exp(Logitsi,j​)exp(Logitsi,i​)​文本找图的 loss (axis 1 )L T → I − 1 N ∑ j 0 N − 1 log ⁡ exp ⁡ ( Logits j , j ) ∑ i 0 N − 1 exp ⁡ ( Logits i , j ) {L}_{T \to I} -\frac{1}{N} \sum_{j0}^{N-1} \log \frac{\exp(\text{Logits}_{j,j})}{\sum_{i0}^{N-1} \exp(\text{Logits}_{i,j})}LT→I​−N1​j0∑N−1​log∑i0N−1​exp(Logitsi,j​)exp(Logitsj,j​)​最终总 Loss 取两者算术平均L CLIP L I → T L T → I 2 \mathcal{L}_{\text{CLIP}} \frac{\mathcal{L}_{I \to T} \mathcal{L}_{T \to I}}{2}LCLIP​2LI→T​LT→I​​。1.3.3 推理CLIP 预训练时就是判断 image 和 text snippet 是否配对做 zero-shot classification 时直接复用这个能力对每个数据集使用所有类别名作为潜在 text pairings然后预测最可能的 image-text pair。具体做法是(1) 先计算 image embedding 和所有候选文本的 text embeddings(2) 再计算cosine similarity乘以 temperature并通过 softmax 得到类别概率。论文还指出这个 prediction layer 可以看作一个 multinomial logistic regression classifier输入和权重都 L2-normalized无 bias有 temperature scaling用流程图举例:1.3.4 prompt engineering 为什么重要(1) 论文指出如果只把类别名提供给 text encoder模型无法区分词义。例如 ImageNet 里有construction crane 和会飞的 craneOxford-IIIT Pet 里 boxer 是狗的品种但没有上下文时也可能被理解为拳击运动员。所以直接用“boxer”不如用“a photo of a boxer, a type of pet”(2) 论文说补充: 预训练数据中图片配套文本很少只是一个单词通常是描述图片的完整句子。为了缩小这种训练-测试分布差异论文发现默认使用“A photo of a {label}.”通常比只用 label text 更好在 ImageNet 上仅这个 prompt 就提升了 1.3% accuracy。(3) 论文还实验了用多个 prompt 组成 ensemble例如“A photo of a big {label}.”“A photo of a small {label}.”它们不是在概率空间 ensemble而是在 embedding 空间平均因此对大规模预测来说计算成本可以被摊销。论文报告在 ImageNet 上 ensemble 80 个 context prompts 比单个默认 prompt 又提升 3.5%prompt engineering ensembling 总体大约提升 5 个点。2 SigLIP2.1 SigLIP 首先不是推翻 CLIPSigLIP 依然是双向交叉熵, 依然是 image encoder text encoder 图文 embedding 对齐但是 CLIP 需要 通过下面的矩阵 在 x 方向(image- text) 和 y 方向(text-image) 做 softmaxtext_1text_2text_3…text_Nimage_1✓✗✗…✗image_1✗✓✗…✗image_1✗✗✓…✗………………image_N✓✗✗…✓2.2 CLIP softmax 的痛点CLIP 的 loss 不是单样本独立的而是 batch 内图文两两对比。假设 global batch 里有 N 对 image-text pair(image_1, text_1)(image_2, text_2)…(image_N, text_N)CLIP 要构造一个N × N similarity matrix所有 image embedding × 所有 text embedding如果 global batch 32768那么相似度矩阵就是32768 × 32768这非常大。(一个 device上也许就 几十个 batch , 可能 几百个类别)CLIP 的 forward 可以分开算GPU 0 算自己的 image/text embeddingGPU 1 算自己的 image/text embedding…GPU N 算自己的 image/text embedding但是算 loss 的时候每张图需要和 global batch 里的所有文本 比较。论文中的分图a(下面图的 (a)) 就说的很明确也就是说CLIP 的 forward 可以分开算GPU 0 算自己的 image/text embeddingGPU 1 算自己的 image/text embedding…但是算 loss 的时候每张图需要和 global batch 里的所有文本 比较。2.3 SigLIP 的改进作者的思路:SigLIP 把 CLIP 的 softmax 多分类问题 改成了 pairwise binary classification 问题。也就是说CLIP 问的是给 image_i在 N 个 text 中哪个是正确的SigLIP 问的是这个 image-text pair 匹配吗回答 ‘是’ 或者 ‘不是’因此就有: 对于每一个 pair(image_i, text_j)SigLIP 都给一个二分类标签如果 i j正样本label 1如果 i ! j负样本label -1SigLIP 论文明确说sigmoid-based loss(对于分类问题, 就可以用 sigmoid) 把问题转成所有 pair combinations 上的标准 binary classification匹配 pair 是正样本不匹配 pair 是负样本。作者的算法(其实作者的思路很简单, 就是踏马的数学公式很玄呼)trick 点: labels 2 * eye(n) - ones(n) — 构建对角阵, 1 让 正样本logits 越大越好, -1 让副样本 logits 越小越好作者的优化SigLIP 比 CLIP 多了一个很重要的 learnable biasblogits 是similarity * temperature bias论文解释原因是一个 batch 里负样本数量远多于正样本。对于 batch size N有:正样本数量N负样本数量N² - N比如 N 16k 时正样本是 16k但负样本是大约 268M。论文说在初始化时这种大量负样本带来的不平衡会主导 loss导致优化初期出现很大的 correction因此它引入 learnable bias term b并把 b 初始化为 -10temperature 初始化为 log 10。这个点很关键SigLIP 不是简单地把 softmax 换成 sigmoid 就完了它还加了 bias 来处理正负样本极度不平衡的问题。作者的这个图就说明了所有 分类的 loss 怎么算完的(作者 以3个 device 举例): 一个 device只能计算 4 * 4 /(12 * 12) 的数据量( b ) 第一次了可能对角分块的, 那么就是3 ∗ ( 4 ∗ 4 / ( 12 ∗ 12 ) ) 3 * (4 * 4 /(12 * 12))3∗(4∗4/(12∗12))( c ) 进行了 一次swap后, 没计算的 有了一次计算(但还没计算完), 此时 每个 有算了剩下的( d ) 再进行了 一次 swap 后, 把剩余的也算了, 好,现在 可以得到 全局的 分类结果, 而不是 要取每个 设备的上的 softmax 结果.PS:主要是因为它训练效率高、图文对齐效果强、公开模型性能好。动作生成仍然要靠 OpenVLA、π0、ACT、Diffusion Policy 这类 policy / action decoder。2.4 改成 sigmoid之后各种好处(1) 肉眼可见到的就是不需要全局通信, 就是 那个soft max 的全局归一化不要了(2) 更大 batch : 论文给了一个具体例子在 4 个 TPU-v4 chips 上Base SigLIP 可以放 batch size 4096而对应的 CLIP model 只能放 2048(3)在 SigLiT 设置下当 batch size 小于 16k 时sigmoid loss 比 softmax loss 好很多batch size 增大后softmax 会追上来。(4)论文 Figure 7 的结论是随着 corruption 增强sigmoid loss 训练的模型比 softmax baseline 更能保持优势总结1 双向交叉熵2 CLIP 基本思路3 SigLIP 的思路 和 优点