☰
MiniCPM-V 4.7 图像问答教程:单图与多图聊天的新手代码逐行精讲
2026/10/15 23:45:00 网站建设 项目流程
  • 人工智能
  • 大模型
  • 多模态
  • 基础模型
  • 本地部署

【免费下载链接】MiniCPM-V-4.7-35B-A3B

MiniCPM-V 4.7 是 MiniCPM-V 系列的最新模型,提供 35B-A3B 变体,其中 35B-A3B 是 MiniCPM-V 系列中的首个 MoE(混合专家)模型。它在家族现有的单图、多图和视频理解能力基础上,结合了更强的基础能力、高效的视觉编码以及端侧推理特性。

项目地址:https://ai.gitcode.com/OpenBMB/MiniCPM-V-4.7-35B-A3B
点击查看免费下载

MiniCPM-V 4.7(35B-A3B)是 MiniCPM-V 系列最新的开源视觉语言大模型,也是该系列首个 MoE(混合专家)模型,支持单图、多图与视频理解。本教程面向新手,带你逐行读懂用 Python 调用 MiniCPM-V 4.7 做图像问答的完整代码,从环境安装、模型加载,到单图提问、多图对比聊天,一次讲透核心参数。

为什么选择 MiniCPM-V 4.7 35B-A3B 🤔

在动手写代码之前,先快速了解这个模型的特点,帮助你判断它是否适合你的场景:

  • MoE 架构:总参数约 35B,但每个 token 只激活约 3B 参数,速度快、显存占用低;
  • 图像问答能力强:单图识别、多图对比、OCR、视觉定位等任务开箱即用;
  • 高效视觉编码:支持4x/16x混合视觉 token 压缩,在"细节"与"速度"之间自由权衡;
  • 端侧可运行:是首个可在手机上无损流畅推理的开源 MoE 模型。

模型结构细节可以在 config.json 中查看,例如num_experts: 256、num_experts_per_tok: 8就直观体现了 MoE 路由设计;默认视觉压缩档位downsample_mode: "16x"也定义在这里。

环境安装:一条命令完成 📦

确保你的 Python 环境已安装 PyTorch,然后执行:

pip install "transformers[torch]>=5.18.0" torchvision torchcodec

⚠️新手常见坑:torchcodec在部分 CUDA 版本下会报错RuntimeError: Could not load libtorchcodec。如果你只做图像问答(不涉及视频),最简单的解决办法是把torchcodec换成av:

pip install "transformers[torch]>=5.18.0" torchvision av

第一步:加载模型(逐行精讲)

import torch from transformers import AutoModelForImageTextToText, AutoProcessor model_id = "openbmb/MiniCPM-V-4.7-35B-A3B" processor = AutoProcessor.from_pretrained(model_id) model = AutoModelForImageTextToText.from_pretrained( model_id, torch_dtype="auto", device_map="auto" )

逐行拆解:

代码作用
AutoProcessor负责把图片 + 文本"打包"成模型能理解的输入(分词、图像编码)
AutoModelForImageTextToText自动识别并加载"图像输入 → 文本输出"类的模型
torch_dtype="auto"自动选择最优精度(本模型原生为 bfloat16,见 config.json 的"dtype"字段)
device_map="auto"自动把模型分发到可用的 GPU 上,多卡环境无需手动配置

💡 多图、高分辨率场景下建议开启 Flash Attention 2 以获得更低的显存占用:加载时额外传入attn_implementation="flash_attention_2"。

第二步:单图问答代码逐行精讲 🖼️

下面是最核心的单图问答代码,我们逐行讲清楚:

messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/openbmb/DemoCase/resolve/main/refract.png"}, {"type": "text", "text": "What causes this phenomenon?"}, ], } ] downsample_mode = "16x" inputs = processor.apply_chat_template( messages, tokenize=True, add_generation_prompt=True, return_dict=True, return_tensors="pt", downsample_mode=downsample_mode, max_slice_nums=36, enable_thinking=False, ).to(model.device) generated_ids = model.generate(**inputs, downsample_mode=downsample_mode, max_new_tokens=512) generated_ids_trimmed = [ out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids) ] output_text = processor.batch_decode( generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False ) print(output_text[0])

关键代码逐行解读

1)构造消息messages

消息结构与 ChatGPT 完全一致:role是角色,content是一个列表,每一项要么是image(图片 URL 或本地路径),要么是text(文字问题)。多图的写法就是在 content 里放多个 image 项(下文详述)。

