AI多模态实战教程:面壁智能MiniCPM-V多模态大模型问答交互、llama.cpp模型量化和推理

news2024/9/21 8:03:59

一、项目简介

MiniCPM-V 系列是专为视觉-语⾔理解设计的多模态⼤型语⾔模型(MLLMs),提供⾼质量的⽂本输出,已发布4个版本。

1.1 主要模型及特性

(1)MiniCPM-Llama3-V 2.5:

  • 参数规模: 8B
  • 性能: 超越GPT-4V-1106、Gemini Pro、Qwen-VL-Max和Claude 3,⽀持30+种语⾔,多模态对话,增强OCR
  • 和指令跟随能⼒。
  • 部署: 量化、编译优化,可⾼效部署于端侧设备上的CPU和NPU。

(2)MiniCPM-V 2.0

  • 参数规模: 2B
  • 性能: 超越Yi-VL 34B、CogVLM-Chat 17B和Qwen-VL-Chat 10B,可处理任意纵横⽐和180万像素图像(例
  • 如,1344x1344),低幻觉率。

1.2 MiniCPM-Llama3-V 2.5 关键特性

  • 领先的性能
  • 平均得分65.1(OpenCompass),超越多款专有模型。
  • 强⼤的OCR能⼒
  • 处理任意纵横⽐和180万像素图像,OCRBench评分700+,提供全⽂OCR提取和表格到Markdown转换
  • 等⾼级实⽤功能。
  • 值得信赖的⾏为
  • 采⽤RLAIF-V⽅法,幻觉率10.3%,优于GPT-4V-1106。
  • 多语⾔⽀持
  • ⽀持30+种语⾔(含德语、法语、⻄班⽛语、意⼤利语、韩语等)。
  • ⾼效部署
  • 模型量化、CPU/NPU优化,实现端侧设备上的150倍图像编码加速和3倍语⾔解码加速。
  • 易⽤性
  • ⽀持llama.cpp、ollama,GGUF格式量化模型,LoRA微调,流输出,本地WebUI演示和HuggingFace
  • Spaces交互演示。

1.3 MiniCPM-V 2.0 关键特性

MiniCPM-V 2.0,这是MiniCPM系列的多模态版本。该模型基于MiniCPM 2.4B和SigLip-400M构建,总共有2.8B参数。MiniCPM-V 2.0显示出强⼤的OCR和多模态理解能⼒,在开源模型中的OCRBench上表现出⾊,甚⾄在场景⽂本理解上可以与Gemini Pro相媲美。

  • 前沿性能
  • 在多个基准测试中表现优异(如 OCRBench、TextVQA 等)。
  • 超越 Qwen-VL-Chat 9.6B、CogVLM-Chat 17.4B 和 Yi-VL 34B。
  • 强⼤的 OCR 能⼒,与 Gemini Pro 性能相当。
  • 可信⾏为
  • 使⽤多模态 RLHF 技术防⽌⽣成不符合事实的⽂本。
  • 与 GPT-4V 在防⽌幻觉⽅⾯匹配。
  • ⾼分辨率图像处理
  • 接受 180万像素(例如,1344x1344)的图像,⽀持任意⻓宽⽐。
  • 提升对细粒度视觉信息的感知能⼒。
  • ⾼效能
  • ⾼效部署于⼤多数 GPU 和个⼈电脑,⽀持移动设备。
  • 使⽤感知器重采样技术,降低内存成本并提升速度。
  • 双语⽀持
  • ⽀持英语和中⽂的双语多模态能⼒。
  • 基于 VisCPM 技术,实现跨语⾔的⼀般化多模态能⼒。

⼆、案例实战

2.1 环境配置

conda create -n cpm python=3.11
conda activate cpm

# 下载项⽬,并进⾏依赖包安装
git clone https://github.com/OpenBMB/MiniCPM-V.git
cd MiniCPM-V

pip install -r requirements.txt
# 单独安装
pip install bitsandbytes streamlit gguf

2. 模型下载

