HuggingFace镜像/Monkey
模型介绍文件和版本分析
下载使用量0

Monkey:图像分辨率与文本标签是大型多模态模型的重要要素

张丽*,杨彪*,刘强,马志银,张硕,杨敬旭,孙亚博,刘瑜亮†,白翔†
华中科技大学,金山办公

论文   |   详细描述   |   模型权重   | 模型权重(wise model)  


Monkey 提出了一种训练高效的方法,无需从头预训练即可将输入分辨率能力有效提升至 896 x 1344 像素。为了弥合简单文本标签与高输入分辨率之间的差距,我们提出了一种多级描述生成方法,该方法能自动提供丰富信息,引导模型学习场景与物体间的上下文关联。通过这两种设计的协同作用,我们的模型在多个基准测试中取得了优异成绩。将我们的模型与包括 GPT4V 在内的多种大型多模态模型(LMM)进行对比,结果表明,我们的模型通过关注文本信息并捕捉图像中的细微细节,在图像描述任务中展现出良好性能;其提升的输入分辨率也使其在含密集文本的文档图像上表现卓越。

亮点

  • 上下文关联:在回答问题时,我们的方法能更有效地推断目标间的关系,从而提供更全面、更具洞察力的结果。
  • 支持高达 1344 x 896 的分辨率:超越了大型多模态模型通常采用的 448 x 448 标准分辨率,这一显著提升增强了对不显眼或紧密聚集物体以及密集文本的识别和理解能力。
  • 增强的综合性能:我们在 16 个不同数据集上进行了测试,结果显示 Monkey 模型在图像描述、通用视觉问答、文本中心视觉问答和文档导向视觉问答等任务中均表现出色。

环境

conda create -n monkey python=3.9
conda activate monkey
git clone https://github.com/Yuliang-Liu/Monkey.git
cd ./Monkey
pip install -r requirements.txt

演示

在2023年11月14日之前,我们观察到对于某些随机图片,Monkey 能够取得比 GPT4V 更准确的结果。

我们还提供了原始演示的源代码和模型权重,允许您自定义某些参数以获得更独特的体验。具体操作如下:

  1. 确保您已配置好环境。
  2. 您可以选择离线或在线使用演示:
  • 离线:
    • 下载模型权重。
    • 修改 demo.py 文件中的 DEFAULT_CKPT_PATH="pathto/Monkey" 为您的模型权重路径。
    • 使用以下命令运行演示:
    python demo.py
  • 在线:
    • 使用以下命令运行演示并在线下载模型权重:
    python demo.py -c echo840/Monkey

数据集

我们开源了通过多级描述生成方法生成的数据。您可以在Detailed Caption下载。

评估

我们在 evaluate_vqa.py 文件中提供了针对14个视觉问答(VQA)数据集的评估代码,方便快速验证结果。具体操作如下:

  1. 确保您已配置好环境。
  2. 修改 sys.path.append("pathto/Monkey") 为您的模型权重路径。
  3. 准备评估所需的数据集。
  4. 运行评估代码。

以 ESTVQA 为例:

  • 按照以下目录结构准备数据:
├── data
|	├── estvqa
|		├── test_image
|			├── {image_path0}
|			├── {image_path1}
|				  ·
|				  ·
|	├── estvqa.jsonl
  • 带注释的 .jsonl 文件每行格式示例:
{"image": "data/estvqa/test_image/011364.jpg", "question": "What is this store?", "answer": "pizzeria", "question_id": 0}
  • 修改字典 ds_collections:
ds_collections = {
	'estvqa_test': {
		'test': 'data/estvqa/estvqa.jsonl',
		'metric': 'anls',
		'max_new_tokens': 100,
	},
	...
}
  • 运行以下命令:
bash eval/eval.sh 'EVAL_PTH' 'SAVE_NAME'

训练

我们还提供了Monkey的模型定义和训练代码,您可以在上方进行查看。您可以通过执行finetune_ds_debug.sh来运行训练代码。

注意: 请指定您的训练数据路径,该数据应为一个包含对话列表的json文件。

推理

from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "echo840/Monkey"
model = AutoModelForCausalLM.from_pretrained(checkpoint, device_map='cuda', trust_remote_code=True).eval()
tokenizer = AutoTokenizer.from_pretrained(checkpoint, trust_remote_code=True)
tokenizer.padding_side = 'left'
tokenizer.pad_token_id = tokenizer.eod_id
img_path = ""
question = ""
query = f'<img>{img_path}</img> {question} Answer: ' #VQA
# query = f'<img>{img_path}</img> Generate the detailed caption in English: ' #detailed caption

input_ids = tokenizer(query, return_tensors='pt', padding='longest')
attention_mask = input_ids.attention_mask
input_ids = input_ids.input_ids

pred = model.generate(
            input_ids=input_ids.cuda(),
            attention_mask=attention_mask.cuda(),
            do_sample=False,
            num_beams=1,
            max_new_tokens=512,
            min_new_tokens=1,
            length_penalty=1,
            num_return_sequences=1,
            output_hidden_states=True,
            use_cache=True,
            pad_token_id=tokenizer.eod_id,
            eos_token_id=tokenizer.eod_id,
            )
response = tokenizer.decode(pred[0][input_ids.size(1):].cpu(), skip_special_tokens=True).strip()
print(response)

引用 Monkey

如果您希望引用此处发布的基准测试结果,请使用以下 BibTeX 条目:

@article{li2023monkey,
  title={Monkey: Image Resolution and Text Label Are Important Things for Large Multi-modal Models},
  author={Li, Zhang and Yang, Biao and Liu, Qiang and Ma, Zhiyin and Zhang, Shuo and Yang, Jingxu and Sun, Yabo and Liu, Yuliang and Bai, Xiang},
  journal={arXiv preprint arXiv:2311.06607},
  year={2023}
}

如果你觉得Monkey很可爱,请为它点亮星标。这对我们来说将是莫大的鼓励。

致谢

Qwen-VL:我们基于此代码库进行开发。感谢Qwen的作者们提供了该框架。

版权信息

我们欢迎各位提出宝贵建议,帮助我们改进Monkey。如有任何疑问,请联系刘育梁博士:ylliu@hust.edu.cn。如果您有任何有趣的发现,也欢迎通过邮件或提交issue与我们分享。谢谢!