MiniCPM-V 系列多模态模型评测实战指南:OpenCompass 与 vqaeval 双轨评测流程全解析
发布时间:2026/9/11 16:24:11来源:尧图网络
MiniCPM-V 系列多模态模型评测实战指南OpenCompass 与 vqaeval 双轨评测流程全解析【免费下载链接】MiniCPM-VA Pocket-Sized MLLM for Ultra-Efficient Image and Video Understanding on Your Phone项目地址: https://gitcode.com/GitHub_Trending/mi/MiniCPM-V本文聚焦 MiniCPM-V 系列MiniCPM-o 2.6、MiniCPM-V 2.6、MiniCPM-Llama3-V-2_5在 eval_mm 目录下提供的两套评测体系基于 VLMEvalKit 的 OpenCompass 通用多模态评测框架以及面向 TextVQA / DocVQA 的 vqaeval 专项评测工具。读完本文你将掌握两套评测环境的完整搭建步骤、数据集下载与目录组织规范、核心脚本与命令行参数的精确含义并能复现项目首页展示的 OpenCompass 各项 benchmark 结果同时理解use_cot、use_upsize、图片上采样、GPT 辅助评分等关键机制在源码层面的实现原理。一、评测体系总览eval_mm目录下包含两个彼此独立、分工明确的评测子工程子工程目录定位覆盖任务VLMEvalKitOpenCompass 评测eval_mm/vlmevalkit通用多模态基准评测MMMU、MathVista、MMVet、MMBench、MMStar、HallusionBench、AI2D、OCRBench、ChartQA、MME 等vqaevalVQA 专项评测eval_mm/vqaeval文档视觉问答专项评测TextVQA、DocVQA、DocVQATest两套体系分别对应不同的评测目标VLMEvalKit 面向多模型 × 多数据集的批量基准跑分适合复现论文与 README 首页的能力对比表格vqaeval 则聚焦文档理解场景支持将 DocVQATest 推理结果转换为官方提交格式上传至 RRCRobust Reading Competition官网获取权威评分。二、OpenCompass 评测vlmevalkit2.1 环境安装以 MiniCPM-o 2.6 与 MiniCPM-V 2.6 为例进入vlmevalkit目录后需依次安装基础依赖、PyTorch 2.2.0CUDA 11.8与 FlashAttention 2.6.3。为规避编译耗时官方直接提供了预编译 wheelcd vlmevalkit pip install --upgrade pip pip install -e . wget https://download.pytorch.org/whl/cu118/torch-2.2.0%2Bcu118-cp310-cp310-linux_x86_64.whl#sha2564377e0a7fe8ff8ffc4f7c9c6130c1dcd3874050ae4fc28b7ff1d35234fbca423 wget https://download.pytorch.org/whl/cu118/torchvision-0.17.0%2Bcu118-cp310-cp310-linux_x86_64.whl#sha2562e63d62e09d9b48b407d3e1b30eb8ae4e3abad6968e8d33093b60d0657542428 wget https://github.com/Dao-AILab/flash-attention/releases/download/v2.6.3/flash_attn-2.6.3cu118torch2.2cxx11abiFALSE-cp310-cp310-linux_x86_64.whl pip install torch-2.2.0%2Bcu118-cp310-cp310-linux_x86_64.whl pip install torchvision-0.17.0%2Bcu118-cp310-cp310-linux_x86_64.whl pip install flash_attn-2.6.3cu118torch2.2cxx11abiFALSE-cp310-cp310-linux_x86_64.whl rm *.whl上述 wheel 面向 CPython 3.10 Linux x86_64 CUDA 11.8 环境如果你的环境不同请改用与自身 CUDA/Python 版本匹配的安装方式。pip install -e .会以可编辑模式安装 VLMEvalKit其依赖清单见 eval_mm/vlmevalkit/requirements.txt。MiniCPM-Llama3-V-2_5 的依赖安装更简单直接使用requirements.txt即可见 eval_mm/vlmevalkit/requirements.txtcd vlmevalkit pip install -r requirements.txt2.2 运行脚本与三个核心参数评测入口为 eval_mm/vlmevalkit/scripts/run_inference.sh。针对不同模型版本脚本接收的参数数量略有差异MiniCPM-o 2.6两个参数MODELNAME、DATALISTchmod x ./scripts/run_inference.sh ./scripts/run_inference.sh $MODELNAME $DATALISTMiniCPM-V 2.6 / MiniCPM-Llama3-V-2_5三个参数MODELNAME、DATALIST、MODEchmod x ./scripts/run_inference.sh ./scripts/run_inference.sh $MODELNAME $DATALIST $MODE其中MODELNAME模型名称必须是vlmeval/config.py中注册的名字DATALIST目标数据集列表多数据集以空格分隔并用引号包裹MODE评测模式all表示推理 评分infer表示仅推理不评分不适用于 MiniCPM-o 2.6 章节该版本脚本内部已固定推理后直接评分。从 run_inference.sh 的源码可以看到脚本的实际执行细节脚本会导出CUDA_VISIBLE_DEVICES0,1,2,3,4,5,6,7默认使用 8 张 GPU对DATALIST中的每个数据集通过torchrun --master_port 29500 --nproc_per_node8 run.py --data $DATASET --model $MODELNAME --mode infer --reuse做分布式推理且同一个数据集会连续执行两次注释说明remember to run twice, the first run may fail第二次使用--master_port 29501推理完成后对非MMBench_TEST*的数据集执行python run.py --data $DATASET --model $MODELNAME --nproc 16 --verbose进行自动评分MMBench_TEST*因需要人工评测会直接跳过脚本末尾注释中还保留了单卡运行的等价命令python run.py --data $DATALIST --model $MODELNAME --verbose --mode infer。run.py入口的参数定义位于 eval_mm/vlmevalkit/run.py--data指定数据集名--model指定模型名--mode可选all/infer默认all--reuse表示复用已有推理结果避免重复计算--nproc控制并行进程数。2.3 MODELNAME模型注册表所有可用模型名定义在 eval_mm/vlmevalkit/vlmeval/config.py 中。通过functools.partial将模型类与默认model_path绑定推理时 VLMEvalKit 据此从 Hugging Face 拉取对应权重from vlmeval.vlm import * from vlmeval.api import * from functools import partial minicpm_series { MiniCPM-V: partial(MiniCPM_V, model_pathopenbmb/MiniCPM-V), MiniCPM-V-2: partial(MiniCPM_V, model_pathopenbmb/MiniCPM-V-2), MiniCPM-Llama3-V-2_5: partial(MiniCPM_Llama3_V, model_pathopenbmb/MiniCPM-Llama3-V-2_5), MiniCPM-V-2_6: partial(MiniCPM_V_2_6, model_pathopenbmb/MiniCPM-V-2_6), MiniCPM-o-2_6: partial(MiniCPM_o_2_6, model_pathopenbmb/MiniCPM-o-2_6), } supported_VLM {} model_groups [minicpm_series] for grp in model_groups: supported_VLM.update(grp)各模型版本的可用MODELNAME数量不同MiniCPM-o 2.65 种选择上表全部MiniCPM-V 2.64 种选择不含MiniCPM-o-2_6MiniCPM-Llama3-V-2_53 种选择且定义在ungrouped字典中MiniCPM-V、MiniCPM-V-2、MiniCPM-Llama3-V-2_5。2.4 DATALIST数据集列表文档中说明可选数据集位于vlmeval/utils/dataset_config.py。从当前仓库源码结构看数据集注册入口实际位于 eval_mm/vlmevalkit/vlmeval/dataset/init.py其中IMAGE_DATASET、VIDEO_DATASET、TEXT_DATASET、CUSTOM_DATASET汇总成DATASET_CLASSES并通过supported_datasets()汇聚为SUPPORTED_DATASETS全集同时提供了DATASET_TYPE判定 MCQ / VQA / Y-N 等题型与DATASET_MODALITY判定 IMAGE / VIDEO 模态两个辅助函数供下游 prompt 构建与生成策略选择使用。多数据集评测时将名称以空格隔开并整体加引号$DATALISTMMMU_DEV_VAL MathVista_MINI MMVet MMBench_TEST_EN_V11 MMBench_TEST_CN_V11 MMStar HallusionBench AI2D_TESTMiniCPM-V 2.6 的示例使用MMBench_DEV_EN_V11/MMBench_DEV_CN_V11而 MiniCPM-o 2.6 使用MMBench_TEST_EN_V11/MMBench_TEST_CN_V11MiniCPM-Llama3-V-2_5 则支持POPE ScienceQA_TEST ChartQA_TEST等。评测单个数据集时MiniCPM-Llama3-V-2_5 章节可直接传数据集名、不加引号。2.5 GPT 辅助评分与 .env 配置部分 benchmark如需要 GPT 系列模型打分的任务在评分阶段依赖 OpenAI 接口。此时需在.env文件中预先指定OPENAI_API_BASEyour_api_base OPENAI_API_KEYyour_api_keyrun_inference.sh中针对此类数据集的评分调用python run.py --data $DATASET --model $MODELNAME --nproc 16 --verbose会读取上述环境变量完成 GPT 评分。对应打分器封装位于 eval_mm/vlmevalkit/vlmeval/api/gpt.py。2.6 MME 的 CoT 处理机制MME 包含 perception感知与 reasoning推理两个子集二者使用不同的 prompt 策略reasoning 子集必须使用思维链CoT。VLMEvalKit 中 CoT 的开关由 eval_mm/vlmevalkit/vlmeval/vlm/minicpm_v.py 中每个模型类的use_cot方法决定。以MiniCPM_o_2_6.use_cot为例默认返回True的数据集分支为def use_cot(self, datasetNone): if dataset is None: return False if listinstr([MMMU, MathVista, OCRBench, ChartQA, MathVision, MathVerse_MINI_Vision_Only], dataset): return True elif listinstr([MMVet, MMBench, MMStar, HallusionBench, AI2D, RealWorldQA, POPE, ScienceQA, TextVQA, DocVQA], dataset): return False else: return False可见默认名单中并不包含 MME。因此要复现首页表格中 MME 的推理子集结果需要手动编辑use_cot函数将MME加入return True的分支MiniCPM-o 2.6 与 MiniCPM-V 2.6 的文档均明确给出此操作说明。CoT 打开后build_prompt会为多选题拼接multi_choice_cot_prompt要求step by step 求解并以Answer: selected option结尾为短答题拼接short_ans_cot_prompt要求逐步求解并以Answer: single number or single word or phrase结尾。此外MiniCPM_o_2_6还在生成后通过extract_answer用正则MCQ 匹配Answer:\s*([A-Ia-i])VQA 匹配Answer:\s*(.*)$从 CoT 输出中抽取最终答案确保送评答案格式干净。2.7 复现首页结果的完整命令MiniCPM-o 2.6对应首页 OpenCompass 列及 ChartQA、MME 列即 OCRBench 到 HallusionBench 之间的列# 注意MME 的 perception 与 reasoning 子集使用不同 prompt # 评测 reasoning 子集时需要手动在 vlmeval/vlm/minicpm_v.py 中修改 use_cot 函数的判断条件 ./scripts/run_inference.sh MiniCPM-o-2_6 MMMU_DEV_VAL MathVista_MINI MMVet MMBench_TEST_EN_V11 MMBench_TEST_CN_V11 MMStar HallusionBench AI2D_TEST OCRBench ChartQA_TEST MMEMiniCPM-V 2.6对应首页 MME 到 HallusionBench 之间的列分无 CoT 与有 CoT 两轮# without CoT ./scripts/run_inference.sh MiniCPM-V-2_6 MMMU_DEV_VAL MathVista_MINI MMVet MMBench_DEV_EN_V11 MMBench_DEV_CN_V11 MMStar HallusionBench AI2D_TEST all ./scripts/run_inference.sh MiniCPM-V-2_6 MME all # with CoT运行 CoT 版本的 MME 时需要改写 vlmeval/vlm/minicpm_v.py 中的 use_cot 函数 # 将 MME 添加到 return True 的分支中 ./scripts/run_inference.sh MiniCPM-V-2_6 MMMU_DEV_VAL MMVet MMStar HallusionBench OCRBench all ./scripts/run_inference.sh MiniCPM-V-2_6 MME all文档原文此处写作./scripts/run_inference/sh为笔误正确脚本名为./scripts/run_inference.sh。MiniCPM-Llama3-V-2_5对应首页 MME 到 RealWorldQA 之间的列# 一次性运行 7 个数据集 ./scripts/run_inference.sh MiniCPM-Llama3-V-2_5 MME MMBench_TEST_EN MMBench_TEST_CN MMMU_DEV_VAL MathVista_MINI LLaVABench RealWorldQA all # 以下是单独运行 1 个数据集的指令 ./scripts/run_inference.sh MiniCPM-Llama3-V-2_5 MME all ./scripts/run_inference.sh MiniCPM-Llama3-V-2_5 MMBench_TEST_EN all ./scripts/run_inference.sh MiniCPM-Llama3-V-2_5 MMBench_TEST_CN all ./scripts/run_inference.sh MiniCPM-Llama3-V-2_5 MMMU_DEV_VAL all ./scripts/run_inference.sh MiniCPM-Llama3-V-2_5 MathVista_MINI all ./scripts/run_inference.sh MiniCPM-Llama3-V-2_5 LLaVABench all ./scripts/run_inference.sh MiniCPM-Llama3-V-2_5 RealWorldQA all2.8 源码补充模型推理内部行为除 prompt 策略外minicpm_v.py中还体现了各代模型的推理行为差异可作为理解 benchmark 结果差异的底层参考加载方式MiniCPM_Vv1/v2与MiniCPM_Llama3_V使用AutoModel.from_pretrained(..., trust_remote_codeTrue)后转bfloat16/float16MiniCPM_o_2_6额外指定attn_implementationsdpa、torch_dtypetorch.bfloat16并以init_visionTrue, init_audioFalse, init_ttsFalse只加载视觉分支见 minicpm_v.py解码参数统一使用samplingFalsenum_beams3的确定性束搜索MiniCPM_o_2_6还支持通过环境变量NUM_BEAMS与PENALTY默认 1.2调节束宽与重复惩罚minicpm_v.py输入长度上限2.6 系列对图片模态使用max_inp_length8192、use_image_idTrue对视频模态DATASET_MODALITY VIDEO则设为max_slice_nums1、use_image_idFalse、max_inp_length20480minicpm_v.py图片上采样upsizeMiniCPM_V_2_6与MiniCPM_o_2_6通过use_upsize判断数据集如 MMVet、MMBench、MMStar、AI2D、OCRBench、MathVista、ChartQA 等对像素面积小于1344×1344的图片在保持宽高比的前提下随机放大到该面积量级以提升小字与细节的识别率minicpm_v.py题型相关 token 上限MiniCPM_o_2_6统一max_new_tokens2048MiniCPM_V_2_6与MiniCPM_Llama3_V则按题型区分MCQ 200、Y/N 3、其余 1024MiniCPM_Vv1/v2为 MCQ 20、Y/N 100、其余 1024可见新一代模型为 CoT 推理预留了更长的生成空间。三、vqaeval VQA 专项评测3.1 环境与目录准备cd vqaeval pip install -r requirements.txt mkdir downloads依赖清单见 eval_mm/vqaeval/requirements.txt。downloads目录用于集中存放所有任务的数据集。3.2 数据集下载TextVQAMeta AI 发布的场景文本问答数据集cd downloads mkdir TextVQA cd TextVQA wget https://dl.fbaipublicfiles.com/textvqa/images/train_val_images.zip unzip train_val_images.zip rm train_val_images.zip mv train_val_images/train_images . rm -rf train_val_images wget https://dl.fbaipublicfiles.com/textvqa/data/TextVQA_0.5.1_val.json cd ../..DocVQA / DocVQATest文档视觉问答来自 RRC 官网 Task 1cd downloads mkdir DocVQA cd DocVQA mkdir spdocvqa_images # 在 https://rrc.cvc.uab.es/?ch17comdownloads 下载 Task 1 - Single Page Document Visual Question Answering 下的 Images 和 Annotations # 将下载得到的 spdocvqa_images.tar.gz 以及 spdocvqa_qas.zip 置于 DocVQA 目录下 tar -zxvf spdocvqa_images.tar.gz -C spdocvqa_images rm spdocvqa_images.tar.gz unzip spdocvqa_qas.zip rm spdocvqa_qas.zip cp spdocvqa_qas/val_v1.0_withQT.json . cp spdocvqa_qas/test_v1.0.json . rm -rf spdocvqa_qas cd ../..3.3 downloads 目录结构规范下载完成后downloads目录必须与下列结构严格一致否则数据集加载会失败downloads ├── TextVQA │ ├── train_images │ │ ├── ... │ ├── TextVQA_0.5.1_val.json ├── DocVQA │ ├── spdocvqa_images │ │ ├── ... │ ├── val_v1.0_withQT.json │ ├── test_v1.0.json数据集的加载实现位于 eval_mm/vqaeval/datasets/vqa_dataset.pytextVQADataset、docVQADataset、docVQATESTDataset分别读取上述目录中的图片与 JSON 标注。3.4 运行推理修改 eval_mm/vqaeval/shell/run_inference.sh 中的参数后运行chmod x ./shell/run_inference.sh ./shell/run_inference.sh该脚本实际使用torch.distributed.launch启动多进程评测默认 8 卡可通过环境变量NPROC_PER_NODE、WORLD_SIZE、RANK、MASTER_ADDR、MASTER_PORT覆盖并调用 eval_mm/vqaeval/eval.py 执行评测主流程。推理入口脚本默认已配置--model_name minicpmv26 --generate_method interleave --eval_textVQA --eval_docVQA --answer_path ./answers --batchsize 1你需要补充--model_path并按需调整任务开关。3.5 核心参数详解getargs.py全部命令行参数定义在 eval_mm/vqaeval/eval_utils/getargs.py 中主要参数如下# 指定 TextVQA 评测所有图片和问题的路径 --textVQA_image_dir --textVQA_ann_path # 指定 DocVQA 评测所有图片和问题的路径 --docVQA_image_dir --docVQA_ann_path # 指定 DocVQATest 评测所有图片和问题的路径 --docVQATest_image_dir --docVQATest_ann_path # 决定是否评测某个任务eval_all 设置为 True 表示所有任务都评测 --eval_textVQA --eval_docVQA --eval_docVQATest --eval_all # 模型名称、模型路径从指定路径加载模型 --model_name --model_path # 从 checkpoint 加载模型 --ckpt # 模型处理输入数据的方式interleave 表示图文交错式old 表示非交错式 --generate_method # 推理时的批处理规模建议推理时设置为 1 --batchsize # 输出内容保存的路径 --answer_path结合 getargs.py 源码补充的默认值细节三个eval_*开关均为store_true类型默认False--eval_all可一键开启全部任务--answer_path默认./answers-new--device默认cuda:0在分布式初始化后会被覆盖为cuda:{当前 LOCAL_RANK}见 eval.py--batchsize默认 1文档建议推理时保持为 1--model_name仅接受三个取值minicpmv对应 MiniCPM-Llama3-V-2_5、minicpmv26对应 MiniCPM-V 2.6、minicpmo26对应 MiniCPM-o 2.6映射关系定义在 eval.py 的get_model中传入其他值会抛出异常。各模型版本对应的--model_name取值模型--model_name取值MiniCPM-o 2.6minicpmo26MiniCPM-V 2.6minicpmv26MiniCPM-Llama3-V-2_5minicpmv3.6 三个任务的参数配置###### TextVQA --eval_textVQA --textVQA_image_dir ./downloads/TextVQA/train_images --textVQA_ann_path ./downloads/TextVQA/TextVQA_0.5.1_val.json ###### DocVQA --eval_docVQA --docVQA_image_dir ./downloads/DocVQA/spdocvqa_images --docVQA_ann_path ./downloads/DocVQA/val_v1.0_withQT.json ###### DocVQATest --eval_docVQATest --docVQATest_image_dir ./downloads/DocVQA/spdocvqa_images --docVQATest_ann_path ./downloads/DocVQA/test_v1.0.json3.7 DocVQATest 结果格式转换与提交DocVQATest 的测试集没有公开标注推理结果需要上传到 RRC 官网ch17进行离线评测。因此推理完成后需运行 eval_mm/vqaeval/shell/run_transform.sh 做格式转换chmod x ./shell/run_transform.sh ./shell/run_transform.sh该脚本实际调用 eval_mm/vqaeval/transform_docvqatest_for_submission.py接收两个参数input_file_path原始输出 JSON 路径与output_file_path转换后 JSON 路径转换脚本会按官方要求的提交 schema 重新组织答案字段。3.8 源码补充vqaeval 评测主流程从 eval.py 可梳理出评测主流程np.random.seed(0)固定随机种子保证可复现初始化 NCCL 分布式进程组按WORLD_SIZE/RANK/LOCAL_RANK分配设备get_model(args)根据--model_name实例化对应模型类models/MiniCPM/minicpmv.py 中的MiniCPM_V/MiniCPM_V_2_6/MiniCPM_o_2_6三者分别以float16、bfloat16、bfloat16精度加载并支持通过--ckpt加载本地 checkpoint 覆盖权重按开关逐任务构造数据集并调用evaluate_VQA进行推理与指标计算实现在 eval_utils/vqa_evaluate.py各任务统一限制max_new_tokens100推理时--generate_method interleave表示采用图文交错式输入prompt 文本 → 图片 → 问题old表示非交错式图片通过chat(image...)单独传入2.6 系列在两种模式下都会对面积小于1344×1344的图片做随机上采样minicpmv.py仅在 rank 0 上将各任务得分汇总写入{answer_path}/{model_name}/result.json。四、两套评测体系的选型建议与注意事项评测目标决定工具需要横向对比多模型在十余个通用 benchmark 上的表现、复现 README 首页表格时使用 vlmevalkit需要聚焦文本场景 VQA尤其要提交 DocVQATest 官方榜单时使用 vqaeval。GPU 资源run_inference.sh默认占用 8 张 GPU 做数据并行推理脚本注释显示 fp16 约占用 17–18G 显存、int4 约 7–8G显存不足时可仿照脚本末尾注释改用单卡命令并缩小--nproc。MME 的 CoT 坑MME reasoning 子集必须开 CoT但use_cot默认名单不含 MME复现前务必手动修改 minicpm_v.py。GPT 评分前置条件涉及 GPT 打分的 benchmark 需要在.env中配置OPENAI_API_BASE与OPENAI_API_KEY否则评分阶段会失败。DocVQATest 无标注该任务只有图片无公开答案评测结果需依赖 RRC 官网本地只能得到推理输出务必先跑run_transform.sh完成提交格式转换。路径与版本本文所有脚本、配置、模型注册与参数解析均可直接在仓库对应路径下核对不同模型版本对MODELNAME、DATALIST的可用集合与脚本参数个数存在差异执行前请对照各小节中的说明。五、小结MiniCPM-V 系列在 eval_mm 中提供了通用基准 专项 VQA两条完整的评测链路VLMEvalKit 侧通过scripts/run_inference.sh一键完成多卡推理与自动评分配合use_cot/use_upsize等数据集级策略可精确复现 README 首页各项指标vqaeval 侧则以downloads目录为数据中枢串联数据下载、分布式推理、结果汇总与 DocVQATest 官方提交格式转换。结合本文给出的源码路径config.py、minicpm_v.py、getargs.py、eval.py 等读者既能照着跑通也能深入理解每个参数与策略背后的实现逻辑为后续自定义数据集评测或新模型接入打下基础。【免费下载链接】MiniCPM-VA Pocket-Sized MLLM for Ultra-Efficient Image and Video Understanding on Your Phone项目地址: https://gitcode.com/GitHub_Trending/mi/MiniCPM-V创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网