Transformers documentation

VipLlava

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

このモデルは2023年12月1日にHF papersで公開され、2023年12月13日にHugging Face Transformersに貢献されました。

VipLlava

FlashAttention SDPA

概要

VipLlavaモデルは、Mu Cai、Haotian Liu、Siva Karthik Mustikovela、Gregory P. Meyer、Yuning Chai、Dennis Park、Yong Jae Lee による論文 Making Large Multimodal Models Understand Arbitrary Visual Prompts で提案されました。

VipLlavaは、Llavaの学習プロトコルを強化し、学習中に「赤いバウンディングボックス」や「指し示す矢印」などの自然なキューを付与して画像をマークし、モデルと対話します。

論文の抄録は以下の通りです。

既存の大規模ビジョン・言語マルチモーダルモデルは画像全体の理解に焦点を当てていますが、領域固有の理解を実現するには顕著なギャップがあります。テキスト座標や空間エンコーディングを用いる現在のアプローチは、ビジュアルプロンプティングのためのユーザーフレンドリーなインターフェースを提供できないことがよくあります。この課題に対処するため、私たちは任意のビジュアルプロンプトをデコードできる新しいマルチモーダルモデルを導入します。これにより、ユーザーは「赤いバウンディングボックス」や「指し示す矢印」のような自然なキューを使用して、直感的に画像にマークを付け、モデルと対話できるようになります。私たちのシンプルな設計は、複雑な領域エンコーディングの必要性を排除しながら、ビジュアルマーカーをRGB画像に直接オーバーレイし、Visual7W、PointQA、Visual Commonsense Reasoning ベンチマークなどの領域理解タスクにおいて最先端の性能を達成します。さらに、私たちはViP-Benchを提示します。これは、モデルが複数の次元にわたってビジュアルプロンプトを理解する能力を評価するための包括的なベンチマークであり、この分野における将来の研究を可能にします。コード、データ、モデルは公開されています。

元のコードはこちらで確認できます。

このモデルは Younes Belkada によって提供されました。

使用のコツ

  • このアーキテクチャは llava のアーキテクチャに似ていますが、マルチモーダルプロジェクターが連結されたビジョンの隠れ状態のセットを受け取り、そのモジュールに追加のレイヤーマルチノルム層を持つ点が異なります。

  • バッチ生成を計算する際は、より正確な結果が得られるため、padding_side="left"の使用を推奨します。生成を行う前に、processor.tokenizer.padding_side = "left"を呼び出すことを確認してください。

  • モデルは、同一のプロンプト内で複数の画像を処理するように明示的に学習されていません。技術的には可能ですが、不正確な結果になる可能性があります。

v4.46 以降にリリースされた LLaVA モデルでは、processor.patch_size = {{patch_size}}、processor.num_additional_image_tokens = {{num_additional_image_tokens}} および processor.vision_feature_select_strategy = {{vision_feature_select_strategy}} を追加することに関する警告が発生します。モデルのチェックポイントを所有している場合は、これらの属性をプロセッサーに追加することを強く推奨します。所有していない場合は、プルリクエストを開いてください。 これらの属性を追加すると、LLaVA は 1 枚の画像に必要なイメージトークンの数を推定し、トークン数に応じてテキストに <image> プレースホルダーを拡張して追加します。通常、1 枚の画像あたり約 500 トークン必要になるため、テキストが切り捨てられないようご注意ください。切り捨てが発生すると、エンベディングのマージ時に失敗します。 これらの属性は、model.config.vision_config.patch_size または model.config.vision_feature_select_strategy としてモデルの config から取得できます。num_additional_image_tokens は、ビジョンバックボーンが CLS トークンを追加する場合は 1、ビジョンパッチに何も追加されない場合は 0 に設定してください。

  • より良い結果を得るためには、プロンプトを正しくフォーマットするために、プロセッサのapply_chat_template()メソッドの使用を推奨します。そのためには、会話履歴を構築する必要があります。プレーンな文字列を渡すだけでは、プロンプトはフォーマットされません。チャットテンプレートの会話履歴における各メッセージは、“role”と“content”をキーとする辞書です。“content”は、“text”と“image”のモダリティに対して、以下の形式の辞書のリストである必要があります:
from transformers import AutoProcessor


processor = AutoProcessor.from_pretrained("llava-hf/vip-llava-7b-hf")

