InternVL2.5相比与InternVL2性能提升的关键工作分析

官网地址:https://internvl.readthedocs.io/en/latest/internvl2.5/introduction.html
模型地址:https://www.modelscope.cn/models/OpenGVLab/InternVL2_5-8B
开源时间:2024/12/05

InternVL2.5是第一个在 MMMU 基准上达到 70% 以上的开源 MLLM, 其以InternVL2的研究工作为基础,在模型结构上没有过多调整,但在数据处理逻辑、模型训练策略、训练数据增广方式进行优化,从而实现了有效的整体涨点。这些涨点工作表明,如果我们以InternVL2.5为基模,在过多的私域数据上训练,如果没有采用相同的数据策略,预计只会比InternVL2强一点点。毕竟InternVL2.5的强大不是完全依赖基模的提升,而是训练策略的调整。

在这里插入图片描述

InternVL2.5的模型结构如下所示,可以发现与InternVL2高度一致,只是在部分模型上使用了qwen2.5
在这里插入图片描述

关于internvl2.5输入数据的处理流程可以参考: https://blog.csdn.net/qq_37734256/article/details/145149448

1、模型结构

1.1 模型版本

InternVL2.5 与InternVL2保持了相同的模型版本,只是在最大模型上,2.5使用了qwen2.5 72b模型,2使用了llama-3-70b模型。其中关于InternVL2.5 8b、26b模型与InternVL2是一模一样的(只是vit版本变成了2.5)。但是在公布的MMMU 榜单上,InternVL2.5 8b模型比InternVL2 8b模型高了4~5个点,甚至比InternVL2 26b也要强3个点左右。这里所展现的就不在是llm能力提升带动mllm能力提升了。
在这里插入图片描述

1.2 与VL2模型的差异

InternVL2.5 的模型结构细节如下所示,以8b、26b模型为重点观察,可以发现与InternVL2模型在VIT、MLP、LLM参数上是一模一样的。仅是在动态分辨率策略上,有所差异,原先是12个子图,现在是36个子图。同时,在测试环节,子图也增大了。
在这里插入图片描述
在这里插入图片描述
关于动态分辨率深入可以发现以下分片规则
在这里插入图片描述
对于单图像数据集,切片总数将分配给单个图像以获得最大分辨率。视觉标记包含在 and 标记中。n_max<img></img>

对于多图像数据集,瓦片总数分布在样本中的所有图像中。每张图像都标有辅助标签,例如 and 括在 and 标签中。n_max Image-1<img></img>

对于视频,每帧的大小调整为 448×448。框架使用标签进行标记,例如 and 括在 and 标签中,类似于图像。Frame-1

2、方法改进

2.1 渐进式缩放策略

渐进式缩放策略:我们提出了一种渐进式缩放策略,以有效地将视觉编码器与 LLM 对齐。该策略采用分阶段训练方法,从较小、资源高效的 LLM 开始,然后逐步扩展到更大的 LLM。这种方法源于我们的观察,使 ViT 和 LLM 使用 NTP 损失进行联合训练,生成的视觉特征也是其他 LLM 可以轻松理解的可推广表示。
在这里插入图片描述

