一、上期回顾
上期我们介绍了QwenVL,一个以数据和训练任务为中心的工作,通过暴力的堆叠数据和设计多种训练任务,QwenVL可以较好的理解图像内容,甚至能给出图中某些物体的坐标。但受限于448*448的图像分辨率,QwenVL的OCR能力较差。本次我们将介绍InternVL-v1.5,如果将Mini-GPT4,Llava,Blip2,QwenVL当做多模态大模型发展的第一阶段,则可以认为InternVL-v1.5将多模态大模型带入了第二阶段。
<span leaf=“”><span leaf="">&lt;span leaf=&quot;&quot;&gt;&lt;img data-imgfileid=&quot;100004722&quot; data-src=&quot;https://mmbiz.qpic.cn/sz_mmbiz_png/mZ89VeqFiaqvgCw6iaUCwgYGBfibOOl2VP36x0XN7UaTbia0vReWzAMbAuoukenyPZjrWTC8jY7SyravwpeyliaZk4g/640?wx_fmt=png&amp;amp;from=appmsg&quot; data-type=&quot;png&quot; width=&quot;1538&quot;/&gt;&lt;/span&gt;</span></span>
图1:图像与大模型的主流结合方式。(1)将图片经过一个Pretrained VIT,获取视觉特征。(2)将该视觉特征通过某种变换层(Adapter)对齐到大模型 Input Embedding的维度。(3)将对齐后的视觉特征concat到Input Embedding,输入到大模型(Large Language Model, LLM)
二、InternVL-v1.5
模型上,internVL-v1.5首次将ImageEncoder(VIT)的参数量扩展到了6B,将图像的视觉特征(图1中的aligned img emb)扩展到了1.7k,将图像的分辨率提升到7个448 * 448的patch(后续会解释),并引入了动态长宽比。数据上,InternVL-v1.5不仅收集了大量自然场景数据,还收集了大量文档数据,进一步提升算法的OCR能力。
|
|
|
|
|
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
2.1 动态长宽比
此前,多模态大模型通常是将图像resize到固定的长宽比(448 x 448 或 1344 x1344),再送入VIT获取图像特征,这种做法会造成两个问题:
-
对于极端长宽比的图片,失真严重
-
若固定一个较大的长宽比(比如1344*1344),则VIT会产生超长的序列长度,消耗大量算力
为了解决这两个问题,InternVl-v1.5引入了动态长宽比
<span leaf=“”><span leaf="">&lt;span leaf=&quot;&quot;&gt;&lt;img data-imgfileid=&quot;100004724&quot; data-src=&quot;https://mmbiz.qpic.cn/sz_mmbiz_png/mZ89VeqFiaqvgCw6iaUCwgYGBfibOOl2VP3R8vqcpBHYtY2cRx715FrLtXrzibHibjiczmsFuSxzf7GsHpnCX2H9HBqQ/640?wx_fmt=png&amp;amp;from=appmsg&quot; data-type=&quot;png&quot; width=&quot;906&quot;/&gt;&lt;/span&gt;</span></span>
图2:动态长宽比的实现方式,图中的Pixel Shuffle的流程会在2.3节给出
如图2,动态长宽比的实现分为以下4个步骤:
-
预设最大patch数量:max_patches,图像会被分为多个448x448的patch,但会保证patch数不超过max_patch,图2中max_patches被设为7
-
根据最大patch数量给出能够适配的长宽比(长 * 宽 <= max_patch - 1),图2左下部分即为max_patches=7时候能够适配的部分长宽比
-
根据原图分辨率和原图长宽比,给出最匹配的长宽比(图2中为 2:3),并将图片resize并分为多个448 x448的patch(图2中,想将图片从[800, 1300] resize成 [448x2 = 896, 448x3 =1344],再将其切片成为 2x3=6个 448x 448 的patch)
-
最后将原图resize到448x448放在patch的后面,就得到了图像经过动态长宽比后的图片(图2中部小图)
-
这些小图分别经过VIT后会得到max_patch个1024长度的序列,将这些序列拼接起来即可得到图像序列
这样做的好处是
-
可以处理较为极端长宽比的图像,避免了因resize导致的图像变形
-
大分辨率图对应的序列长度较长,小分辨率图对应的序列长度较小
-
将图片切成了多个448x448的小片过VIT,采用了分块的思想,解决了大分辨率图像计算量大的问题。
2.2 超大VIT, Pixel Shuffle及模型结构
此前多模态大模型的VIT模型通常是OpenAI训练的CILP模型的VIT(参数量约为200M)。由于大模型证明了模型参数量的重要性,InternVL-V1.5将VIT的参数量提升至6B从而提升模型效果。其使用的VIT模型输入为448x448的图像,该模型会将图像切分成32x32个14x14的patch,最后会输出长度为32x32=1024长度的序列。
<span leaf=“”><span leaf="">&lt;span leaf=&quot;&quot;&gt;&lt;img data-imgfileid=&quot;100004721&quot; data-src=&quot;https://mmbiz.qpic.cn/sz_mmbiz_png/mZ89VeqFiaqvgCw6iaUCwgYGBfibOOl2VP3gyibhPaTCJ3x8l56NfbP6lKxXjoy9LGE9R0qiangbW9vuAlgNKv8L8nQ/640?wx_fmt=png&amp;amp;from=appmsg&quot; data-type=&quot;png&quot; width=&quot;970&quot;/&gt;&lt;/span&gt;</span></span>
图3:PixelShuffle的示意图
由于动态长宽比的引入,VIT最多会接受max_patch个448x448的图片,若不做任何处理,img_emb的序列长度会达到max_patchx1024。如此长的img_emb送入大模型会导致显存占用高,计算慢的问题。该文引入了PixelShuffle算法将单张图片的序列长度从1024降低至256。如图3,PixelShuffle会将VIT输出的(1024,hidden_dim)的序列reshape为(32,32,hidden_dim)的特征图, 然后每个2x2为一个基础单元按图3个方式进行变换,进而得到(16, 16, hidden_dimx4)的特征图。最后将特征图进行flatten得到(256, hidden_dimx4)的序列。
<span leaf=“”><span leaf="">&lt;span leaf=&quot;&quot;&gt;&lt;img data-imgfileid=&quot;100004728&quot; data-src=&quot;https://mmbiz.qpic.cn/sz_mmbiz_png/mZ89VeqFiaqvgCw6iaUCwgYGBfibOOl2VP3WuSjCeQmibZSZuE4JibLiaDcBNCSD01JnBFW2x8XA4g5rOmwdSAPrXsDA/640?wx_fmt=png&amp;amp;from=appmsg&quot; data-type=&quot;png&quot; width=&quot;1386&quot;/&gt;&lt;/span&gt;</span></span>
图4:internvl-v1.5的模型架构
InternVL-v1.5的总体模型架构如图3所示,图片经动态长宽比切片后送入VIT模型,并经过PixelShuffle得到img_emb。本文使用MLP将得到的img_emb的channel数量与大语言模型的input_emb对齐,并使用InternLM2-Chat-20B作为语言模型。
2.3 训练数据集
为了提升模型的通用能力和OCR能力,InternVL-V1.5收集了海量开源数据集用于模型预训练和finetune。第一阶段预训练仅训练VIT和MLP部分,预训练数据集主要是基础能力的训练,包括图像的简单描述,目标检测和OCR能力。第二阶段finetune则包含各种复杂任务,包括图像详细描述,表格理解,图像问答等。两阶段的序列长度均为4096并将max_patches设置为7。除此之外,为了提升模型的中文场景理解能力和中文OCR能力,在构建数据集时,InternVL-V1.5将大量英文数据集利用LLM翻译成了中文(如将img-caption数据集的英文caption转为中文caption),并使用PaddleOCR和Wukong数据集生成了Wukong-ocr数据集。
<span leaf=“”><span leaf="">&lt;span leaf=&quot;&quot;&gt;&lt;img data-imgfileid=&quot;100004727&quot; data-src=&quot;https://mmbiz.qpic.cn/sz_mmbiz_png/mZ89VeqFiaqvgCw6iaUCwgYGBfibOOl2VP3Q6VLHAe0lYg3q7DTibcQqP3Wrj4ICk9QJrWHiaKC86EY1x5Con19JxEA/640?wx_fmt=png&amp;amp;from=appmsg&quot; data-type=&quot;png&quot; width=&quot;1054&quot;/&gt;&lt;/span&gt;</span></span>
图5:预训练阶段使用的数据集
<span leaf=“”><span leaf="">&lt;span leaf=&quot;&quot;&gt;&lt;img data-imgfileid=&quot;100004730&quot; data-src=&quot;https://mmbiz.qpic.cn/sz_mmbiz_png/mZ89VeqFiaqvgCw6iaUCwgYGBfibOOl2VP3va2bicRzBgSByPibHb0tpIBN3BfWMtS69bnHKUv9OasgZBaibxzLsSXQg/640?wx_fmt=png&amp;amp;from=appmsg&quot; data-type=&quot;png&quot; width=&quot;1196&quot;/&gt;&lt;/span&gt;</span></span>
图6:finetune阶段使用的数据集
3 总结
相较于之前的工作,本文的主要贡献在于将大VIT、长img_emb和动态长宽比引入了多模态大模型并扩充了训练数据集。
-
对于富文本图片,其包含的信息量较大,此前使用的小VIT,短img_emb可能无法承载如此多的信息,大VIT,长img_emb让internVL-V1.5拥有了理解富文本图片的潜力
-
扩充的训练数据集让internVL-V1.5拥有了理解富文本图片的能力
-
动态长宽比的引入则让模型更好的处理极端长宽比的图片(如宣传海报),并且避免了图像resize导致的形变问题
------------------------分割线-------------------------------------
一、上期回顾
上期我们介绍了InternVL-v1.5,该工作首次将大VIT,长图像seqence和动态长宽比引入多模态大模型。本次我们将介绍Qwen2VL,相较与InternVL-v1.5,其包含以下几个改进。
|
|
---|---|
|
|
|
|
<span leaf=“”><img data-imgfileid=“100004734” data-src=“https://mmbiz.qpic.cn/sz_mmbiz_png/mZ89VeqFiaqvgCw6iaUCwgYGBfibOOl2VP36x0XN7UaTbia0vReWzAMbAuoukenyPZjrWTC8jY7SyravwpeyliaZk4g/640?wx_fmt=png&from=appmsg” data-type=“png” width=“1538”/></span>
图1:图像与大模型的主流结合方式。(1)将图片经过一个Pretrained VIT,获取视觉特征。(2)将该视觉特征通过某种变换层(Adapter)对齐到大模型 Input Embedding的维度。(3)将对齐后的视觉特征concat到Input Embedding,输入到大模型(Large Language Model, LLM)
二、Qwen2VL
Qwen2VL的模型架构可以使用图1来表示,其模型结构的特殊性主要体现在动态分辨率和位置embedding上,本文将着重介绍这两点
2.1 动态分辨率
InternVL系列的图像转序列(img_emb)模块会将图像分为多个448*448的patch,即图像的长宽会被resize到448的倍数,该方法虽然能支持动态长宽比,但实际应用时,该图像分patch机制更多考虑的是长宽比,而非分辨率。
|
使用模型
|
图像分辨率
|
resize后分辨率
|
图像序列长度
|
| — | — | — | — |
|
InternVL-v1.5
|
512x512
|
448x448
|
256
|
|
InternVL-v1.5
|
40x400
|
448x4480
|
2560
|
|
Qwen2VL
|
512x512
|
504x504
|
324
|
|
Qwen2VL
|
40x400
|
28x392
|
14
|
而Qwen2VL的图像转序列不仅考虑了长宽比还考虑了分辨率对img_emb序列长度的影响, 极大程度上提升了模型的infer效率。其实现动态分辨率的具体做法分为图像预处理和VIT两个部分。
<span leaf=“”><img data-imgfileid=“100004735” data-src=“https://mmbiz.qpic.cn/sz_mmbiz_png/mZ89VeqFiaqvgCw6iaUCwgYGBfibOOl2VP3ChnWtL3qy2J6AsReibKKyvPg9ticYtsPFCWialicbmx1MLhgxdd4OT08PQ/640?wx_fmt=png&from=appmsg” data-type=“png” width=“1942”/></span>
图2:图像预处理流程图,Qwen2VL在处理视频时会将视频当做多个图片来处理,并在VIT中应用了2,h,w,c的3D卷积核(2为时间维度)。为了统一图像和视频的输出,此处会将图像在channel层面翻倍(相当于输入了两帧一样的图片)。
**图像预处理部分:**以512x512的图像为例,该图像会被resize成504x504;然后被分为 36x36个patch,每个patch的大小均为14x14x3;随后channel维度进行重复得到 36x36个patch,每个patch的大小均为14x14x3x2;最后会对图像进行flatten操作,得到(36x36, 14x14x3x2) = (1296, 1176)的序列。
<span leaf=“”><img data-imgfileid=“100004738” data-src=“https://mmbiz.qpic.cn/sz_mmbiz_png/mZ89VeqFiaqvgCw6iaUCwgYGBfibOOl2VP3F3aDuqaZ5o0LibWnlEmyThAplGsQ7dbU3bCfiaQkJ3tWTbIVjp15F74Q/640?wx_fmt=png&from=appmsg” data-type=“png” width=“1756”/></span>
图3:图像过VIT的流程图,其中的FFN为图1中的Adapter,红色部分即为图1中的aligned\_img\_emb
**视觉部分:**以512x512的图像为例,其预处理后的序列会先过一个3D卷积将其变为(1296, 1280),其作用相当于过了一个FFN,模型中使用的3D卷积是为了将图片与视频相统一。该序列过完VIT后即得到(1296, 1280)的img_emb。**由于图像最开始被resize到长宽均能被28整除,因此此时得到的seq_len一定能被4整除。**为了压缩图像序列,减少大模型的资源消耗,视觉部分将img_emb reshape为(1296/4=324,5120)的大小,并使用FFN将hidden维度数与大模型对齐
2.2 统一的多模态Rope位置embedding
为了将视频,图像和文本将统一,该文提出了一个统一的位置embedding:**Multimodal Rotary Position Embedding。**对于每个token其有三个 position_id分别是 temporal position_ids(时间id,在纯文本中表示原始的位置id,在图片或视频中表示时间位置id);height position_ids和width position_ids(宽高id,在纯文本中宽高id与时间id一致,在视频和图片中表示图片的宽高)。以下是一个position_id的例子。
input_ids: [V V V V V V V V V V V V T T T T T], here V is for vision.
vision temporal position_ids: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]
vision height position_ids: [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1]
vision width position_ids: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
text temporal position_ids: [3, 4, 5, 6, 7]
text height position_ids: [3, 4, 5, 6, 7]
text width position_ids: [3, 4, 5, 6, 7]
temporal position_ids: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 4, 5, 6, 7]
height position_ids: [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 3, 4, 5, 6, 7]
width position_ids: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 3, 4, 5, 6, 7]
在过完vision_token之后,text_token的时间id起始值为 之前三种id的最大值 + 1。这种设计有几点好处
-
保证后续pos id比前序pos id大
-
多模态他模型的图像token的长度通常为1k-2k,但分patch后的图像宽高通常在100以内。该方法可以减小position_id的值。从而使模型能用更小的pos_id适配更长的序列长度。
<span leaf=“”><img data-imgfileid=“100004739” data-src=“https://mmbiz.qpic.cn/sz_mmbiz_png/mZ89VeqFiaqvgCw6iaUCwgYGBfibOOl2VP3LcVWoWVKKx93tiby3D879icFvfs4H3W0WESJlU4PshavmPFFk5bicTzIA/640?wx_fmt=png&from=appmsg” data-type=“png” width=“1700”/></span>
图4:由时间id,宽度id和高度id,生成单个Token的最终位置emb的示意图
在基于多模态position_id应用到q,k的hidden_states时,Qwen2VL先分别生成时间,高度和宽度的rope位置编码,分别分配给时间、高度和宽度。此处有一个细节,我们知道rope编码在低维和高维的角度不同。
因此,在生成单个token的最终位置emb时,Qwen2VL使用图4所示的方法合成位置emb,保证时间,宽度,高度这三个维度都均有高维区域和低维区域。
2.3 训练过程
Qwen2VL的训练经过了三个不同的阶段,每个阶段的训练目标,可训练参数和训练数据集简介见下表
|
训练阶段
|
可训练参数
|
训练数据集介绍
|
| — | — | — |
|
第一阶段预训练
|
VIT
VIT和LLM的链接部分(图1中的Adapter)
|
共600BTokens,主要是图片分类,图文对关系(论文没细讲也许是类似clip的训练数据集)和OCR训练任务
|
|
第二阶段预训练
|
全部参数
|
数据集内容同上,数据量增加到1400BTokens
|
|
Finetune训练
|
全部参数
|
指令跟随数据集,主要包含图像问答,文档解析,多图理解,视频理解,视频问答和多Agent合作
|
3. 总结
相较于之前的工作,本文的主要贡献在于将更精细的动态图像预处理方式和统一的多模态位置编码引入了多模态大模型。
-
Qwen2VL仅要求图像的宽高能被28整除,该方式能处理更多样的长宽比。且能根据图像分辨率分配img_emb的token数量,资源消耗更加合理。
-
统一的多模态位置emb(M-Rope)统一了图像,视频和文本。对比实验证明了该编码方式能提升模型效果。
AI大模型学习福利
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
大模型&AI产品经理如何学习
求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。
1.学习路线图
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方图片前往获取
3.技术文档和电子书
这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。
4.LLM面试题和面经合集
这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