多模态大模型MiniCPM-V技术学习

news2024/9/21 15:14:38

目前性价比最高的多模态模型

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.coloradmin.cn/o/2152662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从小白到大神:C语言预处理与编译环境的完美指南(上)

从小白到大神&#xff1a;C语言预处理与编译环境的完美指南&#xff08;下&#xff09;-CSDN博客 新鲜出炉~~&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;下篇在这里&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&…

echarts图表刷新

图表制作完成&#xff0c;点击刷新图标&#xff0c;可以刷新。 <div class"full"><div id"funnel" class"normal"></div><div class"refreshs"><div class"titles_pic"><img src"./…

数据飞轮崛起:数据中台真的过时了吗?

一、数据中台的兴起与困境 随着大数据技术的不断发展&#xff0c;我见证了企业数据能力建设的演变。从数据中台的兴起&#xff0c;到如今数据飞轮模式的热议&#xff0c;企业的数据管理理念经历了巨大的变化。起初&#xff0c;数据中台作为解决数据孤岛、打破部门壁垒的“救星…

创新引领未来,Vatee万腾平台助力企业飞跃发展

在日新月异的科技浪潮中&#xff0c;创新已成为推动社会进步和企业发展的核心动力。Vatee万腾平台&#xff0c;作为数字化转型领域的佼佼者&#xff0c;正以其独特的创新理念和强大的技术实力&#xff0c;引领着企业迈向更加辉煌的未来&#xff0c;助力企业实现飞跃式发展。 创…

如何将很多个pdf拼接在一起?很多种PDF拼接的方法

如何将很多个pdf拼接在一起&#xff1f;将多个PDF文件合并不仅能够提升信息的整合性&#xff0c;还能使文件管理更加高效。想象一下&#xff0c;你需要向同事或老师提交一份综合报告&#xff0c;其中包含了多份相关资料。如果每个文件单独存在&#xff0c;查找和传输都会变得繁…

Redis中Hash(哈希)类型的基本操作

文章目录 一、 哈希简介二、常用命令hsethgethexistshdelhkeyshvalshgetallhmgethlenhsetnxhincrbyhincrbyfloathstrlen 三、命令小结四、哈希内部编码方式五、典型应用场景六、 字符串&#xff0c;序列化&#xff0c;哈希对比 一、 哈希简介 几乎所有的主流编程语言都提供了哈…

(蓝桥杯)STM32G431RBT6(TIM4-PWM)

一、基础配置 这个auto-reload preload是自动重装载值&#xff0c;因为我们想让他每改变一个占空比&#xff0c;至少出现一次周期 Counter Period(Autoreload Regisiter)这个设值为10000&#xff0c;那么就相当于它的周期是10000 脉冲宽度可以设置为占周期的一半&#xff0c;那…

docker部署excalidraw画图工具

0&#xff09;效果 0.1&#xff09;实时协作 0.2&#xff09;导出格式 1&#xff09;docker安装 docker脚本 bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrorsmain/DockerInstallation.sh)docker-compose脚本 curl -L "https://github.com/…

【随手笔记】使用J-LINK读写芯片内存数据

第一种使用JLINK.exe 1. 打开j-link.exe 2.输入【usb】 3. 连接芯片 输入【connect】输入芯片型号【STM32L071RB】输入连接方式 【S】 使用SWD连接方式输入连接速率 【4000】连接成功 4. 输入【&#xff1f;】查看指令提示 5. 读写指令 Mem Mem [<Zone>…

Redis的主从模式、哨兵模式、集群模式

最近学习了一下这三种架构模式&#xff0c;这里记录一下&#xff0c;仅供参考 目录 一、主从架构 1、搭建方式 2、同步原理 3、优化策略&#xff1a; 4、总结&#xff1a; 二、哨兵架构 1、搭建哨兵集群 2、RedisTemplate如何使用哨兵模式 三、分片集群架构 1&#…