具体来说,InternViT 与较小的 LLM(例如 20B)一起训练,专注于优化基本视觉能力和跨模态对齐。此阶段避免了与直接使用大型 LLM 进行训练相关的高计算成本。使用共享权重机制,经过训练的 InternViT 可以无缝转移到更大的 LLM(例如 72B),而无需重新训练。因此,在训练更大的模型时,需要的数据要少得多,计算成本也大大降低。 【即VIT与小规模LLM对齐后,可以快速无缝的迁移到大规模LLM中】`

与 Qwen2-VL 的 1.4 万亿个token相比,InternVL2.5-78B 仅使用 1200 亿个token,不到十分之一。此策略可最大限度地减少冗余,最大限度地提高预训练组件的重用率,并支持对复杂视觉语言任务进行高效训练。

2.2 改进的训练策略

改进的训练策略:为了增强模型对真实场景和整体性能的适应性,我们引入了两种关键技术: 随机 JPEG 压缩 和 损失重新加权。

  • 对于随机 JPEG 压缩,将应用质量级别在 75 到 100 之间的随机 JPEG 压缩,以模拟 Internet 来源图像中常见的退化。

  • 对于损失加权,我们以统一的格式表达广泛应用的策略(即token 平均和样本平均),并提出平方平均来平衡对多或短响应的梯度偏差。Random JPEG CompressionLoss Reweighting 【将图像退化引入到了数据增强中,由样本平均与token平均】

2.3 结构良好的数据组织

结构良好的数据组织:对训练数据的质量进行提升,基于 LLM 的质量评分和基于规则的过滤组成的过滤管道

数据集配置
在 InternVL 2.0 和 2.5 中,训练数据的组织由几个关键参数控制,以优化训练期间数据集的平衡和分布。
在这里插入图片描述
数据增强:JPEG 压缩是有条件地应用的:对图像数据集启用以增强稳健性,对视频数据集禁用以保持一致的帧质量。

最大图块数量:该参数控制每个数据集的最大图块数。例如,较高的值 (24-36) 用于多图像或高分辨率数据,较低的值 (6-12) 用于标准图像,1 用于视频。n_max

重复系数:重复因子调整数据集采样频率。低于 1 的值会降低数据集的权重,而高于 1 的值会增加数据集的权重。这可确保任务之间的均衡训练,并防止过拟合或欠拟合。

在总体的训练数据规模上,可以发现v2.5比v2模型多了近一倍,同时由于tille数量的变化,训练token数提升的比例变得更大了。
在这里插入图片描述

数据筛选管道 在开发过程中,我们发现 LLM 对数据噪声高度敏感,即使是很小的异常(如异常值或重复数据)也会在推理过程中引起异常行为。事实证明,重复生成,尤其是在长格式或 CoT 推理任务中,特别有害。
在这里插入图片描述
为了应对这一挑战并支持未来的研究,我们设计了一种高效的数据过滤管道来去除低质量的样本。
在这里插入图片描述
该管道包括两个模块,对于纯文本数据,使用了三个关键策略:

  • 基于 LLM 的质量评分:使用预先训练的 LLM 和特定领域的提示对每个样本进行评分 (0-10)。分数低于阈值(例如 7)的样本将被删除,以确保数据质量。
  • 重复检测:使用基于 LLM 的提示标记重复样本并手动审查。得分低于更严格阈值(例如 3)的样本被排除在外,以避免重复模式。
  • 基于规则的启发式过滤:使用规则检测异常句子长度或重复行等异常情况。标记的样品在去除前经过手动验证以确保准确性。

对于多模态数据,使用两种策略:
重复检测:标记非学术数据集中的重复样本并手动审查,以防止模式循环。高质量的数据集不受此过程的约束。
基于规则的启发式过滤:应用类似的规则来检测视觉异常,手动验证标记的数据以保持完整性。

3、训练步骤

这里可以发现与2版本模型相比,多了一个可选的1.5步骤.

第 1 阶段:MLP 预热。在此阶段,仅训练 MLP 投影仪,而冻结视觉编码器和语言模型。尽管成本增加,但应用动态高分辨率训练策略以获得更好的性能。此阶段可确保稳健的跨模态对齐,并为稳定的多模态训练准备模型。

阶段 1.5:ViT 增量学习(可选)。此阶段允许使用与阶段 1 相同的数据对视觉编码器和 MLP 投影仪进行增量训练。它增强了编码器处理多语言 OCR 和数学图表等罕见域的能力。训练后,编码器可以在 LLM 之间重复使用,而无需重新训练,除非引入新域,否则此阶段是可选的。

第 2 阶段:全模型指令调整。整个模型在高质量的多模态教学数据集上进行训练。实施严格的数据质量控制以防止 LLM 降级,因为嘈杂的数据会导致重复或不正确的输出等问题。在此阶段之后,训练过程完成。
在这里插入图片描述

4、模型效果

详细的模型效果可以参考:https://www.modelscope.cn/models/OpenGVLab/InternVL2_5-8B,这里只是摘取了博主认为重要的部分。

4.1 CoT prompt效果

CoT是通过让GPT参考Prompt中的中间推理步骤,然后询问类似的问题,将GPT的推理透明化,从而获得比原始提问更高的准确率。以下数据展示了,InternVL 2.5 26b模型使用CoT的提问方式也能获取精度提升,而V2版本的同架构模型则没有增益。CoT方式通常只能在大参数模型上去的有益效果,而这个案例中的llm模型是一样的,只能表明是训练数据的变多,使得llm部分能力提升了。
在这里插入图片描述
关于CoT prompt的应用效果 https://zhuanlan.zhihu.com/p/659102403,有详细的说明。

4.2 OCR、图表和文档理解

在这里插入图片描述

4.3 多图像和真实世界理解

在这里插入图片描述

4.4 视频理解

这里主要与Qwen2-vl模型对比,在这里插入图片描述

### INTERRNV2.5 推理部署教程 对于INTERRNV2.5模型的推理部署,在Ubuntu环境中可以遵循一系列最佳实践来简化配置过程并提高效率。由于当前环境下的Ubuntu提供了最简单的配置方式[^1],建议采用如下方法: #### 安装必要的依赖包 为了能够顺利运行`wget`以及其他可能需要用到但是默认未安装的工具,应当先通过`apt-get`更新软件源列表并且安装这些工具。 ```bash sudo apt-get update && sudo apt-get install -y wget curl git ``` 这一步骤确保了后续操作所需的命令行工具都已就绪。 #### 获取预训练模型文件 针对INTERRNV2.5模型而言,获取其权重文件和其他必要资源通常是第一步。假设官方已经提供了一个可以直接下载链接,则可以通过下面的方式快速获得所需材料: ```bash mkdir interrnv2_5_model && cd $_ wget https://example.com/path_to_interrnv2_5_weights.tar.gz # 替换为实际URL地址 tar zxvf path_to_interrnv2_5_weights.tar.gz ``` 这里需要注意替换示例中的URL为真实的下载路径。 #### 设置Python虚拟环境库管理 创建独立于系统的Python环境有助于隔离不同项目之间的依赖关系冲突问题。推荐使用`virtualenv`或`conda`来进行此设置: ##### 使用 virtualenv 创建 Python 虚拟环境 ```bash pip3 install --user virtualenv python3 -m venv myenv source myenv/bin/activate pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cpu # 如果是在CPU上运行的话; 对于GPU版本, 修改相应参数即可. ``` 上述代码片段展示了如何基于PyTorch框架搭建适合处理深度学习任务的工作区,并且指定了额外索引网址以便正确找到适用于特定硬件架构(如CUDA支持否)的最佳二进制分发版。 #### 加载模型并执行推理 完成以上准备工作之后,就可以编写一段简单的脚本来加载预先准备好的INTERRNV2.5模型实例化对象,并对其进行输入数据驱动下的预测运算: ```python import torch from transformers import AutoModelForSequenceClassification, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("./interrnv2_5_model") model = AutoModelForSequenceClassification.from_pretrained("./interrnv2_5_model") def predict(text_input): inputs = tokenizer(text_input, return_tensors="pt") outputs = model(**inputs) logits = outputs.logits predicted_class_id = logits.argmax().item() return f"Predicted class ID: {predicted_class_id}" print(predict("Your test sentence here")) ``` 这段Python代码实现了从本地目录加载模型及其配套词典的功能,并定义了一个用于接收字符串形式文本作为输入进而返回分类结果的小函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万里鹏程转瞬至

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值