MiniCPM-V 2.6:端侧最强多模态大模型探索【本地部署实践】

系列篇章💥

No.文章
1MiniCPM-V 2.6:端侧最强多模态大模型探索【本地部署实践】
2MiniCPM-V 2.6:端侧最强多模态大模型探索【推理实战大全】
3MiniCPM-V 2.6:端侧最强多模态大模型探索【微调实战体验】


引言

在当今人工智能飞速发展的时代,各种先进的模型不断涌现,为我们的生活和工作带来了巨大的变革。其中,MiniCPM-V 2.6 作为一款备受关注的端侧 AI 多模态模型,以其卓越的性能和丰富的功能,成为了众多开发者和研究者的焦点。本文将深入探讨 MiniCPM-V 2.6 的各个方面,带大家一起领略这个强大模型的魅力。

一、MiniCPM-V 2.6 简介

MiniCPM-V 2.6 是由面壁智能推出的一款端侧 AI 多模态模型。它在保持较小参数规模的同时,展现出了强大的多模态处理能力,能够处理图像、视频等多种数据类型,并实现了一系列先进的功能。这款模型的出现,为端侧设备上的人工智能应用提供了新的可能性。
在这里插入图片描述

二、功能特点

MiniCPM-V 2.6 乃是 MiniCPM-V 系列中最为崭新且性能卓越的模型。此模型构建于 SigLip-400M 与 Qwen2-7B 之上,共计拥有 8B 参数。相较于 MiniCPM-Llama3-V 2.5,MiniCPM-V 2.6 在性能方面实现了显著提升,并且成功引入了多图和视频理解等崭新功能。MiniCPM-V 2.6 的主要特点如下:

1、性能卓越:MiniCPM-V 2.6 在全新版本的 OpenCompass 榜单之上(综合涵盖 8 个主流多模态评测基准),平均得分高达 65.2。以 8B 量级的规模,在单图理解方面成功超越了 GPT-4o mini、GPT-4V、Gemini 1.5 Pro 以及 Claude 3.5 Sonnet 等主流商用闭源多模态大型模型。

2、多图理解与上下文学习:MiniCPM-V 2.6 还能够支持多图对话与推理。在 Mantis-Eval、BLINK、Mathverse mv 以及 Sciverse mv 等主流多图评测基准中,它取得了顶尖水平,并且展现出了极为出色的上下文学习能力。

3、视频理解能力:MiniCPM-V 2.6 还可以接收视频输入,进行对话并提供涵盖时序与空间信息的详尽视频描述。在有/无字幕评测场景下的 Video-MME 表现中,该模型均超越了 GPT-4V、Claude 3.5 Sonnet 以及 LLaVA-NeXT-Video-34B 等商用闭源模型。

4、强大的 OCR 能力:MiniCPM-V 2.6 能够处理任意长宽比的图像,像素数可达 180 万(例如 1344x1344)。在 OCRBench 上,它取得了最佳成绩,超越了 GPT-4o、GPT-4V 以及 Gemini 1.5 Pro 等商用闭源模型。基于最新的 RLAIF-V 和 VisCPM 技术,它具备了可靠的多模态行为,在 Object HalBench 上的幻觉率显著低于 GPT-4o 和 GPT-4V,并且支持英语、中文、德语、法语、意大利语、韩语等多种语言。

5、效率卓越:除了对个人用户极为友好的模型大小之外,MiniCPM-V 2.6 还展现出了最为先进的视觉 token 密度(即每个视觉 token 编码的像素数量)。它仅需 640 个 token 即可处理 180 万像素的图像,比大多数模型少 75%。这一特性极大地优化了模型的推理速度、首 token 延迟、内存占用以及功耗。因此,MiniCPM-V 2.6 能够在 iPad 等终端设备上支持高效的实时视频理解。

6、使用便捷:MiniCPM-V 2.6 可以通过多种方式轻松加以使用:(1) llama.cpp 和 ollama 支持在本地设备上进行高效的 CPU 推理;(2) int4 和 GGUF 格式的量化模型,拥有 16 种尺寸;(3) vLLM 支持高吞吐量和内存高效的推理;(4) 针对新领域和任务进行微调;(5) 使用 Gradio 快速设置本地 WebUI 演示;(6) 通过在线 demo 即可亲身体验。

三、性能评估

在这里插入图片描述

1、单图评测结果
OpenCompass, MME, MMVet, OCRBench, MMMU, MathVista, MMB, AI2D, TextVQA, DocVQA, HallusionBench, Object HalBench:
在这里插入图片描述

  • Token Density:每个视觉 token 在最大分辨率下编码的像素数,即最大分辨率下的像素数 / 视觉 token 数。
    注意:闭源模型的 Token Density 由 API 收费方式估算得到。

2、多图评测结果
Mantis Eval, BLINK, Mathverse mv, Sciverse mv, MIRB:
在这里插入图片描述

  • 正式开源模型权重的评测结果。

3、视频评测结果
Video-MME 和 Video-ChatGPT:
在这里插入图片描述

四、应用场景

