CLIP、Open CLIP、SigLip、SigLip2的相关总结
目录
一、CLIP
1、介绍
编辑2、框架结构
3、局限性
二、OpenCLIP
1、幂律定律
三、SigLIP
1、概述
2、Sigmoid方法
3、分块训练
4、SigLIT和SigLIP
四、SigLIP2
1、概述
2、前置知识-LocCa
3、前置知识-SILC
4、前置知识-TIPS
5、架构和训练方法
6、不同分辨率处理
一、CLIP
1、介绍
CLIP可以说是颠覆多模态学习的革命性任务,通过WIT-400M原始图文对代替人工标注数据集,实现开放式的语义对齐,取代了以往人工标注进行图像分类的工作,实现了图像和文本的跨模态理解和统一表示,并实现零样本的语义对齐。
2、框架结构
主体仅有两个编码器,text encoder和image encoder,text encoder使用transformer结构(如BERT),image encoder则使用resnet或VIT架构。
训练过程:输入大量文本图像对,文本经过text encoder得到
,同样图像
经过image encoder得到
,但是由于输出通道数不一致,数值范围不一致,进行了Softmax归一化(这个解释更为准确),得到了
和
,shape均为
,保证所有向量均在单位超球面上。通过点积计算相似度logits,其中t为可学习参数,用于放大相似度差异。
计算对称对比损失:其中labels为对角线正确配对顺序,loss_i和loss_t分别利用交叉熵损失计算图像和文本作为查询的相似度值,最后计算两者平均。通过这种方式,对角线的正样本相似度可以取得最高值,并抑制其他与
的相似度
。
Zero-shot分类过程:首先创建一个object datasets,并规定他的prompt,如A photo of a {object}。将不同的object name带入prompt,输入text encoder,另外将图片输入到image encoder中并计算相似度值,值最高者为分类结果。
3、局限性
在细粒度问题,在out of distribution的数据集下,或者训练数据集分布差异过大的情况下,效果很差。
另外CLIP模型并为开源,训练代码也没开源,只能支持英文。
二、OpenCLIP
OpenCLIP研究了多模态的缩放定律,并引入更大的LAION-2B数据集进行训练,证明了数据,参数量和模型效果之间严格遵循幂律定律,并开源了代码。
1、幂律定律
以往的幂律定律都遵循单一模态,文字或是视觉,且依赖于私有数据和模型,在OpenCLIP中针对于多模态对比学习模型进行了测试,并完全依赖于开放数据LAION和开源模型OpenCLIP。
幂律定律: ,其中E为性能指标(下游任务错误率),C为计算规模(单位为GMAC,训练过程中浮点运算总量),
为常数系数(反应模型基准性能,取决于模型架构和训练数据分布),
为幂律指数,(反应性能随计算增长的缩放效率,
恒为负值,因为错误率E随计算规模C增大而下降,
越大表示模型提升的越快,加速度的意思)
在实验中,零样本分类,零样本检索任务中均进行了幂律定律拟合,对其进行两侧对数处理后拟合。可以看到零样本分类任务下,CLIP模型在WIT数据集下的分类任务有更高的缩放效率,OpenCLIP模型在LAION数据集下的分类任务只有
。
零样本检索任务下,OpenCLIP的缩放效率更高为-0.08,CLIP仅为-0.05,说明了LAION 数据通过 CLIPScore 过滤,偏向检索友好性,导致其分类任务 绝对值较小。
三、SigLIP
1、概述
由于传统CLIP或ALIGN模型均采用Softmax进行归一化,需要先计算整个数据的相似度再进行归一化,进而产生内存占用高的问题,在大batchsize下难以实现。SigLIP在CLIP基础上,考虑使用俩俩计算Sigmoid损失的方法来进行文本图像预训练。通过这种设计,可以进一步扩大batchsize大小,并且在小batchsize下效果更佳,仅使用4块TPUv4芯片,即可训练一个SigLIT模型。
在后续实验中发现batchsize小于16k时,Sigmoid损失显著优于Softmax损失,然而batchsize进一步扩大下,两者差距逐渐缩小,但在内存消耗上,Sigmoid计算损失只需要一次遍历。另外batchsize为32k时,足以用于图像文本预训练。
2、Sigmoid方法
由于以往的方法分别对图像和文本计算softmax,比如i2t部分,针对于对角线的每一个值都计算softmax,然后加和。
类似下面这个:其中每一个格都代表,对角线部分
,非对角线部分
,i2v部分计算对角线上的
(其他同a1),t2i部分则计算
(其他同a1)。
Sigmoid则无需全局归一化因子,其中所有记为正例,
为负例,
记作图像文本匹配为1,不匹配为-1,另外由于初始化阶段负样本过多,所以引入了b和t,用于修正偏差。损失函数如下:
另外从这个伪代码中可以看到,img_emb和txt_emb维度相同,这是怎么做的呢?原因是他修改了text encoder和image encoder的输出层,均为768通道数,进行了一个隐式约束。
3、分块训练
可以看下面的例子,将12对文本-图像对分别放在3个device上,每一个device先计算自己的4对sigmoid,然后将texts互相交换再计算sigmoid,重复三次,这样的单个集合置换速度非常快。
4、SigLIT和SigLIP
SigLIP就是可训练文本和视觉编码器,用于预训练,SigLIT复用Sigmoid损失,但是冻结视觉编码器,用于应用层的扩展,比如训练一个小规模的数据集来提高该数据集下的泛化性。
证明了SigLIT方法(图2),通过冻结视觉编码器,可以有利于提高更大的batchsize的情况,一般来说预训练时采用32,而SigLiT过程中可以提高batchsize,zero-shot下的精度有轻微提升,但整体上来说batchsize的增长会影响到精度提升的变化率的。
mSigLIP则是进行了多语言的预训练,通过保留WebLI数据集中全部的100种语言来扩大数据,而更多的语言需要建立一个统一的词汇表,在后续实验证明了大的词汇表(250k tokens)相比于小的词汇表(32k)可以提高1%的性能,其实这说明了该模型存在可扩展性,并没有因为类别增多,而下降性能,反而上升了。另外(下图图3)证明了32k的batchsize来进行多语言预训练是足够的。
后续其他的实验主要证明了各项参数数值选择的合理性,不在讨论。
四、SigLIP2
1、概述
虽然SigLIP在效率上和小批次训练上优势明显,但是定位能力,密集特征提取,多语言能力支持上仍然不足,SigLIP2构建了一个高效的多语言视觉-语言编码器。SigLIP2兼容SigLIP,保证现有用户只需要更换模型权重和tokenizer,则可以进行扩展,SigLIP2也进一步优化了小模型性能,通过主动数据蒸馏来提升。
SigLIP支持多语言输入,并在各方面(零样本分类/检索,定位,密集预测,用于VLM进行VQA任务,多样性和公平性)均优于 SigLIP 和其他开源基线模型。SigLIP2在ViT-B尺寸的编码器下效果最优,这取决于蒸馏的影响。另外DFN结果最接近SigLIP2,这取决于他在ImageNet,COCO,Flickr上进行预训练的数据过滤网络。
2、前置知识-LocCa
LocCa模型可以看做在SigLIP模型下,加了个Transformer decoder用于实现多任务的并行处理。其中图像编码器采用ViT作为基本架构,并输入一组tokens,通过cross attention与同一个Transformer decoder进行交互,Transformer decoder的训练通过多提示Cap,Ref,GCap,来训练不同的任务(caption生成,自动指代表达,定位字幕生成)。
简单的解释一下:Caption部分,输入Caption:,输出的就是caption;Ref部分,输入Ref:a puffin standing on cliff edge,输出边界框坐标[20,480,150,200];GCap部分,输入边界框GCap:[400,110,460,40],输出another puffin curled up in the back。
这也造成了损失函数分为三个部分。其中cap部分输出tokens之后用负对数似然损失计算,Ref部分首先通过线性层回归Predbbox,之后计算Predbbox和GTbbox的SmoothL1范数。最后计算平均值;GCap部分先对bbox进行位置编码并concat到tokens中输出一个文本tokens进行负对数似然损失计算。(不通过裁剪图片,这种方式效率更快)
值得注意的是,解码部分采用了因果注意力掩码机制,保证只以来以前的tokens,保证输出的时序性。
3、前置知识-SILC
SILC利用自蒸馏技术实现局部到全局的视觉文本对比学习。
SILC的Image Encoder通过教师和学生两个模型进行传递,输入到教师模型的图片crop原图40%-100%的全局信息(放缩两张256*256),输入到学生模型的图片crop原图5%-40%的随机局部区域(放缩八张96*96)。
训练过程中,teacher保持stop gradient,student保持training,并计算,并更新student,teacher则通过EMA逐轮更新权重。
貌似是clip,
是负对数似然,保证local crop的模型更像global crop。
teacher权重更新:,λ=0.996,基本上每次获得一点student信息。
推理过程中:只采用学生图像编码器。
4、前置知识-TIPS
TIPS可以理解为Student模型输入50%masks,Teacher模型则输入原图,最后预测被mask掉的部分,进行监督。其他部分相似于SILC模型,通过EMA更新Teacher模型。
5、架构和训练方法
SigLIP2的架构与SigLIP相同,并使用了多语言的Gemma分词器,训练数据来自于WebLI数据集,包含100亿张图像和120亿条文本,覆盖109种语言。
分词器的作用:就是将文本先转换成token,然后再输入到encoder中,而Gemma可以实现原子级的分词。
训练过程:首先用SigLIP+LocCa训练第一阶段,在进行80%的时候在增广视图上引入SILC和TIPS损失监督,并同时保留SigLIP+LocCa损失。
需要注意的是,SigLIP2并没有用多语言数据进行训练,而是通过多语言的分词器进行处理的。
6、不同分辨率处理
以往的方法都是固定分辨率进行处理,而SigLIP2为了迎合VLM的编码工作,解决固定方形输入对文档/OCR 等任务的扭曲问题,融合 FlexiViT(多序列长度)和 NaViT(原生宽高比)思想,提出了新的变体NaFlex,支持动态分辨率和宽高比。这一部分在训练90%的时候才开始引入。
(1)动态图片预处理
按目标序列长度和补丁大小缩放图像,宽高比扭曲度 ≤ (patch_size-1)/图像尺寸
。并生成非方形补丁网格,添加坐标掩码处理填充标记。
(2)位置嵌入插值
将预训练的位置嵌入(基于 16×16 网格)双线性插值到目标网格尺寸。注意力层动态屏蔽填充标记,支持序列长度范围 128–1024。
参考文献:
CLIP
OpenCLIP
SILC
TIPS
LocCa
SigLIP
SigLIP 2