文章来源:腾讯技术工程
前言
近来,随着大型语言模型的发展,视觉语言大型模型的能力也在逐步增强,GPT-4[1]、Gemini Pro 1.5[2]和Claude 3[3]等著名的闭源模型成功将 LLM 扩展到视觉语言模型领域。LLaVA[4],InternVL[5]等开源模型也在迅速发展。目前,视觉语言模型领域存在一些关键问题亟待解决:1)闭源模型很少公开关于其架构的详细信息。相比之下,开源模型虽公开了其训练策略,但这些策略的详细消融并没有完全披露。2)在目前的开源工作中,对于预训练阶段,大多都是凭经验添加不同来源的数据集,这使得预训练过程难以得到深入的探索。3)在微调阶段,绝大多数工作关注的重点通常是添加和消融更多的数据集,这样性能会较快触及瓶颈。我们针对以上几点给出了我们的方案,并进行了清晰充分的实验论证。
POINTS 主要包含 3 个部分:
我们首先将现在开源工作中的各种技术(动态高分辨率,CapFusion,双视觉编码器,Individual Select)进行了整合,并提出一种新的动态分辨率分割方法,以搭建一个更加稳健和高效的 baseline。下图是POINTS的模型结构。对于每个模块(例如 OCR ViT、General ViT、MLP Projector 和 Large Language Model),虚线左侧标签表示预训练时的状态,右侧标签表示指令调优时的状态。
Consistent Aspect Ratio Dynamic High Resolution (CATTY)
将高分辨率图像提供给视觉语言模型有利于捕捉细粒度细节和减少幻觉。与 LLaVA-Next[6] 和 InternVL-1.5[5] 中的动态高分辨率不同的是,我们在对高分辨率图像进行切分时保持了图块的纵横比。在InternVL-1.5[5]中,在分割图像之前,图像大小会被调整为预定义分辨率中与其最接近的目标分辨率,这种切图方式容易导致失真。而我们通过在切图时引入overlap的方式在把图像切割为固定大小图块的同时,保持了图块纵横比。
CATTY的具体步骤如下:i) 首先,预定义图像可以分割成的最大图块数(在我们的实验中设置为 8)。ii) 列出图块数不超过最大图块数的所有整数分辨率组合。iii) 给定一个高度为H和宽度为W的图像,我们寻找与其分辨率最近的整数分辨率,乘视觉编码器的图像尺寸,得到目标图像的高度Hr和宽度Wr,并通过以下方式将图像大小调整为目标大小 (Ht × Wt ):
给定视觉编码器的输入分辨率 Hv×Wv,目标图像应分为 Hr/Hv × Wr/Wv 图块。接下来,我们使用一个滑动窗口分割目标图像 Ht×Wt ,该窗口的步幅分别为 Height 和 width。步幅(Sh, Sw) 的计算方式如下:(若 Hr/Hv = 1,Sh为0,若 Wr/Wv = 1,Sw 为 0)
除了使用CATTY分割的图块,我们还加入了整体图像的缩略图来捕获整体上下文信息。在将视觉编码器输出的特征对齐并传入到大型语言模型之前,我们InternLM-XComposer2-4KHD[7]中的pixel-shuffile,设置下采样因子为 0.25,减少图像特征的序列长度以提高效率。
预训练数据集中原始 caption 通常存在很多噪声和结缺陷。为了解决这个问题,LAION-COCO 和 BLIP-LAION[8] 等提出了通过 image captioning model 生成 synthetic caption。但合成字幕中较为简单的句法和语义结构可能会导致缺失可扩展性和缺乏世界知识。CapFusion利用大语言模型整合原始 caption 和 synthetic caption,在丰富的世界知识和结构化且语法简单之间取得了较好的平衡。我们使用 InternLM-XComposer2[9] 为图像生成 synthetic caption,使用 InternLM2[10] 来整合原始 caption 和 synthetic caption。
相关工作如 SPHINX[11] 和 Cambrian1[12],已经证明不同的视觉编码器会在不同的领域表现优势,结合多个视觉编码器可以在性能上有更大的提升。文本密集型图像所需的视觉编码能力在一定程度上有别于自然图像。为了增强光学字符识别(OCR)能力,我们训练了一个单独的视觉编码 OCR ViT,遵循 Vary[13] 的方法从图像中提取文本特征。与其不同的是,我们没有从零构建图文对的训练样本(如图表),我们使用PaddleOCR提取的文本结果构建数据集,并在数据集中加入描述自然图像的caption组成完整的预训练数据集。我们将完成训练的 OCR ViT 与通用视觉编码器(通用 ViT)用过加权平均值合并,然后将输入到大型语言模型中。
Individual Select[14] 通过贪心选择的方式从一个数据池中确定最有效的指令调优数据集。我们收集了其中所提到的开源数据集,并整合了DeepSeekVL[15]、Cambrian-1[12] 和 Cauldron[16] 使用的数据以及额外的16个数据集。此外,鉴于学术数据集的提示风格趋于同质,为了增强提示的多样性,我们从 LAION-5B 中随机选取了一些图像使用 GPT-4o 生成了一系列问答对。最终我们得到了可视化指令调优数据集 Base Set。
perplexity(PPL) 常在大语言模型中被用作评估预训练数据集质量的指标。受其启发,我们利用已被训练过的视觉语言模型 P 来进一步过滤掉CapFusion获得预训练数据集中的低质量部分。对于预训练数据集中的每个数据样本s,我们使用以下公式计算所有文本的 PPL,({w1,...,wN } 表示s中的文本序列):
我们对所有样本进行升序排序,并选择前 20% 用于预训练。与大型语言模型中的筛选结果不同,对比 PPL 前 20% 和后 20% 的样本,我们发现两者的区别并不是数据的质量。PPL 后 20% 的物品通常包含晦涩难懂的世界知识,例如游戏版本号和计算机出厂序列号,这类世界知识极为罕见,且信息量非常少,因此对模型的学习不太有益。
视觉指令调优数据对于现有视觉语言模型的卓越性能至关重要。但现有工作大多通过迭代消融来选择更有效的数据集,这种方法很快会达到了一个瓶颈期,后续的数据选择带来的提升微乎其微,甚至会降低模型性能。在数据选择遇到瓶颈后,我们使用 model soup 整合使用不同指令调优数据集进行微调的模型优势。model soup 的原理是通过使用不同的超参数(学习率、数据增强、初始化种子等)对模型进行微调以收敛到不同的局部最优值,对这些模型的权重进行插值,以得到一个更强的模型。为了将 model soup 的思路应用在数据集的优势融合上,我们在性能饱和的指令调优数据集base set上单次加入一个 Individual Select 阶段未能带来显著性能提升的数据集,构成新的数据集Di* ,模型在微调后收敛到不同的局部最优值f(Dk*;θk),再将这些模型权重进行插值。我们提出了Maximum Soup、Average Soup 和 Greedy Soup 三种方法来选择微调模型的最佳组合。
给定评估分数 Acc,我们使用以下公式获得一个更强模型 f(θs):
通过取所有微调模型的权重平均值,我们可以获得更强的模型 f(θs):
首先根据评估分数对微调后的模型进行降序排序。接着遍历排序后的模型。对于每个模型,我们计算其权重与模型池中当前所有模型的权重的平均值。如果评估分数提高,则模型将添加到池中。最后,我们对池中所有模型的权重进行平均,以获得更强的模型,表示为 f(θs)。下表概述了 Greedy Soup 的步骤。
我们使用 OpenCompass中 的 8 个基准,从不同角度均衡地对模型进行评估。这些指标包括:MMBench 和 MMStar:用于评估通用能力;MMMU:用于测试STEM(科学(Science)、技术(Technology)、工程(Engineering)和数学(Mathematics))能力;MathVista:用于数学相关能力;AI2D:用于图表相关能力;OCRBench:用于OCR功能;MMVet:用于主观评估。我们使用 OpenCompass 提供的 VLMEvalKit 进行标准化评估,在 MMBench 上选择 dev-en split。
在预训练阶段,训练 OCR ViT 时,我们没有额外抓取PDF文件并转换为图像构建数据集,为了提高复杂背景下的 OCR 能力,我们从 LAION-5B-en、LAION-5B-cn、WuKong 和 Zero 中随机选择了 2000 万个数据样本。使用 PaddleOCR 从图像中提取文本,替换原始 caption 以形成新的数据对。此外我们加入 LAION-5B 的 1000 万个原始数据样本,构成最终数据集进行训练。
在指令调优阶段,基于 [14] 中确定的数据,我们继续使用 Individual Select 的方式在其他开源数据工作中进行了选择,确定为基础数据集。对于未能通过 Individual Select 得到增益的其余数据集,我们将其组成数据池,以待通过 model soup 的方式加以选择和利用。
在 OCR ViT 的预训练阶段,我们使用 LLaVA 架构,视觉编码器从 OpenAI 的 CLIP-ViT-Large-336 初始化,大型语言模型是从 Yi-1.5-9B-Chat[19]初始化。冻结大型语言模型权重,设置视觉编码器和MLP是可训练的。视觉编码器和MLP的学习率分别设置为 2×10-4 和 2×10-5 ,学习率的schedule在训练过程的前3%采用预热(warm up),剩余步骤采用余弦衰减。
在整体视觉语言模型的预训练阶段,通用 ViT 从 OpenAI 的 CLIP-ViT-Large-336 初始化的,OCR ViT 则继承上个阶段的权重。参考 Vary 的设置,我们的通用 ViT 只有最后三层是可训练的,OCR ViT 则在整个阶段保持冻结状态。我们选择通用 ViT 和 OCR ViT 倒数第二层的特征通过 MLP 与大预言模型连接。起到特征对齐作用的 MLP,在预训练阶段保持可训练状态。通用 ViT 和 MLP 的学习率分别设置为 2×10-4 和 2×10-5 ,学习率的schedule在训练过程的前3%采用预热(warm up),剩余步骤采用余弦衰减。
在指令调优阶段,我们冻结通用 ViT 和 OCR ViT。MLP 和大预言模型保持可训练状态,学习率设置为 2 × 10−5 。学习率的 schedule 在训练过程的前3%采用预热(warm up),剩余步骤采用余弦衰减。
除了 OpenCompass 的8个基准外,我们增加了ScienceQA、MME、LLaVA-Wild 和 ReadWorldQA 更详细地与目前领域内最先进的模型进行比较。POINTS的性能可与现有类似尺寸的模型媲美,甚至超越更大参数量的模型性能,如 Cambrian-34B。此外,与其他模型相比,POINTS 使用的预训练数据集和指令调优数据集更少且是公开可用的,我们下面将从各角度对 POINTS 进行了彻底的分析,充分论证每种策略的有效性。这意味着后续开源工作能够更简单直接地使用本文提出的方法。
强 baseline 的消融实验
CF:CapFusion,DHR:动态高分辨率,CATTY:我们提出的一致纵横比动态高分辨率,DEV:双视编码器,IS:Individual Select。MMB:MMBench、MV:MathVista、HB:HallusionBench、OCR:OCRBench、Overall:前 8 个基准的平均值。
每个组件都有助于稳步改进。这些增强功能非常重要, 例如,在引入动态高分辨率来分割输入图像后,我们观察到 OCR 相关任务(如 OCRBench)有了实质性的改进,性能从56.9% 对 60.3%。此外,使用具有动态高分辨率的高分辨率图像有助于减少幻觉,这主要是由于高分辨率图像中的细节增加。此外,用 CATTY 替换原来的动态高分辨率会导致各种基准测试的显着改进,OCR 相关基准测试的收益比其他基准测试更大。这可能是因为图像失真对图像中的文本有更明显的负面影响。与一般的视觉特征提取相比,CLIP-ViT 从图像中提取文本特征的能力是有限的,因为它是在大量的通用图像-文本对上训练的。因此,在集成了来自附加 ViT 的特征后,我们观察到 OCRBench 有了实质性的改进,并在文本丰富的图像上进行了后训练。在这 5 种策略中,通过 Individual Select 整合更多的可视化指令调整数据集会产生最显着的改进。这一观察结果与现有工作一致,强调了在视觉指令调整阶段选择有效数据集的重要性。
通过PPL筛选预训练数据的实验(左),Dual Vision Encoder 的实验(中),model soup 融合指令调优数据的实验(右)
(左)前两行比较了预训练阶段不同数据量的使用情况。第三行表示第一行中5M数据集按PPL筛选了升序排序的前20%子集。将预训练数据大小从 5M 扩展到 20M 反而会导致性能下降,我们认为可能的原因是:i)现有大多数视觉语言模型的视觉编码器都是从基于大量图像-文本对进行预训练的视觉模型初始化的。而我们的视觉语言模型,在预训练阶段使用的大部分数据很可能已经被视觉编码器训练过,导致在扩大预训练数据集的大小时,只会带来有限甚至负向的影响。ii) 现有的大规模网络爬虫数据集,例如 LAION-5B 和 COYO-700M,数据分布非常同质。我们提取图像的主要实体后绘制密度图后,发现这是一种长尾分布,因此,不加选择地增加数据量进行预训练只能带来有限的提升。而我们仅使用 1M 数据对模型进行预训练,这些数据是 5M 数据的按照 PPL 升序排序后的前 20%。这表明,在过渡过程中,过度地将模型暴露在晦涩和稀缺的知识中,不利于其学习。
(中)DVE:Dual Vision Encoder 架构。SVE:Single Vision Encoder 架构。
(右)lr:在不同学习率微调的模型上使用Model Soup。ds:使用不同数据集微调的模型上使用Model Soup。添加更多的指令调优数据集通常会达到一个瓶颈。然而,通过整合不同数据集训练得到的模型汤,我们观察到了实质性的改进,总分从 59.0 提高到 61.2。我们对各种 Model Soup 策略进行了比较。其中,greedy soup 的表现最好,分别比 maximum soup 和 average soup 高出 0.8 和 0.6 个百分点。此外,我们还对比了使用不同超参数(例如不同的学习率)进行模型汤的结果,其只能带来有限提升。
这幅图展示了在相同基础数据集基础上,使用 Individual Select 和 Model Soup 加入单个数据集的性能差距。表明当通过 Individual Select 的方式选择并添加额外的指令调整数据集无益时,使用 Model Soup 的融合方式可以显著提高性能。