MiniCPM-V: A GPT-4V Level MLLM on Your Phone

news/2024/9/18 11:12:33/ 标签: 人工智能, MLLM

MLLM_on_Your_Phone_0">MiniCPM-V: A GPT-4V Level MLLM on Your Phone

研究背景和动机

现有的MLLM通常需要大量的参数和计算资源,限制了其在实际应用中的范围。大部分MLLM需要部署在高性能云服务器上,这种高成本和高能耗的特点,阻碍了其在移动设备、离线和隐私保护场景中的应用。

文章主要贡献:

提出了MiniCPM-V系列模型,能在移动端设备上部署的MLLM

  • 性能优越:在OpenCompass的11个热门基准测试上,表现优于GPT-4V-1106、Gemini Pro和Claude 3。
  • 强大的OCR能力:支持1.8M像素高分辨率图像感知,可处理多种纵横比。
  • 值得信赖的行为:具有较低的幻觉率(hallucination rate)。
  • 多语言支持:支持超过30种语言。
  • 高效的端侧部署:通过一系列端侧优化技术,实现了在移动设备上的高效部署。

Introduction

引入了Moore’s Law of MLLMs

在这里插入图片描述

模型架构

在这里插入图片描述

模型架构设计
  • 视觉编码器(Visual Encoder):采用SigLIP SoViT-400m/14模型来处理图像输入。
  • 压缩层(Compression Layer):使用感知器重采样结构(Perceiver Resampler)进行视觉特征的压缩,采用一层交叉注意力来实现。
  • 大语言模型(LLM):压缩后的视觉特征和文本输入共同被送入LLM进行条件文本生成。MiniCPM-V 2.5版本使用了Llama3-Instruct 8B作为基础模型。
自适应视觉编码(Adaptive Visual Encoding)——参考LLaVA-UHD,为了有效的OCR同时高效
  1. 图像划分(Image Partition):为了适配不同纵横比的高分辨率图像,首先将图像划分成多个子块,每个子块与 ViT 的预训练设置相匹配。划分过程包括计算理想的子块数量,选择最佳的行数和列数组合以最大化评分函数值,确保划分后的子块与ViT的预训练设置一致。

切割数量: N = ⌊ W I × H I W v × H v ⌋ N = \left\lfloor \frac{W_I \times H_I}{W_v \times H_v} \right\rfloor N=Wv×HvWI×HI

m × n = N m \times n = N m×n=N
评估切割效果:

S ( m , n ) = − ∣ log ⁡ W I / m H I / n − log ⁡ W v H v ∣ S(m, n) = - \left| \log \frac{W_I / m}{H_I / n} - \log \frac{W_v}{H_v} \right| S(m,n)= logHI/nWI/mlogHvWv
选择:

m ∗ , n ∗ = arg ⁡ max ⁡ ( m , n ) ∈ C ‾ S ( m , n ) m^*, n^* = \arg \max_{(m, n) \in \overline{C}} S(m, n) m,n=arg(m,n)CmaxS(m,n)
对应:

image-20240905174235366
  1. 切片编码(Slice Encoding):每个子块在输入ViT之前需要调整大小,使其与ViT的预训练区域大小匹配。随后,对ViT的位置嵌入进行插值,以适应每个子块的纵横比。为了表示每个切片相对于整个图像的位置,还引入了一个Spatial Schema,即用两个特殊的标记包装每个切片的标记<slice>和<\slice>,然后使用一个“\n”将片从不同的行中分离出来。
image-20240905174907591
  1. 令牌压缩(Token Compression):视觉编码之后,每个子块被编码为1024个令牌。为了管理高数量的令牌,作者使用了一个包含一层交叉注意力的压缩模块,将视觉令牌压缩为更少的查询数量(如,64或96个queries)。为提升效率efficiency。

Training

主要包括三个阶段:预训练阶段(Pre-training Phase)监督微调阶段(Supervised Fine-tuning Phase, SFT)基于AI反馈的强化学习阶段(RLAIF-V Phase)

