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

news2024/11/15 12:09:41

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

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

相关文章

通信工程学习:什么是AM标准调幅

AM标准调幅 AM标准调幅&#xff0c;即Amplitude Modulation&#xff08;振幅调制&#xff09;&#xff0c;是一种在电子通信中广泛使用的调制方法&#xff0c;特别是在无线电载波传输信息方面。以下是关于AM标准调幅的详细解释&#xff1a; 一、AM标准调幅的定义与原理 AM标准…

机器视觉硬件选型根据某项目相机镜头

一 项目总需求 1、大视野检测需求: (1)大视野&#xff1a; ①产品尺寸15.6寸屏幕&#xff0c;产品大小&#xff1a;350mm x 225mm&#xff1b; ②产品料盘尺寸大小&#xff1a;565mm x 425mm; ③工作距离&#xff1a;880mm&#xff1b;检测精度&#xff1a;500μm&#xff…

如何使用 ef core 的 code first(fluent api)模式实现自定义类型转换器?

如何使用 ef core 的 code first 模式实现自定义类型转换器 前言 1. 项目结构2. 实现步骤2.1 定义转换器2.1.1 DateTime 转换器2.1.2 JsonDocument 转换器 2.2 创建实体类并配置数据结构类型2.3 定义 Utility 工具类2.4 配置 DbContext2.4.1 使用 EF Core 配置 DbContext 的两种…

浅谈人工智能之基于AutoGen Studio+Ollama本地大模型构建AI Agent

浅谈人工智能之基于AutoGen Studio+Ollama本地大模型构建AI Agent 摘要 随着人工智能技术的飞速发展,大型语言模型已成为推动创新应用的关键力量。然而,云服务的使用虽然便捷,但面临着数据安全、延迟及成本等挑战。为解决这些问题,越来越多的开发者选择在本地部署大模型。…

python学习11-Pytorch张量与数据处理1

ndarray 首先&#xff0c;我们介绍n维数组&#xff0c;也称为张量&#xff08;tensor&#xff09;。 使用过Python中NumPy计算包的读者会对本部分很熟悉。 无论使用哪个深度学习框架&#xff0c;它的张量类&#xff08;在MXNet中为ndarray&#xff0c; 在PyTorch和TensorFlow中…

数据集 CrowdPose 多人姿态估计 深度学习 >> DataBall

数据集 CrowdPose 多人姿态估计 深度学习 CrowdPose 数据集 这是一个用于探讨在拥挤场景中的多人姿态估计的图像数据集。该数据集包括 2 万张图像和标注有 14 个关键点的 8 万个人体姿势&#xff0c;其中测试集包括 8,000 张图像。 article{li2018crowdpose, title{CrowdPose…

mysql-PXC实现高可用

mysql8.0使用PXC实现高可用 什么是 PXC PXC 是一套 MySQL 高可用集群解决方案&#xff0c;与传统的基于主从复制模式的集群架构相比 PXC 最突出特点就是解决了诟病已久的数据复制延迟问题&#xff0c;基本上可以达到实时同步。而且节点与节点之间&#xff0c;他们相互的关系是…

数据预处理与协同过滤推荐算法——从数据清洗到个性化电影推荐

推荐系统在现代应用中占据了重要地位&#xff0c;尤其在电影、音乐等个性化内容推荐中广泛使用。本文将介绍如何使用数据预处理、特征工程以及多种推荐算法&#xff08;包括协同过滤、基于内容的推荐、混合推荐等&#xff09;来实现电影推荐系统。通过Pandas、Scikit-learn、Te…

研1日记5

x torch.tensor(x),numpy 转tensor 三维矩阵相加 screen -S pid 进入之前创建好的screen transpose()只能一次操作两个维度&#xff1b;permute()可以一次操作多维数据&#xff0c;且必须传入所有维度数&#xff0c; transpose()中的dim没有数的大小区分&#xff1b;permut…

Redis 分布式锁:线程安全在分布式环境中的解决方案

Redis 分布式锁&#xff1a;线程安全在分布式环境中的解决方案 一 . 分布式锁二 . 分布式锁的实现策略2.1 引入 setnx2.2 引入过期时间2.3 引入校验 ID2.4 引入 lua 脚本2.5 引入看门狗2.6 引入 redlock 算法 Hello , 大家好 , 这个专栏给大家带来的是 Redis 系列 ! 本篇文章给…