MiniCPM-V 2.6 的强大功能和高效性能,使其在多个领域都有着广泛的应用前景:

  1. 智能安防
    在智能安防领域,MiniCPM-V 2.6 可以用于视频监控系统,实时识别和分析视频中的人物、车辆、物品等信息,实现异常行为检测、入侵报警等功能。它还可以与其他安防设备进行集成,提高安防系统的智能化水平。

  2. 智能交通
    在智能交通领域,它可以用于交通监控系统,实时识别和分析道路上的车辆、行人、交通标志等信息,实现交通流量监测、交通事故预警等功能。同时,它还可以与自动驾驶技术进行结合,提高自动驾驶系统的安全性和可靠性。

  3. 智能医疗
    在智能医疗领域,MiniCPM-V 2.6 可以用于医学影像分析,帮助医生快速准确地诊断疾病。它还可以用于医疗机器人,实现自主导航、物品识别等功能,提高医疗服务的效率和质量。

  4. 智能家居
    在智能家居领域,它可以用于智能摄像头、智能音箱等设备,实现人物识别、语音交互、场景理解等功能。它还可以与其他智能家居设备进行集成,实现智能化的家居控制。

  5. 智能教育
    在智能教育领域,MiniCPM-V 2.6 可以用于智能辅导系统,帮助学生解答问题、理解知识点。它还可以用于智能教学设备,实现互动教学、个性化学习等功能,提高教育教学的效果和质量。

五、典型实例

1.图片理解分析
上传图片后,由模型 MiniCPM-V 2.6 对其进行深入理解并输出结果。
在这里插入图片描述

2.代码理解分析
让模型 MiniCPM-V 2.6 针对代码问题进行精准理解,进而输出相应的解答。
在这里插入图片描述

3.图表理解分析
通过模型 MiniCPM-V 2.6 对表格数据进行分析,在此基础上对其进行提问以获取更深入的洞察。
在这里插入图片描述

六、代码实践

1、下载代码

克隆我们的仓库并跳转到相应目录

git clone https://github.com/OpenBMB/MiniCPM-V.git
cd MiniCPM-V

下载完成如下:
在这里插入图片描述

2、创建 conda 环境

创建独立的python环境

conda create -n MiniCPMV python=3.10 -y
conda activate MiniCPMV

3、安装依赖

# 更换 pypi 源加速库的安装
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 安装依赖
pip install -r requirements.txt

安装相关依赖
在这里插入图片描述

4、下载模型

使用 modelscope 中的 snapshot_download 函数下载模型(提前安装modelscope :pip install modelscope)。第一个参数为模型名称,参数 cache_dir 用于指定模型的下载路径。在 /root/autodl-tmp 路径下新建 d.py 文件,并在其中输入以下内容:

from modelscope import snapshot_download
model_dir = snapshot_download('OpenBMB/MiniCPM-V-2_6', cache_dir='/root/autodl-tmp', revision='master')

运行 python /root/autodl-tmp/d.py 执行下载。需注意,模型大小约为 20 GB,下载模型大概需要 20来分钟,请耐心等待。
在这里插入图片描述

5、加载模型

import torch
from PIL import Image
from transformers import AutoModel, AutoTokenizer

torch.manual_seed(0)

model_dir = "/root/autodl-tmp/OpenBMB/MiniCPM-V-2_6"

model = AutoModel.from_pretrained(model_dir, trust_remote_code=True,
    attn_implementation='sdpa', torch_dtype=torch.bfloat16) # sdpa or flash_attention_2, no eager
model = model.eval().cuda()
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)

模型加载完成如下:
在这里插入图片描述

注意:在 Jupyter Notebook 中切换到虚拟环境
安装 ipykernel:在激活的虚拟环境中执行 pip install ipykernel。
将虚拟环境添加到 Jupyter Notebook:执行 python -m ipykernel install --user --name=myenv(将 myenv 替换为你的虚拟环境名称)。
现在,在 Jupyter Notebook 的 Kernel 菜单中,可以选择切换到新添加的虚拟环境来运行代码。

6、多轮对话

1)模型推理(第一轮对话)


image = Image.open('/root/autodl-tmp/MiniCPM-V/assets/airplane.jpeg').convert('RGB')

# First round chat 
question = "Tell me the model of this aircraft."
msgs = [{'role': 'user', 'content': [image, question]}]

answer = model.chat(
    image=None,
    msgs=msgs,
    tokenizer=tokenizer
)
print(answer)

输出:

The aircraft in the image is an Airbus A300-600. This can be determined by several identifying features: the size and shape of the fuselage, the number of windows along the side, the design of the wings with winglets, and the placement of the engines under the wings. The Airbus A300 was one of the first wide-body twin-engine jet airliners produced by Airbus and entered service in 1974. It was a significant development for Airbus and marked their entry into the commercial aviation market.

2)模型推理(第二轮对话)

# Second round chat 
# pass history context of multi-turn conversation
msgs.append({"role": "assistant", "content": [answer]})
msgs.append({"role": "user", "content": ["Introduce something about Airbus A380."]})

