这个模型在我自己测的结果上也是表现优异,和glm4v打得有来有回。是目前开源的效果最佳的模型之一。
官方的评测榜单:https://huggingface.co/spaces/opencompass/open_vlm_leaderboard
摘要:
直接说提出了一个拉近开源和商业多模态模型的开源模型。
优化点:1.更强的Vision Encoder——InternViT-6B;
2.动态高分辨率——动态高分辨率;
3.高质量的中英双语数据集——显著增强OCR和中文相关的任务。
引言
作者直接点出了目前开源和商业的多模态大模型的巨大差距。原因在于:
1.参数规模的巨大差距:1000亿参数 VS 3亿参数的视觉模型+70亿或130亿参数的语言模型
2.图像资源:商业模型使用动态分辨率,保持原始的纵横比;开源模型使用固定分辨率(336336、448448)
3.多语言能力:商业模型使用多种语言的数据集;开源模型使用单英语数据集。
Internvl_1.5也是针对这些差距发力的:
我们对大规模视觉基础模型(VFM)——InternViT-6B实施连续学习方法,使用高质量的图文数据进行精炼。这个过程不仅增强了模型理解视觉内容的能力,还提高了其在各种大语言模型(LLMs)中的适应性。此外,使用InternLM2-20B作为语言基础模型也提供了强大的初始语言处理能力。
我们采用动态高分辨率策略,将图像划分为448×448的图块,图块数量根据图像的纵横比和分辨率在1到40之间(即4K分辨率)。为了捕捉全局上下文,我们还包括了缩略图视图。
我们收集了多样的公共数据集,涵盖高质量的自然场景、图表、文档以及英语和中文的对话。此外,我们开发了一个使用开源大语言模型的数据翻译管道,可以轻松扩展到更多语言。
最终也是获得了突出的优势:
1.灵活的分辨率;
2.双语能力;
3.强大的视觉表征:持续学习策略——http://t.csdnimg.cn/LS4Ar
作者也提到为了训练高分辨率图像,已经有双分支图像编码器和将高分辨率图像分割成多个低分辨率图块两种方法。但是开源模型的效果仍然比不上商业模型。
视觉编码器(视觉基础模型VFM)是多模态模型的核心,目前常见的有 CLIP-VIT,SifLIP,VIT,DINOv2,CLIP-ConvNext, SAM-B等。
模型架构
可以看到是通用的视觉编码器、连接器、LLM的组合。
ViT-MLP-LLM architectures
一个InternVIT-6B的VFM,一个随机初始化的MLP层(连接器),一个InternLM2-Chat-20B的LLM。
模型结构确实很简洁,下面重点介绍了训练的数据集,高质量的数据才是核心。
视觉编码器
开源模型常用的是VIT,但是作者认为因为其在互联网上的低分辨率的图文对上训练,所以在迁移到高分辨率或者其他领域的数据集上表现不佳。
作者训练了两个版本的InternViT-6B-448px。
1.InternViT-6B-448px-V1.2:在InternViT-6B的基础上采用继续预训练的策略。去掉了最后三层网络,因为发现倒数第四层在多模态上表现最佳;分辨率从224提升到448,和Nous-Hermes-2-Yi-34B模型结合形成多模态大模型。
2.InternViT-6B-448px-V1.5:在上一个模型的基础上,继续采用就继续预训练策略。使用动态分辨率,图块数量范围从 1 到 12;更强大的数据集。
作者在1.5版本的多模态大模型上还发现了InternViT-6B在预训练学习的知识是可插拔的,不受LLM的影响。
动态分辨率训练
动态高分辨率训练方法:
1.动态纵横比匹配:预定义了一组纵横比中动态匹配最佳的纵横比。在训练期间允许最多12个图块。
2.图像分割与缩略图:一旦确定了合适的纵横比,图像就会调整到相应的分辨率。例如,一个800×1300的图像将被调整到896×1344。调整后的图像随后被分割成448×448像素的图块。除了图块外,我们还包括整个图像的缩略图以捕捉全局上下文。这个缩略图被缩小到448×448,有助于模型理解整体场景。
数据集
1.预训练数据集
2.监督微调数据集
3.双语数据集的转换管道
纯粹使用LLM进行。
训练过程
图像被分割成448×448像素的图块,训练过程中图块数量根据图像的纵横比和分辨率最多达到12个。在测试阶段,模型可以处理最多40个图块,相当于4K分辨率,展示了其在零样本情况下对高分辨率输入的适应能力。
阶段1:预训练阶段专注于训练 InternViT-6B 视觉编码器和 MLP 投影器,以优化视觉特征提取。
阶段2:对整个模型的260亿参数进行了微调,以增强多模态能力。
个人总结:优秀的视觉编码器+MLP连接器+强大的LLM+高质量的数据=SOTA
实测也非常好用。
参考:
1.https://arxiv.org/abs/2404.16821
2.https://github.com/OpenGVLab/InternVL