lmms-eval:加速大型多模态模型发展的评估套件

🏠 LMMs-Lab 主页 | 🎉 博客 | 📚 文档 | 🤗 Huggingface 数据集 | discord/lmms-eval

公告

  • [2024年7月] 🎉🎉 欢迎新任务 LongVideoBench、MMStar 和新模型 Mantis。
  • [2024年7月] 🎉🎉 我们发布了技术报告和 LiveBench!
  • [2024年7月] 👨‍💻👨‍💻 lmms-eval/v0.2.1 已升级,支持更多模型,包括 LongVA、InterVL-2、VILA,以及更多评估任务,例如 Details Captions、MLVU、WildVision-Bench、VITATECS 和 LLaVA-Interleave-Bench。
  • [2024年6月] 🎬🎬 lmms-eval/v0.2.0 已升级,支持对 LLaVA-NeXT Video 和 Gemini 1.5 Pro 等视频模型进行视频评估,涵盖 EgoSchema、PerceptionTest、VideoMME 等任务。更多详细信息请参阅博客。
  • [2024年3月] 📝📝 我们发布了 lmms-eval 的第一个版本,更多详细信息请参阅博客。

为何选择 lmms-eval?

当今时代,我们正朝着创造通用人工智能(AGI)的目标迈进,这与 20 世纪 60 年代登月计划的热情如出一辙。推动这一旅程的是先进的大型语言模型(LLMs)和大型多模态模型(LMMs),这些复杂的系统能够理解、学习和执行各种人类任务。

为了衡量这些模型的先进程度,我们使用各种评估基准。这些基准是帮助我们了解模型能力的工具,向我们展示了我们距离实现 AGI 有多近。

然而,寻找和使用这些基准是一项巨大的挑战。必要的基准和数据集分散在 Google Drive、Dropbox 以及不同的学校和研究实验室网站等各个地方。这就像一场寻宝游戏,但地图却散落在各处。

在语言模型领域,lm-evaluation-harness 的工作开创了一个宝贵的先例。他们提供了集成的模型和数据接口,支持快速评估语言模型,并作为 open-llm-leaderboard 的后端支持框架,逐渐成为基础模型时代的底层生态系统。

我们借鉴了 lm-evaluation-harness 精致高效的设计,推出了 lmms-eval,这是一个专为一致且高效地评估 LMM 而精心打造的评估框架。

安装

要正式使用,您可以通过运行以下命令从 PyPI 安装软件包:

pip install lmms-eval

要进行开发,您可以通过克隆存储库并运行以下命令来安装软件包:

git clone https://github.com/EvolvingLMMs-Lab/lmms-eval
cd lmms-eval
pip install -e .

如果您想测试 LLaVA,您需要从 LLaVA 克隆他们的存储库:

# 对于 LLaVA 1.5
# git clone https://github.com/haotian-liu/LLaVA
# cd LLaVA
# pip install -e .

# 对于 LLaVA-Next (1.6)
git clone https://github.com/LLaVA-VL/LLaVA-NeXT
cd LLaVA-NeXT
pip install -e .

复现 LLaVA-1.5 论文结果

您可以查看环境安装脚本和 torch 环境信息,以复现 LLaVA-1.5 论文的结果。我们发现 torch/cuda 版本的差异会导致结果略有不同,我们提供了在不同环境下检查结果的方法。

如果您想在 coco、refcoco 和 nocaps 等字幕数据集上进行测试,您需要安装 java==1.8.0,以便 pycocoeval API 正常工作。如果您没有安装,可以使用 conda 进行安装:

conda install openjdk=8

然后,您可以通过 java -version 命令检查您的 java 版本。

LLaVA 系列模型的综合评估结果

如下表所示,我们的目标是提供详细信息,帮助读者了解 lmms-eval 中包含的数据集以及有关这些数据集的一些具体细节(我们感谢读者在评估过程中提出的任何更正)。

我们提供了一个 Google 表格,其中包含 LLaVA 系列模型在不同数据集上的详细结果。您可以通过以下链接访问该表格:https://docs.google.com/spreadsheets/d/1LqWjH55v-jmRaOfro2zT7J5_tpscDm2g-TttdN2_zDg/edit?usp=sharing。这是一个实时更新的表格,我们会不断添加新的结果。

