🚀 nanoLLaVA - 10億パラメータ未満の視覚言語モデル
nanoLLaVAは、エッジデバイスで効率的に動作するように設計された「小さいながらも強力な」10億パラメータの視覚言語モデルです。
🚀 クイックスタート
重要なお知らせ
nanoLLaVA-1.5 が大幅に性能向上してリリースされました。こちら から確認できます。
インストール
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 = 'Describe this image in detail'
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())
✨ 主な機能
モデル構成
評価スコア
モデル |
VQA v2 |
TextVQA |
ScienceQA |
POPE |
MMMU (Test) |
MMMU (Eval) |
GQA |
MM-VET |
スコア |
70.84 |
46.71 |
58.97 |
84.1 |
28.6 |
30.4 |
54.79 |
23.9 |
📦 インストール
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 = 'Describe this image in detail'
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
Answer the question<|im_end|><|im_start|>user
<image>
What is the picture about?<|im_end|><|im_start|>assistant
画像と例
画像 |
例 |
 |
What is the text saying? "Small but mighty". How does the text correlate to the context of the image? The text seems to be a playful or humorous representation of a small but mighty figure, possibly a mouse or a mouse toy, holding a weightlifting bar. |
訓練データ
論文を執筆中のため、訓練データは後ほど公開予定です。最終バージョンは現在のものよりもはるかに強力になることが期待されます。
ファインチューニングコード
近日公開予定です!
モデルの訓練
モデルは Bunny の修正版を使用して訓練されています。
📄 ライセンス
このモデルはApache-2.0ライセンスの下で提供されています。