多模态视觉层:CLIP、SigLIP谁更胜一筹

发布于 2024-12-23 08:54
浏览
0收藏

一、摘要

SigLIP【全称:Sigmoid Loss for Language Image Pre-Training】,SigLIP是在batch内,利用sigmod对文-图对做二分类;CLIP是在batch内,利用softmax对文-图对做多分类。

SigLIP不需要对两两相似进行全局归一化,这样的做法允许扩大batch的大小,同时在较小的batch下也能表现的好。

如下图所示:

SigLIP利用sigmod对文-图对做二分类,是在指导模型朝着文字Tokens和图像Tokens的两个序列的对角线上值越来越大,非对角线上的值越来越小的方向前进。即,希望配对的文-图对越来越匹配,非配对的文-图对越来越不匹配。

多模态视觉层:CLIP、SigLIP谁更胜一筹-AI.x社区

二、亮点

1. 二分类损失的计算

多模态视觉层:CLIP、SigLIP谁更胜一筹-AI.x社区

只需要计算文-图矩阵,对角线的得分就可以了,相比softmax计算更加简单,快捷。

2. 高效的分片计算损失

多模态视觉层:CLIP、SigLIP谁更胜一筹-AI.x社区

多模态视觉层:CLIP、SigLIP谁更胜一筹-AI.x社区

多模态视觉层:CLIP、SigLIP谁更胜一筹-AI.x社区

将batch内的数据分块到每块GPU之后,可以单独计算更新每块GPU上的sigmoid损失,不需要全局归一化损失,然后所有GPU上的损失相加取平均,就能得到全局的损失,这样能带来高效的计算。

三、多模态训练的宝贵经验

What matters when building vision-language models 是HuggingFace团队做了大量实验后,总结出来的多模态训练的经验。其中就对比了​​CLIP​​​与​​SigLIP​​的性能

3.1 SigLIP更有竞争力

多模态视觉层:CLIP、SigLIP谁更胜一筹-AI.x社区

在LLM相同的情况下,将视觉编码器从CLIP-ViT-H切换到SigLIP-SO400M在基准测试中提升了3.3个百分点。

3.2 投影层:桥接视觉模型与语言模型

输入投影目的是将预训练的视觉模块和语言模块连接起来,对齐视觉输入和文本输入,主流方法有两种:

  • 交叉注意力(Cross-attention):通过视觉模块对图像进行编码,并通过交叉注意力块将图像嵌入与文本嵌入注入到语言模型的不同层中。
  • 完全自回归架构(fully autoregressive architecture):视觉编码器的输出直接与文本嵌入串联,并将整个序列作为语言模型的输入。视觉序列可以进行压缩,提高计算效率。

从实验的结果来看:

多模态视觉层:CLIP、SigLIP谁更胜一筹-AI.x社区

  • 在单模态预训练模块被冻结时,交叉注意结构性能优于完全自回归结构。然而,一旦解冻并训练单模态网络,尽管交叉注意结构参数更多,但完全自回归架构反而展现出更佳的性能。
  • 在完全自回归架构下,直接解冻预训练模块可能会导致训练过程的不稳。采用LoRA技术可以在保持训练稳定的同时,有效增加模型的表现力。
  • 由于语言模型规模远远大于视觉模型,对最终结果输出影响较大。所以建议采用自回归模型,放开视觉模型的参数微调后,再对语言模型采用lora微调,来提高模型的性能。

3.3 固定图像大小和分辨率,提高模型泛化能力

视觉编码器通常在固定大小的正方形图像上进行训练。调整图像大小会改变其原始宽高比,这在某些任务(如阅读长文本)存在问题。因此,在训练时,最好要固定图像的原始宽高比。

仅在单一分辨率上进行训练存在局限性:低分辨率可能忽略关键视觉细节,而高分辨率则降低训练和推理效率。因此,要允许不同分辨率的图像被纳入到模型中训练

测试结果如下:

多模态视觉层:CLIP、SigLIP谁更胜一筹-AI.x社区

在使用SigLIP作为视觉编码器的情况下,采用固定长宽比的策略(AR preserving),使用预训练的视觉编码器来保持图像的原始宽高比和分辨率,既加速了训练和推理,又减少了内存消耗,且性能不受影响。

3.4 一个图片切成多个子图,提高DocVQA任务的性能

将图像分割成子图,然后再与原始图像连接可以提高下游任务的性能,但代价是需要编码的图像tokens数量大幅度增加。

在训练期间将图像分割成子图像,可以在推理期间提高计算效率,提高性能。在涉及读取图像中的文本的任务中,性能的提高尤其明显。

测试结果如下:

多模态视觉层:CLIP、SigLIP谁更胜一筹-AI.x社区

在指令微调阶段,将每张图像扩展为包含原始图像和四个裁剪图像的列表。这样,模型在推理时既能处理单张图像(64个视觉tokens),也能处理增强的图像集(总共320个视觉tokens)

3.5 训练多模态的技巧

1. 数据准备

  • 交叉的图像-文本文档:选用OBELICS数据集,包含3.5亿张图像和1150亿个文本tokens。OBELICS的长文档设计使语言模型在维持性能的同时,能够学习处理任意数量的交叉图像和文本。
  • 图像-文本对:LAION COCO中的图像由基于COCO训练的模型进行标注,噪声较少。并使用一个高召回率的NSFW分类器进行过滤。
  • PDF文档:为了克服VLM在提取图像和文档中文本时的不足,使用OCR-IDL的1900万份行业文档、PDFA6的1800万页数据,并加入了Rendered Text来增强对字体多样、颜色丰富文本的识别。

2.预训练

  • 第一阶段,图像最大分辨率设为384像素,使得可以使用平均大小为2048的批次大小
  • 第二阶段,引入PDF文档,将分辨率提升至980像素,保持全局批次大小但减少单机批次大小,使用梯度累积弥补额外内存。

3. 指令微调

  • 多任务指令集:如视觉问答、计数、字幕、文本转录、文档理解等。数据集采用共享的问题/答案格式,对于多问题/答案对,构建多回合对话。
  • lora微调:使用一种LoRA变体DoRA对基础模型进行指令调优。

​https://arxiv.org/pdf/2303.15343​

​https://github.com/google-research/big_vision/tree/main​

本文转载自 CourseAI​,作者: CourseAI

收藏
回复
举报
回复
相关推荐