Skip to content

Latest commit

 

History

History
353 lines (301 loc) · 24 KB

README-CN.md

File metadata and controls

353 lines (301 loc) · 24 KB

VCR: 视觉字幕恢复

Tianyu Zhang†, Suyuchen Wang†, Lu Li, Ge Zhang, Perouz Taslakian, Sai Rajeswar, Jie Fu, Bang Liu, Yoshua Bengio

† 共同第一作者

arXiv Static Badge Static Badge

English Readme

VCR-Wiki-zh-easy

新闻

  • 🔥🔥🔥 [2024-07-14] 我们已经将VCR-wiki评估过程整合进VLMEvalKitlmms-eval框架中。现在,用户可以通过一行命令运行模型在VCR-wiki测试数据集上的评估。
  • 🔥🔥🔥 [2024-06-24] 我们更新了arXiv论文。现在,论文中包括了Claude 3.5 Sonnet、Claude 3 Opus、GPT-4o、GPT-4-Turbo、Qwen-VL-Max、Reka Core和Gemini-1.5-pro的评估结果。评估脚本也已发布,请查看src/evaluation/closed_source_eval.py
  • 🔥🔥🔥 [2024-06-15] 我们发布了torch中的VCR变换,使得给定任意图像-文本对,我们可以生成包含文本的VCR图像。此变换可以作为VLMs中的预训练任务之一使用。
  • 🔥🔥🔥 [2024-06-13] 我们发布了开源模型、闭源模型的评估代码以及创建数据集的流水线。
  • 🔥🔥🔥 [2024-06-11] 我们的论文已在arXiv发布,包含了一系列模型的评估结果。
  • 🔥🔥🔥 [2024-06-10] 我们已经发布了VCR-wiki数据集,该数据集包含来自维基百科的211万个英文实体和346万个中文实体,提供易难两种变体。数据集可在Hugging Face数据集库中获取。

快速开始

pip install datasets
from datasets import load_dataset
# 加载英文简单模式数据集
dataset = load_dataset("vcr-org/VCR-wiki-en-easy")
# 加载英文难模式数据集
dataset = load_dataset("vcr-org/VCR-wiki-en-hard")
# 加载中文简单模式数据集
dataset = load_dataset("vcr-org/VCR-wiki-zh-easy")
# 加载中文难模式数据集
dataset = load_dataset("vcr-org/VCR-wiki-zh-hard")

for obs in dataset['train']: # 或 'validation' 或 'test'
    # 在此处编写你的代码

数据集列表

