🚀 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,這將是對我們極大的鼓勵。