スポンサーリンク
LLMを開発するサイバーエージェントが、大規模視覚言語モデルを開発し画像の説明をするLLMを開発した。試しに自分が持つ写真を説明させてみたら、100点はつけられないけど合格点かな。
テキスト生成AIについてのまとめはこちら。
VLMとは大規模視覚言語モデルのことで、LLMとはまた違うものだ。学習した情報に基づいて、画像に描かれているものが何なのかを説明してくれるAIを作ることができる。
サイバーエージェントでは75億パラメータのVLMを開発して公開した。商用利用が可能。(Apache 2.0ライセンス)
サイバーエージェントではLLMも公開している。以前の記事はこちら。
では、さっそく使ってみよう。
今回も普段使っているRTX3060搭載の自作PC、Jisaku8でやってみる。
まずはPythonの仮想環境を用意する。Pythonをインストールしていない場合は上にある、CALM2の記事に書いてあるので参照を。
仮想環境はコマンドプロンプトで以下の手順で作成する。ここではFドライブを使う。
F:
cd \python
python3 -m venv llava-calm2
cd llava-calm2\Scripts
activate
必要なパッケージはHungingFaceにあるので、gitコマンドでダウンロードする。
cd \ai
mkdir llava-calm2
git clone https://huggingface.co/cyberagent/llava-calm2-siglip
mkdirの行はなくてもいい。F:\llava-calm2の下にさらに llava-calm2-siglipというディレクトリが作成され、その下にダウンロードされたファイルが展開された。
回線の条件によるが30分くらいでダウンロードは終わった。(フレッツ光 200Mbps)
PythonのAI用パッケージが必要だ。いつも必要になるものをインストールする。
pip3 install transformers
pip3 install Image
pip install torch -f https://download.pytorch.org/whl/torch_stable.html
3行目をこのように記述すると、RTX3060を使用した処理をするモジュールがインストールされる。-f以下を記述しない場合はCPUで処理するバージョンがインストールされる。
CPUだけで処理すると使いものにならないくらい遅い。
これで必要なものはそろった。
このままでは実行しにくいので、Hunging Faceに掲載されているサンプルを持ってくる。Usageと書かれているセクションの詳細を展開するとサンプルが表示される。
このプログラムをPythonのプログラムとして、F:\ llava-calm2\llava-calm2-siglipに置く。文字コードはUTF-8にすること。ここではファイル名をLaunch.pyとして億。
コマンドプロンプトから以下のようにコマンドを入力、実行する。
python Launch.py
サンプルの途中にある下記の行を書き換える。
url = "https://unsplash.com/photos/LipkIP4fXbM/download?force=true&w=640"
これを下記のように変える。
url = https://www.google.co.jp/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"
Googleのロゴだ。実行すると以下のような回答になった。
画像には、Googleのロゴが映っています。ロゴは、赤、黄色、緑の3色で構成されており、それぞれ「G」「o」「o」の文 字に対応しています。文字は、すべて大文字で、太字で、丸みを帯びています。ロゴは、白地に黒で描かれており、背景は黒一色です。
WEBのUIを作れればいいのだが面倒なので、先のサンプルを改造してPC内の写真を読み込ませてみる。
<<<と書いてある赤字の個所が改造しているところ。インデントが狂っているかもしれないので適当に直して使ってください。
from PIL import Image
import requests
from transformers import AutoProcessor, LlavaForConditionalGeneration
import torch
model = LlavaForConditionalGeneration.from_pretrained(
"cyberagent/llava-calm2-siglip",
torch_dtype=torch.bfloat16,
).to(0)
processor = AutoProcessor.from_pretrained("cyberagent/llava-calm2-siglip")
prompt = """USER:
この画像を説明してください。
ASSISTANT: """
# <<< この変数
url_array = [
"D:/data/photo/a.jpg",
"D:/data/picture/b.jpg"
]
for url in url_array:
image = Image.open(url).convert("RGB") # <<<
inputs = processor(text=prompt, images=image, return_tensors="pt").to(0, torch.bfloat16)
generate_ids = model.generate(**inputs,
max_length=500,
do_sample=True,
temperature=0.2,
)
output = processor.tokenizer.decode(generate_ids[0][:-1], clean_up_tokenization_spaces=False)
print(output)
実行した様子を動画にしているので参照を。
個々の写真については以下の様になった。
写真 | 説明/評価 |
---|---|
画像には、黒い背景にオレンジ色の文字で「AMD Ryzen 5」と 書かれた箱が写っています。箱の中央には、銀色の金属製の 四角い物体が入っています。箱の右上には、赤い四角い物体があり、 その中には「Ryzen 5」の文字が白抜きで書かれています。 箱の 左下には、「BTO」の文字が書かれたオレンジ色の四角い 物体があります。 |
|
△一部誤り | |
画像には、2つの黒いメモリスロットが写っています。 メモリスロットは、コンピュータのCPUやグラフィックカードなど 、 コンピュータのコンポーネントを格納する装置です。この画像では メモリスロットが透明なプラスチック製の袋に入っています。 メモリスロットは、コンピュータの ケースに固定されています。 |
|
△一部誤り | |
この写真には、石垣の上に建てられた城が写っています。 城は白壁で、黒い瓦が葺かれています。石垣は、大きな石が 積み重ねられており、その上には緑の草が生えています。 城の周りには、木々が茂っています。 |
|
〇正解 | |
画像には、茶碗に入ったチキン南蛮丼が 映っています。チキン南蛮は、茶色で、カリカリに揚がっています。 ご飯の上に のっており、甘辛いタレがかかっています。 |
|
×誤り 正解は名古屋の矢場とんの味噌カツ丼 |
|
画像には、一人の女子高生が写っています。彼女は紺色のブレザーと 白いブラウスを着ています。また、紺色のネクタイ を締めています。 彼女は右手でスマートフォンを持っており、 笑顔で画面を見ています。 彼女の後ろには、木々や建物が見えます。 |
|
△一部誤り | |
画像には、オフィスで働いている女性が映っています。彼女は 紺色のジャケットを着て、白いブラウスを着ています。また、 彼女は銀色のブレスレットをつけています。 彼女はコンピュータの前に座り、キーボードの上に 手を置いています。彼女の左手はキーボードの上にあり、 右手は携帯電話を持っています。彼女は電話で話しています。 彼女の後ろには、コンピュータのモニターと、 もう1台のコンピュータが置かれています |
|
△一部誤り |
城の写真はほぼ正解といってよいだろう。このように大きく映っているものは割と正確に回答できるのだろう。
大きく映っても部品レベルのものは苦手と思う。おそらく学習ができていないか足りないのだろう。CPUの箱とメモリもそのものは当たっているが細かいところが間違っていた。
食べ物も苦手な分野だろう。バリエーションが多く、今回のようにチキン南蛮丼の写真といわれたらそうかと思うようなことはある。人間が迷うようなものはAIでも判断が難しそうだ。
人物については細かい誤りが多かった。おそらく写真では前後の位置関係を判断しづらいのだろう。2つ目の働く女性の写真では、手をキーボードの上に置くと回答しているが、写真ではそう見えない。AIでは位置関係を見抜けなくてそう判断したのだろうか。
何らかの追加情報で推論を構築でくれば、正しい説明になると思うが。
100%の正答率とはいかないが、Google Lenseのような使い方を期待できそうだ。ただしGoogle Lenseは相当な学習データ量を抱えているのだろう。写した服のメーカ、商品を正確に表示できる。llava-calm2ではそこまでは望めないと思う。75億パラメータでは無理としたら、Google Lenseはどれだけのパラメータ数なのだろう。
そしてその機能をPCやスマホで同等の性能で提供ができるようになる日が徐々に近づいていると思う。この数年でAIはまだまだ進化しそうだ。
PR