我们还提供了从 Weights & Biases 导出的原始数据,其中包含 LLaVA 系列模型在不同数据集上的详细结果。您可以通过以下链接访问原始数据:https://huggingface.co/datasets/lmms-lab/llava-eval-results

我们的开发将在主分支上继续进行,我们鼓励您就所需的功能以及如何进一步改进库提出反馈,或者在 GitHub 上的 issues 或 PR 中提出问题。

多种用途

  • 在 MME 上评估 LLaVA

    python3 -m accelerate.commands.launch \
        --num_processes=8 \
        -m lmms_eval \
        --model llava \
        --model_args pretrained="liuhaotian/llava-v1.5-7b" \
        --tasks mme \
        --batch_size 1 \
        --log_samples \
        --log_samples_suffix llava_v1.5_mme \
        --output_path ./logs/
    
  • 在多个数据集上评估 LLaVA

    python3 -m accelerate.commands.launch \
        --num_processes=8 \
        -m lmms_eval \
        --model llava \
        --model_args pretrained="liuhaotian/llava-v1.5-7b" \
        --tasks mme,mmbench_en \
        --batch_size 1 \
        --log_samples \
        --log_samples_suffix llava_v1.5_mme_mmbenchen \
        --output_path ./logs/
    

    对于其他 LLaVA 变体,请更改 model_args 中的 conv_template

    conv_templatelmms_eval/models/llava.py 中 LLaVA 初始化函数的一个参数,您可以在 LLaVA 的代码中找到相应的值,可能在 llava/conversations.py 中的 conv_templates 字典变量中。

    python3 -m accelerate.commands.launch \
        --num_processes=8 \
        -m lmms_eval \
        --model llava \
        --model_args pretrained="liuhaotian/llava-v1.6-mistral-7b,conv_template=mistral_instruct" \
        --tasks mme,mmbench_en \
        --batch_size 1 \
        --log_samples \
        --log_samples_suffix llava_v1.5_mme_mmbenchen \
        --output_path ./logs/
    
  • 评估更大的 LMMs (llava-v1.6-34b)

    python3 -m accelerate.commands.launch \
        --num_processes=8 \
        -m lmms_eval \
        --model llava \
        --model_args pretrained="liuhaotian/llava-v1.6-34b,conv_template=mistral_direct" \
        --tasks mme,mmbench_en \
        --batch_size 1 \
        --log_samples \
        --log_samples_suffix llava_v1.5_mme_mmbenchen \
        --output_path ./logs/
    
  • 使用一组配置进行评估,支持评估多个模型和数据集

    python3 -m accelerate.commands.launch --num_processes=8 -m lmms_eval --config ./miscs/example_eval.yaml
    
  • 评估视频模型 (llava-next-video-32B)

    accelerate launch --num_processes 8 --main_process_port 12345 -m lmms_eval \
        --model llavavid \
        --model_args pretrained=lmms-lab/LLaVA-NeXT-Video-32B-Qwen,conv_template=qwen_1_5,video_decode_backend=decord,max_frames_num=32,mm_spatial_pool_mode=average,mm_newline_position=grid,mm_resampler_location=after \
        --tasks videomme \
        --batch_size 1 \
        --log_samples \
        --log_samples_suffix llava_vid_32B \
        --output_path ./logs/
    
  • 使用简单的模型分片评估更大的模型 (llava-next-72b)

    python3 -m lmms_eval \
        --model=llava \
        --model_args=pretrained=lmms-lab/llava-next-72b,conv_template=qwen_1_5,device_map=auto,model_name=llava_qwen \
        --tasks=pope,vizwiz_vqa_val,scienceqa_img \
        --batch_size=1 \
        --log_samples \
        --log_samples_suffix=llava_qwen \
        --output_path="./logs/" \
        --wandb_args=project=lmms-eval,job_type=eval,entity=llava-vl
    
  • 使用 SGLang 评估更大的模型 (llava-next-72b)

    python3 -m lmms_eval \
    	--model=llava_sglang \
    	--model_args=pretrained=lmms-lab/llava-next-72b,tokenizer=lmms-lab/llavanext-qwen-tokenizer,conv_template=chatml-llava,tp_size=8,parallel=8 \
    	--tasks=mme \
    	--batch_size=1 \
    	--log_samples \
    	--log_samples_suffix=llava_qwen \
    	--output_path=./logs/ \
    	--verbosity=INFO
    

