PaliGemma: 軽量のオープン ビジョン言語モデル (VLM)
導入
Google は最近、新しい軽量ビジョン モデル PaliGemma を発表しました。このモデルは 2024 年 5 月 14 日にリリースされ、マルチモーダル機能を備えています。
ビジョン言語モデル (VLM) は、視覚データとテキスト データを統合して、画像と言語の両方の理解と生成が必要なタスクを実行する高度なタイプの人工知能です。これらのモデルは、コンピューター ビジョンと自然言語処理の技術を組み合わせて、画像の分析、説明的なキャプションの生成、ビジュアル コンテンツに関する質問の回答、さらには複雑な視覚的推論を実行できるようにします。
VLM は、大規模なデータセットと洗練されたニューラル アーキテクチャを活用することで、コンテキストを理解し、関係を推測し、一貫したマルチモーダルな出力を生成できます。これにより、画像認識、自動コンテンツ作成、インタラクティブ AI システムなどの分野のアプリケーションにとって強力なツールとなります。
Gemma は、Gemini モデルと同じ研究とテクノロジーを使用して開発された、軽量で最先端のオープン モデルのファミリーです。 PaliGemma は、最近 Gemma ファミリに追加された強力なオープン ビジョン言語モデル (VLM) です。
PaliGemma の前提条件
- ML の基本知識: 機械学習の概念とビジョン言語モデル (VLM) についての理解。
- プログラミング スキル: Python の熟練度。
- 依存関係: PyTorch および Hugging Face Transformers ライブラリをインストールします。
- ハードウェア: GPU 対応システムにより、トレーニングと推論が高速化されます。
- データセット: テストまたは微調整に適したビジョン言語データセットへのアクセス。
パリジェンマとは何ですか?
PaliGemma は、PaLI-3 からインスピレーションを得た強力な新しいオープン ビジョン言語モデルで、SigLIP ビジョン モデルと Gemma 言語モデルを使用して構築されています。画像や短いビデオのキャプション、視覚的な質問応答、画像内のテキスト認識、オブジェクト検出、セグメンテーションなどのタスクで最高レベルのパフォーマンスを発揮するように設計されています。
事前トレーニングされたチェックポイントと微調整されたチェックポイントは両方とも、さまざまな解像度でオープンソース化されており、すぐに使用できるタスク固有の解像度も含まれています。
PaliGemma は、画像エンコーダとして SigLIP-So400m とテキスト デコーダとして Gemma-2B を組み合わせています。 SigLIP は、CLIP と同様に画像とテキストを理解できる SOTA モデルであり、画像とテキストのエンコーダーを共同でトレーニングすることを特徴としています。 PaLI-3 からインスピレーションを得た結合 PaliGemma モデルは、画像とテキストのデータで事前トレーニングされており、キャプションや参照セグメンテーションなどのタスクに合わせて簡単に微調整できます。 Gemma はデコーダ専用モデルであり、テキスト生成を処理します。リニア アダプターを介して SigLIP の画像エンコーディングを Gemma と統合することにより、PaliGemma は強力なビジョン言語モデルになります。
ソース
PaliGemma モデル リリースの概要
ミックスチェックポイント:
- タスクの混合に合わせて微調整された事前トレーニング済みモデル。
- フリーテキストプロンプトを使用した汎用推論に適しています。
- 研究目的のみを目的としています。
FT チェックポイント:
- さまざまな学術ベンチマークに特化した微調整されたモデル。
- さまざまな解像度でご利用いただけます。
- 研究目的のみを目的としています。
モデルの解像度:
- 224x224
- 448x448
- 896x896
モデルの精度:
- bfloat16
- float16
- float32
リポジトリ構造:
- 各リポジトリには、特定の解決策とタスクのチェックポイントが含まれています。
- 精度ごとに 3 つのリビジョンが利用可能です。
- メイン ブランチには float32 チェックポイントが含まれています。
- bfloat16 および float16 リビジョンには、対応する精度が含まれています。
互換性:
- 🤗 トランスフォーマーとオリジナルの JAX 実装と互換性のあるモデルには、別のリポジトリが利用可能です。
メモリに関する考慮事項:
- 高解像度モデル (448x448、896x896) は、大幅に多くのメモリを必要とします。
- 高解像度モデルは、OCR などのきめの細かいタスクに役立ちます。
- ほとんどのタスクでは品質の向上はわずかです。
- 224x224 バージョンは、ほとんどの目的に適しています。
PaliGemma を試してみる
PaliGemma 推論に 🤗 トランスフォーマーを使用する方法を検討します。
まず、最新バージョンの 🤗 トランスフォーマーとその他の依存関係を使用していることを確認するために、更新フラグを使用して必要なライブラリをインストールしましょう。
!pip install -q -U accelerate bitsandbytes git+https://github.com/huggingface/transformers.git
PaliGemma を使用するには、Gemma ライセンスに同意する必要があります。リポジトリにアクセスしてアクセスをリクエストします。 Gemma ライセンスにすでに同意している場合は、問題なく使用できます。アクセスできるようになったら、notebook_login()
を使用して Hugging Face Hub にログインし、以下のセルを実行してアクセス トークンを入力します。
入力画像
ソース
input_text = "how many dogs are there in the image?"
次に、必要なライブラリをインポートし、transformers
ライブラリから import AutoTokenizer
、PaliGemmaForConditionalGeneration
、および PaliGemmaProcessor
をインポートします。
インポートが完了したら、事前トレーニング済みの PaliGemma モデルをロードします。このモデルは torch.bfloat16
データ型でロードされます。これにより、最新のハードウェアでパフォーマンスと精度のバランスが取れます。
from transformers import AutoTokenizer, PaliGemmaForConditionalGeneration, PaliGemmaProcessor
import torch
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model_id = "google/paligemma-3b-mix-224"
model = PaliGemmaForConditionalGeneration.from_pretrained(model_id, torch_dtype=torch.bfloat16)
processor = PaliGemmaProcessor.from_pretrained(model_id)
コードが実行されると、プロセッサは画像とテキストの両方を前処理します。
inputs = processor(text=input_text, images=input_image,
padding="longest", do_convert_rgb=True, return_tensors="pt").to("cuda")
model.to(device)
inputs = inputs.to(dtype=model.dtype)
次に、モデルを使用して、入力された質問に基づいてテキストを生成します。
with torch.no_grad():
output = model.generate(**inputs, max_length=496)
print(processor.decode(output[0], skip_special_tokens=True))
出力:-
画像には何匹の犬がいますか? 1
モデルを 4 ビットでロードします
モデルを 4 ビットおよび 8 ビットでロードして、トレーニングと推論に必要な計算リソースとメモリ リソースを削減することもできます。まず、BitsAndBytesConfig
を初期化します。
from transformers import BitsAndBytesConfig
import torch
nf4_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
bnb_4bit_compute_dtype=torch.bfloat16
)
次に、モデルをリロードし、上記のオブジェクトを quantization_config,
として渡します。
from transformers import AutoTokenizer, PaliGemmaForConditionalGeneration, PaliGemmaProcessor
import torch
device="cuda"
model_id = "google/paligemma-3b-mix-224"
model = PaliGemmaForConditionalGeneration.from_pretrained(model_id, torch_dtype=torch.bfloat16,
quantization_config=nf4_config, device_map={"":0})
processor = PaliGemmaProcessor.from_pretrained(model_id)
出力を生成し、
with torch.no_grad():
output = model.generate(**inputs, max_length=496)
print(processor.decode(output[0], skip_special_tokens=True))
出力:-
画像には何匹の犬がいますか? 1
推論に PaliGemma を使用する: 主要な手順
入力テキストのトークン化:
- テキストは通常どおりトークン化されます。
<bos>
トークンが先頭に追加されます。- 改行トークン (
\n
) が追加されます。これはモデルのトレーニング入力プロンプトの一部であるため重要です。
画像トークンの追加:
- トークン化されたテキストには、特定の数の
<image>
トークンが接頭辞として付けられます。 <image>
トークンの数は、入力画像の解像度と SigLIP モデルのパッチ サイズによって異なります。
PaliGemma モデルの場合:
- 224x224 解像度: 256
<image>
トークン (224/14 * 224/14)。 - 解像度 448x448: 1024
<image>
トークン。 - 896x896 解像度: 4096
<image>
トークン。
メモリに関する考慮事項:
- 画像が大きくなると入力シーケンスが長くなり、より多くのメモリが必要になります。
- 画像を大きくすると OCR などのタスクの結果が向上しますが、通常、ほとんどのタスクでは品質の向上はわずかです。
- より高い解像度を選択する前に、特定のタスクをテストしてください。
トークン埋め込みの生成:
- 完全な入力プロンプトは言語モデルのテキスト埋め込み層を通過し、2048 次元のトークン埋め込みが生成されます。
画像の処理:
- 入力画像は、バイキュービック リサンプリングを使用して、必要なサイズ (たとえば、最小解像度モデルの場合は 224x224) にサイズ変更されます。
- 次に、SigLIP Image Encoder を通過して、パッチごとに 1152 次元の画像埋め込みが作成されます。
- これらの画像の埋め込みは、テキスト トークンの埋め込みと一致するように 2048 次元に投影されます。
画像とテキストの埋め込みを組み合わせる:
- 最終的な画像埋め込みは、
<image>
テキスト埋め込みとマージされます。 - この結合された入力は、自己回帰テキスト生成に使用されます。
自己回帰テキスト生成:
- 完全な入力に対して完全なブロック アテンションを使用します (画像 +
<bos>
+ プロンプト +\n
)。 - 生成されたテキストに因果的注意マスクを採用します。
簡略化された推論:
- プロセッサーとモデルのクラスは、これらすべての詳細を自動的に処理します。
- 前の例で示したように、推論は高レベルのトランスフォーマー API を使用して実行できます。
アプリケーション
PaliGemma のようなビジョン言語モデルは、さまざまな業界で幅広い用途に使用できます。いくつかの例を以下に示します。
- 画像キャプション: 画像の説明的なキャプションを自動的に生成します。これにより、視覚障害のある人のアクセシビリティが向上し、ユーザー エクスペリエンスが向上します。
- Visual Question Answering (VQA): 画像に関する質問に回答します。これにより、よりインタラクティブな検索エンジン、仮想アシスタント、教育ツールが可能になります。
- 画像とテキストの取得: テキスト クエリに基づいて関連する画像を取得し、その逆も同様で、マルチメディア データベースでのコンテンツの発見と検索を容易にします。
- インタラクティブなチャットボット: テキスト入力と視覚的なコンテキストの両方を理解することでユーザーとの会話に参加し、よりパーソナライズされたコンテキストに関連した応答を導きます。
- コンテンツ作成: 視覚的な入力に基づいてテキストによる説明、要約、またはストーリーを自動的に生成し、マーケティング、ストーリーテリング、およびクリエイティブ業界の自動コンテンツ作成を支援します。
- 人工エージェント: これらのテクノロジーを利用して、周囲の環境を認識して理解する能力を備えたロボットまたは仮想エージェントを強化し、ロボット工学、自動運転車、スマート ホーム システムでのアプリケーションを可能にします。
- 医用画像処理: 医療画像 (X 線、MRI など) を臨床メモやレポートとともに分析し、放射線科医の診断と治療計画を支援します。
- ファッションと小売: 視覚的な好みとテキストの説明に基づいてパーソナライズされた製品の推奨を提供し、ショッピング体験を強化し、販売コンバージョン率を高めます。
- 光学式文字認識: 光学式文字認識 (OCR) では、画像から可視テキストを抽出し、それを機械可読テキスト形式に変換します。単純そうに聞こえますが、実稼働アプリケーションに OCR を実装すると、重大な課題が生じる可能性があります。
- 教育ツール: 視覚的なコンテンツとテキストによる説明、クイズ、演習を組み合わせて、理解力と記憶力を高めるインタラクティブな学習教材を作成します。
これらはほんの数例にすぎません。研究者や開発者が新しいユースケースを模索し、これらのテクノロジーをさまざまなドメインに統合するにつれて、ビジョン言語モデルの潜在的なアプリケーションは拡大し続けています。
結論
結論として、PaliGemma は視覚言語モデルの分野で大きな進歩をもたらし、画像に基づいてコンテンツを理解して生成するための強力なツールを提供すると言えます。 PaliGemma は、視覚情報とテキスト情報をシームレスに統合する機能により、幅広い業界にわたる研究と応用に新たな道を切り開きます。画像キャプションから光学式文字認識まで、PaliGemma の機能はイノベーションを推進し、デジタル時代の複雑な問題に対処する可能性を秘めています。
記事をお読みいただければ幸いです。
リソース
- PaliGemma、Gemma 2、およびアップグレードされた責任ある AI ツールキットの紹介
- PaliGemma – Google の最先端のオープン ビジョン言語モデル
- PaliGemma Github README
- PaliGemma ドキュメント
- PaliGemma 微調整ドキュメント
- Google Colab で PaliGemma を微調整する
- ハグフェイスのブログ