Flutter 中的低功耗蓝牙概述

随着智能设备数量的增加&#xff0c;控制这些设备的需求也在增加。对于多种使用情况&#xff0c;期望设备在需要进行控制的同时连接到互联网会受到很大限制&#xff0c;因此是不可行的。在这些情况下&#xff0c;使用低功耗蓝牙&#xff08;也称为 Bluetooth LE 或 BLE&#xf…

[yolov5] --- yolov5入门实战「土堆视频」

1 项目介绍及环境配置 下载yolov5 tags 5.0源码&#xff0c;https://github.com/ultralytics/yolov5/tree/v5.0&#xff0c;解压 Pycharm 中创建conda虚拟环境 激活conda虚拟环境 根据作者提供的requirements.txt文件&#xff0c;pip install -r requirements.txt 如果作者没有…

【Spring Boot】 SpringBoot自动装配-Condition

目录 一、前言二、 定义2.1 Conditional2.2 Condition2.2.1 ConditionContext 三、 使用说明3.1 创建项目3.1.1 导入依赖3.1.2 添加配置信息3.1.3 创建User类3.1.4 创建条件实现类3.1.5 修改启动类 3.2 测试3.2.1 当user.enablefalse3.2.2 当user.enabletrue 3.3 小结 四、改进…

如何实现加密功能

文章目录 1. 概念介绍2. 方法与功能2.1 基本用法2.2 加密算法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"FlutterCacheManager组件"相关的内容&#xff0c;本章回中将介绍一个加密工具包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 加密主要…

基于YOLO8的图片实例分割系统

文章目录 在线体验快速开始一、项目介绍篇1.1 YOLO81.2 ultralytics1.3 模块介绍1.3.1 scan_task1.3.2 scan_taskflow.py1.3.3 segment_app.py 二、核心代码介绍篇2.1 segment_app.py2.2 scan_taskflow.py 三、结语 代码资源&#xff1a;计算机视觉领域YOLO8技术的图片实例分割…

0x05 tomcat AJP文件包含漏洞(CVE-2020-1938)复现(脚本最终没有验证成功)

参考&#xff1a; 13-3 tomcat AJP文件包含漏洞&#xff08;CVE-2020-1938&#xff09;_omcat ajp文件包含漏洞 payload-CSDN博客 一、fofa 搜索使用该服务器的网站 网络空间测绘&#xff0c;网络空间安全搜索引擎&#xff0c;网络空间搜索引擎&#xff0c;安全态势感知 - F…

linux编译器——gcc/g++

1.gcc linux上先要安装&#xff0c; sudo yum install gcc gcc --version 可以查看当前的版本 &#xff0c;我们默认安装的是4.8.5的版本&#xff0c;比较低&#xff0c; gcc test.c -stdc99 可以使他支持更高版本的c标准 -o 可以殖指明生成文件的名字&#xff0c;可以自己…

什么是Web服务器集群?

Web服务器集群是指将多台服务器组成一个集群&#xff0c;通过负载均衡将客户端请求分发到这些服务器上进行处理&#xff0c;从而提高网站的性能和可用性。每台服务器都运行着相同的应用程序和数据&#xff0c;并且能够相互通信和协调工作。 1.为什么需要Web服务器集群 随着互联…

0基础学习爬虫系列:网页内容爬取

1.背景 今天我们来实现&#xff0c;监控网站最新数据爬虫。 在信息爆炸的年代&#xff0c;能够有一个爬虫帮你&#xff0c;将你感兴趣的最新消息推送给你&#xff0c;能够帮你节约非常多时间&#xff0c;同时确保不会miss重要信息。 爬虫应用场景&#xff1a; 应用场景主要功…

Transformer从零详细解读

Transformer从零详细解读 一、从全局角度概况Transformer ​ 我们把TRM想象为一个黑盒&#xff0c;我们的任务是一个翻译任务&#xff0c;那么我们的输入是中文的“我爱你”&#xff0c;输入经过TRM得到的结果为英文的“I LOVE YOU” ​ 接下来我们对TRM进行细化&#xff0c;…