语言:
- 英文
标签:
- llava
- 多模态
- qwen
许可证: apache-2.0
nanoLLaVA - 超1B视觉语言模型
重要提示: nanoLLaVA-1.5 已经发布,性能大幅提升。请访问此处查看。
描述
nanoLLaVA是一款“小而强大”的1B视觉语言模型,专为在边缘设备上高效运行而设计。
模型 |
VQA v2 |
TextVQA |
ScienceQA |
POPE |
MMMU (测试) |
MMMU (评估) |
GQA |
MM-VET |
得分 |
70.84 |
46.71 |
58.97 |
84.1 |
28.6 |
30.4 |
54.79 |
23.9 |
训练数据
训练数据将在稍后发布,因为我仍在撰写相关论文。预计最终版本将比当前版本更强大。
微调代码
即将发布!!!
使用方法
您可以使用transformers
运行以下脚本:
pip install -U transformers accelerate flash_attn
import torch
import transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
from PIL import Image
import warnings
transformers.logging.set_verbosity_error()
transformers.logging.disable_progress_bar()
warnings.filterwarnings('ignore')
torch.set_default_device('cuda')
model = AutoModelForCausalLM.from_pretrained(
'qnguyen3/nanoLLaVA',
torch_dtype=torch.float16,
device_map='auto',
trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(
'qnguyen3/nanoLLaVA',
trust_remote_code=True)
prompt = '详细描述这张图片'
messages = [
{"role": "user", "content": f'<image>\n{prompt}'}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
print(text)
text_chunks = [tokenizer(chunk).input_ids for chunk in text.split('<image>')]
input_ids = torch.tensor(text_chunks[0] + [-200] + text_chunks[1], dtype=torch.long).unsqueeze(0)
image = Image.open('/path/to/image.png')
image_tensor = model.process_images([image], model.config).to(dtype=model.dtype)
output_ids = model.generate(
input_ids,
images=image_tensor,
max_new_tokens=2048,
use_cache=True)[0]
print(tokenizer.decode(output_ids[input_ids.shape[1]:], skip_special_tokens=True).strip())
提示格式
模型遵循ChatML标准,但在<|im_end|>
末尾没有\n
:
<|im_start|>system
回答问题<|im_end|><|im_start|>user
<image>
这张图片是关于什么的?<|im_end|><|im_start|>assistant
图片 |
示例 |
 |
文字在说什么? “小而强大”。 文字如何与图片内容相关联? 文字似乎是对一个小而强大的形象(可能是老鼠或老鼠玩具)举重的幽默或俏皮表现。 |
模型使用了Bunny的修改版本进行训练。