# 前提,安装git和git-lfs【可选,如果已安装,则跳过】
sudo apt update
sudo apt install git
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo
bash
sudo apt-get install git-lfs
git lfs install
# 下载模型,以int4量化的MiniCPM-Llama3-V-2_5为例
git clone https://huggingface.co/openbmb/MiniCPM-Llama3-V-2_5-int4

[无法访问外网的同学,可以把上面最后一行改为国内镜像地址:

git clone https://hf-mirror.com/openbmb/MiniCPM-Llama3-V-2_5-int4]

三. 本地 WebUI Demo

3.1 基于 Gradio 实现

# 注意:需要修改脚本 web_demo_2.5.py 中的代码:
# ① model_path = xxx
# ② server_port = xxx
cd MiniCPM-V/
python web_demo_2.5.py

3.2 基于 Streamlit 实现

# 注意:需要修改脚本 web_demo_streamlit-2_5.py 中的代码:
# ① model_path = xxx
# ② model = AutoModel.from_pretrained(model_path, trust_remote_code=True, 
torch_dtype=torch.float16, device_map="cuda")
streamlit run web_demo_streamlit-2_5.py --server.port 6006 --server.address 0.0.0.0

四. 多轮对话

# 注意:需要修改 chat.py 中的代码:
self.model = AutoModel.from_pretrained(model_path, trust_remote_code=True, 
device_map="cuda")
self.model.eval()

# 新建demo.py

# 案例-多轮对话
from chat import MiniCPMVChat, img2base64
import torch
import json
torch.manual_seed(0)
chat_model = MiniCPMVChat("/root/autodl-tmp/models/MiniCPM-Llama3-V-2_5-int4")
im_64 = img2base64('./assets/airplane.jpeg')
# 第⼀轮对话
msgs = [{"role": "user",
"content": "Tell me the model of this aircraft."}]
inputs = {"image": im_64,
"question": json.dumps(msgs)}
answer = chat_model.chat(inputs)
print(answer)
# 第⼆轮对话
# 传递多轮对话的历史上下⽂
msgs.append({"role": "assistant",
"content": answer})
msgs.append({"role": "user",
"content": "Introduce something about Airbus A380."})

inputs = {"image": im_64,
"question": json.dumps(msgs)}
answer = chat_model.chat(inputs)
print(answer)

五. 基于 llama.cpp 推理

5.1 环境配置

# 1. 下载项⽬
git clone -b minicpm-v2.5 https://github.com/OpenBMB/llama.cpp.git
cd llama.cpp
# 2. 安装 g++ (可选,如果已经安装,则跳过)
sudo apt update
sudo apt install g++
# 3. 在项⽬ llama.cpp/ ⽬录下,执⾏命令
make
make minicpmv-cli

5.2 模型量化

# 4. 模型格式转换,hf -> gguf
# 【可选操作】可以直接 下载gguf模型
python ./examples/minicpmv/minicpmv-surgery.py -m /root/autodl-tmp/models/MiniCPM-Llama3-
V-2_5
python ./examples/minicpmv/minicpmv-convert-image-encoder-to-gguf.py -m /root/autodltmp/models/MiniCPM-Llama3-V-2_5 --minicpmv-projector /root/autodl-tmp/models/MiniCPMLlama3-V-2_5/minicpmv.projector --output-dir /root/autodl-tmp/models/MiniCPM-Llama3-V-2_5/ 
--image-mean 0.5 0.5 0.5 --image-std 0.5 0.5 0.5

python ./convert.py /root/autodl-tmp/models/MiniCPM-Llama3-V-2_5/model --outtype f16 --
vocab-type bpe

# 5. quantize int4 version
./quantize /root/autodl-tmp/models/MiniCPM-Llama3-V-2_5/model/model-8B-F16.gguf 
/root/autodl-tmp/models/MiniCPM-Llama3-V-2_5/model/ggml-model-Q4_K_M.gguf Q4_K_M

5.3 模型推理

# 6. 基于量化版模型进⾏推理
# run f16 version
./minicpmv-cli -m /root/autodl-tmp/models/MiniCPM-Llama3-V-2_5/model/model-8B-F16.gguf --
mmproj /root/autodl-tmp/models/MiniCPM-Llama3-V-2_5/mmproj-model-f16.gguf -c 4096 --temp
0.7 --top-p 0.8 --top-k 100 --repeat-penalty 1.05 --image /root/autodl-tmp/MiniCPMV/assets/airplane.jpeg -p "What is in the image?"

