Japanese InstructBLIP Alphaで画像の日本語説明文生成 Windowsで動かすコード付き

Japanese InstructBLIP Alphaで画像の日本語説明文生成 Windowsで動かすコード付き ソフトウェア

日本語の画像説明文を生成できるAI「Japanese InstructBLIP Alpha」をWindowsのローカル環境で動かす方法を画像付きで丁寧に解説しました。

手元で実際に動かしてみて、どの程度の精度か試してみました。

また、動作時のハードウェア負荷(VRAM使用量)や、コピペするだけで文字起こしできる動作確認済みのコードも用意しておいたので、お役立てください。

実例:
入力画像と生成された説明文です。

ギターを持つアニメの女の子

https://www.curtain-damashii.com/index_ag/wp/wp-content/uploads/btr_page-1.jpg

公園のピクニックエリア

https://www.pakutaso.com/20170803214post-12725.html

赤いプレートに3つの肉饅頭

https://forest17.com/f60/f60m_4217.jpg
チェック!!
さくいん! 本サイトのAI関連記事まとめ どれから見れば良いのか?!


数十記事ある本サイトのAI関連記事を体系的にまとめました。

目的別にどれから見れば良いのかわかります!!

AI記事索引ページはコチラ

0, Japanese InstructBLIP Alphaとは何者か?

画像言語モデル「Japanese InstructBLIP Alpha」とは……

  • Stability AI社が公開
  • 日本語向け画像言語モデル
  • 画像に対して文字で説明を生成したり、画像についての質問に回答したりすることが可能
  • 英語のデータセットで事前学習されたInstructBLIPのモデル構造を用いており、日本特有の建造物も正しく認識

制限事項 商用利用の可否

  • このモデルはHugging Face HubにおいてHugging Face Transformersに準拠する形式で公開
  • このモデルは研究目的で作成されたモデルであり、研究目的での利用に限定
https://ja.stability.ai/blog/japanese-instructblip-alpha より(一部改変、要約、着色)

1. Japanese InstructBLIP Alphaの環境構築

予めインストールしておくもの

  • Python(当方3.10.7で動作確認済)
  • CUDA関連

これらをインストール&パスの通った状態にします。

仮想環境作成

適当なフォルダを作成し、フォルダ内で右クリック→「ターミナルで開く」を選択。

フォルダ内にPyhtonの仮想環境を構築します。

以下のコマンドをコピペして実行しましょう。

python -m venv venv
venv\Scripts\activate.ps1

警告は気にせず貼り付けてください。

これで仮想環境が作成できました。

Pytorchをインストール

PyTorchについてはCUDAバージョンなどに左右されるため、エラーなど出たら公式を確認してください。

https://pytorch.org/get-started/locally/

ここでは一例として当方の環境(上記画像の通り)のコマンドを載せておきます。

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

Pytorch以外まとめてインストール

Pytorchをインストールしてから下のコマンドを実行します。

pip install requests
pip install Pillow
pip install transformers
pip install sentencepiece
pip install einops

これで必要なモジュールなどを全てインストールできました。

ターミナルは文字起こしする時に使うので開きっぱなしにしておいてください。

2. Japanese InstructBLIP Alphaで画像の説明をしてもらう

URLを入力すると説明文を生成するようなコード コピペ可

いかのコードをtest.pyなど適当な名前でvenvフォルダと同じ場所に保存してください。

import torch
from transformers import LlamaTokenizer, AutoModelForVision2Seq, BlipImageProcessor
from PIL import Image
import requests


# helper function to format input prompts
def build_prompt(prompt="", sep="\n\n### "):
    sys_msg = "以下は、タスクを説明する指示と、文脈のある入力の組み合わせです。要求を適切に満たす応答を書きなさい。"
    p = sys_msg
    roles = ["指示", "応答"]
    user_query = "与えられた画像について、詳細に述べてください。"
    msgs = [": \n" + user_query, ": "]
    if prompt:
        roles.insert(1, "入力")
        msgs.insert(1, ": \n" + prompt)
    for role, msg in zip(roles, msgs):
        p += sep + role + msg
    return p


