PaperReading:InternVL series
本文字数:4.9k 字 | 阅读时长 ≈ 18 min

PaperReading:InternVL series

本文字数:4.9k 字 | 阅读时长 ≈ 18 min

InternVL

从题目可以看出来,这篇文章的核心还是 scale up 大尺寸的 vision model,用其和 LLM 进行融合来完成生成相关的 task

1. 引子图

下面是 title 下面的一个图,表达了传统的 vision model 用分类任务训练,CLIP 用对比学习训练,本文的 scale 模型的同时用来做生成任务

在 abstract 部分,作者就挑明本文的一个核心贡献点,即 6B 的 vision 模块,并且经过训练可以很好的替代 ViT-22B,后面都围绕着个展开。

2. 动机部分

motivation:本文提到了当前的 vision model 很难和大的 LLM 配合,“commonly employ lightweight ‘glue’ layers, such as QFormer or linear projection”,并产生了一系列的缺点:(1)参数规模的不均匀(2)视觉模块和语言模块不一致的特征表达(3)视觉和语言之间连接低效

本文的主要贡献点:提出了 InternVL,scale 了 vision 部分,并且取得了 SOTA 的结果。(we formulate the InternVL, a large-scale vision-language foundation model, which aligns the representation of the scaled-up vision encoder with the LLM and achieves state-of-the-art performance on various visual and vision-language tasks.)简单来讲贡献为(1)vision 和 llm 部分的参数均衡(2)采用预训练的多语言 LLaMA 来初始化中间层,将 vision 和他对齐(3)渐进式的图文对齐:先用 noisy 的图文数据,然后转移到细粒度的图文数据

3. 模型架构

整体架构如下所示,作者还给定了 InternViT-6B 的整体尺寸

InternViT-6B:具体参数如上,这里作者使用 100M 的 LAION-en 数据子集来进行验证
QLLaMA:QLLaMA 被用来进行视觉语言对齐。QLLaMA 基于 LLaMA 开发的,新增了 96 个 learnable query 和 cross attention layers(引入 1B 参数),这些 layers 是随机初始化的。其实我读到这里的时候,我感觉有点奇怪,ViT+cross attention+QLLaMA 不就是一个基本的 VLM 的架构了吗,为啥还要以对齐作为目标呢?有点奇怪。
InternVL:上面虽然有点奇怪,但不影响我们后面的阅读。在 InternVL 部分,作者强调在上面训练好的模型部分,InternViT 可以用来进行 dense 或者 cls 的任务。此外还有生成任务和多模态对话任务,下面图中展示了这一点。

从上图可以看出来,对于对比学习,图像 feature 一个是直接从 InternViT 中得到,一个是通过 QLLaMA 之后再获得。text feature 均来自 QLLaMA。对于后面的生成任务,QLLaMA 可以加也可以不加,其实我这点挺疑惑的,不是很懂为什么要这么做,可能是觉得方法的通用性?

4. 对齐策略

训练策略分为三部分:对比学习,生成式学习和监督学习,这里就是对应上面方法框图的 1-3 部分

第一部分对比学习的数据集如下,一共有 6.03B 数据经过清理之后只保留了 4.98B

第二阶段采用生成式学习方法:这里除了 InternViT-6B,和 LLaMA,还引入了 cross attention layers,这里只微调可学习的 query 和 cross attention layers,其他的都 freeze 住。在第一步的基础上,把数据集从 4.98B 缩小到 1.03B。参考 BLIP2 的训练方法,loss 分为三部分,image-text contrastive (ITC) loss, image-text matching (ITM) loss, and image-grounded text generation (ITG) loss。这里老哥看了一下,和 BLIP2 不能说完全不同,只能说一毛一样。注意这里的对比损失(图中最右边),mask 的部分其实是为了 q 和 t 不相互干扰,因为这两个在计算 loss 的时候是不能相互看到的,因此是单一模态的 mask

第三阶段就是监督学习了,其实就是 next token prediction,选择微调 mlp 或者 mlp 和 QLLaMA,微调数据集一共 4M 左右

5. 多模态的 benchmark

这里有一些 zero-shot 的分类检索等指标,测试 InternViT-6B 的,这里就不介绍了,直接看多模态的 benchmark。这里其实有点误区,直接看结果吧。PT 和 FT 的数据量和 train params 感觉介绍的不是很清晰,再补充材料 A.4. Data Preparation for Pre-training 有相关介绍,有兴趣的同学可以看一下

InternVL-1.5

论文开始就提到了本文的一个核心点:赶超商业模型。然后贴出了与一些商业模型的对比

