ウェブサイト検索

Monkey Chat Vision モデルを使用したテキストのラベル付けと画像解像度


導入

ビジョン言語モデルは、ビジュアル データとテキスト データを一緒に理解して処理するように設計された高度な人工知能 AI システムの 1 つです。これらのモデルは、コンピューター ビジョンと自然言語処理タスクの機能を組み合わせていることが知られています。モデルは画像を解釈し、画像に関する説明を生成するようにトレーニングされており、画像のキャプション、視覚的な質問応答、テキストと画像の合成などのさまざまなアプリケーションが可能になります。これらのモデルは、大規模なデータセットと強力なニューラル ネットワーク アーキテクチャでトレーニングされており、モデルが複雑な関係を学習するのに役立ちます。これにより、モデルが目的のタスクを実行できるようになります。この高度なシステムは、人間とコンピューターの相互作用や、人間と同様に通信できるインテリジェント システムの開発の可能性を切り開きます。

大規模マルチモーダル モデル (LMM) は非常に強力ですが、高解像度の入力とシーンの理解に苦労します。これらの課題に対処するために、Monkey が最近導入されました。視覚言語モデルである Monkey は、入力画像を均一なパッチに分割することによって入力画像を処理します。各パッチは、元の視覚エンコーダのトレーニングで使用されたサイズ (例: 448×448 ピクセル) と一致します。

この設計により、このモデルは高解像度の画像を処理できるようになります。 Monkey は 2 つの部分からなる戦略を採用しています。1 つは、高解像度によって視覚的なキャプチャーを強化することです。 2 番目に、マルチレベル記述生成手法を使用してシーンとオブジェクトの関連付けを強化し、視覚データのより包括的な理解を作成します。このアプローチでは、詳細なビジュアルをキャプチャすることでデータからの学習が向上し、説明テキスト生成の効率が向上します。

前提条件

  • テキストのラベル付けと画像処理についての基本的な理解。
  • コンピューター ビジョン タスクでの AI モデルの使用に精通していること。
  • Monkey Chat Vision Model および互換性のある開発環境へのアクセス。

モンキー アーキテクチャの概要

全体的な Monkey アーキテクチャ (画像ソース)

このアプローチを段階的に見てみましょう。

スライディングウィンドウによる画像処理

  • 入力画像: 寸法 (H X W X 3) の画像 (I)。(H) と (W) は画像の高さと幅、3 はカラー チャネル (RGB) を表します。
  • スライディング ウィンドウ: 画像は、寸法 (H_v X W_v) のスライディング ウィンドウ (W) を使用して小さなセクションに分割されます。このプロセスにより、画像がローカル セクションに分割され、モデルが画像の特定の部分に焦点を当てることができるようになります。

LoRA の統合

  • LoRA (低ランク適応): LoRA は、画像のさまざまな部分に存在する多様な視覚要素を処理するために、各共有エンコーダー内で使用されます。 LoRA は、モデルのパラメーターや計算負荷を大幅に増加させることなく、エンコーダーが詳細に敏感な特徴をより効果的にキャプチャするのに役立ちます。

構造情報の維持

  • グローバル画像のサイズ変更: 入力画像の全体的な構造情報を保存するために、元の画像が次元 ((H_v, W_v)) にサイズ変更されて、グローバル画像が作成されます。このグローバル イメージは全体的なビューを維持し、パッチは詳細な視点を提供します。

ビジュアルエンコーダーとリサンプラーによる処理

  • 同時処理: 個々のパッチとグローバル イメージの両方が、ビジュアル エンコーダーとリサンプラーを通じて同時に処理されます。
  • ビジュアル リサンプラー: Flamingo モデルからインスピレーションを得たビジュアル リサンプラーは、次の 2 つの主要な機能を実行します。

    1. 視覚情報の要約: 画像セクションからの視覚情報を要約します。
    2. より高度な意味表現の取得: 視覚情報を言語特徴空間に変換し、意味の理解を深めます。

クロスアテンションモジュール

  • クロスアテンション メカニズム: リサンプラーは、トレーニング可能なベクトル (埋め込み) がクエリ ベクトルとして機能するクロスアテンション モジュールを使用します。ビジュアル エンコーダーからの画像特徴は、クロスアテンション操作のキーとして機能します。これにより、モデルはコンテキスト情報を組み込みながら、重要な画像部分に焦点を当てることができます。

詳細と全体的な理解のバランスをとる

  • バランスのとれたアプローチ: この方法は、詳細なローカル分析の必要性と全体的なグローバル画像の視点のバランスをとります。このバランスにより、計算リソースを大幅に増加させることなく、詳細な特徴と全体的な構造を捕捉することでモデルのパフォーマンスが向上します。

このアプローチでは、LoRA やクロスアテンションなどの高度な技術を活用して、局所的な詳細分析とグローバルな概要を組み合わせることにより、複雑な画像を理解するモデルの能力が向上します。