JVM面试题-说一下JVM主要组成部分及其作用

总体来说&#xff0c;方法区和堆是所有线程共享的内存区域&#xff1b;而虚拟机栈、本地方法栈和程序计数器的运行是线程私有的内存区域&#xff0c;运行时数据区域就是我们常说的JVM的内存。 类加载子系统&#xff1a;根据给定的全限定名类名(如&#xff1a;java.lang.Object…

【D3.js in Action 3 精译_024】3.4 让 D3 数据适应屏幕(上)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

AJAX(一)HTTP协议(请求响应报文),AJAX发送请求,请求问题处理

文章目录 一、AJAX二、HTTP协议1. 请求报文2. 响应报文 三、AJAX案例准备1. 安装node2. Express搭建服务器3. 安装nodemon实现自动重启 四、AJAX发送请求1. GET请求2. POST请求(1) 配置请求体(2) 配置请求头 3. 响应JSON数据的两种方式(1) 手动&#xff0c;JSON.parse()(2) 设置…

AI绘画Flux【lora模型】【微缩景观】:惊艳!3D场景融入手机上的微景观!

大家好&#xff0c;我是灵魂画师向阳 今天和大家分享一款基于Flux底模训练的微缩景观模型——FLUX|手机上的微景观。此模型主要将手机作为微型景观的基底&#xff0c;强制将3d情景融入手机并控制在手机屏幕上方范围内。 作者在使用提示词直出和使用该Loar提示词生成的图片进行…

rsyslogd 内存占用很高解决方案

在Kubernetes&#xff08;K8S&#xff09;集群中&#xff0c;监控日志是非常重要的&#xff0c;而rsyslogd是Linux系统中用于处理系统和应用程序日志的守护进程。有时候rsyslogd可能会占用较高的内存&#xff0c;这时候我们就需要对其进行优化和调整。 阿里云虚拟服务器&…

JavaEE: 深入探索TCP网络编程的奇妙世界(二)

文章目录 TCP核心机制TCP核心机制二: 超时重传为啥会丢包?TCP如何对抗丢包?超时重传的时间设定超时时间该如何确定? TCP核心机制 书接上文~ TCP核心机制二: 超时重传 在网络传输中,并不会一帆风顺,而是可能出现"丢包情况"~ 为啥会丢包? 产生丢包的原因有很多…

其他比较条件

使用BETWEEN条件 可以用BETWEEN范围条件显示基于一个值范围的行。指定的范围包含一个下限和一个上限。 示例&#xff1a;查询employees表&#xff0c;薪水在3000-8000之间的雇员ID、名字与薪水。 select employee_id,last_name,salary from employees where salary between 3…

移植Linux:如何制作rootfs?

一、分析 1. 文件系统简介 理论上说一个嵌入式设备如果内核能够运行起来&#xff0c;且不需要运行用户进程的话&#xff0c;是不需要文件系统的&#xff0c;文件系统简单的说就是一种目录结构&#xff0c;由于 linux操作系统的设备在系统中是以文件的形式存在&#xff0c;将这…

Cypress安装与启动(开始学习记录)

一 Cypress安装 使用npm安装 1.查看node.js npm的版本&#xff0c;输入 npm --version 和 node --version&#xff0c;node.js没安装的可以去中文网下载最新稳定版安装&#xff0c;npm不建议升级到最新版本&#xff0c;会导致安装Cypress时Error: Cannot find module ansi-st…

2-94 基于matlab的最佳维纳滤波器的盲解卷积算法

基于matlab的最佳维纳滤波器的盲解卷积算法。维纳滤波将地震子波转换为任意所需要的形态。维纳滤波不同于反滤波&#xff0c;它是在最小平方的意义上为最 佳。基于最佳纳滤波理论的滤波器算法是莱文逊(Wiener—Levinson)算法。程序提供了4种子波和4种期望输出&#xff1a;零延迟…