VLMEvalKit Documentation

Open-source evaluation toolkit of large multi-modality models (LMMs), support 220+ LMMs, 80+ benchmarks

4,114 stars Python Python 1 file · ~12,318 tokens #chatgpt#claude#clip#computer-vision#evaluation#gemini#gpt#gpt-4v
RAW Doc

1. Project Overview & Quickstart (open-compass/VLMEvalKit)

File: README.md

**A Toolkit for Evaluating Large Vision-Language Models. **

• • • •

English | 简体中文 | 日本語

🏆 OC Learderboard •
🏗️Quickstart •
📊Datasets & Models •
🛠️Development

🤗 HF Leaderboard •
🤗 Evaluation Records •
🤗 HF Video Leaderboard •

🔊 Discord •
📝 Report •
🎯Goal •
🖊️Citation

VLMEvalKit (the python package name is vlmeval) is an open-source evaluation toolkit of large vision-language models (LVLMs). It enables one-command evaluation of LVLMs on various benchmarks, without the heavy workload of data preparation under multiple repositories. In VLMEvalKit, we adopt generation-based evaluation for all LVLMs, and provide the evaluation results obtained with both exact matching and LLM-based answer extraction.

Recent Codebase Changes

  • [2025-09-12] Major Update: Improved Handling for Models with Thinking Mode

    A new feature in PR 1229 that improves support for models with thinking mode. VLMEvalKit now allows for the use of a custom split_thinking function. We strongly recommend this for models with thinking mode to ensure the accuracy of evaluation. To use this new functionality, please enable the Environment Variable: SPLIT_THINK=True. By default, the function will parse content within ... tags and store it in the thinking key of the output. For more advanced customization, you can also create a split_think function for model. Please see the InternVL implementation for an example.

  • [2025-09-12] Major Update: Improved Handling for Long Response(More than 16k/32k)

    A new feature in PR 1229 that improves support for models with long response outputs. VLMEvalKit can now save prediction files in TSV format. Since individual cells in an .xlsx file are limited to 32,767 characters, we strongly recommend using this feature for models that generate long responses (e.g., exceeding 16k or 32k tokens) to prevent data truncation. To use this new functionality, please enable the Environment Variable: PRED_FORMAT=tsv.

  • [2025-08-04] In PR 1175, we refine the can_infer_option and can_infer_text, which increasingly route the evaluation to LLM choice extractors and empirically leads to slight performance improvement for MCQ benchmarks.

