当前位置: 首页 > news >正文

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架构。

        训练过程:输入大量文本图像对,文本T[n,l]经过text encoder得到T_f[n,d_i],同样图像I[n,h,w,c]经过image encoder得到I_f[n,d_e],但是由于输出通道数不一致,数值范围不一致,进行了Softmax归一化(这个解释更为准确),得到了I_eT_e,shape均为[n,d_e],保证所有向量均在单位超球面上。通过点积计算相似度logits,其中t为可学习参数,用于放大相似度差异。

        计算对称对比损失:其中labels为对角线正确配对顺序,loss_i和loss_t分别利用交叉熵损失计算图像和文本作为查询的相似度值,最后计算两者平均。通过这种方式,对角线的正样本相似度可以取得最高值,并抑制其他txt_jimg_i的相似度I_i \cdot T_j

        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= \beta C^\alpha ,其中E为性能指标(下游任务错误率),C为计算规模(单位为GMAC,训练过程中浮点运算总量),\beta为常数系数(反应模型基准性能,取决于模型架构和训练数据分布),\alpha为幂律指数,(反应性能随计算增长的缩放效率,\alpha恒为负值,因为错误率E随计算规模C增大而下降,\left | \alpha \right |越大表示模型提升的越快,加速度的意思)

        在实验中,零样本分类,零样本检索任务中均进行了幂律定律拟合,对其进行两侧对数处理后拟合。可以看到零样本分类任务下,CLIP模型在WIT数据集下的分类任务有更高的缩放效率\alpha_{CLIP}=-0.16,OpenCLIP模型在LAION数据集下的分类任务只有\alpha_{CLIP}=-0.11

        零样本检索任务下,OpenCLIP的缩放效率更高为-0.08,CLIP仅为-0.05,说明了LAION 数据通过 CLIPScore 过滤,偏向检索友好性,导致其分类任务 \alpha 绝对值较小。

        

三、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,然后加和。

        类似下面这个:其中每一个格都代表t x_i \cdot y_j,对角线部分i=j,非对角线部分i \neq j,i2v部分计算对角线上的log\frac{e^{a_1} }{e^{a_1}+e^{a_2}+...e^{a_8}} (其他同a1),t2i部分则计算log\frac{e^{a_1} }{e^{a_1}+e^{b_1}+...e^{h_1}}(其他同a1)。

        Sigmoid则无需全局归一化因子,其中所有(I_i,T_i)记为正例,(I_i,T_{j \neq i})为负例,z_{ij}记作图像文本匹配为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,并计算L_{image-text}+L_{self-dis},并更新student,teacher则通过EMA逐轮更新权重。L_{image-text}貌似是clip, L_{self-dis}是负对数似然,保证local crop的模型更像global crop。

        teacher权重更新:F_T\leftarrow \lambda F_T + (1-\lambda)F_S,λ=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

http://www.lryc.cn/news/588087.html

相关文章:

  • 内网环境自签名超长期HTTPS证书,并在Chrome中显示为安全证书
  • Faiss能解决什么问题?Faiss是什么?
  • 【数据结构初阶】--单链表(二)
  • Kafka Broker源码解析(上篇):存储引擎与网络层设计
  • 【html基本界面】
  • [spring6: ResolvableType TypeDescriptor ConversionService]-类型系统
  • [笔记] 动态 SQL 查询技术解析:构建灵活高效的企业级数据访问层
  • 电力协议处理框架C++版(三)
  • 打破空间边界!Nas-Cab用模块化设计重构个人存储逻辑
  • SwiftUI 全面介绍与使用指南
  • AI数字人正成为医药行业“全场景智能角色”,魔珐科技出席第24届全国医药工业信息年会
  • 【微信小程序】
  • 1.2.2 高级特性详解——AI教你学Django
  • vue3 服务端渲染时请求接口没有等到数据,但是客户端渲染是请求接口又可以得到数据
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘sqlite3’问题
  • 第一章编辑器开发基础第一节绘制编辑器元素_4输入字段(4/7)
  • Django基础(一)———创建与启动
  • Django Admin 配置详解
  • uni-app 选择国家区号
  • 第二章 uniapp实现兼容多端的树状族谱关系图,封装tree-item子组件
  • 《星盘接口2:NVMe风暴》
  • Python 变量与简单输入输出:从零开始写你的第一个交互程序
  • Spring的`@Value`注解使用详细说明
  • vue3+uniapp 使用vue-plugin-hiprint中实现打印效果
  • 【数据同化案例1】ETKF求解参数-状态联合估计的同化系统(完整MATLAB实现)
  • 微算法科技技术创新,将量子图像LSQb算法与量子加密技术相结合,构建更加安全的量子信息隐藏和传输系统
  • 简单易用的资产跟踪器DumbAssets
  • uni-app在安卓设备上获取 (WIFI 【和】以太网) ip 和 MAC
  • 游戏设备软件加密锁复制:技术壁垒与安全博弈
  • 高安全前端架构:Rust-WASM 黑盒技术揭秘