多模态大模型MiniCPM-V技术学习
目前性价比最高的多模态模型
Minicpm-V-2.6参数8B,int4版本推理显存仅7GB,并且在幻觉数据集上效果好于其他模型,测试下来效果非常好,官方演示里面还给出了手机上端侧运行的图片和视频推理示例
p.s.Qwen2-VL和Minicpm-V-2.6头对头对比报告上看效果在某些方面超过cpm,应该主要是OCR方面,自己测试下来cpm的OCR的效果不是特别好,但是cpm更擅长图片内容理解
p.s. Minicpm-3.0(4B)纯语言模型出来了,效果对标gpt-3.5,测了下效果确实比较好,语义理解上比Qwen-2.5-3B效果好,比Minicpm-2.0好很多,啥时候加成到Minicpm-V上得到更小更强的多模态模型(Minicpm-V的LLM目前是Qwen2,大小7B)
p.s.Qwen2.5-VL这几天出来了,更新好快啊,不知道效果怎么样,学…学不过来啊
模型架构 ViT+LLM
Minicpm-V-2.6采用的图片编码器是siglip-400M,LLM是qwen2-7B
具体而言,图片切片输入siglip得到图片向量,经过resampler进行压缩后得到最终的图片编码;图片占位符和文本输入到LLM的embedding模块中编码得到文本编码,最后将图片编码插入到对应的图片占位符的位置得到最终的vllm编码,输入LLM解码得到文本输出
图片切片
Minicpm-V的一个创新是额外设计了图片切片的方式,深入探究了切片方式差异对结果的影响。一方面,图片编码器能识别的最大分辨率为448*448,输入图片不一定正好这么大,也不一定正好是正方形的。超过大小的部分如果直接放缩细节损失较多,直接填充容易出现幻觉。并且图片不一定是方形的,直接缩放为方形,形变对效果影响较大。此外,如果进行图片切片,采用类似声音片段切片重叠切片的方式,会导致模型在数物体数量上出现幻觉。
图片切片方式
核心的思想:让每个小图的尺寸尽量吻合ViT预训练的分辨率,尽量保持原图长宽比
- 输入图片如果比ViT预训练的分辨率大,需要把它切成子图,每个子图缩放为ViT的分辨率后进行编码
- 给定输入图片原始大小为 [ W I , H I ] [W_I,H_I] [WI,HI], V i T ViT ViT预训练的分辨率为 [ W V , H V ] [W_V,H_V] [WV,HV],先粗略计算能够把输入图片切成 N N N份,例如 N = ⌈ 6.5 ⌉ N=\lceil 6.5 \rceil N=⌈6.5⌉时取 N = 6 N=6 N=6和 N = 8 N=8 N=8进行尝试,计算所有可能的切分 m × n = N m \times n=N m×n=N
- 判断这些切分方式组合中,哪种方式缩放最能保持图片的长宽比,找到让 S ( m , n ) S(m,n) S(m,n)值最大的 m × n m \times n m×n的切割方式
S ( m , n ) = − ∣ l o g W I / m H i / n − l o g W V H V ∣ S(m,n)=-|log\frac{W_I/m}{H_i/n}-log\frac{W_V}{H_V}| S(m,n)=−∣logHi/nWI/m−logHVWV∣ - 第一个切片取原图,并把原图大小缩放为 [ W V , H V ] [W_V,H_V] [WV,HV]
- 后面的切片通过切割得到 m × n m \times n m×n个子图,每个子图大小都缩放为 [ W V , H V ] [W_V,H_V] [WV,HV]
- 把这 1 + m × n 1+m \times n 1+m×n张图输入到 V i T ViT ViT中
图片和文本编码流程
默认参数:Siglip的输入图片尺寸image_size是448*448,patch_size=14;LLM的embedding的维度为3584
- 如果输入一张比较大的图片,和对应文本“what”,首先会解析输入,看是否有图片
- 解析时会进行一些替换和预留,得到的input_ids会是这样:
- 只有1张图片,所以<image_id>只有1个;图片切成了1+8张slice,所以有1+8和image/slice标记
- 可以看到,里面有<unk>这样的占位符,这些进行文本编码后对应的向量后续会填入为图片向量
- <unk>有64个,也就是每个图片切片会占用64个数量的文本token
向量长度和大小
- input_ids的长度为619
- 图片输入模型后输入siglip进行图片编码,patch_size=14,image_size=448,对于单个大小为[3,H,W]的切片计算 tgt_size =[H//14,W//14],tgt_sizes=[[22,47], [31,33], …, [31,33]]
- 9个图片切片编码后得到的图片向量 vision_embedding [9,1034,1152] (22 × \times × 47=1034, 31 × \times × 33 =1023)
- 接着为了减小输入到LLM模块的向量大小,图片的编码结果会先进行压缩,使用一个类似Q-Former的resampler模块对vision_embedding 压缩(num_queries=64)
- 压缩后得到的vision_embedding [9,64,3584]
- 把vision_embedding 填入到文本的embedding对应位置得到最终的vllm_embedding [1,619,3584]
偏好对齐技术
整体训练包含三个阶段,第三个截断会进行偏好对齐
RLHF-V
- 如果只是使用DPO,一张图片给模型回答X和Y,告诉模型要accept Y,refuse X,模型学习效率低
- 可能X并不是全错,模型不知道Y比X好在哪里;当X和Y都有错误时候,标注也会模糊不确定X和Y谁好
- 如果把模型给出的回答A中错误的地方针对性地改正,得到A*,再对改正的位置设置更高的权重让模型学习效果会更好
RLAIF-V
RLAIF-V包含3个步骤,这3个步骤为一个round,可以不停执行。回答和反馈是基于当时模型的分布,不是预先设定的人类标注;并且LLM和MLLM可以使用其他模型或者自身完成,无需人工,具体步骤为:
- 产生回答:使用高温度,让模型输出10个回答
- 收集反馈:(1)分而治之,对于每个回答,拆分为子句(例如用句号分割); (2) 把子句输入给任意的LLM,让LLM生成针对子句进行的是 或者 否的提问(降低问题难度,弱的模型也能解决);(3)把图片和生成的问题拿去问多模态大模型,让多模态大模型打分,对于一个回答,算出最终的分数;
- DPO:从10个回答中随机抽取一对对的回答对(分数的大小关系决定accept还是refuse)
Minicpm-V相关论文
- MiniCPM: Unveiling the Potential of Small Language Models with Scalable Training Strategies. 2024
- RLHF-V: Towards Trustworthy MLLMs via Behavior Alignment from Fine-grained Correctional Human Feedback. CVPR 2024
- LLaVA-UHD: an LMM Perceiving Any Aspect Ratio and High-Resolution Images. 2024.
- Large Multilingual Models Pivot Zero-Shot Multimodal Learning across Languages. ICLR 2024.
- MiniCPM-V: A GPT-4V Level MLLM on Your Phone. 2024.
ref
具体信息可以参考对应的论文、Minicpm的飞书技术文档、b站的openbmb的视频号等