見出し画像

【お試しコード付き①】Qwen2-VLで画像内容を解釈

ソフトウェアエンジニアのホーリーデイです。
今回は、Qwen2-VLを使った実際のデモコードを紹介します。Qwen2-VLは、画像から詳細な情報を抽出して説明する能力を持つビジョン言語モデルです。このデモでは、入力された画像を基に、モデルがどのように画像内容を解釈するかを実際に体験できます。

Qwen2-VLの解説については下記の記事で紹介しています。

早速、実装してきましょう!


使い方ガイド

まず、GitHubで公開されているデモコードを使用して、簡単に試せるようにしました。このコードを利用することで、Qwen2-VLが画像をどのように認識し、説明するかを体感できます。

手順:

  1. 下記リンクからデモコードをダウンロードします。

  2. コードの実行には、ランタイムタイプとして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は、与えられた画像に基づいて詳細な説明を生成しました。以下はその結果です。

出力結果 (英語):

"The image depicts a serene beach scene at sunset. A woman and her dog are sitting on the sand, enjoying each other's company. The woman is wearing a plaid shirt and dark pants, and she is smiling as she reaches out to her dog. The dog, which appears to be a large breed, is wearing a harness and is giving a high-five to the woman. The beach is relatively empty, with gentle waves in the background. The overall atmosphere is peaceful and joyful, capturing a moment of bonding between the woman and her pet."

Qwen2-VL出力結果

日本語訳: Qwen2-VLの出力結果

英語が得意でない方のために、Qwen2-VLの出力を翻訳した結果がこちらです。

日本語訳:

夕暮れ時の穏やかな浜辺の風景。女性と愛犬が砂浜に座り、一緒に楽しんでいる。女性はチェック柄のシャツと黒っぽいズボンを着ており、愛犬に手を差し伸べながら微笑んでいる。大型犬と思われるその犬はハーネスをつけ、女性とハイタッチをしている。ビーチは比較的空いており、背景には穏やかな波が立っている。全体の雰囲気は穏やかで楽しげで、女性とペットの絆の瞬間をとらえている。

(日本語訳)Qwen2-VL出力結果

このように入力画像から詳細な情報を出力することが出来ました。

まとめ

Qwen2-VLは、視覚データを言語で解釈する能力において非常に優れており、画像からテキストを生成する用途において、次世代のビジョン言語モデルとして大いに期待できます。

特に、以下の用途で大きな価値を発揮します。

  • 画像や動画の自動キャプション生成: ソーシャルメディアやオンラインコンテンツにおいて、瞬時に視覚コンテンツを説明するために活用。

  • マルチメディア対話型AI: ユーザーが画像や動画を提供し、そこからAIが質問応答や対話を行うインターフェースとして利用。

  • 自動化されたデバイス操作: 視覚情報を基にロボットやスマートデバイスの制御を自動化し、様々な業務を効率化。

オープンソースの形で提供されているため、研究者や開発者が簡単に導入・試行でき、より多くの分野での応用が期待されます。

Qwen2-VLの機能やパフォーマンスについてさらに知りたい方は、以下のリンクからGitHubや関連リソースを参照してください。

Qwen2-VL論文

おすすめ書籍

最後に

今回はGitHubのコードを使い、Qwen2-VLを用いたデモを実行してみました。画像から詳細な情報を自動で生成できるQwen2-VLの実力を実感できたのではないでしょうか。今後もさらなる性能検証や応用の幅を広げるため、他の画像や動画でも試してみたいと思います。

最後まで読んでいただきありがとうございます。
今後も、AIやデータサイエンスに関する新しい技術やツールの紹介を続けていきますので、どうぞお楽しみに!


この記事が気に入ったらサポートをしてみませんか?