这里的指标有点高,AI2D,TextVQA,ChartQA,DocVQA 这些,我记得不应该有这么高

本文的一大改进有三点:(1)更强的视觉编码器(2)动态分辨率,将输入分为 1-40 个 tiles,每个 tile 448x448,以最高支持 4k 分辨率(3)跟高质量的双语数据。在 18 个 benchmark 中,在 8 个上达到了 SOTA

1. motivation

作者提出了当前模型的一些问题:(1)parameter scale。现在的模型小于 100B(2)图像分辨率受限(3)多语能力。最终作者也是从这三个角度去展开的。提出了 InternVL-1.5,针对上面的问题,作者提出了以下改进

  1. 通过持续学习,强化了 InternViT-6B,并且可以适用于各种 LLM 中
  2. 通过动态分辨率,讲输入图像切成 1-40 个 tiles,每个 tile 448x448,最高支持 4k 分辨率
  3. 通过引入高质量的双语数据,提升了多语能力

2. 模型架构

模型架构如下,在当时看来也没啥新鲜的地方,基本上大家都采用这种结构,ViT + MLP + LLM,这里用了 pixel shuffle 来降低 token 数量。视觉编码器用的是 InternViT-6B,语言模型用的 InternLM2-20B

训练的时候,对于每个输入,动态处理模块可以根据其分辨率和长宽比,最多可以分为 1-12 tiles,每个 tile 448x448,推理的时候最多可以切成 40 tiles(这块有点吹牛逼了,推理的视觉 tokens 多的话,模型效果未必好,特别是在 general 的数据上,不过作为 paper claim 的点也没问题),通过 pixel shuffle,每个 tile 表示 256 个 tokens

下面开始依次介绍每一个模块

2.1 视觉编码器

这里作者提到了一个 continuous training 的概念,简单来讲就是在 InternViT-6B 的基础上继续训练,一共有两个新的 ViT 版本

  1. InternViT-6B-448px-V1.2:作者发现倒数第四层的特征表现最佳,因此抛弃了最后三层,将输入分辨率从 224 提升到 448,并与 Nous-Hermes-2-Yi-34B 模型进行对齐,同时训练 vision 和 mlp 部分,来提升整体性能
  2. InternViT-6B-448px-V1.5: 这一部分是从 V1.2 继续训练而来,这里应该和 v1.2 差不多,有两个变化,一个是输入 tiles 从 1 改为 1-12,另一个是增大了训练数据集

这里作者还强调说,虽然训练 vision 的时候用的是 Nous-Hermes-2-Yi-34B,但是转移到 InternLM2-20B 上面的时候,效果也很好。

2.2 动态分辨率处理模块

这里将输入图片处理成 1-12 tiles,也就是说一共 35 中可能的组合,例如 {1:1, 1:2, 2:1, 3:1, …, 2:6},如果输入图像是 800x1200,那么先 resize 为 896x1344,然后切成 2x3 的 tile grid。训练的时候切片为 1-12 tiles,推理的时候最多可以切成 40 tiles,也就是说 token 一共从 256 最多到 10496。可以从下图看到,这里的切片,其实是直接 resize 的,不是 padding,这样可能会造成一些文本等的畸变?

2.3 训练数据集

预训练数据集:captioning 包含 53.9%,Detection 和 Grounding 包含 5.2%,OCR 包含 32%,Smaller ocr 包含 8.9%

微调数据集如下:为了增强中文能力,作者还用了一个翻译的 prompt 来生成中文数据

文中好像没有澄清定量的数据,只有占比

3. 实验结果

下面是 18 个 benchmark 的结果,InternVL-1.5 在 8 个上达到了 SOTA

此外作者还把分辨率进行了增大,固定 tiles,然后展示了相应的结果,但是长宽好像不知道?如果只是说 tiles 增大,但是长宽比也变化的话,可能不是很公平,这里论文我没注意细节

此外作者展示了一些定性结果,这里面有一个需要注意的,就是 object localization,因为这里并不是真正的定位,而且单纯的看图说话,没有 bounding box 的信息

InternVL-2

这个版本的模型和 InternVL-1.5 差不多,主要是 scale up 了模型和多模态 task

模型层面,从 1B 的端侧模型到 108B 的模型都有

1. motivation

一共有三个主要的设计:(1)progressive 的训练,从小的 llm 到大的 llm(2)多模态输入,接受文本,图片,视频和医学数据(3)多任务的输出,包含文本,图像,bounding box 等等,这里不是统一的建模,而是利用了其他任务的 decoder