# load model
model = AutoModelForVision2Seq.from_pretrained(
    "stabilityai/japanese-instructblip-alpha",
    trust_remote_code=True,
    torch_dtype=torch.float16,
    variant="fp16",
)
processor = BlipImageProcessor.from_pretrained(
    "stabilityai/japanese-instructblip-alpha"
)
tokenizer = LlamaTokenizer.from_pretrained(
    "novelai/nerdstash-tokenizer-v1", additional_special_tokens=["▁▁"]
)
device = "cuda" if torch.cuda.is_available() else "cpu"
model.to(device)

# prepare inputs
url = "https://images.unsplash.com/photo-1582538885592-e70a5d7ab3d3?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1770&q=80"
while True:
    url = input("画像のURL : ")
    try:
        image = Image.open(requests.get(url, stream=True).raw).convert("RGB")
        prompt = ""  # input empty string for image captioning. You can also input questions as prompts
        prompt = build_prompt(prompt)
        inputs = processor(images=image, return_tensors="pt")
        text_encoding = tokenizer(prompt, add_special_tokens=False, return_tensors="pt")
        text_encoding["qformer_input_ids"] = text_encoding["input_ids"].clone()
        text_encoding["qformer_attention_mask"] = text_encoding[
            "attention_mask"
        ].clone()
        inputs.update(text_encoding)

        # generate
        outputs = model.generate(
            **inputs.to(device, dtype=model.dtype),
            num_beams=5,
            max_new_tokens=32,
            min_length=1,
        )
        generated_text = tokenizer.batch_decode(outputs, skip_special_tokens=True)[
            0
        ].strip()
        print(generated_text)
    except:
        print("Error")
# 桜と東京スカイツリー

https://huggingface.co/stabilityai/japanese-instructblip-alphaのサンプルを一部改変して何度もURLを入力できるようにしています。

また、上記コードではfp16モデルを使用しています。
fp16が嫌な場合は、, torch_dtype=torch.float16, variant="fp16"」を削除してください。

コードを実行する & 実演してみる、その実力は?!

ターミナルに以下のコマンドを打ち込みエンター。

python test.py

初回は約18GB(fp16の場合)のモデルダウンロードが行われます。

その後、説明してほしい画像のリンクを入力してください。
画像のように。

幾つか例を載せておきます。
入力画像と生成された説明文です。

ギターを持つアニメの女の子

https://www.curtain-damashii.com/index_ag/wp/wp-content/uploads/btr_page-1.jpg

公園のピクニックエリア

https://www.pakutaso.com/20170803214post-12725.html

赤いプレートに3つの肉饅頭

https://forest17.com/f60/f60m_4217.jpg

左と中央は適切に説明できていると言えます。
一方右側の饅頭は、具材が餡子でなく肉だと誤った判断をしています。

ハードウェア負荷 RAMとVRAM使用量

RAMは約18GB消費します。

RAMが少ない方は、モデル読み込みの際にブラウザなどを閉じておく方が良いでしょう。

また、VRAM使用量も同様に18GB台です。

現状はハイエンド専用ですね……

3, まとめ 「Japanese InstructBLIP Alpha」を試してみるには

  1. Python,CUDA関連をインストールしておく
  2. 仮想環境venvに諸々インストール
  3. 実行用コードを保存&実行
  4. 説明文の生成を楽しむ!!

ハードウェア負荷は相当なものですが、精度自体は相当高いと感じました。

今後モデルの量子化などの軽量化が進めば、誰でも自身の端末上で画像のキャプションを生成できる日が来るかもしれません!!
夢がありますね!

こちらのマルチモーダルモデルもぜひお試しください。

他のLLMの記事もどうぞ!!

他にも色々と面白いAI関連の記事を書いています。合わせてご覧ください。

楽曲生成AI「audiocraft」をWindowsに導入する方法解説&実例付き

画像生成AI「Stable Diffusion」を動かす方法

無料のCopilot「Amazon CodeWhisperer」を登録&VSCodeで使用する方法まとめ

タイトルとURLをコピーしました