【お試しコード付き①】Qwen2-VLで画像内容を解釈
ソフトウェアエンジニアのホーリーデイです。
今回は、Qwen2-VLを使った実際のデモコードを紹介します。Qwen2-VLは、画像から詳細な情報を抽出して説明する能力を持つビジョン言語モデルです。このデモでは、入力された画像を基に、モデルがどのように画像内容を解釈するかを実際に体験できます。
Qwen2-VLの解説については下記の記事で紹介しています。
早速、実装してきましょう!
使い方ガイド
まず、GitHubで公開されているデモコードを使用して、簡単に試せるようにしました。このコードを利用することで、Qwen2-VLが画像をどのように認識し、説明するかを体感できます。
手順:
下記リンクからデモコードをダウンロードします。
コードの実行には、ランタイムタイプとしてL4 GPUを選択することを推奨します。L4 GPUにより高速な処理が可能です。
Google Colabの場合
!pip install git+https://github.com/huggingface/transformers@21fac7abba2a37fae86106f87fcf9974fd1e3830 accelerate
Qwen2-VL のコードは、最新の Hugging face transformers に含まれているので、コマンドでソースからビルドすることをお勧めします。
APIを使用するように、様々な種類の視覚入力をより便利に扱うためのツールキットを提供します。
これには、base64、URL、インターリーブされた画像や動画が含まれます。
以下のコマンドでインストール
!pip install qwen-vl-utils
!pip install flash-attn --no-cache-dir
各モジュールのインポート
from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, LlamaForCausalLM
# default: Load the model on the available device(s)
model = Qwen2VLForConditionalGeneration.from_pretrained(
"Qwen/Qwen2-VL-7B-Instruct", torch_dtype="auto", device_map="auto"
)
今回はこのQwen2-VL-7B-Instructを使用します。
processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct")
Qwen2-VLモデルを使用して指定された画像を解析し、テキストで説明を生成するための前処理と推論を実行します。
min_pixels = 256*28*28
max_pixels = 1280*28*28
processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels)
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg",
},
{"type": "text", "text": "Describe this image."},
],
}
]
# Preparation for inference
text = processor.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)
image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(
text=[text],
images=image_inputs,
videos=video_inputs,
padding=True,
return_tensors="pt",
)
# Ensure all tensors are on the same device as the model
for key in inputs:
inputs[key] = inputs[key].to(model.device)
# Inference: Generation of the output
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)
入力画像
デモで使用している画像はこちらです。
「若い女性と大型犬が仲良く浜辺で遊んでいる」ように見えますね。
出力結果: Qwen2-VLの回答
次に、Qwen2-VLによる出力結果を確認します。Qwen2-VLは、与えられた画像に基づいて詳細な説明を生成しました。以下はその結果です。
出力結果 (英語):
日本語訳: Qwen2-VLの出力結果
英語が得意でない方のために、Qwen2-VLの出力を翻訳した結果がこちらです。
日本語訳:
このように入力画像から詳細な情報を出力することが出来ました。
まとめ
Qwen2-VLは、視覚データを言語で解釈する能力において非常に優れており、画像からテキストを生成する用途において、次世代のビジョン言語モデルとして大いに期待できます。
特に、以下の用途で大きな価値を発揮します。
画像や動画の自動キャプション生成: ソーシャルメディアやオンラインコンテンツにおいて、瞬時に視覚コンテンツを説明するために活用。
マルチメディア対話型AI: ユーザーが画像や動画を提供し、そこからAIが質問応答や対話を行うインターフェースとして利用。
自動化されたデバイス操作: 視覚情報を基にロボットやスマートデバイスの制御を自動化し、様々な業務を効率化。
オープンソースの形で提供されているため、研究者や開発者が簡単に導入・試行でき、より多くの分野での応用が期待されます。
Qwen2-VLの機能やパフォーマンスについてさらに知りたい方は、以下のリンクからGitHubや関連リソースを参照してください。
おすすめ書籍
最後に
今回はGitHubのコードを使い、Qwen2-VLを用いたデモを実行してみました。画像から詳細な情報を自動で生成できるQwen2-VLの実力を実感できたのではないでしょうか。今後もさらなる性能検証や応用の幅を広げるため、他の画像や動画でも試してみたいと思います。
最後まで読んでいただきありがとうございます。
今後も、AIやデータサイエンスに関する新しい技術やツールの紹介を続けていきますので、どうぞお楽しみに!
この記事が気に入ったらサポートをしてみませんか?