# run quantized int4 version
./minicpmv-cli -m /root/autodl-tmp/models/MiniCPM-Llama3-V-2_5/model/ggml-modelQ4_K_M.gguf --mmproj /root/autodl-tmp/models/MiniCPM-Llama3-V-2_5/mmproj-model-f16.gguf -c
4096 --temp 0.7 --top-p 0.8 --top-k 100 --repeat-penalty 1.05 --image /root/autodltmp/MiniCPM-V/assets/airplane.jpeg -p "What is in the image?"

# or run in interactive mode(交互模式)
./minicpmv-cli -m /root/autodl-tmp/models/MiniCPM-Llama3-V-2_5/model/ggml-modelQ4_K_M.gguf --mmproj /root/autodl-tmp/models/MiniCPM-Llama3-V-2_5/mmproj-model-f16.gguf -c
4096 --temp 0.7 --top-p 0.8 --top-k 100 --repeat-penalty 1.05 --image /root/autodltmp/MiniCPM-V/assets/airplane.jpeg -i

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1941199.html

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

相关文章

初学Linux之常见指令(下)

初学Linux之常见指令(下) 文章目录 初学Linux之常见指令(下)1. echo 指令2. cat 指令3. more 指令4. less 指令5. head 和 tail 指令6. date 指令7. cal 指令8. which 指令9. alias 指令10. find 指令11. grep 指令12. zip 和 unz…

C++中如何高效拼接两个vector

在C编程中,vector是一种常用的数据结构,它代表了一个可以动态改变大小的数组。在实际开发中,经常需要将两个vector拼接在一起,形成一个新的vector。本文将详细介绍如何在C中拼接两个vector,并探讨不同方法的性能差异。…

初学51单片机之指针基础与串口通信应用

开始之前推荐一个电路学习软件,这个软件笔者也刚接触。名字是Circuit有在线版本和不在线版本,这是笔者在B站看视频翻到的。 Paul Falstadhttps://www.falstad.com/这是地址。 离线版本在网站内点这个进去 根据你的系统下载你需要的版本红线的是windows…

PMP--知识卡片--敏捷方法

文章目录 敏捷方法,是一种新型软件开发方法。不要求遵循传统的软件开发流程,强调快速开发和有效适应需求变化,典型代表如看板、Scrumban、极限编程、测试驱动开发等。 区别于传统项目场景,敏捷项目场景强调交互协作、尊重个体、面…

Linux系统快速搭建轻量化网站Halo并实现无公网IP远程访问

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

无价之美:大麗和和品牌美学概念宣传片发布

高级珠宝品牌大麗和和筹备6个月,隆重发布《无价之美》品牌美学概念宣传片。品牌创始人牟童女士携珍贵藏品,亲诉美与传承的故事。 “尊尚正美” 珍稀宝石的颜色,是以色正为美。“正”就是事物极致的样子。最受人追慕的翡翠被称为“帝王绿”&a…

drawio更改默认字体大小(暂时有问题,修改中)

PS:其他的也可以在这里修改对应的值

Docker无法拉取镜像!如何解决?

问题现象 继去年Docker Hub被xxx后,各大NAS的注册表均出现问题,例如群晖的Docker套件注册表无法连接(更新至DSM7.2版本后恢复)。而在今年2024年6月初(约2024.06.06),NAS中最重要的工具Docker又…

解决git拉取代码报错:Couldn‘t connect to server

前言: 今天在拉取git仓库代码的时候,报错:fatal: unable to access https://codeup.aliyun.com/fly/business-project/lezhi-HR.git/: Failed to connect to 127.0.0.1 port 8020 after 2082 ms: Couldnt connect to server 错误截图&#…

mysql中的索引和分区