conversation = [
    {
        "role": "user",
        "content": [
            {"type": "image"},
            {"type": "text", "text": "What’s shown in this image?"},
        ],
    },
    {
        "role": "assistant",
        "content": [{"type": "text", "text": "This image shows a red stop sign."},]
    },
    {

        "role": "user",
        "content": [
            {"type": "text", "text": "Describe the image in more details."},
        ],
    },
]

text_prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)

# Note that the template simply formats your prompt, you still have to tokenize it and obtain pixel values for your images
print(text_prompt)
"###Human: <image>\nWhat’s shown in this image?###Assistant: This image shows a red stop sign.###Human: Describe the image in more details.###Assistant:"
  • チャットプロンプトを自分で構築したい場合は、VipLLaVaのチェックポイントが受け入れるプロンプト形式のリストを以下に示します。
A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions.###Human: <image>\n<prompt>###Assistant:

複数ターンの会話の場合:

A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions.###Human: <image>\n<prompt1>###Assistant: <answer1>###Human: <prompt2>###Assistant:

VipLlavaConfig

クラス transformers.VipLlavaConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevision_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonetext_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneimage_token_index: int = 32000projector_hidden_act: str = 'gelu'projector_layernorm_eps: float = 1e-05vision_feature_layers: int | list[int] | tuple[int, ...] = (-2, -5, -8, -11, 6)image_seq_length: int = 576tie_word_embeddings: bool = False )

パラメータ

  • vision_config (Union[dict, ~configuration_utils.PreTrainedConfig]、任意) — ビジョンバックボーンの config オブジェクトまたは辞書です。
  • text_config (Union[dict, ~configuration_utils.PreTrainedConfig]、省略可) — テキストバックボーンの設定オブジェクトまたは辞書。
  • image_token_index (int、任意、デフォルトは 32000) — 入力画像のプレースホルダーとして使用される画像トークンのインデックスです。
  • projector_hidden_act (str、任意、デフォルトは gelu) — マルチモーダルプロジェクターで使用する活性化関数です。
  • projector_layernorm_eps (float、任意、デフォルト値は 1e-05) — projector layernorm の layer norm epsilon
  • vision_feature_layers (Union[int, list[int]]、任意、デフォルトは [-2, -5, -8, -11, 6]) — ビジュアル特徴を抽出するレイヤー、またはビジュアル特徴を選択するためのレイヤーのリストです。
  • image_seq_length (int、任意、デフォルトは 576) — 1つの画像埋め込みのシーケンス長です。
  • tie_word_embeddings (bool、任意、デフォルトは False) — モデルの tied_weights_keys マッピングに従って重み埋め込みを共有するかどうかを指定します。

これは VipLlavaModel の設定を保存するための設定クラスです。指定された引数に基づいて Vipllava モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、llava-hf/vip-llava-7b-hf と同様の設定が得られます。

設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。

例:

>>> from transformers import VipLlavaForConditionalGeneration, VipLlavaConfig, CLIPVisionConfig, LlamaConfig

>>> # Initializing a CLIP-vision config
>>> vision_config = CLIPVisionConfig()

>>> # Initializing a Llama config
>>> text_config = LlamaConfig()

>>> # Initializing a VipLlava vipllava-7b style configuration
>>> configuration = VipLlavaConfig(vision_config, text_config)