数据集 HF下载链接 魔搭下载链接
100 测试子集
  • 🤗vcr-org/VCR-wiki-en-easy-test-100
  • 🤗vcr-org/VCR-wiki-en-hard-test-100
  • 🤗vcr-org/VCR-wiki-zh-easy-test-100
  • 🤗vcr-org/VCR-wiki-zh-hard-test-100
  • vcr-org/VCR-wiki-en-easy-test-100
  • vcr-org/VCR-wiki-en-hard-test-100
  • vcr-org/VCR-wiki-zh-easy-test-100
  • vcr-org/VCR-wiki-zh-hard-test-100
  • 500 测试子集
  • 🤗vcr-org/VCR-wiki-en-easy-test-500
  • 🤗vcr-org/VCR-wiki-en-hard-test-500
  • 🤗vcr-org/VCR-wiki-zh-easy-test-500
  • 🤗vcr-org/VCR-wiki-zh-hard-test-500
  • vcr-org/VCR-wiki-en-easy-test-500
  • vcr-org/VCR-wiki-en-hard-test-500
  • vcr-org/VCR-wiki-zh-easy-test-500
  • vcr-org/VCR-wiki-zh-hard-test-500
  • 5000 (完整) 测试集
  • 🤗vcr-org/VCR-wiki-en-easy-test
  • 🤗vcr-org/VCR-wiki-en-hard-test
  • 🤗vcr-org/VCR-wiki-zh-easy-test
  • 🤗vcr-org/VCR-wiki-zh-hard-test
  • vcr-org/VCR-wiki-en-easy-test
  • vcr-org/VCR-wiki-en-hard-test
  • vcr-org/VCR-wiki-zh-easy-test
  • vcr-org/VCR-wiki-zh-hard-test
  • 训练验证测试 (完整) 集
  • 🤗vcr-org/VCR-wiki-en-easy
  • 🤗vcr-org/VCR-wiki-en-hard
  • 🤗vcr-org/VCR-wiki-zh-easy
  • 🤗vcr-org/VCR-wiki-zh-hard
  • vcr-org/VCR-wiki-en-easy
  • vcr-org/VCR-wiki-en-hard
  • vcr-org/VCR-wiki-zh-easy
  • vcr-org/VCR-wiki-zh-hard
  • 在论文中,我们使用 500 个测试子集对封闭源模型进行评估,使用 5000 个测试子集对开放源模型进行评估。100 测试子集用于人工评估。

    介绍

    我们呈现了VCR-wiki,这是一个为视觉字幕恢复(VCR)任务设计的数据集。

    请参阅下方我们的主要图例,了解VCR任务的概述。

    VCR-Wiki Logo

    VCR挑战模型恢复图像内部分被遮挡的文本,利用像素级提示和上下文线索。不同于传统的基于文本的任务,VCR需要对 视觉图像(VI)字符串文本(ST)嵌入图像的文本(TEI) 进行协同理解与对齐。我们通是通过全自动的方式的合成图像-字幕文本对,其难度可调节。以下展示了创建数据集的,我们将很快发布创建数据集的代码。我们开源了全自动合成合成图像-字幕文本对的脚本以及合成数据集的代码以及torch框架下的VCR变换。这个变换函数可以被用在VLMs的预训练任务中。

    VCR-pipeline

    VCR-wiki包含211万英文和34.6万中文样例,其来源于维基百科。我们提供了易和难两个版本。初步结果表明,当前的视觉语言模型在该任务上与人类表现相比差距明显。

    Benchmark

    EM 表示 "完全匹配",Jaccard 表示 "Jaccard 相似度"。封闭源代码和开放源代码中的最佳结果以粗体标出。闭源模型基于 500 个测试样本进行评估,而开源模型基于 5000 个测试样本进行评估。

    请注意,我们的基准和数据数据集正式面向公众的时间为2024年6月24日。

    Model Size (unknown for closed source) Released date (MMDDYY) En Easy EM En Easy Jaccard En Hard EM En Hard Jaccard Zh Easy EM Zh Easy Jaccard Zh Hard EM Zh Hard Jaccard
    Claude 3 Opus - 030424 62.0 77.67 37.8 57.68 0.9 11.5 0.3 9.22
    Claude 3.5 Sonnet - 062024 63.85 74.65 41.74 56.15 1.0 7.54 0.2 4.0
    GPT-4 Turbo - 040924 78.74 88.54 45.15 65.72 0.2 8.42 0.0 8.58
    GPT-4V - 012524 52.04 65.36 25.83 44.63 - - - -
    GPT-4o - 051324 91.55 96.44 73.2 86.17 14.87 39.05 2.2 22.72
    GPT-4o-mini - 071824 83.60 87.77 54.04 73.09 1.10 5.03 0 2.02
    Gemini 1.5 Pro - 051524 62.73 77.71 28.07 51.9 1.1 11.1 0.7 11.82
    Gemini 2 Flash Exp - 121124 40.62 73.93 16.65 47.05 10.88 33.48 0.7 11.64
    Gemini 2 Flash Thinking Exp - 121124 24.60 55.99 8.70 40.32 4.09 23.44 0.4 14.20
    Qwen-VL-Max - 082223 76.8 85.71 41.65 61.18 6.34 13.45 0.89 5.4
    Reka Core - 041624 66.46 84.23 6.71 25.84 0.0 3.43 0.0 3.35
    Cambrian-1 34B 062524 79.69 89.27 27.20 50.04 0.03 1.27 0.00 1.37
    Cambrian-1 13B 062524 49.35 65.11 8.37 29.12 - - - -
    Cambrian-1 8B 062524 71.13 83.68 13.78 35.78 - - - -
    CogVLM 17B 092823 73.88 86.24 34.58 57.17 - - - -
    CogVLM2 19B 051324 83.25 89.75 37.98 59.99 9.15 17.12 0.08 3.67
    CogVLM2-Chinese 19B 051324 79.90 87.42 25.13 48.76 33.24 57.57 1.34 17.35
    DeepSeek-VL 1.3B 051324 23.04 46.84 0.16 11.89 0.0 6.56 0.0 6.46
    DeepSeek-VL 7B 051324 38.01 60.02 1.0 15.9 0.0 4.08 0.0 5.11
    DocOwl-1.5-Omni 8B 053124 0.84 13.34 0.04 7.76 0.0 1.14 0.0 1.37
    GLM-4v 9B 060424 43.72 74.73 24.83 53.82 31.78 52.57 1.20 14.73
    Idefics2 8B 041524 15.75 31.97 0.65 9.93 - - - -
    InternLM-XComposer2-VL 7B 012524 46.64 70.99 0.7 12.51 0.27 12.32 0.07 8.97
    InternLM-XComposer2-VL-4KHD 7B 040924 5.32 22.14 0.21 9.52 0.46 12.31 0.05 7.67
    InternLM-XComposer2.5-VL 7B 051924 41.35 63.04 0.93 13.82 0.46 12.97 0.11 10.95
    InternVL-V1.5 26B 041824 14.65 51.42 1.99 16.73 4.78 26.43 0.03 8.46
    InternVL-V2 26B 070324 74.51 86.74 6.18 24.52 9.02 32.50 0.05 9.49
    InternVL-V2 40B 070824 84.67 92.64 13.10 33.64 22.09 47.62 0.48 12.57
    InternVL-V2 76B 071524 83.20 91.26 18.45 41.16 20.58 44.59 0.56 15.31
    InternVL-V2-Pro - - 77.41 86.59 12.94 35.01 19.58 43.98 0.84 13.97
    MiniCPM-V2.5 8B 051924 31.81 53.24 1.41 11.94 4.1 18.03 0.09 7.39
    MiniCPM-V2.6 8B 080424 73.88 85.71 4.72 19.76 10.18 23.61 0.26 7.51
    Monkey 7B 112223 50.66 67.6 1.96 14.02 0.62 8.34 0.12 6.36
    Phi-3.5-V 7B 082124 39.27 60.40 0.90 15.00 - - - -
    Qwen-VL 7B 082023 49.71 69.94 2.0 15.04 0.04 1.5 0.01 1.17
    Qwen2-VL 7B 082824 89.70 93.84 74.32 85.47 59.94 76.95 18.33 43.55
    Qwen2-VL 72B 091724 91.30 94.64 69.87 71.70 65.38 74.08 15.30 27.35
    Yi-VL 34B 011824 0.82 5.59 0.07 4.31 0.0 4.44 0.0 4.12
    Yi-VL 6B 011724 0.75 5.54 0.06 4.46 0.00 4.37 0.00 4.0
    Ovis1.6-Gemma2 9B 091824 58.74 79.20 3.49 21.74 - - - -
    Ovis1.6-Gemma2 27B 091824 64.58 81.06 5.02 25.49 - - - -
    Ovis1.6-Llama3.2 3B 101624 45.80 66.94 2.28 18.05 - - - -

    模型评估

    方法1:使用评估脚本

    开源评估

    我们支持的开源模型_id:

    ["openbmb/MiniCPM-Llama3-V-2_5",
    "openbmb/MiniCPM-V-2_6",
    "OpenGVLab/InternVL-Chat-V1-5",
    "internlm/internlm-xcomposer2-vl-7b",
    "internlm/internlm-xcomposer2-4khd-7b",
    "internlm/internlm-xcomposer2d5-7b",
    "HuggingFaceM4/idefics2-8b",
    "Qwen/Qwen-VL-Chat",
    "Qwen/Qwen2-VL-2B-Instruct",
    "Qwen/Qwen2-VL-7B-Instruct",
    "Qwen/Qwen2-VL-72B-Instruct",
    "THUDM/cogvlm2-llama3-chinese-chat-19B",
    "THUDM/cogvlm2-llama3-chat-19B",
    "THUDM/cogvlm-chat-hf",
    "echo840/Monkey-Chat",
    "THUDM/glm-4v-9b",
    "nyu-visionx/cambrian-phi3-3b",
    "nyu-visionx/cambrian-8b",
    "nyu-visionx/cambrian-13b",
    "nyu-visionx/cambrian-34b",
    "microsoft/Phi-3.5-vision-instruct",
    "OpenGVLab/InternVL2-1B",
    "OpenGVLab/InternVL2-2B",
    "OpenGVLab/InternVL2-4B",
    "OpenGVLab/InternVL2-8B",
    "OpenGVLab/InternVL2-26B",
    "OpenGVLab/InternVL2-40B"
    "OpenGVLab/InternVL2-Llama3-76B",
    "AIDC-AI/Ovis1.6-Gemma2-9B",
    "AIDC-AI/Ovis1.6-Gemma2-27B",
    "AIDC-AI/Ovis1.6-Gemma2-27B",
    "mistralai/Pixtral-12B-2409",
    "meta-llama/Llama-3.2-11B-Vision-Instruct",
    "meta-llama/Llama-3.2-90B-Vision-Instruct"
    "deepseek-ai/deepseek-vl2",
    "deepseek-ai/deepseek-vl2-small",
    ]

    对于未在列表中的模型,它们未与huggingface集成,请参考它们的github仓库创建评估流程。

    pip install -r requirements.txt
    # 我们以 Hugging FaceM4/idefics2-8b 模型为例
    cd src/evaluation
    # 评估结果并将评估指标保存为 {model_id}_{difficulty}_{language}_evaluation_result.json
    python3 evaluation_pipeline.py --dataset_handler "vcr-org/VCR-wiki-en-easy-test" --model_id HuggingFaceM4/idefics2-8b --device "cuda" --output_path . --bootstrap --end_index 5000

    对于像 "OpenGVLab/InternVL2-Llama3-76B" 这样的大型模型,你可能需要使用多个 GPU 来进行评估。你可以将 --device 设置为 None 以使用所有可用的 GPU。

    闭源模型评估

    我们提供了闭源模型评估脚本,位于 src/evaluation/closed_source_eval.py

    你需要一个 API Key、一个预先保存的测试数据集,并指定保存论文数据的路径

    pip install -r requirements.txt
    cd src/evaluation
    # [下载图片以在本地推理选项1] 使用 huggingface 的脚本将测试数据集保存到指定路径
    python3 save_image_from_dataset.py --output_path .
    # [下载图片以在本地推理选项2] 使用 github 仓库将测试数据集保存到指定路径
    # 以 en-easy-test-500 为例
    git clone https://github.com/tianyu-z/VCR-wiki-en-easy-test-500.git
    
    # 如果你想通过本地上传图像推理,请通过 --image_path "path_to_image" 指定图片路径,否则,脚本将从 github 仓库流式传输图片
    python3 closed_source_eval.py --model_id gpt4o --dataset_handler "VCR-wiki-en-easy-test-500" --api_key "Your_API_Key"
    
    # 评估结果并将评估指标保存为 {model_id}_{difficulty}_{language}_evaluation_result.json
    python3 evaluation_metrics.py --model_id gpt4o --output_path . --json_filename "gpt4o_en_easy.json" --dataset_handler "vcr-org/VCR-wiki-en-easy-test"
    
    # 获取 `jsons_path` 中所有 `{model_id}_{difficulty}_{language}_evaluation_result.json` 的平均分数(如果使用 `--bootstrap`,则会保存标准差以及置信区间)的评估指标
    python3 gather_results.py --jsons_path .

    以下是中文翻译:

    方法2:使用 VLMEvalKit 框架

    如果 VLMEvalKit 框架不支持您的模型的推理方法,您可能需要将其整合进去。详情请参考这里

    git clone https://github.com/open-compass/VLMEvalKit.git
    cd VLMEvalKit
    # 我们以 HuggingFaceM4/idefics2-8b 和 VCR_EN_EASY_ALL 为例
    python run.py --data VCR_EN_EASY_ALL --model idefics2_8b --verbose

    您可以在这里找到支持的模型列表。

    VLMEvalKit 支持以下 VCR --data 设置:

    • 英语
      • 简单
        • VCR_EN_EASY_ALL(完整测试集,5000个实例)
        • VCR_EN_EASY_500(VCR_EN_EASY_ALL设置中的前500个实例)
        • VCR_EN_EASY_100(VCR_EN_EASY_ALL设置中的前100个实例)
      • 困难
        • VCR_EN_HARD_ALL(完整测试集,5000个实例)
        • VCR_EN_HARD_500(VCR_EN_HARD_ALL设置中的前500个实例)
        • VCR_EN_HARD_100(VCR_EN_HARD_ALL设置中的前100个实例)
    • 中文
      • 简单
        • VCR_ZH_EASY_ALL(完整测试集,5000个实例)
        • VCR_ZH_EASY_500(VCR_ZH_EASY_ALL设置中的前500个实例)
        • VCR_ZH_EASY_100(VCR_ZH_EASY_ALL设置中的前100个实例)
      • 困难
        • VCR_ZH_HARD_ALL(完整测试集,5000个实例)
        • VCR_ZH_HARD_500(VCR_ZH_HARD_ALL设置中的前500个实例)
        • VCR_ZH_HARD_100(VCR_ZH_HARD_ALL设置中的前100个实例)

    方法3:使用 lmms-eval 框架

    如果 lmms-eval 框架不支持您的模型的推理方法,您可能需要将其整合进去。详情请参考这里

    pip install git+https://github.com/EvolvingLMMs-Lab/lmms-eval.git
    # 我们以 HuggingFaceM4/idefics2-8b 和 vcr_wiki_en_easy 为例
    python3 -m accelerate.commands.launch --num_processes=8 -m lmms_eval --model idefics2 --model_args pretrained="HuggingFaceM4/idefics2-8b" --tasks vcr_wiki_en_easy --batch_size 1 --log_samples --log_samples_suffix HuggingFaceM4_idefics2-8b_vcr_wiki_en_easy --output_path ./logs/

    您可以在这里找到支持的模型列表。

    lmms-eval 支持以下 VCR --tasks 设置:

    • 英语
      • 简单
        • vcr_wiki_en_easy(完整测试集,5000个实例)
        • vcr_wiki_en_easy_500(vcr_wiki_en_easy设置中的前500个实例)
        • vcr_wiki_en_easy_100(vcr_wiki_en_easy设置中的前100个实例)
      • 困难
        • vcr_wiki_en_hard(完整测试集,5000个实例)
        • vcr_wiki_en_hard_500(vcr_wiki_en_hard设置中的前500个实例)
        • vcr_wiki_en_hard_100(vcr_wiki_en_hard设置中的前100个实例)
    • 中文
      • 简单
        • vcr_wiki_zh_easy(完整测试集,5000个实例)
        • vcr_wiki_zh_easy_500(vcr_wiki_zh_easy设置中的前500个实例)
        • vcr_wiki_zh_easy_100(vcr_wiki_zh_easy设置中的前100个实例)
      • 困难
        • vcr_wiki_zh_hard(完整测试集,5000个实例)
        • vcr_wiki_zh_hard_500(vcr_wiki_zh_hard设置中的前500个实例)
        • vcr_wiki_zh_hard_100(vcr_wiki_zh_hard设置中的前100个实例)

    VCR Transform 的使用

    from vcr_transform import VCRTransform
    # "crossed_text" 是可选的,当它为 None 或未提供时,VCRTransform 将自动生成 crossed_text。
    example = {
        "image": Image.open("assets/main_pic.png"),
        "caption": "来自全球各地的机器学习研究人员都对新型 GPU 感到兴奋。即使它只有炉灶那么大,其尖端功能也能让大规模实验更高效、更便宜。",
        "crossed_text": [
            "研究人员都对新型 GPU 感到",
            "即使它只有炉灶那么大",
            "尖端功能也能让大规模",
        ],
    }
    # 以中文的简单模式为例
    transform = VCRTransform(mode="easy", language="en") 
    transformed_example = transform(example)

    以下是VCRTransform初始化的全部参数列表:

    • --mode:'easy' 或 'hard' 或 None。若为 'easy',文本将会在图像中间被划掉。若为 'hard',文本将会在图像上半部被划掉。若为 None,则会使用参数 mask_mode、mask_p、n_gram、n_lines、language、font_path、font_size、background_color、output_tensor。
    • --mask_mode (str):'nouns' 或 'sentence' 或 'percentage' 或 'ngram'。
    • --mask_p (float):要划掉的单词百分比。默认为 0.5。
    • --n_gram (int):要划掉的子词数。
    • --n_lines (int):将文本最多拆分成的行数。默认为 5。
    • --language (str):'en' 或 'zh'。
    • --font_path (str):渲染图像文本的字体文件路径。
    • --font_size (int):渲染图像文本的字体大小。默认为 20。
    • --background_color (str):渲染图像文本的背景色。默认为 'white'。
    • --output_tensor (bool):是否将图像输出为张量。默认为 False。

    数据集生成

    生成VCR数据集的代码在 src/dataset 中。在开始之前,您需要:

    1. 包含两列的数据集:imagecaption,其中 image 包含 PIL.Image 对象,而 caption 是相应的标题。
    2. 用于在图像上渲染文本的字体文件。在我们的实验中,英文使用 Arial,中文使用 SimSum。
    3. (可选)用于初始过滤有害条目的审查词列表。

    要生成VCR数据集,您可以运行以下命令:

    cd src/build_dataset
    python generate_vcr_dataset.py \
        --dataset_path /path/to/dataset \
        --is_local_dataset True \
        --mask_mode "ngram" \
        --language "en" \
        --font_path /path/to/font \
        --censor_path /path/to/censor \
        --output_dir /path/to/output

    generate_vcr_dataset.py 的所有参数列表如下:

    • --dataset_path: 原始图像文本对数据集的名称或路径。需要具有 "image" 和 "caption" 列。
    • --is_local_dataset: 数据集是否存储在本地。如果为True,则脚本将调用 datasets.load_from_disk() 来加载数据集。
    • --mask_mode: 生成VCR数据集的掩码模式之一。可以是 "nouns"、"sentence"、"percentage"、"ngram" 中的一个。默认为 "ngram"。
    • --mask_p: 当 mask_mode 为 "percentage" 时,要屏蔽的词的百分比。默认为0.5。
    • --n_gram: 当 mask_mode 为 "ngram" 时的n-gram长度。默认为5。
    • --n_lines: 在图像中保留的标题行数。默认为5。
    • --language: 数据集的语言。目前,必须是 "en" 或 "zh" 之一。
    • --easy_mode: 是否生成易模式数据集。默认为False。
    • --font_path: 用于在图像上渲染文本的字体文件的路径。您需要自己下载字体文件。
    • --font_size: 在图像上渲染文本的字体大小。默认为20。
    • --background_color: 用于在图像上渲染文本的背景颜色。默认为 "white"。
    • --save_image_examples: 是否保存示例图像。默认为False。
    • --save_image_name: 保存示例图像的名称。默认为None。
    • --num_examples: 输出数据集中的实例数。默认为0(无限制)。
    • --censor_path: 用于初始数据集过滤的审查词列表的路径。默认为None。
    • --random_seed: 数据集生成的随机种子。默认为42。
    • --output_dir: 生成的VCR数据集的输出目录。默认为 ./data

    引用

    如果您发现VCR对您的研究和应用有用,请使用以下BibTeX引用:

    @article{zhang2024vcr,
      title   = {VCR: Visual Caption Restoration},
      author  = {Tianyu Zhang and Suyuchen Wang and Lu Li and Ge Zhang and Perouz Taslakian and Sai Rajeswar and Jie Fu and Bang Liu and Yoshua Bengio},
      year    = {2024},
      journal = {arXiv preprint arXiv: 2406.06462}
    }