2. 模型训练

下面是一些具体的训练细节

3. 实验结果

实验结果如下

InternVL-2.5

这篇文章是基于 InternVL-2 的改进,重点在训练测试以及数据质量上。根据原文:“systematically exploring the performance trends in vision encoders, language models, dataset sizes, and testtime configurations.”

下面是作者在 introduction 部分的指标对比,InternVL-2.5 性能也是遥遥领先

1. motivation

这里作者的主要动机是:系统探索了各种因素对 MLLM 的影响,包括(1)视觉编码器(2)语言模型(3)数据集规模(4)测试时间配置。以验证 scaling 和 performance 之间的关系

一些有趣的发现

  1. 当 MLLM 增大的时候,更大的 vision encoder 对训练数据的依赖更低
  2. 数据质量。Internvl-2.5 的数据规模是 InternVL-2 的 2 倍,但是经过了严格的过滤之后,在各种 benchmark 上有明显的提升
  3. Test-time scaling。这里其实更多的是让模型进行 COT 推理或者投票,来提升模型的性能,例如 MMMU 上使用 COT 性能提升了 3.7 个点

2. 模型架构

模型架构上和 InternVL-2 一样,这里不做介绍了,看下图

视觉编码器部分:还是和以前一样,分为两个尺寸,InternViT-6B 和 InternViT-300M,具体的细节如下,对于 6B 的模型,加了 QK-Norm 和 RMSNorm,V1.0 和 V1.2 的版本是在固定分辨率 448px 下训练的,而 V1.5 和 V2.0 则是动态分辨率,并且在 V1.5 版本,将 48 层的最后三层删掉了,保留了 45 层,用 NTP 训练的增强特征提取能力。对于 300M 的模型,从 CLIP-ViT-Large-336px 中初始化得到,并且少了 QK-Norm 和 RMSNorm,然后蒸馏 6B 模型,蒸馏结束之后用 NTP loss 进行训练。在本文引入了 v2.5 的模型版本 InternViT-300M-448px-V2.5

最后是一个整体的模型选择和参数的对比

3. 分辨率设置

这里的动态分辨率和 InternVL-2 是一样的,大概是有一些预定义的 tiles 组合,例如 {1:1, 1:2, 2:1, 3:1, …},首先计算当前图片的长宽比,然后从组合里面选取一个绝对值最接近的组合,然后 resize 成对应的 tiles grid,接下来就是切片等操作了。此外只要切片数量大于 1,就有一个 thumbnail 的图,否则没有

不同数据类型的数据格式。(a) 对于单图像数据集,分配给单个图像的最大块数 nmax,以确保输入的最大分辨率。(b) 对于多图像数据集,总块数 nmax 在样本中的所有图像之间按比例分配。© 对于视频数据集,该方法通过设置 nmax = 1 来简化方法,将单个帧调整为固定分辨率 448×448。下面图展示了这一点

4. 训练设置

训练策略分为三阶段,这里直接看图说话

(1)第一步只训练 MLP,这里用的是动态分辨率来训练的,训练的数据如下

(2)1.5 阶段是可选的,用来对 ViT 进行增量学习,只训练 ViT 和 MLP,这里用的训练数据和第一阶段一样
(3)第二阶段,训练 ViT,MLP 和 LLM,三部分学习率一样,用高质量数据

下面是不同尺寸模型的训练细节,上面作者强调说 ViT 的增量训练的过程中,即使在小的 LLM(20B)上训练,也能够很好的迁移到 72B 上(我确实不太明白为什么作者一直强调这个,从 InternVL 之前版本就开始强调了。。。)然后作者说使用的训练 Tokens 比 Qwen2-VL 少很多,Qwen2-VL 用了 1.4T Tokens

5. 一些 trick

(1)随机JPEG压缩。避免训练过程中的过拟合并增强模型在现实世界中的表现,作者采用了 JPEG 压缩。应用了质量等级在75到100之间的随机 JPEG 压缩,模拟互联网来源图像中常见的降级。这种增强提高了模型对噪声和压缩图像的鲁棒性,并通过确保在不同图像质量下的一致性表现来提升用户体验(不清楚具体效果,不做评价)

后面的 trick 之后再看。。。

6. 数据处理

数据配置

数据打包:打包的这个策略可以提升 GPU 利用率,首先随机采样一个样本 A(文本 1500,图片 2),然后从缓冲区查看是否有样本能和 A 拼到一起,比如找到一个 B,拼起来之后文本和 tile 总数符合要求,就将他们打包成一个复合样本,但是注意,AB 只能看到各自的文本和图片,不能交叉看到。同时维护一个缓冲区,存储未被打包的样本

