UMMevalKit 是一个面向**文生图(Text-to-Image)与图像编辑(Image Editing)**模型的统一评测框架。提供:
- 统一推理入口
run.py,同时支持 T2I 和 I2I 流水线 - 8 个 benchmark,覆盖生成质量、文本渲染、图像编辑、世界知识等多个维度
- 每个 benchmark 配备独立的可复现 shell 脚本(
scripts/infer_*.sh、scripts/eval_*.sh) - 统一的 LLM/VLM judge 层(
api/),支持 OpenAI 兼容 API 和本地模型 - 内置
torchrun多 GPU 分布式推理支持
conda create -n ummeval python=3.11
conda activate ummeval根据 CUDA 版本选择对应的 PyTorch:
# CUDA 12.4
pip install torch==2.6.0 torchvision==0.21.0 --index-url https://download.pytorch.org/whl/cu124
# CUDA 12.1
pip install torch==2.6.0 torchvision==0.21.0 --index-url https://download.pytorch.org/whl/cu121pip install -r requirements.txt核心依赖包括:
| 类别 | 关键包 | 推荐版本 |
|---|---|---|
| 深度学习 | torch |
2.6.0 |
torchvision |
0.21.0 | |
| Transformers | transformers |
4.51.3 |
diffusers |
0.38.0 | |
accelerate |
1.13.0 | |
| 数据处理 | datasets |
4.8.5 |
huggingface_hub |
0.36.2 | |
modelscope |
1.37+ | |
| API | openai |
2.38.0 |
不同 benchmark 需要不同的评测后端,可根据实际需求选择性安装:
# GenEval 评测需要
pip install mmcv==2.1.0 mmdet==3.3.0 open-clip-torch
# DPG-Bench 评测需要
pip install fairseq
# LeX-Bench / TIIF-Bench 评测需要
pip install paddleocr paddlepaddle-gpu
# OneIG-Bench 评测需要
pip install dreamsim flash-attn完整包版本列表见 environment/ummeval-key-packages.txt。
python main.py --init-config这会在项目根目录创建 config.yaml。编辑该文件,填入模型路径和 API 密钥。或者直接使用环境变量:
export CHEERS_CKPT_PATH="/path/to/Cheers/ckpt"
export BAGEL_CKPT_PATH="/path/to/BAGEL-7B-MoT"
export OPENAI_API_KEY="sk-your-key"
export OPENAI_BASE_URL="https://api.openai.com/v1"评测中用到的本地模型存放于 hf-models/ 目录下,首次评测前需要下载:
bash scripts/download_hf_models.sh # 全部 benchmark(约 30 GB)
bash scripts/download_hf_models.sh --subset geneval # 仅 GenEval
bash scripts/download_hf_models.sh --subset dpg # 仅 DPG-Bench下载脚本优先使用 ModelScope(国内可直接访问),自动回退到
hf-mirror.com镜像。
文生图 benchmark 的 prompt 数据已内置在仓库中。图像编辑 benchmark 需要额外下载源图像:
bash scripts/prepare_data.sh --subset imgedit # ImgEdit 源图像
bash scripts/prepare_data.sh --subset gedit # GEdit-Bench Arrow 数据集# 单 GPU 推理
python main.py --model cheers --data geneval --mode infer
# 多 GPU 分布式推理
CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc-per-node=4 main.py \
--model cheers --data geneval --mode infer推理结果写入 infer_outputs/<模型名>/<数据集名>/<eval_id>/。
python main.py --model cheers --data geneval --mode eval评测结果写入 eval_result/<模型名>/<benchmark名>/<eval_id>/。
main_fast.py 提供一个精简入口,默认只跑 geneval 的前 100 条 prompt,用于验证 pipeline 是否跑通:
python main_fast.py --model cheers # GenEval, 100 条
python main_fast.py --model cheers --data geneval dpg # 多个 benchmark
python main_fast.py --model cheers --max-samples 50 # 指定条数输出目录自动添加 fast- 前缀,便于与正式运行区分。
UMMevalKit/
├── main.py # 统一入口(配置感知)
├── main_fast.py # 快速验证入口(默认 100 条)
├── config.example.yaml # 配置文件模板
├── run.py # 核心推理引擎
├── requirements.txt # Python 依赖
├── MLLM/ # 被测模型 wrapper
│ ├── __init__.py # build_model() 工厂函数
│ ├── base_eval_model.py # 抽象基类
│ ├── cheers.py # Cheers wrapper
│ ├── bagel.py # BAGEL-7B-MoT wrapper
│ └── Bagel/ # BAGEL 上游源码
├── benchmarks/ # Benchmark 数据集与评测实现
│ ├── __init__.py # Dataset_eval 注册表
│ ├── model_paths.py # 评测用本地模型路径配置
│ ├── geneval/ # GenEval
│ ├── dpg/ # DPG-Bench
│ ├── imgedit/ # ImgEdit-Bench
│ ├── gedit/ # GEdit-Bench
│ ├── LeX_Art/ # LeX-Bench
│ ├── OneIG_Benchmark/ # OneIG-Bench
│ ├── TIIF_Bench/ # TIIF-Bench
│ └── wise/ # WISE
├── api/ # LLM/VLM judge 统一调用层
│ ├── judge.py # JudgeClient 实现
│ └── judge_config.py # Judge 注册与配置
├── scripts/ # Shell 入口脚本
│ ├── infer_*.sh / eval_*.sh # 各 benchmark 的推理/评测脚本
│ ├── download_hf_models.sh # 评测模型下载器
│ ├── prepare_data.sh # Benchmark 数据下载器
│ ├── _infer_utils.sh # 公共工具函数
│ ├── _infer_launcher.sh # 推理启动器
│ └── _eval_launcher.sh # 评测启动器
├── environment/ # 环境依赖文档
├── hf-models/ # 评测模型存放目录(下载后生成,gitignored)
├── infer_outputs/ # 推理输出(gitignored)
├── eval_result/ # 评测结果(gitignored)
└── logs/ # 运行日志(gitignored)
| 模型 | T2I | I2I | CFG | Alpha | Steps | 备注 |
|---|---|---|---|---|---|---|
| Cheers | ✓ | ✓ | text/image, interval, renorm (global/channel) | ✓ | ✓ | — |
| BAGEL-7B-MoT | ✓ | ✓ | text/image, interval, renorm (global/channel/text_channel) | timestep_shift | num_timesteps | — |
详细参数说明见 MLLM/README.md。
共 8 个 benchmark,全部通过 run.py 进行推理,通过 scripts/eval_*.sh 进行评测。
| Benchmark | 类型 | 评测方式 | 需要 API Key? | 评测模型 |
|---|---|---|---|---|
| GenEval | 文生图 | 目标检测 + CLIP 分类 | 否 | Mask2Former, OpenCLIP |
| DPG-Bench | 文生图 | VQA + 依赖图 | 否 | mPLUG |
| ImgEdit-Bench | 图像编辑 | LLM/VLM judge 打分 | 是 | — |
| GEdit-Bench | 图像编辑 | VIEScore (LLM/VLM judge) | 是 | — |
| LeX-Bench | 文生图 (文本生成) | OCR + 美学 + LLM judge | 部分 (color/font) | PaddleOCR, one-align |
| OneIG-Bench | 文生图 | 5 维度 metric 组合 | 否* | CLIP, LLM2CLIP, CSD, DINO, DreamSim, StyleEncoder |
| TIIF-Bench | 文生图 (文本遵循) | VLM judge + OCR | 是 (VLM 模式) | PaddleOCR |
| WISE | 文生图 (世界知识) | VLM judge 二值评分 | 是 | — |
* OneIG 的 Qwen2.5-VL 默认走 API;设置 ONEIG_USE_API=0 可切换到本地推理。
类型:文生图
概述:评估生成图像是否满足结构化 prompt 中描述的对象、数量、颜色和空间关系。每个 prompt 被分解为一组 include/exclude 约束子句。
评测流程:
- Mask2Former(Swin-S backbone,COCO 预训练)对生成图像进行实例分割和目标检测。
- OpenCLIP ViT-L/14 对检测到的物体区域进行零样本颜色分类。
- 将检测结果与约束规则逐一比对(物体类别、数量、颜色属性、空间位置),判定每张图是否为 correct(soft correctness)。
- Overall score = 6 类任务(single object, two object, counting, colors, position, color attribute)正确率的平均值。
变体:geneval(short,553 条 prompt)、geneval_long(long,553 条复杂 prompt)
输出:geneval_results.txt — 各任务及 Overall 正确率。
类型:文生图
概述:DPG-Bench(Dense Proposition Graph)将每个 prompt 细粒度地拆分为多个命题问题(proposition),问题之间存在依赖关系(dependency DAG),评估生成图像对复杂语义的遵循程度。
评测流程:
- 每个 prompt 被拆成多个 proposition question(如"图中是否有猫?""猫是否在桌子上?"),标注了父子依赖关系。
- 将生成的 2×2 图像网格裁剪为 4 张独立图像,使用 mPLUG VQA 模型对每张图回答所有命题的 yes/no 问题。
- 依赖传播:父命题答案为 no 时,子命题分数强制置零。
- DPG-Bench score = 全部命题 yes 回答比例的聚合分数。
输出:按 L1/L2 类别的 DPG-Bench 分数。
类型:图像编辑
概述:评估单轮图像编辑质量。给定原图 + 编辑指令,被测模型生成编辑后的图像,由 LLM/VLM judge 从多个子维度进行 1-5 分评分。
评测流程:
- 覆盖 8 种编辑类型(背景替换、物体添加/删除/替换、颜色/纹理/风格编辑、视角变换等)。
- 将 [原图, 编辑图, 编辑指令] 发送给 judge,对多个子维度给出 1-5 分。
step1_get_avgscore.py聚合每个样本的分维度分数,step2_typescore.py按编辑类型聚合。
数据:源图像通过 scripts/prepare_data.sh --subset imgedit 从 sysuyy/ImgEdit 下载。
默认 judge:gpt4.1
输出:JSONL 结果文件 + 按编辑类型聚合的分数。
类型:图像编辑
概述:基于 VIEScore 框架的通用图像编辑评测,同时评估语义一致性和图像质量。支持中英文编辑指令。
评测流程:
- 覆盖 11 个编辑组(background_change, color_alter, material_alter, motion_change, ps_human, style_change, subject-add/remove/replace, text_change, tone_transfer)。
- VIEScore:judge 接收 [原图, 编辑图, 指令],返回:
semantics_score— 编辑后图像与指令的语义一致性quality_score— 编辑后图像的视觉质量overall_score = sqrt(semantics × quality)
calculate_statistics.py按编辑组和语言聚合。
数据:Arrow 格式数据集 stepfun-ai/GEdit-Bench,通过 scripts/prepare_data.sh --subset gedit 下载。
默认 judge:gpt4o
输出:按编辑组的 CSV 分数文件 + 统计总表。
类型:文生图(文本生成图像)
概述:专门评估文本生成图像(text-rich image generation)的文本准确性、美学质量、位置控制、颜色和字体遵循度。支持 easy/medium/hard 三个难度等级。
评测流程:
- PaddleOCR(检测 + 识别 + 方向分类)从生成图像中提取文字及其 bounding box。
- PNED & Recall:识别文字与期望文字之间的位置无关归一化编辑距离和召回率。
- One-align:美学质量和图像质量评分。
- 位置准确率:基于 OCR bounding box 判断文字是否位于 prompt 指定的位置。
- 颜色与字体:裁剪 OCR 检测到的文字区域,发送给 LLM judge 判断颜色和字体是否与 prompt 一致。
summarize_lex_results.py汇总 7 项指标:PNED、Recall、Quality、Aesthetic、Position Acc、Color Acc、Font Acc。
默认 judge:gpt4.1(仅 color/font 指标使用)
输出:按 difficulty 和 prompt type 拆分的汇总表。
类型:文生图
概述:六维度综合评估 T2I 生成质量,覆盖语义对齐、文本渲染、风格、推理能力和多样性。支持英文和中文。
评测维度(5 个独立 metric):
| Metric | 方法 | 评测模型 |
|---|---|---|
| Alignment | Qwen2.5-VL 对语义问题回答 yes/no,按依赖关系过滤后取平均正确率 | Qwen2.5-VL (API) |
| Text | Qwen2.5-VL OCR 输出文本,计算 ED(编辑距离)、CR(字符率)、WAC(词准确率),综合为 text score | Qwen2.5-VL (API) |
| Style | CSD 风格编码器 + OneIG StyleEncoder 分别提取风格 embedding,与参考风格 embedding 计算余弦相似度 | CSD, OneIG-StyleEncoder |
| Reasoning | LLM2CLIP 计算答案文本与生成图像之间的跨模态相似度 | LLM2CLIP-OpenAI, LLM2CLIP-Llama |
| Diversity | DreamSim 计算同一 prompt 生成的 4 张图像之间的 pairwise distance | DreamSim |
每个 prompt 生成 4 张图并拼成 2×2 grid,按类别(anime, human, object, text, reasoning, multilingualism)组织输出。
Qwen2.5-VL 默认通过 API 调用。设置
ONEIG_USE_API=0可强制使用本地模型。
输出:按维度、按类别的 CSV 分数文件。
类型:文生图(文本遵循)
概述:TIIF-Bench(Text-Integrated Image Following)评估 T2I 模型对短/长文本指令的遵循程度,每个 prompt 都配有细粒度的 binary evaluation question。
评测流程:
- VLM 模式:judge 对每张生成图像提出多个 fine-grained evaluation question 进行 yes/no 判断,与标准答案比对得到 accuracy。
- OCR 模式:PaddleOCR 检测识别图像中文字,计算 GNED(Global Normalized Edit Distance)和 Recall。
- 按 attribute、dimension group(Basic, Advanced, Real World, Art 等)、short/long 分别汇总。
变体:test(完整集)/ testmini(子集),× short / long prompt 类型。
默认 judge:gpt4o
输出:按 attribute/type/dimension 的 accuracy 表 + GNED/Recall。
类型:文生图(世界知识)
概述:WISE(World Knowledge-Informed Semantic Evaluation)评估 T2I 模型对世界知识的理解和整合能力。Prompt 是间接的、需要推理的(如 "The plant often gifted on Mother's Day" → 模型需推理出是康乃馨)。
评测流程:
- 1000 个 prompt,覆盖 3 大领域 25 个子类别:
- 文化常识:节日、运动、宗教、工艺品、建筑、动物、植物、艺术、名人、日常生活
- 时空推理:横向/纵向时间推理、不同视角、地理关系、相对位置
- 自然科学:生物学、物理学、化学
- VLM judge 对 [图像, prompt, 解释] 进行 二值 0/1 评分。
- 按 6 个 category 分组计算 accuracy,加权得到 Overall:文化 0.40、时间 0.12、空间 0.12、生物 0.12、物理 0.12、化学 0.12。
默认 judge:qwen35_35b
输出:wise_scores.jsonl(逐样本分数)+ wise_summary.json(汇总)。
LLM/VLM judge 通过统一的 api.create_judge() 接口调用,支持远程 API 和本地模型两种后端。
| Judge Key | 后端模型 | 支持视觉 |
|---|---|---|
gpt4.1 |
gpt-4.1 | ✓ |
gpt4o |
gpt-4o | ✓ |
gpt-4-turbo |
gpt-4-turbo | ✓ |
qwen35_35b |
qwen3.5-35b-a3b | ✓ |
qwen25vl |
qwen3.5-35b-a3b(API 模式) | ✓ |
| Judge Key | 实现方式 | 支持视觉 |
|---|---|---|
qwen25vl |
Qwen2.5-VL-7B-Instruct(设置 ONEIG_USE_API=0) |
✓ |
| Benchmark | 默认 Judge | 是否必需 |
|---|---|---|
| ImgEdit-Bench | gpt4.1 |
是 |
| GEdit-Bench | gpt4o |
是 |
| LeX-Bench | gpt4.1 |
部分(仅 color/font) |
| TIIF-Bench | gpt4o |
VLM 模式需要 |
| WISE | qwen35_35b |
是 |
GenEval、DPG-Bench、OneIG-Bench 不需要 API judge,完全使用本地评测模型。
配置方式见 配置参考 及 api/README.md。
# 单 GPU
python main.py --model cheers --data geneval --mode infer
# 多 GPU
CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc-per-node=4 main.py \
--model cheers --data geneval --mode infer推理引擎根据 dataset.datatype() 自动分发:
"gen"(文生图)→model.gen_t2i(prompt, batchsize, dataset_name)"edit"(图像编辑)→model.gen_i2i(prompt, input_images, batchsize, dataset_name)
bash scripts/eval_geneval.sh # 编辑脚本头部设置 MODEL_NAME, EVAL_ID| Benchmark | 推理脚本 | 评测脚本 | --data 示例 |
|---|---|---|---|
| GenEval | infer_geneval.sh |
eval_geneval.sh |
geneval, geneval_long |
| DPG-Bench | infer_dpg.sh |
eval_dpg.sh |
dpg |
| ImgEdit | infer_imgedit.sh |
eval_imgedit.sh |
imgedit |
| GEdit | infer_gedit.sh |
eval_gedit.sh |
gedit |
| LeX-Bench | infer_lex.sh |
eval_lex.sh |
lex_easy_simple, lex_easy_enhanced, … |
| OneIG | infer_oneig.sh |
eval_oneig.sh |
OneIG-EN, OneIG-ZH, … |
| TIIF | infer_tiif.sh |
eval_tiif.sh |
tiif_test_short, tiif_testmini_long, … |
| WISE | infer_wise.sh |
eval_wise.sh |
wise |
| 参数 | 说明 |
|---|---|
MODEL_NAME |
模型名:cheers 或 BAGEL-7B-MoT |
MODEL_PATH |
模型权重路径(为空时使用 wrapper 默认值) |
CFG |
CFG scale:数字、None 或 {"text": 7.5, "image": 1.5} |
ALPHA |
Alpha 参数 |
STEPS |
推理步数 |
CFG_INTERVAL |
CFG 区间(如 "0.0 0.6") |
CFG_RENORM |
CFG renorm 模式(global / channel / text_channel) |
EVAL_ID |
设为空则自动新建;填入已有 ID 可复用输出目录 |
SKIP_COMPLETED |
开启后跳过已生成的样本(断点续跑) |
GPUS / NPROC |
GPU 和进程数配置 |
# config.yaml
model_paths:
cheers_ckpt: "/path/to/Cheers/ckpt"
bagel_ckpt: "/path/to/BAGEL-7B-MoT"
bench_models_root: "./hf-models" # 评测模型根目录或通过环境变量:CHEERS_CKPT_PATH、BAGEL_CKPT_PATH、BENCH_KIT_MODELS。
judge:
default_api_key: "sk-your-key"
default_base_url: "https://api.openai.com/v1"或通过环境变量:OPENAI_API_KEY、OPENAI_BASE_URL。
benchmark_data:
gedit_data_dir: "./benchmarks/gedit/edit_data"
wise_data_path: "./benchmarks/wise/prompts/final_data.json"
geneval_data_root: "./benchmarks/geneval/prompts"
dpg_bench_csv: "./benchmarks/dpg/dpg_bench.csv"
tiif_data_root: "./benchmarks/TIIF_Bench/data"
oneig_data_root: "./benchmarks/OneIG_Benchmark/OneIG-Bench"所有路径均默认指向 benchmarks/ 下的内置数据,仅在需要自定义路径时覆盖。
各评测模型的路径在 benchmarks/model_paths.py 中统一配置,默认根目录为 ./hf-models/,可通过 BENCH_KIT_MODELS 环境变量覆盖。
- 在
MLLM/下创建新的 wrapper 文件,继承BaseEvalModel。 - 实现
gen_t2i()、gen_i2i()、build_prompt()等方法。 - 在
MLLM/__init__.py的_load_model_class()中注册。 - 如需新增配置项,在
config.example.yaml和main.py中添加对应映射。
- 在
benchmarks/下创建新目录,实现 dataset wrapper(提供datatype()、__getitem__()、gen_num_images()、output_form())。 - 在
benchmarks/__init__.py的Dataset_eval字典中注册。 - 编写评测代码和对应的
scripts/eval_*.sh脚本。 - 如需本地评测模型,将其路径添加到
benchmarks/model_paths.py。 - 如需下载外部数据,在
scripts/prepare_data.sh中添加下载函数。
- 在
api/judge.py中(或新建文件)实现JudgeClient接口。 - 在
api/judge_config.py中注册。
本项目基于 MIT License 发布。
各 benchmark 和评测模型受其各自许可证约束,详见各 benchmark 目录及模型下载页面的说明。