当前位置: 首页 > news >正文

多模态大模型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
Minicpm-V整体架构
具体而言,图片切片输入siglip得到图片向量,经过resampler进行压缩后得到最终的图片编码;图片占位符和文本输入到LLM的embedding模块中编码得到文本编码,最后将图片编码插入到对应的图片占位符的位置得到最终的vllm编码,输入LLM解码得到文本输出
Minicpm-V流程

图片切片

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/mlogHVWV
  • 第一个切片取原图,并把原图大小缩放为 [ 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

  1. 如果只是使用DPO,一张图片给模型回答X和Y,告诉模型要accept Y,refuse X,模型学习效率低
  2. 可能X并不是全错,模型不知道Y比X好在哪里;当X和Y都有错误时候,标注也会模糊不确定X和Y谁好
  3. 如果把模型给出的回答A中错误的地方针对性地改正,得到A*,再对改正的位置设置更高的权重让模型学习效果会更好
    在这里插入图片描述

RLAIF-V

RLAIF-V包含3个步骤,这3个步骤为一个round,可以不停执行。回答和反馈是基于当时模型的分布,不是预先设定的人类标注;并且LLM和MLLM可以使用其他模型或者自身完成,无需人工,具体步骤为:

  1. 产生回答:使用高温度,让模型输出10个回答
  2. 收集反馈:(1)分而治之,对于每个回答,拆分为子句(例如用句号分割); (2) 把子句输入给任意的LLM,让LLM生成针对子句进行的是 或者 否的提问(降低问题难度,弱的模型也能解决);(3)把图片和生成的问题拿去问多模态大模型,让多模态大模型打分,对于一个回答,算出最终的分数;
  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的视频号等


http://www.mrgr.cn/news/31651.html

相关文章:

  • 杨中科 .Net Core 笔记 DI 依赖注入2
  • Kafka--关于broker的夺命连环问
  • WebRTC视频 01 - 视频采集整体架构
  • Python用CEEMDAN-LSTM-VMD金融股价数据预测及SVR、AR、HAR对比可视化
  • PHP:通往动态Web开发世界的桥梁
  • TofuAI处理BT1120时序视频要求
  • 【软设】 系统开发基础
  • 2024/9/21 leetcode 21.合并两个有序链表 2.两数相加
  • 【Linux】解锁系统编程奥秘,高效文件IO的实战技巧
  • 口腔检测系统源码分享
  • 大模型,技术场景与商业应用(2024),赋能千行百业产业链升级
  • 【24华为杯数模研赛赛题思路已出】国赛D题思路丨附参考代码丨免费分享
  • Spring Boot赋能高校心理健康教育
  • 第12章 使用Web API控制器创建HTTP API
  • 奇安信渗透2面经验分享
  • 构建高效心理辅导平台:Spring Boot实践
  • Golang | Leetcode Golang题解之第421题数组中两个数的最大异或值
  • SQL 语法学习指南
  • 2024华为杯研赛E题保姆级教程思路分析
  • ThreadLocal引发内存泄漏的原因及解决方案
  • 【CAPL实战】system variables系统变量的基础与应用
  • 九芯电子革新健康检测!语音播报血压计ic芯片解决方案
  • python股票分析常用库,A股什么时候才能停止下跌啊
  • 14.1.2-float浮动练习
  • 如何着手创建企业数据目录?(三)权限管理及版本控制
  • Spring Boot在高校心理教育辅导系统中的应用