猴子模型:图像分辨率与文本标签对大型多模态模型至关重要
张立*,杨彪*,刘强,马志胤,张硕,杨敬栩,孙亚波,刘禹良†,白翔†
华中科技大学,金山软件
论文   |   详细描述数据集   |   模型权重   | wisemodel平台模型权重  
猴子模型提出了一种高效训练方法,无需从头预训练即可将输入分辨率提升至896×1344像素。为弥合简单文本标签与高分辨率输入间的鸿沟,我们创新性地设计了多层级描述生成方法,自动提供丰富信息以引导模型学习场景与对象的上下文关联。通过这两项设计的协同作用,我们的模型在多个基准测试中表现优异。与包括GPT4V在内的各类大型多模态模型对比显示,我们的模型在图像描述任务中能精准关注文本信息并捕捉细节;提升的输入分辨率更使其在密集文本的文档图像处理中展现出卓越性能。
核心亮点
- 上下文关联:在问答时展现出卓越的目标关系推理能力,输出更具洞察力的综合结果
- 支持1344×896分辨率:超越大型多模态模型常规的448×448分辨率,显著提升对微小物体、密集对象及文本的识别理解能力
- 全面性能提升:在16个多样化数据集测试中,猴子模型在图像描述、通用视觉问答、文本中心视觉问答及文档导向视觉问答等任务中均取得亮眼表现
环境配置
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日,我们观察到猴子模型对随机图片的描述准确度可超越GPT4V。
我们同时提供原始演示的源代码和模型权重,您可通过以下步骤自定义参数获得独特体验:
- 确保已完成环境配置
- 选择在线/离线运行方式:
数据集
我们开源了多层级描述生成方法构建的数据集,可通过详细描述数据集下载。
评估测试
evaluate_vqa.py
文件提供14个视觉问答数据集的评估代码,便于快速验证结果:
- 完成环境配置
- 修改
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'
训练指南
我们提供了猴子模型的训练代码,通过执行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: '
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)
引用声明
若需引用本研究成果,请使用以下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团队提供的框架支持。
版权说明
欢迎提出改进建议。如有任何疑问,请联系刘禹良博士:ylliu@hust.edu.cn。若您有有趣发现,也欢迎通过邮件或提交issue与我们分享!