🚀 Typhoon2-Vision
Typhoon2-qwen2vl-7b-vision-instruct は、画像と動画の両方の入力をサポートするタイ語 🇹🇭 のビジョン言語モデルです。Qwen2-VL が画像と動画の両方の処理タスクを扱うように構築されている一方で、Typhoon2-VL は画像ベースのアプリケーション向けに特別に最適化されています。
技術レポートについては、arxiv を参照してください。
✨ 主な機能
モデルの概要
ここでは、Qwen2-VL-7B-Instruct をベースに構築された Typhoon2-qwen2vl-7b-vision-instruct を提供しています。
属性 |
详情 |
モデルタイプ |
Qwen2アーキテクチャに基づくビジョンエンコーダを備えた7B命令デコーダ専用モデル |
要件 |
transformers 4.38.0 以上 |
主な言語 |
タイ語 🇹🇭 と英語 🇬🇧 |
デモ |
https://vision.opentyphoon.ai/ |
ライセンス |
Apache-2.0 |
🚀 クイックスタート
ここでは、transformersを使ってモデルを使用する方法をコードスニペットで示します。
スニペットを実行する前に、以下の依存関係をインストールする必要があります。
pip install torch transformers accelerate pillow
モデルの使用開始方法
以下のコードを使ってモデルを使用し始めましょう。
質問: この画像の場所と国名をタイ語で指定してください
回答: พระบรมมหาราชวัง, กรุงเทพฯ, ประเทศไทย
from PIL import Image
import requests
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
model_name = "scb10x/typhoon2-qwen2vl-7b-vision-instruct"
model = Qwen2VLForConditionalGeneration.from_pretrained(
model_name, torch_dtype="auto", device_map="auto"
)
processor = AutoProcessor.from_pretrained(model_name)
url = "https://cdn.pixabay.com/photo/2023/05/16/09/15/bangkok-7997046_1280.jpg"
image = Image.open(requests.get(url, stream=True).raw)
conversation = [
{
"role": "user",
"content": [
{
"type": "image",
},
{"type": "text", "text": "ระบุชื่อสถานที่และประเทศของภาพนี้เป็นภาษาไทย"},
],
}
]
text_prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
inputs = processor(
text=[text_prompt], images=[image], padding=True, return_tensors="pt"
)
inputs = inputs.to("cuda")
output_ids = model.generate(**inputs, max_new_tokens=128)
generated_ids = [
output_ids[len(input_ids) :]
for input_ids, output_ids in zip(inputs.input_ids, output_ids)
]
output_text = processor.batch_decode(
generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True
)
print(output_text)
複数画像の処理
from PIL import Image
import requests
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
model_name = "scb10x/typhoon2-qwen2vl-7b-vision-instruct"
model = Qwen2VLForConditionalGeneration.from_pretrained(
model_name, torch_dtype="auto", device_map="auto"
)
processor = AutoProcessor.from_pretrained(model_name)
conversation = [
{
"role": "user",
"content": [
{
"type": "image",
},
{
"type": "image",
},
{"type": "text", "text": "ระบุ 3 สิ่งที่คล้ายกันในสองภาพนี้"},
],
}
]
urls = [
"https://cdn.pixabay.com/photo/2023/05/16/09/15/bangkok-7997046_1280.jpg",
"https://cdn.pixabay.com/photo/2020/08/10/10/09/bangkok-5477405_1280.jpg",
]
images = [Image.open(requests.get(url, stream=True).raw) for url in urls]
text_prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
inputs = processor(text=[text_prompt], images=images, padding=True, return_tensors="pt")
inputs = inputs.to("cuda")
generated_ids = model.generate(**inputs, max_new_tokens=128)
generated_ids_trimmed = [
out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
]
output_text = processor.batch_decode(
generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text)
ヒント
モデルのパフォーマンスと計算コストのバランスを取るために、プロセッサに引数を渡して最小および最大ピクセル数を設定することができます。
min_pixels = 128 * 28 * 28
max_pixels = 2560 * 28 * 28
processor = AutoProcessor.from_pretrained(
model_name, min_pixels=min_pixels, max_pixels=max_pixels
)
評価 (画像)
ベンチマーク |
Llama-3.2-11B-Vision-Instruct |
Qwen2-VL-7B-Instruct |
Pathumma-llm-vision-1.0.0 |
Typhoon2-qwen2vl-7b-vision-instruct |
OCRBench Liu et al., 2024c |
72.84 / 51.10 |
72.31 / 57.90 |
32.74 / 25.87 |
64.38 / 49.60 |
MMBench (Dev) Liu et al., 2024b |
76.54 / - |
84.10 / - |
19.51 / - |
83.66 / - |
ChartQA Masry et al., 2022 |
13.41 / x |
47.45 / 45.00 |
64.20 / 57.83 |
75.71 / 72.56 |
TextVQA Singh et al., 2019 |
32.82 / x |
91.40 / 88.70 |
32.54 / 28.84 |
91.45 / 88.97 |
OCR (TH) OpenThaiGPT, 2024 |
64.41 / 35.58 |
56.47 / 55.34 |
6.38 / 2.88 |
64.24 / 63.11 |
M3Exam Images (TH) Zhang et al., 2023c |
25.46 / - |
32.17 / - |
29.01 / - |
33.67 / - |
GQA (TH) Hudson et al., 2019 |
31.33 / - |
34.55 / - |
10.20 / - |
50.25 / - |
MTVQ (TH) Tang et al., 2024b |
11.21 / 4.31 |
23.39 / 13.79 |
7.63 / 1.72 |
30.59 / 21.55 |
Average |
37.67 / x |
54.26 / 53.85 |
25.61 / 23.67 |
62.77 / 59.02 |
注: 各セルの最初の値は Rouge-L を表します。2番目の値 ( /
の後) は Accuracy を表し、Rouge-L = 100% となるように正規化されています。
📚 ドキュメント
意図された用途と制限
このモデルは命令型モデルですが、まだ開発中です。ある程度のガードレールが組み込まれていますが、ユーザーのプロンプトに対して不正確、偏った、またはその他の点で問題のある回答を生成する可能性があります。開発者は、自分のユースケースの文脈でこれらのリスクを評価することをお勧めします。
フォロー
https://twitter.com/opentyphoon
サポート
https://discord.gg/us5gAYmrxw
引用
- Typhoon2があなたの作業に役立った場合は、以下のように引用してください。
@misc{typhoon2,
title={Typhoon 2: A Family of Open Text and Multimodal Thai Large Language Models},
author={Kunat Pipatanakul and Potsawee Manakul and Natapong Nitarach and Warit Sirichotedumrong and Surapon Nonesung and Teetouch Jaknamon and Parinthapat Pengpun and Pittawat Taveekitworachai and Adisai Na-Thalang and Sittipong Sripaisarnmongkol and Krisanapong Jirayoot and Kasima Tharnpipitchai},
year={2024},
eprint={2412.13702},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2412.13702},
}
ライセンス
このモデルはApache-2.0ライセンスの下で提供されています。