answer = model.chat(
    image=None,
    msgs=msgs,
    tokenizer=tokenizer
)
print(answer)

输出:

The Airbus A380 is a large, wide-body, four-engine jet airliner manufactured by Airbus. It's the world's largest passenger airliner and has a distinctive double-deck design which allows it to carry more passengers than any other commercial aircraft. The A380 was first introduced in 2005 and has been operated by several airlines around the world. Its features include advanced avionics, a spacious cabin, and efficient fuel consumption for its size. Despite its success, production ceased in late 2021 due to economic factors and changes in market demand.

3)模型推理(中文对话)

# Second round chat 
# pass history context of multi-turn conversation
msgs.append({"role": "assistant", "content": [answer]})
msgs.append({"role": "user", "content": ["请用中文介绍一下A380."]})

answer = model.chat(
    image=None,
    msgs=msgs,
    tokenizer=tokenizer
)
print(answer)

输出:

空客A380是一款由空中客车公司生产的大型双层四发喷气式客机,是目前世界上最大的商用飞机。其独特的双层设计使其能够比其他商业飞机承载更多乘客。A380于2005年首次亮相,并被多家航空公司运营。它具有先进的航空电子设备、宽敞的舱室和高效的燃油消耗率(考虑到其尺寸)。尽管取得了成功,但由于经济因素和市场需求的变化,生产已于2021年底结束。

7、多图理解

image1 = Image.open('/root/autodl-tmp/MiniCPM-V/assets/minicpm-v17.png').convert('RGB')
image2 = Image.open('/root/autodl-tmp/MiniCPM-V/assets/minicpm-v18.png').convert('RGB')
question = '请问这两张图片有什么区别?'

msgs = [{'role': 'user', 'content': [image1, image2, question]}]

answer = model.chat(
    image=None,
    msgs=msgs,
    tokenizer=tokenizer
)
print(answer)

输出:

这两张图片的主要区别在于群聊名称中的数字不同。具体来说:

1. 第一张图片的群聊名称是 "MiniCPM-V-17群"2. 第二张图片的群聊名称是 "MiniCPM-V-18群"。

其他部分,包括二维码和文字说明,都是相同的。

8、视频理解

提前准备一个测试视频:“test-video.mp4”

from decord import VideoReader, cpu    # pip install decord


MAX_NUM_FRAMES=64 # if cuda OOM set a smaller number

def encode_video(video_path):
    def uniform_sample(l, n):
        gap = len(l) / n
        idxs = [int(i * gap + gap / 2) for i in range(n)]
        return [l[i] for i in idxs]

    vr = VideoReader(video_path, ctx=cpu(0))
    sample_fps = round(vr.get_avg_fps() / 1)  # FPS
    frame_idx = [i for i in range(0, len(vr), sample_fps)]
    if len(frame_idx) > MAX_NUM_FRAMES:
        frame_idx = uniform_sample(frame_idx, MAX_NUM_FRAMES)
    frames = vr.get_batch(frame_idx).asnumpy()
    frames = [Image.fromarray(v.astype('uint8')) for v in frames]
    print('num frames:', len(frames))
    return frames

video_path="test-video.mp4"
frames = encode_video(video_path)
question = "这个视频讲了啥?"
msgs = [
    {'role': 'user', 'content': frames + [question]}, 
]

# Set decode params for video
params = {}
params["use_image_id"] = False
params["max_slice_nums"] = 2 # use 1 if cuda OOM and video resolution > 448*448

answer = model.chat(
    image=None,
    msgs=msgs,
    tokenizer=tokenizer,
    **params
)
print(answer)

输出:

num frames: 7
视频展示了一辆白色的四门轿车沿着一条土路行驶,这条路位于多山的地形中。周围是茂密的针叶林,天空晴朗,偶尔有几朵云彩飘过。光线表明可能是上午或下午,因为太阳的角度投射出长长的影子在地面上。车辆似乎正在远离摄像机移动,背景中的景色逐渐变化,但整体环境保持一致:一片宁静、自然的风景,没有其他车辆或人物出现。车辆在土路上留下的车辙显示了它在这条路上行驶的时间。

结语

MiniCPM-V 2.6 作为一款强大的端侧 AI 多模态模型,以其卓越的性能和丰富的功能,为人工智能在端侧设备上的应用带来了新的机遇。通过本文的介绍,我们对 MiniCPM-V 2.6 的简介、功能特点、性能评估、应用场景和代码实践等方面有了更深入的了解。相信在未来,MiniCPM-V 2.6 将在更多的领域发挥重要作用,为我们的生活和工作带来更多的便利和创新。

在这里插入图片描述

🎯🔖更多专栏系列文章:AI大模型提示工程完全指南AI大模型探索之路(零基础入门)AI大模型预训练微调进阶AI大模型开源精选实践AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,加入技术交流群,开启编程探索之旅。
💘精心准备📚500本编程经典书籍、💎AI专业教程,以及高效AI工具。等你加入,与我们一同成长,共铸辉煌未来。
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

  • 118
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 85
    评论
评论 85
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值