目录 1.编写目的 2.索引 2.1 创建方法 2.2 最佳适用 2.3 索引相关语句 3.分区 3.1 创建方法 3.2 最佳适用 Welcome to Code Blocks blog 本篇文章主要介绍了 [Mysql中的分区和索引] ❤博主广交技术好友,喜欢文章的可以关注一下❤ 1.编写目的 在MySQL中&…

函数调用过程

生成机器码.o文件,使用objdump - d -M intel hello_func.o来看汇编代码 栈内存由于历史原因看作是从高地址往低地址扩张所以栈底为高地址,栈顶为低地址。 rbp存储的时当前栈帧的基地址,栈底地址。 rsp存储的是栈顶地址,rip存储…

【计算机网络】TCP/IP——流量控制与拥塞控制

学习日期:2024.7.22 内容摘要:TCP的流量控制与拥塞控制 流量控制 一般来说,我们总是希望数据传输的快一些,但是如果数据传输的太快,接收方可能就来不及接收,这就会导致数据的丢失,流量控制正是…

【代码随想录】【算法训练营】【第58天 4】 [卡码104]建造最大岛屿

前言 思路及算法思维,指路 代码随想录。 题目来自 卡码网。 day 58,周四,ding~ 题目详情 [卡码104] 建造最大岛屿 题目描述 卡码104 建造最大岛屿 LeetCode类似题目827 最大人工岛 解题思路 前提: 思路: 重点…

压缩pdf大小的方法 指定大小软件且清晰

在数字化时代,pdf文件因其良好的兼容性和稳定性,已成为文档分享的主流格式。然而,高版本的pdf文件往往体积较大,传输和存储都相对困难。本文将为您详细介绍几种简单有效的方法,帮助您减小pdf文件的大小,让您…

基于STM32单片机生理监控心率脉搏TFT彩屏波形曲线

基于STM32单片机生理监控心率脉搏TFT彩屏波形曲线 1、系统功能介绍2、演示视频3、系统框图4、系统电路介绍4.1、STM32单片机最小系统设计4.2、按键电路设计4.3、蜂鸣器报警电路设计4.4、Pulsesensor脉搏心率传感器模块电路设计 5、程序设计5.1、LCD TFT屏幕初始化5.2、TFT屏幕显…

【性能优化】在大批量数据下使用 HTML+CSS实现走马灯,防止页面卡顿(一)

切换效果 页面结构变化 1.需求背景 项目首页存有一个小的轮播模块,保密原因大概只能这么展示,左侧图片右侧文字,后端一次性返回几百条数据(开发环境下,生产环境只会更多).无法使用分页解决,前端需要懒加载防止页面卡顿 写个小demo演示,如下 2.解决思路 获取到数据后,取第一…

《JavaSE》---21.<简单认识Java的集合框架包装类泛型>

目录 前言 一、什么是集合框架 1.1类和接口总览 二、集合框架的重要性 2.1 开发中的使用 2.2 笔试及面试题 三、背后所涉及的数据结构 3.1 什么是数据结构 3.2 容器背后对应的数据结构 四、包装类 4.1 基本数据类型和对应的包装类 4.2 装箱和拆箱 1.最初的写法 2.…

向量数据库|一文全面了解向量数据库的基本概念、原理、算法、选型

向量数据库的原理和实现,包括向量数据库的基本概念、相似性搜索算法、相似性测量算法、过滤算法和向量数据库的选型等等。向量数据库是崭新的领域,目前大部分向量数据库公司的估值乘着 AI 和 GPT 的东风从而飞速的增长,但是在实际的业务场景中…

NodeRed测试modbus RTU或modbus TCP通讯

目录标题 STEP1 添加modbus节点STEP2 查看是否安装成功STEP3 modbusTCP读取写入设置读取设置写入设置 STEP4 读写测试 STEP1 添加modbus节点 节点管理——控制板——安装 找到node-red-contrib-modbus,点击安装 STEP2 查看是否安装成功 安装成功后,左…

Day14 | 找树左下角的值 路径总和 从中序与后序遍历序列构造二叉树

语言 Java 找树左下角的值 题目链接:找树左下角的值 题目 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 思路 本题有两种做法我主要讲一下递归的思路,创建两个全局变量&…