>>> # Initializing a model from the vipllava-7b style configuration
>>> model = VipLlavaForConditionalGeneration(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

VipLlavaModel

クラス transformers.VipLlavaModel

< >

( config: VipLlavaConfig )

パラメータ

  • config (VipLlavaConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。

ビジョンバックボーンと言語モデルで構成され、言語モデリングヘッドを備えていない VipLlava モデル。

このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Nonepixel_values: typing.Optional[torch.FloatTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Nonevision_feature_layers: int | list[int] | None = Noneuse_cache: bool | None = Nonemm_encoder_outputs: dict[str, transformers.modeling_outputs.BaseModelOutputWithPooling] | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → VipLlavaModelOutputWithPast or tuple(torch.FloatTensor)

パラメータ

  • input_ids (torch.LongTensor の形状 (batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。

    インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。

    入力IDとは何ですか?

  • pixel_values (torch.FloatTensor、形状 (batch_size, num_channels, image_size, image_size)、任意) — 入力画像に対応するテンソルです。ピクセル値は CLIPImageProcessor を使用して取得できます。詳細については CLIPImageProcessor.call() を参照してください(LlavaProcessor は画像の処理に CLIPImageProcessor を使用しています)。
  • attention_mask (torch.Tensor の形状 (batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。 [0, 1]:
    • マスクされていないトークンに対して1
    • マスクされたトークンに対しては 0 です。

    アテンションマスクとは?

  • position_ids (torch.LongTensor の形状 (batch_size, sequence_length), 、任意) — 各入力シーケンスのトークンが位置埋め込み内で占める位置のインデックス。範囲 [0, config.n_positions - 1].

    ポジションIDとは?

  • past_key_values (~cache_utils.Cache, 省略可) — 逐次デコードを高速化するために使用できる、事前計算された隠れ状態(自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー)。通常、これはデコードの以前の段階でモデルが返した past_key_values であり、 use_cache=True または config.use_cache=True.

    入力として許可されるのは Cache インスタンスのみです。kv cache ガイドを参照してください。 past_key_values が渡されない場合、デフォルトで DynamicCache が初期化されます。

    モデルは、入力として与えられたのと同じキャッシュ形式を出力します。

    past_key_values を使用する場合、すべての input_ids(形状 (batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理の input_ids(形状 (batch_size, unprocessed_length))のみを入力することになります。

  • inputs_embeds (torch.FloatTensor、形状 (batch_size, sequence_length, hidden_size)、任意) — input_ids を渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_ids のインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。
  • vision_feature_layers (Union[int, list[int]]、省略可) — ビジュアル特徴層、またはビジュアル特徴を選択する層のインデックスのリストです。
  • use_cache (bool、任意) — True に設定すると、past_key_values のキーバリュー状態が返され、デコーディングの高速化に利用できます(past_key_values を参照)。
  • mm_encoder_outputs (dict[str, ~modeling_outputs.BaseModelOutputWithPooling], 省略可) — キーがサポートされているモダリティ、値がそのモダリティのエンコード済み出力である辞書。各エンコード済み出力は、(pooler_output, 省略可: last_hidden_states, 省略可: hidden_states, 省略可: attentions) pooler_output (形状 (batch_size, sequence_length, hidden_size), 省略可) からなるタプルです。pooler_output は、エンコーダーのマルチモーダル特徴量をテキスト埋め込みにマージしたシーケンスです。

戻り値

VipLlavaModelOutputWithPast または tuple(torch.FloatTensor)

VipLlavaModelOutputWithPast または、torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)。設定(VipLlavaConfig)や入力に応じて、さまざまな要素で構成されます。

VipLlavaModelのforwardメソッドは、__call__特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなくModuleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。

  • last_hidden_state (torch.FloatTensor、shape (batch_size, sequence_length, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。

    past_key_valuesが使用されている場合、出力されるのは、形状(batch_size, 1, hidden_size)のシーケンスの最後の隠れ状態のみです。

  • past_key_values (Cache、任意、use_cache=True が渡された場合または config.use_cache=True の場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。

    逐次デコーディングを高速化するために使用できる(past_key_values 入力参照)、事前計算済みの隠れ状態(自己注意ブロックのキーとバリュー)が含まれます。

  • hidden_states (tuple(torch.FloatTensor)、optional、output_hidden_states=True が渡された場合または config.output_hidden_states=True の場合に返されます)— torch.FloatTensor のタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は (batch_size, sequence_length, hidden_size) です。

    各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。

  • attentions (tuple(torch.FloatTensor)、optional、output_attentions=True が渡された場合または config.output_attentions=True の場合に返されます)— torch.FloatTensor のタプル(各レイヤーごとに1つ)、形状は (batch_size, num_heads, sequence_length, sequence_length)。

    アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。

  • image_hidden_states (torch.FloatTensor、任意) — サイズが(batch_size, num_images, sequence_length, hidden_size)のtorch.FloatTensor。 ビジョンエンコーダーによって生成され、最後の隠れ状態を投影した後のモデルのimage_hidden_statesです。

get_image_features

< >

( pixel_values: FloatTensorvision_feature_layers: int | list[int] | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.FloatTensor)

パラメータ

  • pixel_values (torch.FloatTensor、形状 (batch_size, channels, height, width)) — 入力画像に対応するテンソルです。
  • vision_feature_layers (Union[int, list[int]]、省略可) — ビジュアル特徴層、またはビジュアル特徴を選択するための層のインデックスのリストです。

戻り値

BaseModelOutputWithPooling または tuple(torch.FloatTensor)

torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または BaseModelOutputWithPooling。設定(VipLlavaConfig)や入力に応じて、さまざまな要素で構成されます。

ビジョンタワーから画像の最終隠れ状態を取得し、マルチモーダル投影を適用します。

  • last_hidden_state (torch.FloatTensor、shape (batch_size, sequence_length, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。

  • pooler_output (torch.FloatTensor、shape (batch_size, hidden_size)) — 補助事前学習タスクに使用される層をさらに通して処理された後、シーケンスの最初のトークン(分類トークン)の最終層の隠れ状態。例えば、BERT 系のモデルでは、線形層と tanh 活性化関数を経て処理された後の分類トークンを返します。この線形層の重みは、事前学習中の次文予測(分類)目的から学習されます。

  • hidden_states (tuple(torch.FloatTensor)、optional、output_hidden_states=True が渡された場合または config.output_hidden_states=True の場合に返されます)— torch.FloatTensor のタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は (batch_size, sequence_length, hidden_size) です。

    各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。

  • attentions (tuple(torch.FloatTensor)、optional、output_attentions=True が渡された場合または config.output_attentions=True の場合に返されます)— torch.FloatTensor のタプル(各レイヤーごとに1つ)、形状は (batch_size, num_heads, sequence_length, sequence_length)。

    アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。

get_placeholder_mask

< >

( input_ids: LongTensorinputs_embeds: FloatTensorimage_features: FloatTensor )

input_idsまたはinputs_embedsからマルチモーダルプレースホルダーマスクを取得し、プレースホルダートークンの数がマルチモーダル特徴の長さと等しいことを確認します。長さが異なる場合、エラーが発生します。

VipLlavaForConditionalGeneration

クラス transformers.VipLlavaForConditionalGeneration

< >

( config: VipLlavaConfig )

パラメータ

  • config (VipLlavaConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。

ビジョンバックボーンと言語モデルで構成されるVIPLLAVAモデル。

このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。

このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Nonepixel_values: typing.Optional[torch.FloatTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.FloatTensor] = Nonevision_feature_layers: int | list[int] | None = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0mm_encoder_outputs: dict[str, transformers.modeling_outputs.BaseModelOutputWithPooling] | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → VipLlavaCausalLMOutputWithPast or tuple(torch.FloatTensor)

パラメータ

  • input_ids (torch.LongTensor の形状 (batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。

    インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。

    入力IDとは何ですか?

  • pixel_values (torch.FloatTensor、形状 (batch_size, num_channels, image_size, image_size)、任意) — 入力画像に対応するテンソルです。ピクセル値は CLIPImageProcessor を使用して取得できます。詳細については CLIPImageProcessor.call() を参照してください(LlavaProcessor は画像の処理に CLIPImageProcessor を使用しています)。
  • attention_mask (torch.Tensor の形状 (batch_size, sequence_length), 、任意) — パディングトークンのインデックスに対するアテンションを回避するためのマスク。 [0, 1]:
    • マスクされていないトークンに対して1
    • マスクされたトークンに対しては 0 です。

    アテンションマスクとは?

  • position_ids (torch.LongTensor の形状 (batch_size, sequence_length), 、任意) — 各入力シーケンスのトークンが位置埋め込み内で占める位置のインデックス。範囲 [0, config.n_positions - 1].

    ポジションIDとは?

  • past_key_values (~cache_utils.Cache, 省略可) — 逐次デコードを高速化するために使用できる、事前計算された隠れ状態(自己アテンションブロックおよびクロスアテンションブロックのキーとバリュー)。通常、これはデコードの以前の段階でモデルが返した past_key_values であり、 use_cache=True または config.use_cache=True.

    入力として許可されるのは Cache インスタンスのみです。kv cache ガイドを参照してください。 past_key_values が渡されない場合、デフォルトで DynamicCache が初期化されます。

    モデルは、入力として与えられたのと同じキャッシュ形式を出力します。

    past_key_values を使用する場合、すべての input_ids(形状 (batch_size, sequence_length))ではなく、このモデルに過去のキー・バリュー状態が与えられていない未処理の input_ids(形状 (batch_size, unprocessed_length))のみを入力することになります。

  • inputs_embeds (torch.FloatTensor、形状 (batch_size, sequence_length, hidden_size)、任意) — input_ids を渡す代わりに、埋め込み表現を直接渡すこともできます。これは、モデル内部の埋め込みルックアップ行列よりも、input_ids のインデックスを対応するベクトルに変換する方法をより細かく制御したい場合に有用です。
  • vision_feature_layers (Union[int, list[int]]、省略可) — ビジュアル特徴層、またはビジュアル特徴を選択するための層のインデックスのリストです。
  • labels (torch.LongTensor、shape (batch_size, sequence_length)、任意) — マスク言語モデリング損失を計算するためのラベルです。インデックスは [0, ..., config.vocab_size] の範囲内であるか、-100 である必要があります(input_ids の docstring を参照)。インデックスが -100 に設定されたトークンは無視(マスク)され、損失は [0, ..., config.vocab_size] の範囲内のラベルを持つトークンに対してのみ計算されます。
  • use_cache (bool、任意) — True に設定すると、past_key_values のキーバリュー状態が返され、デコーディングの高速化に利用できます(past_key_values を参照)。
  • logits_to_keep (Union[int, torch.Tensor]、省略可、デフォルトは 0) — int の場合、最後の logits_to_keep トークンについて logits を計算します。0 の場合、すべての input_ids について logits を計算します(特殊ケース)。生成には最後のトークンの logits だけで十分であり、そのトークンのみについて計算することでメモリを節約できます。これは、長いシーケンスや大規模な語彙サイズの場合に特に顕著な効果があります。 torch.Tensor の場合、シーケンス長次元で保持するインデックスに対応する 1 次元テンソルである必要があります。これは、パックされたテンソル形式(バッチとシーケンス長を単一の次元にまとめた形式)を使用する場合に有用です。
  • mm_encoder_outputs (dict[str, ~modeling_outputs.BaseModelOutputWithPooling], 省略可) — キーがサポートされているモダリティ、値がそのモダリティのエンコード済み出力である辞書。各エンコード済み出力は、(pooler_output, 省略可: last_hidden_states, 省略可: hidden_states, 省略可: attentions) pooler_output (形状 (batch_size, sequence_length, hidden_size), 省略可) からなるタプルです。pooler_output は、エンコーダーのマルチモーダル特徴量をテキスト埋め込みにマージしたシーケンスです。

戻り値

VipLlavaCausalLMOutputWithPast または tuple(torch.FloatTensor)

VipLlavaCausalLMOutputWithPast または、return_dict=False が渡された場合、または config.return_dict=False の場合に torch.FloatTensor のタプル。設定(VipLlavaConfig)や入力に応じて、さまざまな要素で構成されます。

VipLlavaForConditionalGenerationのforwardメソッドは、__call__特殊メソッドをオーバーライドします。

この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなくModuleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。

  • loss (torch.FloatTensor、shape (1,)、optional、labels が指定された場合に返されます) — 言語モデリングの損失(次のトークン予測用)。

  • logits (torch.FloatTensor、shape (batch_size, sequence_length, config.vocab_size)) — 言語モデリングヘッドの予測スコア(SoftMax 適用前の各語彙トークンのスコア)。

  • past_key_values (Cache、任意、use_cache=True が渡された場合または config.use_cache=True の場合に返されます) — Cache のインスタンスです。詳細については、kv cache ガイドを参照してください。

    逐次デコーディングを高速化するために使用できる(past_key_values 入力参照)、事前計算済みの隠れ状態(自己注意ブロックのキーとバリュー)が含まれます。

  • hidden_states (tuple[torch.FloatTensor]、optional、output_hidden_states=True が渡された場合または config.output_hidden_states=True の場合に返される) — torch.FloatTensor のタプル(埋め込み層を持つモデルの場合、埋め込みの出力用が 1 つ、各層の出力用が 1 つずつ)で、形状は (batch_size, sequence_length, hidden_size) です。

    各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。

  • attentions (tuple[torch.FloatTensor]、optional、output_attentions=True が渡された場合または config.output_attentions=True の場合に返されます) — torch.FloatTensor のタプル(各レイヤーごとに1つ)、形状は (batch_size, num_heads, sequence_length, sequence_length)。

    アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。

  • image_hidden_states (torch.FloatTensor、任意) — サイズが(batch_size, num_images, sequence_length, hidden_size)のtorch.FloatTensor。 ビジョンエンコーダーによって生成され、最後の隠れ状態を投影した後のモデルのimage_hidden_statesです。

例:

>>> import torch
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> from transformers import AutoProcessor, VipLlavaForConditionalGeneration

>>> model = VipLlavaForConditionalGeneration.from_pretrained("llava-hf/vip-llava-7b-hf", device_map="auto", dtype=torch.float16)
>>> processor = AutoProcessor.from_pretrained("llava-hf/vip-llava-7b-hf")

>>> prompt = "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions.###Human: <image>\n{}###Assistant:"
>>> question = "Can you please describe this image?"
>>> prompt = prompt.format(question)
>>> url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/compel-neg.png"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> inputs = processor(text=text, images=image, return_tensors="pt").to(0, torch.float16)

>>> # Generate
>>> generate_ids = model.generate(**inputs, max_new_tokens=20)
>>> processor.decode(generate_ids[0][len(inputs["input_ids"][0]):], skip_special_tokens=True)
The image features a brown and white cat sitting on a green surface, with a red ball in its

get_image_features

< >

( pixel_values: FloatTensorvision_feature_layers: int | list[int] | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.FloatTensor)

パラメータ

  • pixel_values (torch.FloatTensor、形状 (batch_size, channels, height, width)) — 入力画像に対応するテンソルです。
  • vision_feature_layers (Union[int, list[int]]、省略可) — ビジュアル特徴層、またはビジュアル特徴を選択するための層のインデックスのリストです。

戻り値

BaseModelOutputWithPooling または tuple(torch.FloatTensor)

torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または BaseModelOutputWithPooling。設定(VipLlavaConfig)や入力に応じて、さまざまな要素で構成されます。

  • last_hidden_state (torch.FloatTensor、shape (batch_size, sequence_length, hidden_size)) — モデルの最終層の出力における隠れ状態のシーケンス。

  • pooler_output (torch.FloatTensor、shape (batch_size, hidden_size)) — 補助事前学習タスクに使用される層をさらに通して処理された後、シーケンスの最初のトークン(分類トークン)の最終層の隠れ状態。例えば、BERT 系のモデルでは、線形層と tanh 活性化関数を経て処理された後の分類トークンを返します。この線形層の重みは、事前学習中の次文予測(分類)目的から学習されます。

  • hidden_states (tuple(torch.FloatTensor)、optional、output_hidden_states=True が渡された場合または config.output_hidden_states=True の場合に返されます)— torch.FloatTensor のタプル(埋め込み層を持つモデルの場合、埋め込みの出力が 1 つ、各層の出力がそれぞれ 1 つずつ)で、形状は (batch_size, sequence_length, hidden_size) です。

    各層の出力におけるモデルのHidden-states、および任意の初期埋め込み出力。

  • attentions (tuple(torch.FloatTensor)、optional、output_attentions=True が渡された場合または config.output_attentions=True の場合に返されます)— torch.FloatTensor のタプル(各レイヤーごとに1つ)、形状は (batch_size, num_heads, sequence_length, sequence_length)。

    アテンションのsoftmax後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。

例:

>>> from PIL import Image
>>> from transformers import AutoProcessor, VipLlavaForConditionalGeneration

>>> model = VipLlavaForConditionalGeneration.from_pretrained("llava-hf/vip-llava-7b-hf")
>>> processor = AutoProcessor.from_pretrained("llava-hf/vip-llava-7b-hf")

>>> messages = [
...     {
...         "role": "user", "content": [
...             {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"},
...             {"type": "text", "text": "Where is the cat standing?"},
...         ]
...     },
... ]

>>> inputs = processor.apply_chat_template(
...     messages,
...     tokenize=True,
...     return_dict=True,
...     return_tensors="pt",
...     add_generation_prompt=True
... )
>>> # Generate
>>> generate_ids = model.generate(**inputs)
>>> processor.batch_decode(generate_ids, skip_special_tokens=True)[0]
Update on GitHub