1. Pre-training——又分为三部分

预训练阶段的主要目标是将视觉模块(视觉编码器和压缩层)与大语言模型(LLM)的输入空间进行对齐,并学习基础的多模态知识。这个阶段分为三个子阶段:

阶段1:压缩层的预热训练
  • 目标:主要训练视觉编码器和LLM之间的压缩层,使其能够有效地连接视觉输入和语言输出。
  • 可训练模块:在这个阶段,压缩层被随机初始化并进行训练,而其他模块的参数保持冻结状态。视觉编码器的分辨率设置为224×224,这与其预训练时的设置相同。
  • 数据:从图像描述数据(Image Captioning)集中随机选择200M数据用于训练。为了保证数据质量,对数据进行清洗,去除不相关或格式错误的图像-文本对。

在这里插入图片描述

阶段2:扩展视觉编码器的输入分辨率
  • 目标:扩展预训练视觉编码器的输入分辨率,以适应更高分辨率的图像输入。
  • 可训练模块:在此阶段,图像分辨率从224×224扩展到448×448,整个视觉编码器被训练,而其他模块的参数保持冻结。
  • 数据:为了适应扩展后的分辨率,额外从图像描述数据集中选择200M数据。
阶段3:自适应视觉编码训练
  • 目标:进一步训练视觉模块,使其能够处理任意纵横比的高分辨率输入,并提高其OCR能力。
  • 可训练模块:在阶段3训练中,压缩层和视觉编码器都进行训练,以适应语言模型的嵌入空间。为了避免低质量预训练数据对语言模型的干扰,LLM保持冻结状态。
  • 数据:除了之前使用的图像描述数据外,在高分辨率预训练阶段还引入了OCR数据,以增强视觉编码器的OCR能力。