いくつかの重要なポイント

  • リソース効率の高い入力解像度の向上: Monkey は、大規模な事前トレーニングを必要とせずに、LMM の入力解像度を向上させます。高解像度を処理するために Vision Transformer (ViT) モデルを直接補間する代わりに、スライディング ウィンドウ方式を採用して高解像度画像を小さなパッチに分割します。各パッチは、LoRA 調整を備えた静的ビジュアル エンコーダーとトレーニング可能なビジュアル リサンプラーによって処理されます。
  • トレーニング データの分散の維持: Monkey は、サポートされている解像度に各パッチのサイズを変更することで、より小さい解像度 (例: 448×448) でトレーニングされたエンコーダーを利用します。このアプローチでは、元のデータ分布が維持され、コストのかかるトレーニングを最初から回避できます。
  • トレーニング可能なパッチの利点: この方法はさまざまなトレーニング可能なパッチを使用し、位置埋め込みのための従来の補間技術よりも効果的に解像度を高めます。
  • マルチレベル記述の自動生成: Monkey には複数の高度なシステム (BLIP2、PPOCR、GRIT、SAM、ChatGPT など) が組み込まれており、これらのジェネレーターからの洞察を組み合わせることで高品質のキャプションを生成します。このアプローチは、階層的かつ文脈的な理解を介して、広範囲の視覚的な詳細をキャプチャします。

モンキーの利点

  • 高解像度のサポート: 事前トレーニングなしで最大 1344×896 の解像度をサポートし、小さなオブジェクトや密集したオブジェクトやテキストの識別に役立ちます。
  • コンテキストの関連性の向上: 複数のターゲット間の関係の理解を強化し、共通の知識を活用してより適切なテキスト説明を生成します。
  • パフォーマンスの強化: 画像キャプションやビジュアル質問応答など、さまざまなタスクにわたって競争力のあるパフォーマンスを示し、特に高密度テキストの質問応答において、GPT-4V などのモデルと比較して有望な結果を示しています。

全体として、Monkey は、既存のモデルをより効率的に使用することで、LMM での解像度と記述生成を向上させる洗練された方法を提供します。

Monkey でビジュアル Q&A を行うにはどうすればよいですか?

Monkey モデルを実行して実験するには、まずノートブックを起動するか、ターミナルを起動します。モデルの実行には A4000 GPU を使用することを強くお勧めします。

NVIDIA A6000 GPU は、ビジュアル質問応答 (VQA) を含む、さまざまな AI および機械学習アプリケーションにおける優れたパフォーマンスで知られる強力なグラフィックス カードです。メモリと高度な Ampere アーキテクチャを備えた A4000 は、高いスループットと効率を提供し、VQA タスクで必要な複雑な計算の処理に最適です。

!nvidia-smi

設定

以下のコードセルを実行します。これにより、リポジトリのクローンが作成され、requirements.txt ファイルがインストールされます。

git clone https://github.com/Yuliang-Liu/Monkey.git
cd ./Monkey
pip install -r requirements.txt

高速で使いやすい gradio デモを実行できます。

 python demo.py

またはコードに従ってください。

from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "echo840/Monkey-Chat"
model = AutoModelForCausalLM.from_pretrained(checkpoint, device_map='cuda', trust_remote_code=True).eval()
tokenizer = AutoTokenizer.from_pretrained(checkpoint, trust_remote_code=True)
tokenizer.padding_side = 'left'
tokenizer.pad_token_id = tokenizer.eod_id

上記のコードは、Hugging Face Transformers ライブラリから事前トレーニングされたモデルとトークナイザーを読み込みます。

「echo840/Monkey-Chat 」は、ロードするモデル チェックポイントの名前です。次に、モデルの重みと構成をロードし、計算を高速化するためにデバイスを CUDA 対応 GPU にマッピングします。

img_path = '/notebooks/quick_start_pytorch_images/image 2.png'
question = "provide a detailed caption for the image"

query = f'<img>{img_path}</img> {question} Answer: '
input_ids = tokenizer(query, return_tensors='pt', padding='longest')
attention_mask = input_ids.attention_mask
input_ids = input_ids.input_ids

pred = model.generate(
    input_ids=input_ids.cuda(),
    attention_mask=attention_mask.cuda(),
    do_sample=False,
    num_beams=1,
    max_new_tokens=512,
    min_new_tokens=1,
    length_penalty = 1,
    num_return_sequences=1,
    output_hidden_states=True,
    use_cache=True,
    pad_token_id=tokenizer.eod_id,
    eos_token_id=tokenizer.eod_id,
)

response = tokenizer.decode(pred[0][input_ids.size(1):].cpu(), skip_special_tokens=True).strip()
print(response)

このコードは、Monkey を使用したプロンプト クエリに基づいて、詳細なキャプション、説明、またはその他の出力を生成します。画像を保存したパスを指定し、画像参照とキャプションを求める質問を含むクエリ文字列を作成します。次に、入力テキストをトークン ID に変換する「トークナイザー」を使用してクエリがトークン化されます。