数据过滤:作者发现在及时很少的噪声数据,也会对 LLM 有较大的影响(例如重复数据 / 错误数据),作者将重复数据作为最严重的问题之一。

  1. 文本过滤:(1) 基于LLM的质量评分:将数据集分类为不同的领域(例如,学科、编程、数学、通用)。使用预训练的 LLM 和领域特定的提示为每个样本分配一个范围为0到10的质量评分。低于指定阈值(例如,7)的样本将被移除,以确保数据质量。 (2) 重复检测:使用LLM结合专门的提示来识别重复模式。这些样本随后经过人工审核,得分低于阈值(例如,3)的样本将被移除,以维护数据质量。 (3) 启发式规则过滤:用特定规则,例如过滤掉长度异常的句子、过长的一系列零、重复行过多的文本等,以识别数据中的异常。尽管这种方法偶尔会产生误报,但它提高了异常样本的检测率。所有被标记的样本在最终移除之前都会经过人工审核。
  2. 多模态数据过滤:(1) 重复检测:排除了高质量的学术数据集,并使用特定的提示来识别剩余数据中的重复模式。这些样本在经过与文本数据相同的手动审查过程后被移除。 (2) 启发式规则过滤:应用类似的启发式规则,然后进行手动验证以确保数据集的完整性。

InternVL-3

在 abstract 部分,作者就强调了训练采用的是 native multimodal pre-training 方式,和之前先训练 vision encoder 再和 LLM 对齐的方式不一样,也是本文最大的一个改进了,下面是一个整体的结果表

1. motivation

在 introduction 部分,作者指出不用 native 训练的话需要用特定的辅助数据,例如 OCR 来将不同模态进行对齐,预训练过程中需要冻结模型和多阶段训练等,比较复杂。与其先对仅文本的大型语言模型进行预训练,然后通过多模态对齐进行调整以支持视觉处理,不如让 InternVL3 在预训练阶段共同接触仅文本语料库和多样的多模态数据集,从而学习多模态能力。

然后文中简述了一下其他贡献:variable visual position encoding 来适配长文,将 SFT 和 MPO 融合以及 test-time scaling,以及优化的 infrastructure 等等,这里作者展示了各种方法在 OpenCompass 上的结果

2. 模型架构

下面展示了整体的模型架构

这边感觉总有点扯,作者虽然说从 native 来训练,但是实际上作者为了加速训练,vit 和 llm 部分还是从预训练的初始化得到,不过 llm 用的是 base model,没有用 instruction-tuned 的模型,连接层用的 2 层 mlp,mlp 是随机初始化的。这里作者还提到了 pixel unshuffle 来提升高分辨率图像的处理能力

variable visual position encoding:

InternVL-3.5

这篇文章是基于 InternVL-3 的改进,提出了 Cascade Reinforcement Learning,包括 offline RL 和 online RL 来提升多模态推理能力。此外提出了 Visual Resolution Router 来动态调整视觉 tokens 来提升准确率。这个 trick 结合 Decoupled Vision-Language Deployment 将视觉语言模型分离,在不同 GPU 上运行,提升了推理速度。定量方面,提升了 16% 的性能提升和 4.05 的推理倍速。此外作者还强调了 GUI 的交互和 Embodied 策略(这个在 InternVL-3 其实就有提到过)

1. motivation

这里也没有什么特别的 motivation,主要就是提出的 Cascade RL framework:offline RL 和 online RL 来提升多模态推理能力,此外提出了 Visual Resolution Router (ViR) and Decoupled Vision-Language Deployment (DvD) 进行快速的推理。前者可以选择最合适的 visual tokens,后者在部署的时候将视觉和语言模型分离,在不同的 GPU 上运行,提升推理速度,下面是各种方法的性能图对比

总结一下,InternVL-3.5 提出了 Dense 和 MoE 的版本(在此之前没有 MoE 版本),提出了一系列的策略(如上)来提升模型性能和推理速度等,最后就是模型整体性能达到了一个很高的标准

2. 模型架构

整体分为 InternVL-3.5 和 InternVL-3.5-flash,架构和初代的 InternVL-1.5 版本没什么本质的区别,其中 InternVL-3.5-flash 加了一个 Visual Resolution Router (ViR) 模块,原来的 InternVL-3.5 中使用的是 Pixel Unshuffle 来处理高分辨率图像,降低 token 为原来的 1/4,这里的 ViR 可以进一步降低到原来的 1/16

具体的每个细节如下