训练过程遇到三个问题及解决方案:

  1. Caption Rewriting:低质量数据导致训练不稳定,因此引入辅助模型重写这些低质数据。(The rewriting model takes the raw caption as input and is asked to convert it into a question-answer pair. The answer from this process is adopted as the updated caption. In practice, we leverage GPT-4 [14] to annotate a small number of seed samples, which are then used to fine-tune an LLM for the rewriting task.
  2. Data Packing:different data sources usually have different lengths,可能造成out-of-memory (OOM) errors。解决:打包多个样本为一个固定长度序列,并截断最后一个样本。(Meanwhile,
    we modify the position ids and attention masks to avoid interference between different samples. In our experiments, the data packing strategy can bring 2~3 times acceleration in the pre-training phase.)
  3. Multilingual Generalization:解决多语言能力:Fortunately, recent findings from
    VisCPM [41] have shown that the multimodal capabilities can be efficiently generalized across
    languages via a strong multilingual LLM pivot. In practice, we only pre-train our model on English and Chinese multimodal data, and then perform a lightweight but high-quality multilingual supervised fine-tuning to align to the target languages.
2. 监督微调阶段(Supervised Fine-tuning Phase, SFT)

在预训练阶段学习了基础能力后,接下来进行监督微调,以进一步通过人类标注的数据集学习知识和交互能力。

  • 可训练模块:与预训练阶段主要使用抓取自网络的数据不同,SFT阶段主要利用由人类标注的高质量数据集。因此,在SFT阶段,所有模型参数都被解锁,以更好地利用数据并学习丰富的知识。

  • 数据:根据近期研究,训练后期更容易塑造模型能力和响应风格。所以SFT数据分为两部分:

    • 第一部分(Part-1):专注于增强模型的基础识别能力,包含传统的QA/描述数据集,这些数据集的响应长度相对较短。
    • 第二部分(Part-2):旨在增强模型在生成详细响应和遵循人类指令方面的能力,包含长响应和复杂交互的数据集。SFT过程中,这两部分数据串联后依次输入模型进行训练。
3. 基于AI反馈的强化学习阶段(RLAIF-V Phase)

多模态大语言模型(MLLMs)通常容易出现幻觉问题,即生成的响应与输入图像不符。为了解决这个问题,作者采用了最近提出的RLAIF-V方法,其关键在于通过开源模型获得高质量的反馈进行直接偏好优化(DPO)。

image-20240905202948776

RLAIF-V方法流程:
  1. 响应生成(Response Generation):首先使用策略模型生成多个给定指令的响应。具体来说,给定一个等待对齐的模型,作者从模型中采样生成10个响应。这种生成方法有助于更专注于可信度,因为可以避免来自不同MLLM的文本风格差异,同时反馈学习更高效,因为偏好直接在策略模型的分布上收集。

  2. 反馈收集(Feedback Collection):由于开放源代码MLLM的能力通常较弱,直接收集高质量反馈是具有挑战性的。为解决这一问题,RLAIF-V采用了分而治之的策略对响应进行评分。每个响应被分解为原子陈述,然后将每个陈述转换为是/否问题,使用开放源代码的MLLM对其评分。最终的响应评分由无效原子陈述的数量决定。

  3. 直接偏好优化(Direct Preference Optimization, DPO):在收集到高质量的AI反馈后,进行偏好学习。DPO算法要求在偏好对上进行训练,其中一个样本优于另一个样本。最终构建了一个偏好数据集,用于偏好学习。

End-side Deployment

**End-side Deployment(端侧部署)**部分重点讨论了MiniCPM-V模型在移动设备等端侧设备上的高效部署方法和优化策略。

1. 挑战
  • 内存限制
  • CPU/GPU速度限制
2. 基础部署实践

为了降低模型在端侧设备上的内存消耗和计算成本,作者采用了以下基础优化方法:

  • 量化(Quantization):采用4位量化策略(Q4_K_M模式)来压缩模型的参数,从而将内存需求从16-17GB减少到约5GB,使得模型更适合在移动设备上运行。
  • 部署框架(Deployment Framework):作者使用llama.cpp框架结合量化策略,在Xiaomi 14 Pro(Snapdragon 8 Gen 3)上进行部署,并测量了编码延迟和解码速度。虽然基础优化方法已经降低了一些计算开销,但效果仍有改进空间。
3. 高级部署优化

为进一步提高用户体验,作者采用了一系列高级优化技术:

  • 内存使用优化(Memory Usage Optimization):通过顺序加载视觉编码器和大语言模型来减少内存占用,避免频繁的分页(paging),从而提高效率。
  • 编译优化(Compilation Optimization):在目标设备上直接编译模型,以充分利用设备的指令集架构,提高编码延迟和解码吞吐量。
  • 配置优化(Configuration Optimization):设计自动参数搜索算法,动态调整计算资源分配,提高推理速度。
  • NPU加速(NPU Acceleration):利用智能手机上的NPU(神经处理单元)来加速视觉编码部分(如使用QNN框架),显著减少视觉编码时间。
4. 结果与讨论
  • 通过这些优化技术,MiniCPM-Llama3-V 2.5模型能够在多种端侧设备上实现高效运行,如Xiaomi 14 Pro(Snapdragon 8 Gen 3)、vivo X100 Pro(Mediatek Dimensity 9300)和MacBook Pro(M1),并表现出接近甚至超过人类阅读速度的解码吞吐量。
  • 当前的计算瓶颈主要来自于LLM的预填充(prefilling)阶段。未来的研究方向包括开发更高效的视觉编码方法以及更好地利用GPU/NPU加速来进行LLM编码。
image-20240905214222961 image-20240905214245518

实验结果

General Multimodal Benchmarks

image-20240905214315920

OCR Benchmarks

在这里插入图片描述

Multilingual Multimodal Capability

image-20240907160824850

消融实验
Influence of RLAIF-V

在这里插入图片描述

Multilingual Generalization

image-20240907161518768


http://www.ppmy.cn/news/1525360.html

相关文章

UnrealEngine 打包Android平台应用

虚幻引擎 支持将项目发布到 安卓&#xff08;Android&#xff09; 移动设备上&#xff0c;并且提供了若干功能帮你将项目发布到 谷歌游戏商店。本节包含了如何设置Android开发环境、如何使用Android功能和服务、以及如何为发布游戏做准备相关的指南。 当前SDK要求 当前UE版本…

Apisix离线安装

上传离线包 #ll apisix-3.2.2-0.el7.x86_64.rpm apisix-base-1.21.4.1.8-0.el7.x86_64.rpm apisix-dashboard-3.0.1-0.el7.x86_64.rpm cyrus-sasl-2.1.26-24.el7_9.x86_64.rpm cyrus-sasl-devel-2.1.26-24.el7_9.x86_64.rpm cyrus-sasl-gssapi-2.1.26-24.el7_9.x86_64.rpm cyr…

第十八章 番外 余弦相似度

余弦相似度&#xff08;Cosine Similarity&#xff09;是一种衡量两个非零向量之间角度的度量方式&#xff0c;用于评估它们之间的相似性。它的值范围从 -1 到 1&#xff0c;其中 1 表示完全相同的方向&#xff08;即向量完全相同&#xff09;&#xff0c;0 表示正交&#xff0…

台球助教小程序开发/APP源码部署

开发一个美女台球助教微信小程序&#xff0c;需要综合考虑技术实现、用户体验、内容合规性以及市场推广等多个方面。下面是一个大致的开发流程和关键要点&#xff1a; 1.市场调研与需求分析 目标用户定位&#xff1a;明确你的小程序主要服务于哪些人群&#xff0c;比如台球爱好…

Docker Compose 开机自启动配置指南

在 Docker Compose 中设置开机自启动可以通过创建一个 systemd 服务&#xff0c;确保 Docker 容器在系统启动时自动运行。以下是一个示例步骤&#xff1a; 步骤 1&#xff1a;编写 docker-compose.yml 文件 确保你的项目已经有一个 docker-compose.yml 文件&#xff0c;这是 …

【四范式】浅谈NLP发展的四个范式

自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是计算机科学&#xff0c;人工智能&#xff0c;语言学关于计算机和人类自然语言之间的相互作用的领域&#xff0c;是计算机科学领域与人工智能领域中的一个重要方向。NLP发展到今天已经进入到了…

与 D3.js 的对比:ECharts 在前端可视化中的优势与劣势

在前端数据可视化的领域&#xff0c;ECharts 和 D3.js 是两个非常流行且强大的工具。尽管它们都可以用来创建图表和数据可视化&#xff0c;但它们的设计理念、使用方式和适用场景有所不同。本文将对这两个库进行比较&#xff0c;帮助你理解 ECharts 在前端可视化中的优势与劣势…

js 笔记

javascript编程语言 html css标记语言 html定义网页内容 css是描述网页布局 js控制网页行为 Livescript 为了确保不同浏览器上运行的javascript标准一致&#xff0c;所以几个公司共同制定了js的标准…

【PSINS】ZUPT代码解析(PSINS_SINS_ZUPT)|MATLAB

这篇文章写关于PSINS_SINS_ZUPT的相关解析。【值得注意的是】:例程里面给的这个m文件的代码,并没有使用ZUPT的相关技术,只是一个速度观测的EKF 简述程序作用 主要作用是进行基于零速更新(ZUPT)的惯性导航系统(INS)仿真和滤波 什么是ZUPT ZUPT是Zero Velocity Update(…

Unity 之 【Android Unity FBO渲染】之 [Unity 渲染 Android 端播放的视频] 的一种方法简单整理

Unity 之 【Android Unity FBO渲染】之 [Unity 渲染 Android 端播放的视频] 的一种方法简单整理 目录 Unity 之 【Android Unity FBO渲染】之 [Unity 渲染 Android 端播放的视频] 的一种方法简单整理 一、简单介绍 二、FBO 简单介绍 三、案例实现原理 四、注意事项 五、简…

Spring Boot整合Velocity 模板引擎

文章目录 Spring Boot整合Velocity 模板引擎一、引言二、整合步骤1、添加依赖2、配置文件3、创建模板4、编写控制器 三、访问应用四、总结 Spring Boot整合Velocity 模板引擎 一、引言 在现代Web开发中&#xff0c;模板引擎扮演着至关重要的角色&#xff0c;它们使得前端页面…

小红书治愈插画副业,猛猛涨粉上万+,每天只用5分钟

在这个数字化时代&#xff0c;AI技术正以前所未有的速度改变着我们的生活和工作。特别是在内容创作领域&#xff0c;AI的运用已经催生了一种全新的创作模式。一幅幅温馨可爱的治愈插画如同清流&#xff0c;不仅契合当下年轻人生活的状态&#xff0c;更成为许多人表达生活态度、…

Web3入门指南:从基础概念到实际应用

Web3&#xff0c;即“去中心化的第三代互联网”&#xff0c;正在逐步改变我们对互联网的传统认知。从最初的静态网页&#xff08;Web1.0&#xff09;到互动平台和社交媒体为主的互联网&#xff08;Web2.0&#xff09;&#xff0c;Web3的目标是让用户重新掌握对数据和数字资产的…

Spring Security异步无法获取用户认证信息

最近使用 Springboot 中 Async 注解异步调用方法时&#xff0c;发现无法获取到用户认证信息。 原因: Spring Security中的上下文SecurityContext的管理策略有三种 public class SecurityContextHolder {public static final String MODE_THREADLOCAL "MODE_THREADLOCA…

油耳用什么掏耳朵比较好?可视挖耳勺推荐平价

掏耳朵是一个轻松又舒服的感觉&#xff0c;很多人就会用棉签和普通耳勺越掏越进&#xff0c;在盲掏的过程中容易弄伤耳膜。所以我们在掏耳时要选好工具。市面上的智能可视挖耳勺&#xff0c;顶端带有摄像头&#xff0c;可以通过清楚的观察到耳道中的情况。但现在市面上关于可视…

Java后台生成二维码

一、效果图 二、实现代码 1.添加依赖 <!-- zxing生成二维码 --> <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version> </dependency><dependency><grou…

2024年城市客运安全员考试题库及答案

一、单选题 61.依据《中华人民共和国道路交通安全法》&#xff0c;夜间行驶或者在容易发生危险的路段行驶&#xff0c;以及遇有沙尘、冰雹、雨、雪、雾、结冰等气象条件时&#xff0c;应当&#xff08;  &#xff09;行驶速度。 A.降低 B.加快 C.保持 D.调整 答案:A …

3DGS:3D Gaussian Splatting for Real-Time Radiance Field Rendering 论文解读

目录 一、导言 二、相关工作 1、传统场景重建 2、神经渲染与辐射场 3、点云渲染 三、3DGS 1、SFM初始化稀疏点云 2、3D高斯椭球 3、协方差 4、球谐函数 5、3D高斯椭球集建立 6、3D投影2D 7、3D渲染公式 四、损失函数 五、基于梯度自适应改变点云的分布方式 六…

.json文件的C#解析,基于Newtonsoft.Json插件

目录 1. 前言 2. 正文 2.1 问题 2.2 解决办法 2.2.1 思路 2.2.2 代码实现 2.2.3 测试结果 3. 备注 1. 前言 天气晚来秋,这几天天气变凉了,各位同学注意好多穿衣服。回归正题 由于需要,需要将json的配置里面的调理解析出来,做成接口,以便于开发。 2. 正文 2.1 …

回(1)——BT服务器管理

住院半个月&#xff0c;导致博客断更了&#xff0c;重新开始一个新系列。 BT服务器的管理相关梳理: 当服务器项目很多&#xff0c;特别是几十个服务器需要进入管理的时候&#xff0c;会比较麻烦&#xff0c;一般是需要一个专门的项目管理面板里面&#xff0c;点击每个不同的项…