技術の進化は止まりません。こちらのページの前半をDatabricksでウォークスルーします。
以下のステップを踏みます。
- 複数の画像を理解するためにマルチモーダルのLLMであるGPT4Vを使います
- 画像をダウンロードします
- テキストと画像に対するマルチモーダルインデックスとベクトルストアを作成します
- ステップ1の画像理由付けに従うマルチモーダルリトリーバを用いて適切なテキストと画像を同時に検索します
ライブラリのインストール
%pip install llama-index-multi-modal-llms-openai
%pip install llama-index-vector-stores-qdrant
%pip install llama_index ftfy regex tqdm
%pip install git+https://github.com/openai/CLIP.git
%pip install torch torchvision
%pip install matplotlib scikit-image
%pip install -U qdrant_client
dbutils.library.restartPython()
APIキーのセットアップ
Open AI APIキーはシークレットに格納しています。
# OpenAIのセットアップ
import os
import openai
OPENAI_API_TOKEN = dbutils.secrets.get("demo-token-takaaki.yayoi", "openai_api_key")
os.environ["OPENAI_API_KEY"] = OPENAI_API_TOKEN
GPT4Vによる画像の理由付けのためにTeslaのウェブサイトから画像をダウンロード
from pathlib import Path
input_image_path = Path("input_images")
if not input_image_path.exists():
Path.mkdir(input_image_path)
!wget "https://docs.google.com/uc?export=download&id=1nUhsBRiSWxcVQv8t8Cvvro8HJZ88LCzj" -O ./input_images/long_range_spec.png
!wget "https://docs.google.com/uc?export=download&id=19pLwx0nVqsop7lo0ubUSYTzQfMtKJJtJ" -O ./input_images/model_y.png
!wget "https://docs.google.com/uc?export=download&id=1utu3iD9XEgR5Sb7PrbtMf1qw8T1WdNmF" -O ./input_images/performance_spec.png
!wget "https://docs.google.com/uc?export=download&id=1dpUakWMqaXR4Jjn1kHuZfB0pAXvjn2-i" -O ./input_images/price.png
!wget "https://docs.google.com/uc?export=download&id=1qNeT201QAesnAP5va1ty0Ky5Q_jKkguV" -O ./input_images/real_wheel_spec.png
これらはワークスペースファイルとして保存されます。便利です。
GPT4VマルチモーダルLLMから画像の理由付けを生成
入力画像のプロット
from PIL import Image
import matplotlib.pyplot as plt
import os
image_paths = []
for img_path in os.listdir("./input_images"):
image_paths.append(str(os.path.join("./input_images", img_path)))
def plot_images(image_paths):
images_shown = 0
plt.figure(figsize=(16, 9))
for img_path in image_paths:
if os.path.isfile(img_path):
image = Image.open(img_path)
plt.subplot(2, 3, images_shown + 1)
plt.imshow(image)
plt.xticks([])
plt.yticks([])
images_shown += 1
if images_shown >= 9:
break
plot_images(image_paths)
これらの画像を理解するためにGPT4Vを活用
from llama_index.multi_modal_llms.openai import OpenAIMultiModal
from llama_index.core import SimpleDirectoryReader
# ローカルディレクトリを指定
image_documents = SimpleDirectoryReader("./input_images").load_data()
openai_mm_llm = OpenAIMultiModal(
model="gpt-4-vision-preview", api_key=OPENAI_API_TOKEN, max_new_tokens=1500
)
response_1 = openai_mm_llm.complete(
prompt="代替テキストとして画像を説明して下さい",
image_documents=image_documents,
)
print(response_1)
びっくりです。
最初の画像には、テキストで書かれた仕様があり、以下のような情報が含まれています:
- バッテリータイプ:Rear-Wheel Drive / Long Range AWD
- 加速(0-100 km/h):3.7秒 / 4.8秒
- 航続距離:Range 497 km (EPA est.) / Long Range 539 km (EPA est.)
- 最高速度:Top Speed 250 km/h / 217 km/h
- ドライブタイプ:Dual Motor All-Wheel Drive
- ホイールサイズ:Up to 5 Seating / 19" or 20" Wheels
- ワランティ:Basic Vehicle - 4 years or 80,000 km, whichever comes first / Battery & Drive Unit - 8 years or 192,000 km, whichever comes first
二番目の画像は、電気自動車の透視図で、車体の骨格と内部構造が示されています。画像には「Rigid Structure」と「Impact Protection」というラベルが付いており、車の安全性に関する特徴を強調しています。
三番目の画像は、最初の画像と同様に、車の仕様をリストしたテキストが含まれていますが、異なるモデルの情報が記載されています。
四番目の画像は、車の価格情報と推定納車日、潜在的な節約額、性能の概要を含むテキストが含まれています。また、異なるモデルの価格がリストされており、購入オプションに関する情報が含まれています。
五番目の画像は、再び車の仕様をリストしたテキストが含まれており、異なるモデルの情報が記載されています。
全体として、これらの画像は電気自動車の様々なモデルの詳細な仕様、価格、および構造的特徴を提供しています。
response_2 = openai_mm_llm.complete(
prompt="それぞれのスペックの価格を教えてくれませんか?",
image_documents=image_documents,
)
print(response_2)
どういうことなの…
画像には、特定の電気自動車のモデルとそのスペックが表示されていますが、直接的な価格情報は含まれていません。ただし、最後の画像には、モデルYの異なるバリアントの価格が示されています。以下は、その価格の概要です:
- Model Y Rear-Wheel Drive: $57,990
- Model Y Dual Motor All-Wheel Drive: $67,990
- Model Y Performance: $74,990
これらの価格は、推定される潜在的な節約額や、可能な連邦税のインセンティブを考慮していない、基本的な購入価格です。また、価格は地域や国によって異なる場合があり、追加のオプションや税金、手数料が加算される可能性があります。購入を検討している場合は、最新の価格とオファーについては、直接メーカーのウェブサイトを確認するか、最寄りのディーラーに問い合わせることをお勧めします。
Soraも出てきて、なおさらマルチモーダルの世界が広がりますね。