🆕 News

  • [2026-04-08] Supported Video-MME-v2. Video-MME-v2 is an authoritative benchmark towards the next stage in video understanding evaluation. 🔥🔥🔥
  • [2025-07-07] Supported SeePhys, which is a ​full spectrum multimodal benchmark for evaluating physics reasoning across different knowledge levels. thanks to Quinn777 🔥🔥🔥
  • [2025-07-02] Supported OvisU1, thanks to liyang-7 🔥🔥🔥
  • [2025-06-16] Supported PhyX, a benchmark aiming to assess capacity for physics-grounded reasoning in visual scenarios. 🔥🔥🔥
  • [2025-05-24] To facilitate faster evaluations for large-scale or thinking models, VLMEvalKit supports multi-node distributed inference using LMDeploy (supports InternVL Series, QwenVL Series, LLaMa4) or VLLM(supports QwenVL Series, LLaMa4). You can activate this feature by adding the use_lmdeploy or use_vllm flag to your custom model configuration in config.py . Leverage these tools to significantly speed up your evaluation workflows 🔥🔥🔥
  • [2025-05-24] Supported Models: InternVL3 Series, Gemini-2.5-Pro, Kimi-VL, LLaMA4, NVILA, Qwen2.5-Omni, Phi4, SmolVLM2, Grok, SAIL-VL-1.5, WeThink-Qwen2.5VL-7B, Bailingmm, VLM-R1, Taichu-VLR. Supported Benchmarks: HLE-Bench, MMVP, MM-AlignBench, Creation-MMBench, MM-IFEval, OmniDocBench, OCR-Reasoning, EMMA, ChaXiv,MedXpertQA, Physics, MSEarthMCQ, MicroBench, MMSci, VGRP-Bench, wildDoc, TDBench, VisuLogic, CVBench, LEGO-Puzzles, Video-MMLU, QBench-Video, MME-CoT, VLM2Bench, VMCBench, MOAT, Spatial457 Benchmark. Please refer to VLMEvalKit Features for more details. Thanks to all contributors 🔥🔥🔥
  • [2025-02-20] Supported Models: InternVL2.5 Series, Qwen2.5VL Series, QVQ-72B, Doubao-VL, Janus-Pro-7B, MiniCPM-o-2.6, InternVL2-MPO, LLaVA-CoT, Hunyuan-Standard-Vision, Ovis2, Valley, SAIL-VL, Ross, Long-VITA, EMU3, SmolVLM. Supported Benchmarks: MMMU-Pro, WeMath, 3DSRBench, LogicVista, VL-RewardBench, CC-OCR, CG-Bench, CMMMU, WorldSense. Thanks to all contributors 🔥🔥🔥
  • [2024-12-11] Supported NaturalBench, a vision-centric VQA benchmark (NeurIPS'24) that challenges vision-language models with simple questions about natural imagery.
  • [2024-12-02] Supported VisOnlyQA, a benchmark for evaluating the visual perception capabilities 🔥🔥🔥
  • [2024-11-26] Supported Ovis1.6-Gemma2-27B, thanks to runninglsy 🔥🔥🔥
  • [2024-11-25] Create a new flag VLMEVALKIT_USE_MODELSCOPE. By setting this environment variable, you can download the video benchmarks supported from modelscope 🔥🔥🔥

🏗️ QuickStart

See [QuickStart | 快速开始] for a quick start guide.

📊 Datasets, Models, and Evaluation Results

Evaluation Results

The performance numbers on our official multi-modal leaderboards can be downloaded from here!

OpenVLM Leaderboard: Download All DETAILED Results.

Check Supported Benchmarks Tab in VLMEvalKit Features to view all supported image & video benchmarks (70+).

Check Supported LMMs Tab in VLMEvalKit Features to view all supported LMMs, including commercial APIs, open-source models, and more (200+).

Transformers Version Recommendation:

Note that some VLMs may not be able to run under certain transformer versions, we recommend the following settings to evaluate each VLM:

  • Please use transformers==4.33.0 for: Qwen series, Monkey series, InternLM-XComposer Series, mPLUG-Owl2, OpenFlamingo v2, IDEFICS series, VisualGLM, MMAlaya, ShareCaptioner, MiniGPT-4 series, InstructBLIP series, PandaGPT, VXVERSE.
  • Please use transformers==4.36.2 for: Moondream1.
  • Please use transformers==4.37.0 for: LLaVA series, ShareGPT4V series, TransCore-M, LLaVA (XTuner), CogVLM Series, EMU2 Series, Yi-VL Series, MiniCPM-[V1/V2], OmniLMM-12B, DeepSeek-VL series, InternVL series, Cambrian Series, VILA Series, Llama-3-MixSenseV1_1, Parrot-7B, PLLaVA Series.
  • Please use transformers==4.40.0 for: IDEFICS2, Bunny-Llama3, MiniCPM-Llama3-V2.5, 360VL-70B, Phi-3-Vision, WeMM.
  • Please use transformers==4.42.0 for: AKI.
  • Please use transformers==4.44.0 for: Moondream2, H2OVL series.
  • Please use transformers==4.45.0 for: Aria.
  • Please use transformers==4.48.0 (or 4.46.0) for: LLaVA-Next series (e.g., llava-hf/llava-v1.6-vicuna-7b-hf).
  • Please use transformers==latest for: PaliGemma-3B, Chameleon series, Video-LLaVA-7B-HF, Ovis series, Mantis series, MiniCPM-V2.6, OmChat-v2.0-13B-sinlge-beta, Idefics-3, GLM-4v-9B, VideoChat2-HD, RBDash_72b, Llama-3.2 series, Kosmos series.
  • Please use transformers==4.50.3 (or 4.46.1 or 4.51 or 4.53) for: Molmo series.
  • Please use transformers>=5.2.0 for: Qwen3.5 series.

Torchvision Version Recommendation:

Note that some VLMs may not be able to run under certain torchvision versions, we recommend the following settings to evaluate each VLM:

  • Please use torchvision>=0.16 for: Moondream series and Aria

Flash-attn Version Recommendation:

Note that some VLMs may not be able to run under certain flash-attention versions, we recommend the following settings to evaluate each VLM:

  • Please use pip install flash-attn --no-build-isolation for: Aria
python
# Demo
from vlmeval.config import supported_VLM
model = supported_VLM['idefics_9b_instruct']()
# Forward Single Image
ret = model.generate(['assets/apple.jpg', 'What is in this image?'])
print(ret)  # The image features a red apple with a leaf on it.
# Forward Multiple Images
ret = model.generate(['assets/apple.jpg', 'assets/apple.jpg', 'How many apples are there in the provided images? '])
print(ret)  # There are two apples in the provided images.

🛠️ Development Guide

To develop custom benchmarks, VLMs, or simply contribute other codes to VLMEvalKit, please refer to [Development_Guide | 开发指南].

Call for contributions

To promote the contribution from the community and share the corresponding credit (in the next report update):

  • All Contributions will be acknowledged in the report.
  • Contributors with 3 or more major contributions (implementing an MLLM, benchmark, or major feature) can join the author list of VLMEvalKit Technical Report on ArXiv. Eligible contributors can create an issue or dm kennyutc in VLMEvalKit Discord Channel.

Here is a contributor list we curated based on the records.

🎯 The Goal of VLMEvalKit

The codebase is designed to:

  1. Provide an easy-to-use, opensource evaluation toolkit to make it convenient for researchers & developers to evaluate existing LVLMs and make evaluation results easy to reproduce.
  2. Make it easy for VLM developers to evaluate their own models. To evaluate the VLM on multiple supported benchmarks, one just need to implement a single generate_inner() function, all other workloads (data downloading, data preprocessing, prediction inference, metric calculation) are handled by the codebase.

The codebase is not designed to:

  1. Reproduce the exact accuracy number reported in the original papers of all 3rd party benchmarks. The reason can be two-fold:
    1. VLMEvalKit uses generation-based evaluation for all VLMs (and optionally with LLM-based answer extraction). Meanwhile, some benchmarks may use different approaches (SEEDBench uses PPL-based evaluation, eg.). For those benchmarks, we compare both scores in the corresponding result. We encourage developers to support other evaluation paradigms in the codebase.
    2. By default, we use the same prompt template for all VLMs to evaluate on a benchmark. Meanwhile, some VLMs may have their specific prompt templates (some may not covered by the codebase at this time). We encourage VLM developers to implement their own prompt template in VLMEvalKit, if that is not covered currently. That will help to improve the reproducibility.

🖊️ Citation

If you find this work helpful, please consider to star🌟 this repo. Thanks for your support!

If you use VLMEvalKit in your research or wish to refer to published OpenSource evaluation results, please use the following BibTeX entry and the BibTex entry corresponding to the specific VLM / benchmark you used.

bib
@inproceedings{duan2024vlmevalkit,
  title={Vlmevalkit: An open-source toolkit for evaluating large multi-modality models},
  author={Duan, Haodong and Yang, Junming and Qiao, Yuxuan and Fang, Xinyu and Chen, Lin and Liu, Yuan and Dong, Xiaoyi and Zang, Yuhang and Zhang, Pan and Wang, Jiaqi and others},
  booktitle={Proceedings of the 32nd ACM International Conference on Multimedia},
  pages={11198--11201},
  year={2024}
}

🔝Back to top


File: docs/zh-CN/_templates/autosummary/class.rst

.. role:: hidden
:class: hidden-section
.. currentmodule:: {{ module }}

{{ name | underline}}

.. autoclass:: {{ name }}
:members:

..
autogenerated from _templates/autosummary/class.rst
note it does not have :inherited-members:


File: docs/zh-CN/_templates/callable.rst

.. role:: hidden
:class: hidden-section
.. currentmodule:: {{ module }}

{{ name | underline}}

.. autoclass:: {{ name }}
:members:
:special-members: call

..
autogenerated from _templates/callable.rst
note it does not have :inherited-members:


File: docs/zh-CN/ConfigSystem.md

配置系统

默认情况下,VLMEvalKit通过在run.py脚本中使用--model和--data参数设置模型名称(在/vlmeval/config.py中定义)和数据集名称(在vlmeval/dataset/__init__.py 或 vlmeval/dataset/video_dataset_config.py 中定义)来启动评估。这种方法在大多数情况下简单且高效,但当用户希望使用不同设置评估多个模型/数据集时,可能不够灵活。

为了解决这个问题,VLMEvalKit提供了一个更灵活的配置系统。用户可以在json文件中指定模型和数据集设置,并通过--config参数将配置文件的路径传递给run.py脚本。以下是一个示例配置json:

json
{
    "model": {
        "GPT4o_20240806_T00_HIGH": {
            "class": "GPT4V",
            "model": "gpt-4o-2024-08-06",
            "temperature": 0,
            "img_detail": "high"
        },
        "GPT4o_20240806_T10_Low": {
            "class": "GPT4V",
            "model": "gpt-4o-2024-08-06",
            "temperature": 1.0,
            "img_detail": "low"
        },
        "GPT4o_20241120": {}
    },
    "data": {
        "MME-RealWorld-Lite": {
            "class": "MMERealWorld",
            "dataset": "MME-RealWorld-Lite"
        },
        "MMBench_DEV_EN_V11": {
            "class": "ImageMCQDataset",
            "dataset": "MMBench_DEV_EN_V11"
        },
        "MMBench_Video_8frame_nopack":{},
        "Video-MME_16frame_subs": {
            "class": "VideoMME",
            "dataset": "Video-MME",
            "nframe": 16,
            "use_subtitle": true
        }
    }
}

配置json的解释:

  1. 现在我们支持两个字段:model和data,每个字段都是一个字典。字典的键是模型/数据集的名称(由用户设置),值是模型/数据集的设置。
  2. 对于model中的项目,值是一个包含以下键的字典:
    • class:模型的类名,应该是vlmeval/vlm/__init__.py(开源模型)或vlmeval/api/__init__.py(API模型)中定义的类名。
    • 其他kwargs:其他kwargs是模型特定的参数,请参考模型类的定义以获取详细用法。例如,model、temperature、img_detail是GPT4V类的参数。值得注意的是,大多数模型类都需要model参数。
    • Tip:在位于vlmeval/config.py的变量supported_VLM中的已经被定义的模型可以作为model的键,而不需要填对应的值即可启动。例如,GPT4o_20240806_T00_HIGH: {}是等价于GPT4o_20240806_T00_HIGH: {'class': 'GPT4V', 'model': 'gpt-4o-2024-08-06', 'temperature': 0, 'img_size': -1, 'img_detail': 'high', 'retry': 10, 'verbose': False}。
  3. 对于字典data,我们建议用户使用官方数据集名称作为键(或键的一部分),因为我们经常根据数据集名称确定后处理/判断设置。对于data中的项目,值是一个包含以下键的字典:
    • class:数据集的类名,应该是vlmeval/dataset/__init__.py中定义的类名。
    • 其他kwargs:其他kwargs是数据集特定的参数,请参考数据集类的定义以获取详细用法。通常,大多数数据集类都需要dataset参数。大多数视频数据集类都需要 nframe 或 fps 参数。
    • Tip:在位于vlmeval/dataset/video_dataset_config.py的变量supported_video_dataset中的已经被定义的数据集可以作为data的键,而不需要填对应的值即可启动。例如,MMBench_Video_8frame_nopack: {}是等价于MMBench_Video_8frame_nopack: {'class': 'MMBenchVideo', 'dataset': 'MMBench-Video', 'nframe': 8, 'pack': False}。

将示例配置json保存为config.json,您可以通过以下命令启动评估:

bash
python run.py --config config.json

这将在工作目录$WORK_DIR下生成以下输出文件(格式为{$WORK_DIR}/{$MODEL_NAME}/{$MODEL_NAME}_{$DATASET_NAME}_*):

  • $WORK_DIR/GPT4o_20240806_T00_HIGH/GPT4o_20240806_T00_HIGH_MME-RealWorld-Lite*
  • $WORK_DIR/GPT4o_20240806_T10_Low/GPT4o_20240806_T10_Low_MME-RealWorld-Lite*
  • $WORK_DIR/GPT4o_20240806_T00_HIGH/GPT4o_20240806_T00_HIGH_MMBench_DEV_EN_V11*
  • $WORK_DIR/GPT4o_20240806_T10_Low/GPT4o_20240806_T10_Low_MMBench_DEV_EN_V11*
    ......

File: docs/zh-CN/Development.md

🛠️ 如何在 VLMEvalKit 中实现一个新的 Benchmark 或多模态模型(VLM)

实现一个新的 benchmark

示例 PR: 添加 Math-Vision Benchmark (#292)

目前在 VLMEvalKit 中,benchmark 以数据集类的形式呈现,当你新增一个 benchmark 时,你可以选择复用现有的数据集类 (如单选题 benchmark 可复用 ImageMCQDataset),或是实现新的数据集类。你的数据集类必须支持以下两种方法 (复用父类或自行实现):

  • build_prompt(self, line): 方法输入 line 类型为 int (对应数据 index) 或 pd.Series (对应数据原始 record)。方法输出一条 multi-modal message 作为多模态模型输入,multi-modal message 是一个图文交错的列表,如以下格式 (一图一文): [dict(type='image', value=IMAGE_PTH), dict(type='text', value=prompt)]。
  • evaluate(self, eval_file, **judge_kwargs): 方法输入 eval_file 为多模态模型的预测结果 (多以 .xlsx 格式存在),如 benchmark evaluation 需要大语言模型 (一般为 GPT) 辅助,则 judge_kwargs 传入大语言模型的参数。方法输出 benchmark 的评测结果,以 dict 或 pd.DataFrame 的形式。

以下,我们简述新增数据集的通常步骤:

1. TSV 数据文件准备 (图文评测集)

目前,我们将每一个 benchmark 数据集设置为一个单独的 TSV 文件。在推理过程中,数据文件将从数据集定义的 DATASET_URL 链接地址自动下载到 $LMUData 中(如果没有明确设置的话,默认路径是 $HOME/LMUData)。你可以将准备好的 TSV 文件上传到一个可下载的地址(如:huggingface),或发送给我们 [email protected],我们将帮助上传数据集到服务器中。此外,你也可以在环境变量中自定义设置下载路径 LMUData=/path/to/your/data。

TSV 文件中的内容组成为:

数据集名称 \ 字段 index image image_path question hint multi-choiceoptions answer category l2-category split
MMBench_DEV_[CN/EN] ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
MMBench_TEST_[CN/EN] ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
CCBench ✅ ✅ ✅ ✅ ✅ ✅
SEEDBench_IMG ✅ ✅ ✅ ✅ ✅ ✅
MME ✅ ✅ ✅ ✅ ✅
MMVet ✅ ✅ ✅ ✅ ✅
MMMU_DEV_VAL ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅ ✅
COCO_VAL ✅ ✅ ✅
OCRVQA_[TEST/TESTCORE] ✅ ✅ ✅ ✅
TextVQA_VAL ✅ ✅ ✅ ✅
VCR_[EN/ZH]_[EASY/HARD]_[ALL/500/100] ✅ ✅ ✅ ✅

TSV 中必须字段的介绍:

  • index: 一个整数,tsv 中每一行的唯一标识
  • image: 图片的 base64 编码,你可以使用 vlmeval/smp/vlm.py 中实现的API进行编码和解码:
    • 编码:encode_image_to_base64(对于PIL Image)/ encode_image_file_to_base64(对于图片文件路径)
    • 解码:decode_base64_to_image(对于PIL Image)/ decode_base64_to_image_file(对于图片文件路径)
  • question: 针对图像所提取出的问题,类型为字符串
  • answer: 问题的答案,类型为字符串,Test 集可缺失这一字段

2. 自定义数据集的 prompt 构建

ImageBaseDataset 定义了默认的 prompt 格式。如果需要针对数据集添加 prompt,或给模型输入 Interleave 的数据格式,可以通过 build_prompt(line) 函数实现。该函数输入为,每次给定 TSV 文件中的一行,包含 index, image, question 等内容作为 line。该函数将返回一个多模态消息 msg 的字典列表 [dict(type='image', value=IMAGE_PTH), dict(type='text', value=prompt)],包括图片路径和将被输入到 VLMs 的文本 prompt。对于 interleave 类型输入,可以直接将图片路径的字典放置到 image token 位置。

3. 自定义数据集的指标实现

增加对 benchmark 的评测需要自定义一个该数据集的 class 对象,从而实现数据集的指标计算。图文多模态数据集均继承自 vlmeval/dataset/image_base.py 中的 ImageBaseDataset 对象。其中 TYPE 定义了数据集的类型;DATASET_URL 为数据集的下载地址;DATASET_MD5 为数据集文件的 md5 一致性编码检查。

在 class 中需要实现 evaluate(eval_file, **judge_kwargs) 类函数,对自定义的数据集结果进行指标计算和结果输出。函数输入 eval_file 为模型预测结果 {model_name}_{dataset}.xlsx 的路径。可以通过 load(eval_file) 文件将其读取为 panda.DataFrames 类型,其中包含 index, question, answer, category, prediction 等字段。judge_kwargs 参数将传递一个评测相关的字典,如:judge 模型的名称,api 请求线程数等。函数的返回值为评估完成的准确度等指标,其格式为由 list 组成的字典,并组织成 panda.DataFrames 类型。

实现一个新的模型

示例 PR: 支持 LLaVA-Next-Interleave (#294)

1. 支持 generate_inner API (必须)

现有所有的模型都在 vlmeval/vlm 中实现。对于一个最基本的模型,你的模型类应该实现方法 generate_inner(msgs, dataset=None)。这个函数将向 VLM 输入一个多模态数据,并返回 VLM 的预测(一个字符串)。可选参数 dataset 可以用作模型在不同推理策略之间切换的标志。

其中多模态消息 msgs 是一个字典列表,每个字典有两个键:类型和值:

  • type:我们目前支持两种类型,选项是 ["image", "text"]。
  • value:当类型为 text 时,值是文本消息(一个字符串);当类型为 image 时,值可以是图像文件的本地路径,或者是图像的URL。

目前,一个多模态消息可能包含任意交错的图像和文本。如果你的模型不支持这一点,我们推荐的做法是取第一张图像和连接的文本消息作为模型的输入。你可以在模型的 class 中设置 INTERLEAVE = False 并调用 self.message_to_promptimg(message, dataset=dataset) 函数来获取你的 prompt 和第一张图片的地址。

一些多模态消息的例子:

python
IMAGE_PTH = 'assets/apple.jpg'
IMAGE_URL = 'https://raw.githubusercontent.com/open-compass/VLMEvalKit/main/assets/apple.jpg'
msg1 = [
    dict(type='image', value=IMAGE_PTH),
    dict(type='text', value='What is in this image?')
]
msg2 = [
    dict(type='image', value=IMAGE_URL),
    dict(type='image', value=IMAGE_URL),
    dict(type='text', value='How many apples are there in these images?')
]
response = model.generate(msg1)

为了方便起见,我们还支持接受字符串列表作为输入。在这种情况下,我们将检查一个字符串是图像路径还是图像 URL,并自动将其转换为 list[dict] 格式:

python
IMAGE_PTH = 'assets/apple.jpg'
IMAGE_URL = 'https://raw.githubusercontent.com/open-compass/VLMEvalKit/main/assets/apple.jpg'
msg1 = [IMAGE_PTH, 'What is in this image?']
msg2 = [IMAGE_URL, IMAGE_URL,  'How many apples are there in these images?']
response = model.generate(msg1)

2. 支持自定义提示词构建 (可选)

此外,你的模型可以通过实现两个可选方法来支持自定义提示构建:use_custom_prompt(dataset) 和 build_prompt(line, dataset=None)。

  • use_custom_prompt(dataset) 将返回一个布尔值,指示模型是否应使用自定义提示构建策略。
  • 如果use_custom_prompt(dataset)返回 True,build_prompt(line, dataset) 应该为相应的数据集返回一个自定义构建的多模态消息,line 数据是一个包含数据样本所需信息的字典。如果use_custom_prompt(dataset) 返回False,则将使用默认的 prompt 构建策略。

3. 支持多轮对话 (可选)

你可以通过支持 chat_inner(message, dataset) API 为你的模型新增多轮对话功能并兼容多轮对话评测。这个 API 输出一个字符串型回复,message 包含一个聊天记录的列表,格式如下:

python
# Assume msg1, msg2, msg3, ... are multi-modal messages following the previously described format
# `chat_inner` take the following chat history list as input:
message = [
    dict(role='user', content=msg1),
    dict(role='assistant', content=msg2),
    dict(role='user', content=msg3),
    dict(role='assistant', content=msg4),
	......
    dict(role='user', content=msgn),
]
# `message` should contain an odd number of chat utterances, the role of utterances should be interleaved "user" and "assistant", with the role of the last utterance to be "user".
# The chat function will call `chat_inner`
response = model.chat(message)

示例 PRs:

为 VLMEvalKit 贡献代码

如果你想为 VLMEvalKit 贡献代码,请在提交PR之前进行预提交检查。这有助于保持代码整洁。

bash
# 在VLMEvalKit的目录下,安装预提交 hook:
pip install pre-commit
pre-commit install
pre-commit run --all-files
# 然后提交你的代码。

File: docs/zh-CN/EvalByLMDeploy.md

使用 LMDeploy 加速评测推理

VLMEvalKit 支持测试由 LMDeploy 部署的 VLM 模型,下面以 InternVL2-8B 为例,展示如何测试模型

第0步 安装 LMDeploy

bash
pip install lmdeploy

其他安装方式可以参考 LMDeploy 的文档

第1步 启动推理服务

bash
lmdeploy serve api_server OpenGVLab/InternVL2-8B --model-name InternVL2-8B

[!IMPORTANT]
因为 VLMEvalKit 中的模型对于不同数据集在构建 prompt 时可能有自定义行为,如 InternVL2 对于 HallusionBench 的处理,所以,server 端在启动的时候需要指定 --model-name,这样在使用 LMDEploy api 时可以根据名字选择合适的 prompt 构建策略。

如果指定了 --server-port,需要设置对应的环境变量 LMDEPLOY_API_BASE

第2步 评测

bash
python run.py --data MMStar --model InternVL2-8B --verbose --api-nproc 64

File: docs/zh-CN/index.rst

欢迎来到 VLMEvalKit 中文教程!

VLMEvalKit 上手路线

为了用户能够快速上手,我们推荐以下流程:

  • 对于想要使用 VLMEvalKit 的用户,我们推荐先阅读 开始你的第一步_ 部分来设置环境,并启动一个迷你实验熟悉流程。

  • 若您想进行更多模块的自定义,例如增加数据集和模型,我们提供了 进阶教程_ 。

我们始终非常欢迎用户的 PRs 和 Issues 来完善 VLMEvalKit!

.. _快速开始:
.. toctree::
:maxdepth: 1
:caption: 快速开始

Quickstart.md

.. .. _教程:
.. .. toctree::
.. :maxdepth: 1
.. :caption: 教程

.. user_guides/framework_overview.md

.. _进阶教程:
.. toctree::
:maxdepth: 1
:caption: 进阶教程

Development.md
ConfigSystem.md

.. .. _其他说明:
.. .. toctree::
.. :maxdepth: 1
.. :caption: 其他说明

.. notes/contribution_guide.md

索引与表格

  • :ref:genindex
  • :ref:search

File: docs/zh-CN/Quickstart.md

快速开始

在运行评测脚本之前,你需要先配置 VLMs,并正确设置模型路径。然后你可以使用脚本 run.py 进行多个VLMs和基准测试的推理和评估。

第0步 安装和设置必要的密钥

安装

bash
git clone https://github.com/open-compass/VLMEvalKit.git
cd VLMEvalKit
pip install -e .

设置密钥

要使用 API 模型(如 GPT-4v, Gemini-Pro-V 等)进行推理,或使用 LLM API 作为评判者或选择提取器,你需要首先设置 API 密钥。如果你设置了密钥,VLMEvalKit 将使用一个评判 LLM 从输出中提取答案,否则它将使用精确匹配模式(在输出字符串中查找 "Yes", "No", "A", "B", "C"...)。精确匹配模式只能应用于是或否任务和多项选择任务。

  • 你可以将所需的密钥放在 $VLMEvalKit/.env 中,或直接将它们设置为环境变量。如果你选择创建 .env 文件,其内容将如下所示:

    bash
    # .env 文件,将其放置在 $VLMEvalKit 下
    # 专有 VLMs 的 API 密钥
    # QwenVL APIs
    DASHSCOPE_API_KEY=
    # Gemini w. Google Cloud Backends
    GOOGLE_API_KEY=
    # OpenAI API
    OPENAI_API_KEY=
    OPENAI_API_BASE=
    # StepAI API
    STEPAI_API_KEY=
    # REKA API
    REKA_API_KEY=
    # GLMV API
    GLMV_API_KEY=
    # CongRong API
    CW_API_BASE=
    CW_API_KEY=
    # SenseNova API
    SENSENOVA_API_KEY=
    # Hunyuan-Vision API
    HUNYUAN_SECRET_KEY=
    HUNYUAN_SECRET_ID=
    # LMDeploy API
    LMDEPLOY_API_BASE=
    # MiniMax API
    MINIMAX_API_KEY=
    # 你可以设置一个评估时代理,评估阶段产生的 API 调用将通过这个代理进行
    EVAL_PROXY=
  • 如果需要使用 API 在对应键值空白处填写上你的密钥。这些 API 密钥将在进行推理和评估时自动加载。

第1步 配置

VLM 配置:所有 VLMs 都在 vlmeval/config.py 中配置。对于某些 VLMs(如 MiniGPT-4、LLaVA-v1-7B),需要额外的配置(在配置文件中配置代码 / 模型权重根目录)。在评估时,你应该使用 vlmeval/config.py 中 supported_VLM 指定的模型名称来选择 VLM。确保在开始评估之前,你可以成功使用 VLM 进行推理,使用以下命令 vlmutil check {MODEL_NAME}。

注:对于Qwen-VL系列模型(Qwen-VL, Qwen2-VL, Qwen2.5-VL),vlmeval/config.py 中所指定的像素数量上下界如下:

text
min_pixels=1280 * 28 * 28,
max_pixels=16384 * 28 * 28,

其中,1280为Qwen官方为平衡性能、计算资源与内存的推荐最大值,而16384为模型输入的理论最大值。这种设定对于部分需要高分辨率的视觉任务(如文档理解)有着积极的作用。但考虑这一设定并没有实际的依据,如果需要与官方的设定对齐,可以去掉这两个数值,或是设置为以下来自Qwen官方demo的数值:

text
min_pixels=256 * 28 * 28,
max_pixels=1280 * 28 * 28,

第2步 评测

新功能!!! 我们集成了一个新的配置系统,以实现更灵活的评估设置。查看文档或运行python run.py --help了解更多详情 🔥🔥🔥

我们使用 run.py 进行评估。你可以使用 $VLMEvalKit/run.py 或创建脚本的软链接运行(以便在任何地方使用该脚本):

参数

  • --data (list[str]): 设置在 VLMEvalKit 中支持的数据集名称(可以在代码库首页的 README 中找到支持的数据集列表)
  • --model (list[str]): 设置在 VLMEvalKit 中支持的 VLM 名称(在 vlmeval/config.py 中的 supported_VLM 中定义)
  • --mode (str, 默认值为 'all', 可选值为 ['all', 'infer']):当 mode 设置为 "all" 时,将执行推理和评估;当设置为 "infer" 时,只执行推理
  • --api-nproc (int, 默认值为 4): 调用 API 的线程数
  • --work-dir (str, default to '.'): 存放测试结果的目录

用于评测图像多模态评测集的命令

你可以使用 python 或 torchrun 来运行脚本:

bash
# 使用 `python` 运行时,只实例化一个 VLM,并且它可能使用多个 GPU。
# 这推荐用于评估参数量非常大的 VLMs(如 IDEFICS-80B-Instruct)。

# 在 MMBench_DEV_EN、MME 和 SEEDBench_IMG 上使用 IDEFICS-80B-Instruct 进行推理和评估
python run.py --data MMBench_DEV_EN MME SEEDBench_IMG --model idefics_80b_instruct --verbose
# 在 MMBench_DEV_EN、MME 和 SEEDBench_IMG 上使用 IDEFICS-80B-Instruct 仅进行推理
python run.py --data MMBench_DEV_EN MME SEEDBench_IMG --model idefics_80b_instruct --verbose --mode infer

# 使用 `torchrun` 运行时,每个 GPU 上实例化一个 VLM 实例。这可以加快推理速度。
# 但是,这仅适用于消耗少量 GPU 内存的 VLMs。

# 在 MMBench_DEV_EN、MME 和 SEEDBench_IMG 上使用 IDEFICS-9B-Instruct、Qwen-VL-Chat、mPLUG-Owl2。在具有 8 个 GPU 的节点上进行推理和评估。
torchrun --nproc-per-node=8 run.py --data MMBench_DEV_EN MME SEEDBench_IMG --model idefics_80b_instruct qwen_chat mPLUG-Owl2 --verbose
# 在 MME 上使用 Qwen-VL-Chat。在具有 2 个 GPU 的节点上进行推理和评估。
torchrun --nproc-per-node=2 run.py --data MME --model qwen_chat --verbose

用于评测视频多模态评测集的命令

bash
# 使用 `python` 运行时,只实例化一个 VLM,并且它可能使用多个 GPU。
# 这推荐用于评估参数量非常大的 VLMs(如 IDEFICS-80B-Instruct)。

# 在 MMBench-Video 上评测 IDEFCIS2-8B, 视频采样 8 帧作为输入,不采用 pack 模式评测. MMBench_Video_8frame_nopack 是一个定义在 `vlmeval/dataset/video_dataset_config.py` 的数据集设定.
torchrun --nproc-per-node=8 run.py --data MMBench_Video_8frame_nopack --model idefics2_8
# 在 MMBench-Video 上评测 GPT-4o (API 模型), 视频采样每秒一帧作为输入,采用 pack 模式评测
python run.py --data MMBench_Video_1fps_pack --model GPT4o

评估结果将作为日志打印出来。此外,结果文件也会在目录 $YOUR_WORKING_DIRECTORY/{model_name} 中生成。以 .csv 结尾的文件包含评估的指标。

常见问题

构建输入prompt:`build_prompt()`函数

如果您在评测某个benchmark时,发现模型输出的结果与预期不符,可能是因为您使用的模型没有正确构建输入prompt。

在VLMEvalkit中,每个dataset类都包含一个名为build_prompt()的函数,用于构建输入问题的格式。不同的benchmark可以选择自定义build_prompt()函数,也可以使用默认的实现。

例如,在处理默认的多选题/Multi-Choice QA时,ImageMCQDataset.build_prompt()类会将hint、question、options等元素(若数据集中包含)组合成一个完整的问题格式,如下所示:

text
HINT
QUESTION
Options:
A. Option A
B. Option B
···
Please select the correct answer from the options above.

此外,由于不同模型对评测的需求可能有所不同,VLMEvalkit也支持在模型层面自定义对不同benchmark构建prompt的方法,即model.build_prompt(),具体示例可以参考InternVL。

注意:当同时定义了model.build_prompt()以及dataset.build_prompt()时,model.build_prompt()将优先于dataset.build_prompt(),即前者会覆盖后者。

由于部分模型(如Qwen2VL,InternVL等)对于不同类型的benchmark定义了广泛的prompt构建方法,为了更灵活地适应不同的benchmark,VLMEvalkit支持在模型中自定义model.use_custom_prompt()函数。通过添加或者修改use_custom_prompt()函数,您可以决定对于哪些benchmark使用模型自定义的use_custom_prompt()方法,示例如下:

text
def use_custom_prompt(self, dataset: str) -> bool:
    from vlmeval.dataset import DATASET_TYPE, DATASET_MODALITY
    dataset_type = DATASET_TYPE(dataset, default=None)
    if not self._use_custom_prompt:
        return False
    if listinstr(['MMVet'], dataset):
        return True
    if dataset_type == 'MCQ':
        return True
    if DATASET_MODALITY(dataset) == 'VIDEO':
        return False
    return False

仅当use_custom_prompt()函数返回True时,VLMEvalkit才会对当前benchmark调用模型的build_prompt()函数。
通过这种方式,您可以根据具体需求灵活地控制哪些benchmark使用模型自定义的prompt构建逻辑,从而更好地适配不同模型和任务的需求。

模型切分

目前 VLMEvalKit 的启动方式自动支持同机上进程间 GPU 资源的划分与模型切分。该功能在推理后端为 lmdeploy 或 transformers 时被支持,具体行为如下:

  • 基于 python 命令启动时,模型默认分配到所有可用的 GPU 上,如想指定使用哪些 GPU,可以使用 CUDA_VISIBLE_DEVICES 环境变量。
  • 基于 torchrun 命令启动时,每个模型实例会被分配到 N_GPU // N_PROC 个 GPU 上,N_PROC 为 torchrun 命令中的 --nproc-per-node 参数所指定的进程数。N_GPU 的取值为:
    • 如 CUDA_VISIBLE_DEVICES 环境变量未设置,N_GPU 为全部可用 GPU 数量。
    • 如 CUDA_VISIBLE_DEVICES 环境变量被设置,N_GPU 为 CUDA_VISIBLE_DEVICES 环境变量所指定的 GPU 数量,并且,仅有指定的 GPU 会被利用。

下面提供了,在一台配备 8 块 GPU 的机器上运行评测任务的具体示例:

bash
# 
torchrun --nproc-per-node=2 run.py --data MMBench_DEV_EN --model InternVL3-78B
# 
python run.py --data MMBench_DEV_EN --model InternVL3-78B
# 
CUDA_VISIBLE_DEVICES=1,2,3,4,5,6 torchrun --nproc-per-node=3 run.py --data MMBench_DEV_EN --model InternVL3-38B

注:此方式不支持 vllm 后端,基于 vllm 后端起评测任务时,请用 python 命令启动,默认调用所有可见的 GPU。

性能差距

在不同的运行环境中,模型的性能表现可能会有所差异。因此,在评估过程中,您可能会发现自己的评测结果与VLMEvalKit官方榜单上的结果存在差距。这种差异可能与transformers, cuda, torch等版本的变化有关。

此外,对于异常的表现,我们建议您优先查看运行完成后的本地生成记录{model}_{dataset}.xlsx或者评估记录{model}_{dataset}_{judge_model}.xlsx,这可能会帮助您更好地理解评估结果并发现问题。

部署本地语言模型作为评判 / 选择提取器

上述默认设置使用 OpenAI 的 GPT 作为评判 LLM。你也可以使用 LMDeploy 部署本地评判 LLM。

首先进行安装:

text
pip install lmdeploy openai

然后可以通过一行代码部署本地评判 LLM。LMDeploy 将自动从 Huggingface 下载模型。假设我们使用 internlm2-chat-1_8b 作为评判,端口为 23333,密钥为 sk-123456(密钥必须以 "sk-" 开头,后跟任意数字):

text
lmdeploy serve api_server internlm/internlm2-chat-1_8b --server-port 23333

使用以下 Python 代码获取由 LMDeploy 注册的模型名称:

text
from openai import OpenAI
client = OpenAI(
    api_key='sk-123456',
    base_url="http://0.0.0.0:23333/v1"
)
model_name = client.models.list().data[0].id

配置对应环境变量,以告诉 VLMEvalKit 如何使用本地评判 LLM。正如上面提到的,也可以在 $VLMEvalKit/.env 文件中设置:

text
OPENAI_API_KEY=sk-123456
OPENAI_API_BASE=http://0.0.0.0:23333/v1/chat/completions
LOCAL_LLM=<model_name you get>

最后,你可以运行第2步中的命令,使用本地评判 LLM 来评估你的 VLM。

请注意:

  • 如果你希望将评判 LLM 部署在单独的一个 GPU 上,并且由于 GPU 内存有限而希望在其他 GPU 上评估你的 VLM,可以使用 CUDA_VISIBLE_DEVICES=x 这样的方法,例如:
text
CUDA_VISIBLE_DEVICES=0 lmdeploy serve api_server internlm/internlm2-chat-1_8b --server-port 23333
CUDA_VISIBLE_DEVICES=1,2,3 torchrun --nproc-per-node=3 run.py --data HallusionBench  --model qwen_chat --verbose
  • 如果本地评判 LLM 在遵循指令方面不够好,评估过程可能会失败。请通过 issues 报告此类失败情况。
  • 可以以不同的方式部署评判 LLM,例如使用私有 LLM(而非来自 HuggingFace)或使用量化 LLM。请参考 LMDeploy doc 文档。也可以使用其他支持 OpenAI API 框架的方法。

使用 LMDeploy 加速模型推理

可参考文档


File: docs/zh-CN/README_zh-CN.md

VLMEvalKit (python 包名为 vlmeval) 是一款专为大型视觉语言模型 (Large Vision-Language Models, LVLMs) 评测而设计的开源工具包。该工具支持在各种基准测试上对大型视觉语言模型进行一键评估,无需进行繁重的数据准备工作,让评估过程更加简便。在 VLMEvalKit 中,我们对所有大型视觉语言模型生成的结果进行评测,并提供基于精确匹配与基于 LLM 的答案提取两种评测结果。

🆕 更新

  • [2025-04-29] 优化 torchrun 启动逻辑:目前 torchrun 启动时,若进程数为 M,机器 GPU 卡数为 N,将会自动调整每个进程分配的 GPU 数量为 N // M。目前此分配方式适用于 transformers, lmdeploy 推理后端,vllm 推理后端仅支持使用 python 启动 🔥🔥🔥
  • [2025-02-20] 支持新模型:InternVL2.5 series, QwenVL2.5 series, QVQ-72B, Doubao-VL, Janus-Pro-7B, MiniCPM-o-2.6, InternVL2-MPO, LLaVA-CoT, Hunyuan-Standard-Vision, Ovis2, Valley, SAIL-VL, Ross, Long-VITA, EMU3, SmolVLM。支持新基准:MMMU-Pro, WeMath, 3DSRBench, LogicVista, VL-RewardBench, CC-OCR, CG-Bench, CMMMU, WorldSense。请参考VLMEvalKit Features以获取更多信息。感谢社区的各位贡献者 🔥🔥🔥
  • [2024-11-21] 集成了一个新的配置系统,以实现更灵活的评估设置。查看文档或运行python run.py --help了解更多详情 🔥🔥🔥
  • [2024-11-21] 支持 QSpatial,一个用于定量空间推理的多模态基准(例如,确定大小/距离),感谢 andrewliao11 提供官方支持 🔥🔥🔥
  • [2024-11-21] 支持 MM-Math,一个包含约6K初中多模态推理数学问题的新多模态数学基准。GPT-4o-20240806在该基准上达到了22.5%的准确率 🔥🔥🔥
  • [2024-11-16] 支持 OlympiadBench,一个多模态基准,包含奥林匹克级别的数学和物理问题 🔥🔥🔥
  • [2024-11-16] 支持 WildVision,一个基于多模态竞技场数据的主观多模态基准 🔥🔥🔥
  • [2024-11-13] 支持 MIA-Bench,一个多模态指令跟随基准 🔥🔥🔥
  • [2024-11-08] 支持 Aria,一个多模态原生 MoE 模型,感谢 teowu 🔥🔥🔥
  • [2024-11-04] 支持 WorldMedQA-V,该基准包含 1000 多个医学 VQA 问题,涵盖巴西、以色列、日本、西班牙等四个国家的语言,以及它们的英文翻译 🔥🔥🔥

🏗️ 快速开始

请参阅快速开始获取入门指南。

📊 评测结果,支持的数据集和模型

评测结果

OpenVLM Leaderboard: 下载全部细粒度测试结果.

请查看VLMEvalKit Features中的 Supported Benchmarks 标签,以查看所有支持的图像和视频基准(70+)。

请查看VLMEvalKit Features中的 Supported LMMs 标签,以查看所有支持的 LMMs,包括商业 API、开源模型等(200+)。

其他

Transformers 的版本推荐:

请注意,某些 VLM 可能无法在某些特定的 transformers 版本下运行,我们建议使用以下设置来评估对应的VLM:

  • 请用 transformers==4.33.0 来运行: Qwen series, Monkey series, InternLM-XComposer Series, mPLUG-Owl2, OpenFlamingo v2, IDEFICS series, VisualGLM, MMAlaya, ShareCaptioner, MiniGPT-4 series, InstructBLIP series, PandaGPT, VXVERSE.
  • 请用 transformers==4.37.0 来运行: LLaVA series, ShareGPT4V series, TransCore-M, LLaVA (XTuner), CogVLM Series, EMU2 Series, Yi-VL Series, MiniCPM-[V1/V2], OmniLMM-12B, DeepSeek-VL series, InternVL series, Cambrian Series, VILA Series, Llama-3-MixSenseV1_1, Parrot-7B, PLLaVA Series.
  • 请用 transformers==4.40.0 来运行: IDEFICS2, Bunny-Llama3, MiniCPM-Llama3-V2.5, 360VL-70B, Phi-3-Vision, WeMM.
  • 请用 transformers==4.42.0 来运行: AKI.
  • 请用 transformers==latest 来运行: LLaVA-Next series, PaliGemma-3B, Chameleon series, Video-LLaVA-7B-HF, Ovis series, Mantis series, MiniCPM-V2.6, OmChat-v2.0-13B-sinlge-beta, Idefics-3, GLM-4v-9B, VideoChat2-HD.

如何测试一个 VLM 是否可以正常运行:

python
from vlmeval.config import supported_VLM
model = supported_VLM['idefics_9b_instruct']()
# 前向单张图片
ret = model.generate(['assets/apple.jpg', 'What is in this image?'])
print(ret)  # 这张图片上有一个带叶子的红苹果
# 前向多张图片
ret = model.generate(['assets/apple.jpg', 'assets/apple.jpg', 'How many apples are there in the provided images? '])
print(ret)  # 提供的图片中有两个苹果

🛠️ 开发指南

要开发自定义评测数据集,支持其他 VLMs,或为 VLMEvalKit 贡献代码,请参阅开发指南。

为激励来自社区的共享并分享相应的 credit,在下一次 report 更新中,我们将:

  • 致谢所有的 contribution
  • 具备三个或以上主要贡献 (支持新模型、评测集、或是主要特性) 的贡献者将可以加入技术报告的作者列表 。合条件的贡献者可以创建 issue 或是在 VLMEvalKit Discord Channel 私信 kennyutc,我们将进行跟进

🎯 VLMEvalKit 的目标

该代码库的设计目标是:

  1. 提供一个易于使用的开源评估工具包,方便研究人员和开发人员评测现有的多模态大模型,并使评测结果易于复现。
  2. 使 VLM 开发人员能够轻松地评测自己的模型。在多个支持的基准测试上评估 VLM,只需实现一个 generate_inner() 函数,所有其他工作负载(数据下载、数据预处理、预测推理、度量计算)都由代码库处理。

该代码库的设计目标不是:

复现所有第三方基准测试原始论文中报告的准确数字。有两个相关的原因:

  1. VLMEvalKit 对所有 VLMs 使用基于生成的评估(可选使用基于 LLM 的答案提取)。同时,一些基准测试可能官方使用不同的方法(例如,SEEDBench 使用基于 PPL 的评估)。对于这些基准测试,我们在相应的结果中比较两个得分。我们鼓励开发人员在代码库中支持其他评估范式。
  2. 默认情况下,我们对所有多模态模型使用相同的提示模板来评估基准测试。同时,一些多模态模型可能有他们特定的提示模板(目前可能未在代码库中涵盖)。我们鼓励 VLM 的开发人员在 VLMEvalKit 中实现自己的提示模板,如果目前未覆盖。这将有助于提高可复现性。

🖊️ 引用

如果我们的工作对您有所帮助,请考虑 star🌟 VLMEvalKit。感谢支持!

如果您在研究中使用了 VLMEvalKit,或希望参考已发布的开源评估结果,请使用以下 BibTeX 条目以及与您使用的特定 VLM / 基准测试相对应的 BibTex 条目。

bib
@misc{duan2024vlmevalkit,
      title={VLMEvalKit: An Open-Source Toolkit for Evaluating Large Multi-Modality Models},
      author={Haodong Duan and Junming Yang and Yuxuan Qiao and Xinyu Fang and Lin Chen and Yuan Liu and Xiaoyi Dong and Yuhang Zang and Pan Zhang and Jiaqi Wang and Dahua Lin and Kai Chen},
      year={2024},
      eprint={2407.11691},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2407.11691},
}

🔝回到顶部


File: docs/ja/README_ja.md

VLMEvalKit(pythonパッケージ名はvlmeval)は、大規模視覚言語モデル(LVLMs)のオープンソース評価ツールキットです。このツールキットは、複数のリポジトリでのデータ準備という重労働なしに、さまざまなベンチマークでLVLMsのワンコマンド評価を可能にします。VLMEvalKitでは、すべてのLVLMsに対して生成ベースの評価を採用し、正確なマッチングとLLMベースの回答抽出の両方で得られた評価結果を提供します。

PS: 日本語の README には最新のアップデートがすべて含まれていない場合があります。英語版をご確認ください。

📊 データセット、モデル、および評価結果

公式のマルチモーダルリーダーボードでのパフォーマンス数値は、ここからダウンロードできます!

OpenVLM Leaderboard: すべての詳細な結果をダウンロード。

Supported Benchmarks in VLMEvalKit Features を確認して、すべてのサポートされているベンチマーク(70以上)を表示してください。

Supported LMMs in VLMEvalKit Features を確認して、すべてのサポートされている LMMs(200以上)を表示してください。

Transformersバージョンの推奨事項:

特定のtransformerバージョンで一部のVLMが実行できない可能性があることに注意してください。各VLMを評価するために、以下の設定を推奨します:

  • transformers==4.33.0を使用してください: Qwenシリーズ, Monkeyシリーズ, InternLM-XComposerシリーズ, mPLUG-Owl2, OpenFlamingo v2, IDEFICSシリーズ, VisualGLM, MMAlaya, ShareCaptioner, MiniGPT-4シリーズ, InstructBLIPシリーズ, PandaGPT, VXVERSE, GLM-4v-9B.
  • transformers==4.37.0を使用してください: LLaVAシリーズ, ShareGPT4Vシリーズ, TransCore-M, LLaVA (XTuner), CogVLMシリーズ, EMU2シリーズ, Yi-VLシリーズ, MiniCPM-[V1/V2], OmniLMM-12B, DeepSeek-VLシリーズ, InternVLシリーズ, Cambrianシリーズ, VILA-VLシリーズ.
  • transformers==4.40.0を使用してください: IDEFICS2, Bunny-Llama3, MiniCPM-Llama3-V2.5, 360VL-70B, Phi-3-Vision, WeMM.
  • transformers==4.42.0を使用してください: AKI.
  • transformers==latestを使用してください: LLaVA-Nextシリーズ, PaliGemma-3B, Chameleon-VLシリーズ, Video-LLaVA-7B-HF, Ovis1.5シリーズ, Mantisシリーズ, MiniCPM-V2.6.
python
# デモ
from vlmeval.config import supported_VLM
model = supported_VLM['idefics_9b_instruct']()
# 単一画像のフォワード
ret = model.generate(['assets/apple.jpg', 'この画像には何がありますか?'])
print(ret)  # この画像には葉がついた赤いリンゴがあります。
# 複数画像のフォワード
ret = model.generate(['assets/apple.jpg', 'assets/apple.jpg', '提供された画像にはリンゴが何個ありますか?'])
print(ret)  # 提供された画像にはリンゴが2個あります。

🏗️ クイックスタート

クイックスタートガイドについては、クイックスタートを参照してください。

🛠️ 開発ガイド

カスタムベンチマーク、VLMsを開発するか、単にVLMEvalKitに他のコードを貢献する場合は、開発ガイドを参照してください。

コミュニティからの共有を奨励し、それに応じたクレジットを共有するために、次回のレポート更新では以下のことを実施します:

  • 全ての貢献に対して感謝の意を示します
  • 新しいモデル、評価セット、または主要な機能への3つ以上の主要な貢献を持つ貢献者は、テクニカルレポートの著者リストに加わることができます。適格な貢献者は、issueを作成するか、またはVLM評価キット ディスコードチャンネルで kennyutc にDMを送ることができます。私たちはそれに応じてフォローアップします。

🎯 VLMEvalKitの目標

このコードベースは以下を目的として設計されています:

  1. 研究者や開発者が既存のLVLMsを評価し、評価結果を簡単に再現できるようにするための使いやすい、オープンソースの評価ツールキットを提供します。
  2. VLMの開発者が自分のモデルを簡単に評価できるようにします。複数のサポートされているベンチマークでVLMを評価するには、単一のgenerate_inner()関数を実装するだけで、他のすべてのワークロード(データのダウンロード、データの前処理、予測の推論、メトリックの計算)はコードベースによって処理されます。

このコードベースは以下を目的として設計されていません:

  1. すべての第三者ベンチマークの元の論文で報告された正確な精度数値を再現すること。その理由は2つあります:
    1. VLMEvalKitは、すべてのVLMに対して生成ベースの評価を使用します(オプションでLLMベースの回答抽出を使用)。一方、一部のベンチマークは異なるアプローチを使用する場合があります(SEEDBenchはPPLベースの評価を使用します)。これらのベンチマークについては、対応する結果で両方のスコアを比較します。開発者には、コードベースで他の評価パラダイムをサポートすることをお勧めします。
    2. デフォルトでは、すべてのVLMに対して同じプロンプトテンプレートを使用してベンチマークを評価します。一方、一部のVLMには特定のプロンプトテンプレートがある場合があります(現時点ではコードベースでカバーされていない場合があります)。VLMの開発者には、現在カバーされていない場合でも、VLMEvalKitで独自のプロンプトテンプレートを実装することをお勧めします。これにより、再現性が向上します。

🖊️ 引用

この作業が役立つ場合は、このリポジトリに**スター🌟**を付けてください。サポートありがとうございます!

研究でVLMEvalKitを使用する場合、または公開されたオープンソースの評価結果を参照する場合は、以下のBibTeXエントリと、使用した特定のVLM/ベンチマークに対応するBibTexエントリを使用してください。

bib
@misc{duan2024vlmevalkit,
      title={VLMEvalKit: An Open-Source Toolkit for Evaluating Large Multi-Modality Models},
      author={Haodong Duan and Junming Yang and Yuxuan Qiao and Xinyu Fang and Lin Chen and Yuan Liu and Xiaoyi Dong and Yuhang Zang and Pan Zhang and Jiaqi Wang and Dahua Lin and Kai Chen},
      year={2024},
      eprint={2407.11691},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2407.11691},
}

🔝Top に戻る

2. Official Technical Reference & Guides (open-compass/docs)

Mintlify Starter Kit

Use the starter kit to get your docs deployed and ready to customize.

Click the green Use this template button at the top of this repo to copy the Mintlify starter kit. The starter kit contains examples with

  • Guide pages
  • Navigation
  • Customizations
  • API reference pages
  • Use of popular components

Follow the full quickstart guide

AI-assisted writing

Set up your AI coding tool to work with Mintlify:

bash
npx skills add https://mintlify.com/docs

This command installs Mintlify's documentation skill for your configured AI tools like Claude Code, Cursor, Windsurf, and others. The skill includes component reference, writing standards, and workflow guidance.

See the AI tools guides for tool-specific setup.

Development

Install the Mintlify CLI to preview your documentation changes locally. To install, use the following command:

text
npm i mint

Run the following command at the root of your documentation, where your docs.json is located:

text
mint dev

View your local preview at http://localhost:3000.

Publishing changes

Install our GitHub app from your dashboard to propagate changes from your repo to your deployment. Changes are deployed to production automatically after pushing to the default branch.

Need help?

Troubleshooting

  • If your dev environment isn't running: Run mint update to ensure you have the most recent version of the CLI.
  • If a page loads as a 404: Make sure you are running in a folder with a valid docs.json.

Resources