2)downsample_mode:细节与速度的开关

  • "16x":视觉 token 压缩 16 倍,速度快、显存省,适合大多数问答;
  • "4x":保留 4 倍更多的 token,文字识别、细节观察更准,但更慢。

⚠️最容易踩的坑:downsample_mode必须同时传给apply_chat_template和model.generate,两者不一致会导致占位符数量对不上而报错。

3)max_slice_nums=36:高分辨率图片的切片数

大图片会被切成多个小块分别编码,max_slice_nums限制最大切片数。图像问答建议设36(视频场景则用1)。

4)enable_thinking=False:关掉思考模式

本模型支持"思考链"模式,简单图像问答时关掉它可以让回答更直接、速度更快。该参数的渲染逻辑定义在 chat_template.jinja 中。

5)model.generate(..., max_new_tokens=512)

让模型生成回答,max_new_tokens限制最多生成 512 个 token,防止"话痨"。

6)裁剪输入前缀 + 解码输出

generated_ids包含"输入 + 输出"的全部 token,所以用out_ids[len(in_ids):]切掉输入部分,再交给processor.batch_decode还原成文字。这一步是新手最容易漏掉的,漏了就会看到一大段重复的输入文本。

第三步:多图聊天(Multi-Image Chat)📸

MiniCPM-V 4.7 支持在一条消息里放入多张图片做对比、找不同、跨图推理,改动只有两处:

messages = [ { "role": "user", "content": [ {"type": "image", "url": "path/to/photo_a.jpg"}, {"type": "image", "url": "path/to/photo_b.jpg"}, {"type": "text", "text": "Compare the differences between these two images."}, ], } ]

多图场景的参数注意事项

参数建议值说明
downsample_mode"4x"多图对比通常需要更多细节,用 4 倍保留率效果更好
max_slice_nums36每张图独立切片,切片数上限建议保持较高
use_image_idTrue(默认)在每张图片前插入<image_id>N</image_id>标签,让模型明确"图1/图2"的指代关系

💡 提示:use_image_id=True时,模型回答里可以直接说"第一张图中……第二张图中……",多图指代更清晰;而视频场景反而建议设为False。

多轮对话:接着聊,图片记忆还在 🔄

多轮对话时,只需把历史消息按顺序追加进messages列表即可——上一轮的图片和回答都保留在上下文里:

# 第一轮:用户提问 + 模型回答(assistant 消息是上一轮生成结果) # 第二轮:直接在 messages 末尾追加新的 user 消息 messages.append( {"role": "user", "content": [{"type": "text", "text": "再仔细看一下左边那张图的细节"}]} ) # 重新执行 apply_chat_template + generate 即可

常用参数速查表 ⚡

参数默认值适用新手建议
downsample_mode"16x"图像/视频追求细节改"4x";注意两处都要传
max_slice_nums9图像/视频图像问答建议36
max_num_frames128仅视频视频采样帧数上限
stack_frames1仅视频视频建议3或5捕捉动作细节
use_image_idTrue图像/视频图像保持True;视频用False

下一步可以做什么 🚀

  • 视频理解:把image换成type: "video"即可复用同一套代码;
  • 量化部署:显存不足时可下载 FP8 / AWQ / GPTQ / GGUF 量化版;
  • 模型文件结构:16 个分片权重由 model.safetensors.index.json 统一索引,总大小约 70GB(BF16 全精度);
  • 推理默认策略:采样参数(temperature: 1.0、top_k: 20、top_p: 0.95)定义在 generation_config.json 中,一般无需修改。

掌握以上三步,你就已经能流畅使用 MiniCPM-V 4.7 完成单图问答与多图聊天了——动手跑一遍,效果超出预期 💪

  • 人工智能
  • 大模型
  • 多模态
  • 基础模型
  • 本地部署

【免费下载链接】MiniCPM-V-4.7-35B-A3B

MiniCPM-V 4.7 是 MiniCPM-V 系列的最新模型,提供 35B-A3B 变体,其中 35B-A3B 是 MiniCPM-V 系列中的首个 MoE(混合专家)模型。它在家族现有的单图、多图和视频理解能力基础上,结合了更强的基础能力、高效的视觉编码以及端侧推理特性。

项目地址:https://ai.gitcode.com/OpenBMB/MiniCPM-V-4.7-35B-A3B
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询