支持的模型

有关更多详细信息,请查看支持的模型

支持的任务

有关更多详细信息,请查看支持的任务

添加自定义模型和数据集

请参阅我们的文档

致谢

lmms_eval 是 lm-eval-harness 的一个分支。我们建议您通读 lm-eval-harness 的文档以获取相关信息。

以下是我们对原始 API 所做的更改:

  • 构建上下文现在仅传入 idx,并在模型响应阶段处理图像和文档。这是因为数据集现在包含大量图像,我们无法像原始的 lm-eval-harness 那样将它们存储在文档中,否则 CPU 内存会爆炸。
  • Instance.args (lmms_eval/api/instance.py) 现在包含一个要输入到 LMMs 的图像列表。
  • lm-eval-harness 支持所有 HF 语言模型作为单个模型类。目前,由于 HF 中 LMMs 的输入/输出格式尚未统一,因此无法做到这一点。因此,我们必须为每个 LMMs 模型创建一个新类。这并不理想,我们将在未来尝试统一它们。

在我们项目的初始阶段,我们要感谢:

  • Xiang Yue、Jingkang Yang、Dong Guo 和 Sheng Shen 参与了早期的讨论和测试。

在从 v0.1 到 v0.2 的过程中,我们要感谢来自拉取请求 (PR) 的社区支持:

详细信息请参阅 lmms-eval/v0.2.0 发行说明

数据集:

  • VCR:视觉字幕恢复(来自 MILA 的官方版本)
  • ConBench(来自北京大学/字节跳动的官方版本)
  • MathVerse(来自香港中文大学的官方版本)
  • MM-UPD(来自东京大学的官方版本)
  • WebSRC(来自 Hunter Heiden)
  • ScreeSpot(来自 Hunter Heiden)
  • RealworldQA(来自南洋理工大学的 Fanyi Pu)
  • 多语言 LLaVA-W(来自英属哥伦比亚大学的 Gagan Bhatia)

模型:

  • LLaVA-HF(来自 Huggingface 的官方版本)
  • Idefics-2(来自 lmms-lab 团队)
  • microsoft/Phi-3-Vision(来自微软的官方版本)
  • LLaVA-SGlang(来自 lmms-lab 团队)

引用

@misc{lmms_eval2024,
    title={LMMs-Eval: Accelerating the Development of Large Multimoal Models},
    url={https://github.com/EvolvingLMMs-Lab/lmms-eval},
    author={Bo Li*, Peiyuan Zhang*, Kaichen Zhang*, Fanyi Pu*, Xinrun Du, Yuhao Dong, Haotian Liu, Yuanhan Zhang, Ge Zhang, Chunyuan Li and Ziwei Liu},
    publisher    = {Zenodo},
    version      = {v0.1.0},
    month={March},
    year={2024}
}
### lmms-eval评估报告概述 lmms-eval的出现标志着多模态模型评估进入了一个新时代[^1]。这一工具提供了一套统一的标准来衡量不同类型的多模态学习模型的表现,从而提高了研究效率并促进了跨团队的合作与竞争。 #### 用户体验反馈 用户对于lmms-eval的整体评价积极正面。许多研究人员表示,这套新的评估体系使得比较各种模型变得更加直观简单,并且能够更好地识别出哪些特定领域内表现优异或是存在不足之处。此外,随着越来越多的研究人员参与到该平台上来开发新功能或改进现有算法,社区内的协作氛围也日益浓厚。 #### 技术细节与应用案例 具体来说,在实际操作过程中,lmms-eval通过一系列精心设计的任务来全面考察目标模型的各项技能。例如,在处理图像理解任务时,除了传统的分类准确性外,还会关注模型能否正确解释复杂的场景描述;而在自然语言处理方面,则会检验其是否具备足够的上下文感知能力和逻辑推理水平。这些细致入微的设计确保了最终得出的结果既具有广泛适用性又不失深度洞察力[^3]。 ```python # 示例代码展示如何使用lmms-eval库进行基本评估 import lmms_eval as le def evaluate_model(model, dataset): evaluator = le.Evaluator() results = evaluator.run_evaluation(model=model, data=dataset) return results['accuracy'], results['precision'] acc, prec = evaluate_model(my_multimodal_model, test_dataset) print(f"Accuracy: {acc}, Precision: {prec}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步子哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值