猴模型:图像分辨率与文本标签对大型多模态模型至关重要
张立*,杨彪*,刘强,马志胤,张硕,杨敬栩,孙亚波,刘禹良†,白翔†
华中科技大学,金山软件
论文   |   详细描述数据集   |   模型权重   | 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": "这是什么商店?", "answer": "披萨店", "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-Chat"
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} 答案:'
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={猴模型:图像分辨率与文本标签对大型多模态模型至关重要},
author={张立 and 杨彪 and 刘强 and 马志胤 and 张硕 and 杨敬栩 and 孙亚波 and 刘禹良 and 白翔},
journal={arXiv预印本 arXiv:2311.06607},
year={2023}
}
如果您觉得猴模型很可爱,请为我们点亮星星,这将给予我们极大鼓励。
致谢声明
Qwen-VL:本研究的代码基础。感谢Qwen团队提供的框架支持。
版权声明
欢迎提出改进建议。如有任何疑问,请联系刘禹良博士:ylliu@hust.edu.cn。若您有有趣发现,也欢迎通过邮件或提交issue与我们分享!