do_sample=Falsenum_beams=1 などのパラメータは、サンプリングを無効にすることで確定的な出力を保証します。 max_new_tokensmin_new_tokenslength_penalty などの他のパラメータは、生成されるシーケンスの長さと性質を制御します。生成後、出力トークンは人間が判読できるテキストにデコードされ、特別なトークンはスキップされ、画像を説明するキャプションである最終応答が形成されます。最後に、生成されたキャプションを印刷します。

結果

私たちはスクリーンショットだけの非常に基本的な画像でモデルを試しましたが、画像が何であるかをかなりうまく認識できました。

Monkey 出力:- 画像には、青い背景のコンピューター インターフェイスが表示されます。主な焦点は、ラベルが「A4000」、価格が「$0.76/hr」のマシンです。このマシンには 45 GB RAM と 8 個の CPU が搭載されています。インターフェイスには、青い「STOP MACHINE」ボタンや白い「11 時間で自動シャットダウン」ボタンなど、いくつかのボタンやアイコンもあります。 「45 GB RAM 」および「8 CPU 」というテキストも表示されます。全体的なレイアウトは、仮想マシンを管理するためのユーザーフレンドリーなインターフェイスを示唆しています。

猿の出力:- 画像では、ゴールデン レトリバーが空中で捉えられ、空中に浮いている黄色いテニス ボールに向かって飛び跳ねています。犬は体を伸ばして前足をボールに伸ばし、尻尾を興奮して高く上げています。背景は青々とした緑の芝生で、犬の白い毛皮とはっきりとしたコントラストを生み出しています。画像はローアングルから撮影されているため、犬がより大きく印象的に見えます。犬の集中した表情とダイナミックなポーズは、激しい遊び心の瞬間を連想させます。

プロンプト:- 画像の詳細なキャプションを入力します

Monkey 出力:- この画像は、夜の街のスカイラインを描いたものです。空は黄色と青の渦巻く色で満たされ、星空のような効果を生み出します。手前に時計のある高い建物があります。この絵には、黄色い光が当たっている大きな木も描かれています。全体的な効果は、フィンセント・ファン・ゴッホの有名な絵画「星月夜」を彷彿とさせる、静けさと美しさの1つです。

画像の細部に至るまで詳細に説明とキャプションが記載されていることに非常に感銘を受けました。 AIが生成したキャプションは本当に素晴らしいです!

下の画像は、さまざまな VQA タスクにおける Monkey の機能を示しています。サルは質問を分析し、重要な画像要素を特定し、細かいテキストやオブジェクトに関する理由を認識し、視覚的なグラフを理解します。この図は、Monkey の優れたキャプション能力、対象を正確に説明し、要約を提供する能力も示しています。

さまざまなタスクに対するサルの結果 (画像ソース)

比較結果

定性分析では、詳細なキャプションを生成するタスクに関して、Monkey を GPT4V および他の LMM と比較しました。

モンキーと GPT-4V は背景に「エンポリオ アルマーニ」店舗を特定し、モンキーは赤いコートと黒いズボンを着て黒い財布を持った女性などの追加情報を提供しました。 (画像出典)

さらに実験を行ったところ、多くの場合、複雑なテキストベースの問い合わせを理解する場合、Monkey は GPT4V と比較して優れたパフォーマンスを示したことがわかりました。

以下の図の VQA タスクの比較結果は、モデル サイズをスケールアップすることにより、Monkey が高密度テキストを含むタスクで大幅なパフォーマンス上の利点を達成していることを示しています。 QwenVL-Chat [3]、LLaVA-1.5 [29]、mPLUG-Owl2 [56] よりも優れているだけでなく、GPT-4V [42] と比較しても有望な結果を達成しています。これは、マルチモーダル大規模モデルのパフォーマンス向上にはモデル サイズをスケールアップすることが重要であることを示しており、パフォーマンス向上における私たちの手法の有効性を検証しています。

VQA タスクにおける Monkey と GPT-4V、QwenVL-Chat、LLaVA-1.5、および mPLUG-Owl2 との比較。

実用化

  • 自動画像キャプション: 電子商取引、ソーシャル メディア、デジタル アーカイブなど、さまざまなドメインの画像の詳細な説明を生成します。
  • 支援技術: スクリーン リーダーやナビゲーション支援機能などのリアルタイム アプリケーションで画像の説明的なキャプションを生成することで、視覚障害のある人を支援します。
  • インタラクティブなチャットボット: チャットボットと統合して、カスタマー サポートや仮想アシスタントに詳細な視覚的な説明とコンテキストを提供し、さまざまなサービスでのユーザー エクスペリエンスを向上させます。
  • 画像ベースの検索エンジン: 検索の精度と関連性を高める、豊富なコンテキスト認識型の説明を提供することで、画像検索機能を向上させます。