🚀 Monkey:图像分辨率和文本标签对大型多模态模型至关重要
Monkey提出了一种训练高效的方法,无需从头开始预训练,即可有效将输入分辨率能力提升至896 x 1344像素。为了弥合简单文本标签与高输入分辨率之间的差距,我们提出了一种多级描述生成方法,该方法可自动提供丰富信息,引导模型学习场景与对象之间的上下文关联。通过这两种设计的协同作用,我们的模型在多个基准测试中取得了优异成绩。通过将我们的模型与包括GPT4V在内的各种大型多模态模型(LMMs)进行比较,我们的模型在图像描述任务中表现出色,能够关注文本信息并捕捉图像中的精细细节;其提高的输入分辨率也使其在包含密集文本的文档图像任务中表现卓越。
作者信息
张立*,杨彪*,刘强,马志银,张硕,杨景旭,孙亚博,刘育良†,白翔†
华中科技大学,金山软件
资源链接
论文   |   详细描述数据集   |   模型权重   | Wisemodel平台的模型权重  
🚀 快速开始
环境配置
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
模型推理
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: '
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)
✨ 主要特性
- 上下文关联:在回答问题时,我们的方法展现出更强的推断目标之间关系的能力,从而能够提供更全面、更有深度的结果。
- 支持高达1344 x 896的分辨率:超越了大型多模态模型通常采用的标准448 x 448分辨率,这一显著的分辨率提升增强了模型识别和理解难以察觉或紧密聚集的对象以及密集文本的能力。
- 增强的综合性能:我们在16个不同的数据集上进行了测试,Monkey模型在图像描述、通用视觉问答、以文本为中心的视觉问答和面向文档的视觉问答等任务中表现出色。
💻 使用示例
基础用法
在2023年11月14日之前,我们观察到对于一些随机图片,Monkey可以比GPT4V获得更准确的结果。
高级用法
我们还提供了原始演示的源代码和模型权重,允许你自定义某些参数以获得更独特的体验。具体操作如下:
- 确保你已经配置了环境。
- 你可以选择离线或在线使用演示:
📦 安装指南
环境配置
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
📚 详细文档
数据集
我们已经开源了通过多级描述生成方法生成的数据。你可以在详细描述数据集下载。
评估
我们在evaluate_vqa.py
文件中提供了14个视觉问答(VQA)数据集的评估代码,方便你快速验证结果。具体操作如下:
- 确保你已经配置了环境。
- 将
sys.path.append("pathto/Monkey")
修改为你的模型权重路径。
- 准备评估所需的数据集。
- 运行评估代码。
以ESTVQA为例:
├── data
| ├── estvqa
| ├── test_image
| ├── {image_path0}
| ├── {image_path1}
| ·
| ·
| ├── estvqa.jsonl
{"image": "data/estvqa/test_image/011364.jpg", "question": "What is this store?", "answer": "pizzeria", "question_id": 0}
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文件。
🔧 技术细节
Monkey提出了一种训练高效的方法,无需从头开始预训练,即可有效将输入分辨率能力提升至896 x 1344像素。为了弥合简单文本标签与高输入分辨率之间的差距,提出了一种多级描述生成方法,该方法可自动提供丰富信息,引导模型学习场景与对象之间的上下文关联。通过这两种设计的协同作用,模型在多个基准测试中取得了优异成绩。
📄 许可证
引用
如果你想引用此处发布的基准结果,请使用以下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}
}
致谢
Qwen-VL:我们基于此代码库进行开发。感谢Qwen的作者提供的框架。
版权信息
我们欢迎你提出建议,帮助我们改进Monkey。如有任何疑问,请联系刘育良博士:ylliu@hust.edu.cn。如果你发现了有趣的内容,也请随时通过电子邮件与我们分享或提交一个issue。谢谢!
如果你觉得Monkey很有趣,请给我们点个Star,这将是对我们极大的鼓励。