Transformers documentation
Video-LLaVA
このモデルは2023年11月16日にHF papersで公開され、2024年5月15日にHugging Face Transformersに貢献されました。
Video-LLaVA
概要
Video-LLaVa は、Llava1.5 と VideChat によって生成されたマルチモーダルな指示追従データを用いて LlamA/Vicuna をファインチューニングすることで訓練された、オープンソースのマルチモーダル LLM です。これは Transformer アーキテクチャに基づく自己回帰型言語モデルです。Video-LLaVa は視覚表現を言語特徴空間に統合し、LLM が画像と動画の両方に対して同時に視覚的推論を行うことを可能にします。
Video-LLaVAモデルは、Bin Lin、Yang Ye、Bin Zhu、Jiaxi Cui、Munang Ning、Peng Jin、Li Yuan による Video-LLaVA: Learning United Visual Representation by Alignment Before Projection で提案されました。
論文の抄録は以下の通りです。
大規模ビジョン言語モデル(LVLM)は、視覚言語理解におけるさまざまな下流タスクの性能を向上させてきました。既存の多くのアプローチでは、画像と動画をそれぞれ別々の特徴空間にエンコードし、それを大規模言語モデル(LLM)の入力として与えます。しかし、画像と動画に対する統一的なトークナイズが欠如しているため、つまり射影前の不一致が存在するため、LLMがいくつかの性能の低い射影層からマルチモーダルな相互作用を学習することは困難です。本研究では、視覚表現を言語特徴空間に統一し、基礎的なLLMを統一的なLVLMへと発展させます。その結果、画像と動画の混合データセットから学習し、互いに性能を高め合う、シンプルかつ堅牢なLVLMベースラインであるVideo-LLaVAを確立しました。Video-LLaVAは、5つの画像質問応答データセットと4つの画像ベンチマークツールキットにまたがる9つの画像ベンチマークにおいて、優れた性能を達成しています。さらに、Video-LLaVAは、MSRVTT、MSVD、TGIF、ActivityNetにおいて、それぞれ5.8%、9.9%、18.6%、10.1%の差でVideo-ChatGPTを上回っています。特に、広範な実験により、Video-LLaVAは統一的な視覚表現の中で画像と動画を互いに利点として活用し、画像または動画に特化して設計されたモデルを上回る性能を示すことが示されました。本研究は、LLMにおけるマルチモーダル入力に関する modest な洞察を提供することを目的としています。
使用のコツ
バッチ生成を計算する際は、より正確な結果が得られるため、padding_side="left"の使用を推奨します。生成を行う前に、processor.tokenizer.padding_side = "left"を呼び出すことを確認してください。
モデルは、同一のプロンプト内で複数の画像や動画を処理するように明示的に訓練されていません。技術的には可能ですが、不正確な結果になる可能性があります。
モデルは8フレームの条件で学習されているため、動画の入力は正確に8フレームである必要があります。
このモデルは RaushanTurganbay によって提供されました。 元のコードは こちら で確認できます。
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に設定してください。
使用例
単一メディアモード
モデルは画像と動画の両方を入力として受け取れます。以下は、半精度(torch.float16)での推論のコード例です。
import av
import numpy as np
from transformers import VideoLlavaForConditionalGeneration, VideoLlavaProcessor
def read_video_pyav(container, indices):
'''
Decode the video with PyAV decoder.
Args:
container (`av.container.input.InputContainer`): PyAV container.
indices (`list[int]`): List of frame indices to decode.
Returns:
result (np.ndarray): np array of decoded frames of shape (num_frames, height, width, 3).
'''
frames = []
container.seek(0)
start_index = indices[0]
end_index = indices[-1]
for i, frame in enumerate(container.decode(video=0)):
if i > end_index:
break
if i >= start_index and i in indices:
frames.append(frame)
return np.stack([x.to_ndarray(format="rgb24") for x in frames])
# Load the model in half-precision
model = VideoLlavaForConditionalGeneration.from_pretrained("LanguageBind/Video-LLaVA-7B-hf", device_map="auto")
processor = VideoLlavaProcessor.from_pretrained("LanguageBind/Video-LLaVA-7B-hf")
# Load the video as an np.array, sampling uniformly 8 frames
video_path = hf_hub_download(repo_id="raushan-testing-hf/videos-test", filename="sample_demo_1.mp4", repo_type="dataset")
container = av.open(video_path)
total_frames = container.streams.video[0].frames
indices = np.arange(0, total_frames, total_frames / 8).astype(int)
video = read_video_pyav(container, indices)
# For better results, we recommend to prompt the model in the following format
prompt = "USER: <video>\nWhy is this funny? ASSISTANT:"
inputs = processor(text=prompt, videos=video, return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=60)
processor.batch_decode(out, skip_special_tokens=True, clean_up_tokenization_spaces=True)複数ターンにわたる会話では、プロンプトの形式を以下に変更します:
"USER: <video>\nWhat do you see in this video? ASSISTANT: A baby reading a book. USER: Why is the it funny? ASSISTANT:"Mixed Media Mode
モデルは、画像と動画が交互に並んだ入力から生成することもできます。ただし、交互に並んだ画像・動画の設定で学習されていないため、パフォーマンスに影響する可能性があります。以下は、混合メディア入力を使用する例です。上記のコードスニペットに次の行を追加してください。
import requests
from PIL import Image
# Generate from image and video mixed inputs
# Load and image and write a new prompt
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
prompt = "USER: <image>\nHow many cats are there in the image? ASSISTANT: There are two cats. USER: <video>\nWhy is this video funny? ASSISTANT:"
inputs = processor(text=prompt, images=image, videos=clip, padding=True, return_tensors="pt").to(model.device)
# Generate
generate_ids = model.generate(**inputs, max_length=50)
processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True)モデルの最適化
メモリ効率のためのBitsandbytesによる量子化
モデルは低ビットで読み込むことができ、元のモデルの性能を維持しながらメモリ負荷を大幅に軽減します。これにより、リソースが限られた環境での効率的なデプロイが可能になります。
まず、pip install bitsandbytes を実行して bitsandbytes をインストールし、ライブラリがサポートする GPU/アクセラレータにアクセスできることを確認してください。
bitsandbytes は、CUDA 以外の複数のバックエンドをサポートするためにリファクタリングされています。現在、ROCm (AMD GPU) と Intel CPU の実装は成熟しており、Intel XPU は進行中、Apple Silicon のサポートは第4四半期/第1四半期に提供される予定です。インストール手順や最新のバックエンド更新については、このリンクをご覧ください。
正式リリース前にバグを特定するために、フィードバックを大切にしています!詳細とフィードバックのリンクについては、これらのドキュメントをご覧ください。
以下に示すように、BitsAndBytesConfig を追加するだけで、量子化モデルを読み込むことができます。
from transformers import BitsAndBytesConfig, VideoLlavaForConditionalGeneration
# specify how to quantize the model
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.float16,
)
model = VideoLlavaForConditionalGeneration.from_pretrained("LanguageBind/Video-LLaVA-7B-hf", quantization_config=quantization_config, device_map="auto")Flash-Attention 2による生成の高速化
さらに、モデル内部で使用されるアテンション機構の高速実装であるFlash Attentionを使用することで、モデルの推論を大幅に高速化できます。
まず、Flash Attention 2 の最新バージョンをインストールしてください。
pip install -U flash-attn --no-build-isolation
また、Flash-Attention 2 に対応するハードウェアが必要です。詳細については、flash attention リポジトリの公式ドキュメントを参照してください。FlashAttention-2 は、モデルが torch.float16 または torch.bfloat16 で読み込まれている場合のみ使用できます。
Flash Attention-2 を使用してモデルを読み込み、実行するには、モデルの読み込み時に attn_implementation="flash_attention_2" を追加するだけです。
from transformers import VideoLlavaForConditionalGeneration
model = VideoLlavaForConditionalGeneration.from_pretrained(
"LanguageBind/Video-LLaVA-7B-hf", ,
attn_implementation="flash_attention_2",
).to(0, device_map="auto")VideoLlavaConfig
クラス transformers.VideoLlavaConfig
< source >( 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 = 32000video_token_index: int = 32001projector_hidden_act: str = 'gelu'vision_feature_select_strategy: typing.Literal['default', 'full'] = 'default'vision_feature_layer: int | list[int] = -2image_seq_length: int = 256video_seq_length: int = 2056multimodal_projector_bias: bool = Truetie_word_embeddings: bool = False )
パラメータ
- vision_config (
Union[dict, ~configuration_utils.PreTrainedConfig]、任意) — ビジョンバックボーンの config オブジェクトまたは辞書です。 - text_config (
Union[dict, ~configuration_utils.PreTrainedConfig]、省略可) — テキストバックボーンの設定オブジェクトまたは辞書。 - image_token_index (
int、任意、デフォルトは32000) — 入力画像のプレースホルダーとして使用される画像トークンのインデックスです。 - video_token_index (
int、任意、デフォルトは32001) — 入力動画のプレースホルダーとして使用される動画トークンのインデックスです。 - projector_hidden_act (
str、任意、デフォルトはgelu) — マルチモーダルプロジェクターで使用する活性化関数です。 - vision_feature_select_strategy (
Literal[default, full]、省略可、デフォルトはdefault) — ビジュアルバックボーンからビジュアル特徴を選択するために使用される特徴選択戦略です。 - vision_feature_layer (
Union[int, list[int]]、任意、デフォルトは-2) — 視覚特徴を選択するレイヤーのインデックスです。複数のインデックスが指定された場合、対応するインデックスの視覚特徴が連結されて視覚特徴が形成されます。 - image_seq_length (
int、任意、デフォルトは256) — 1つの画像埋め込みのシーケンス長。 - video_seq_length (
int、任意、デフォルトは2056) — 1つの動画埋め込みのシーケンス長です。 - multimodal_projector_bias (
bool、任意、デフォルトはTrue) — マルチモーダルプロジェクターでバイアスを使用するかどうか。 - tie_word_embeddings (
bool、任意、デフォルトはFalse) — モデルのtied_weights_keysマッピングに従って重み埋め込みを共有するかどうかを指定します。
これは、VideoLlavaModel の設定を保存するための設定クラスです。指定された引数に基づいて Video Llava モデルをインスタンス化し、モデルのアーキテクチャを定義するために使用されます。デフォルト値で設定をインスタンス化すると、LanguageBind/Video-LLaVA-7B-hf と同様の設定が得られます。
設定オブジェクトはPreTrainedConfigを継承し、モデルの出力を制御するために使用できます。詳細については、PreTrainedConfigのドキュメントを参照してください。
例:
>>> from transformers import VideoLlavaForConditionalGeneration, VideoLlavaConfig, CLIPVisionConfig, LlamaConfig
>>> # Initializing a CLIP-vision config
>>> vision_config = CLIPVisionConfig()
>>> # Initializing a Llama config
>>> text_config = LlamaConfig()
>>> # Initializing a VideoLlava video_llava-1.5-7b style configuration
>>> configuration = VideoLlavaConfig(vision_config, text_config)
>>> # Initializing a model from the video_llava-1.5-7b style configuration
>>> model = VideoLlavaForConditionalGeneration(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configVideoLlavaImageProcessor
クラス transformers.VideoLlavaImageProcessor
< source >( do_resize: bool = Truesize: dict[str, int] | None = Noneresample: Resampling = <Resampling.BICUBIC: 3>do_center_crop: bool = Truecrop_size: dict[str, int] | None = Nonedo_rescale: bool = Truerescale_factor: int | float = 0.00392156862745098do_normalize: bool = Trueimage_mean: float | list[float] | None = Noneimage_std: float | list[float] | None = Nonedo_convert_rgb: bool = True**kwargs )
パラメータ
- do_resize (
bool、省略可能、デフォルトはTrue) — 画像の (height, width) 次元を指定されたsizeにリサイズするかどうか。preprocessメソッド内のdo_resizeで上書きできます。 - size (
dict[str, int]任意、デフォルトは{"shortest_edge" -- 224}): リサイズ後の画像サイズ。画像の短い辺は size[“shortest_edge”] にリサイズされ、長い辺は入力のアスペクト比を維持するようにリサイズされます。preprocessメソッド内のsizeで上書きできます。 - resample (
PILImageResampling、任意、デフォルトはResampling.BICUBIC) — 画像のリサイズ時に使用するリサンプリングフィルタ。preprocessメソッド内のresampleによって上書きできます。 - do_center_crop (
bool、省略可能、デフォルトはTrue) — 画像を指定されたcrop_sizeに中央クロップするかどうか。preprocessメソッド内のdo_center_cropで上書きできます。 - crop_size (
dict[str, int]省略可、デフォルトは 224) —center_cropを適用した後の出力画像のサイズです。preprocessメソッド内のcrop_sizeで上書きできます。 - do_rescale (
bool、省略可能、デフォルトはTrue) — 指定されたスケーリングrescale_factorによって画像をリスケールするかどうか。preprocessメソッド内のdo_rescaleによって上書きできます。 - rescale_factor (
intまたはfloat、任意、デフォルトは1/255) — 画像をリスケールする場合に使用するスケール係数。preprocessメソッド内のrescale_factorによって上書きできます。 - do_normalize (
bool、任意、デフォルトはTrue) — 画像を正規化するかどうかを指定します。preprocessメソッド内のdo_normalizeによって上書きできます。 - image_mean (
floatまたはlist[float]、任意、デフォルトは[0.48145466, 0.4578275, 0.40821073]) — 画像を正規化する場合に使用する平均値です。これは、画像のチャネル数と同じ長さの float または float のリストです。preprocessメソッドのimage_meanパラメータによって上書きできます。 - image_std (
floatまたはlist[float]、省略可能、デフォルトは[0.26862954, 0.26130258, 0.27577711]) — 画像を正規化する場合に使用する標準偏差です。これは、画像のチャネル数と同じ長さの float または float のリストです。preprocessメソッドのimage_stdパラメータによって上書きできます。preprocessメソッドのimage_stdパラメータによって上書きできます。 - do_convert_rgb (
bool、省略可能、デフォルトはTrue) — 画像をRGBに変換するかどうかを指定します。
CLIPの画像プロセッサを構築します。
preprocess
< source >( images: list[typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']]] | None = Nonedo_resize: bool | None = Nonesize: dict[str, int] | None = Noneresample: PIL.Image.Resampling | None = Nonedo_center_crop: bool | None = Nonecrop_size: int | None = Nonedo_rescale: bool | None = Nonerescale_factor: float | None = Nonedo_normalize: bool | None = Noneimage_mean: float | list[float] | None = Noneimage_std: float | list[float] | None = Nonedo_convert_rgb: bool | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = Nonedata_format: transformers.image_utils.ChannelDimension | None = <ChannelDimension.FIRST: 'channels_first'>input_data_format: str | transformers.image_utils.ChannelDimension | None = Nonereturn_legacy_image_output: bool = True )
パラメータ
- images (
ImageInput、任意) — 前処理対象の画像のリストです。ピクセル値が 0 から 255 の範囲にある単一の画像またはバッチの画像を想定しています。ピクセル値が 0 から 1 の範囲にある画像を渡す場合は、do_rescale=Falseを設定してください。 - do_resize (
bool、省略可能、デフォルトはself.do_resize) — 画像をリサイズするかどうかを指定します。 - size (
dict[str, int]、任意、デフォルトはself.size) — リサイズ後の画像のサイズ。画像の短い辺は size["shortest_edge"] にリサイズされ、長い辺は元の画像のアスペクト比を維持するようにリサイズされます。 - resample (
int、任意、デフォルトはself.resample) — 画像のリサイズ時に使用するリサンプリングフィルタです。PILImageResamplingの列挙型のいずれかになります。do_resizeがTrueに設定されている場合のみ、効果が現れます。 - do_center_crop (
bool、任意、デフォルトはself.do_center_crop) — 画像を中央クロップするかどうかを指定します。 - crop_size (
dict[str, int]、任意、デフォルトはself.crop_size) — 中央クロップのサイズ。do_center_cropがTrueに設定されている場合のみ有効です。 - do_rescale (
bool、省略可能、デフォルトはself.do_rescale) — 画像をリスケールするかどうかを指定します。 - rescale_factor (
float、任意、デフォルトはself.rescale_factor) —do_rescaleがTrueに設定されている場合、画像をリスケールするための係数。 - do_normalize (
bool、省略可、デフォルトはself.do_normalize) — 画像を正規化するかどうかを指定します。 - image_mean (
floatまたはlist[float]、任意、デフォルトはself.image_mean) — 正規化に使用する画像の平均値。do_normalizeがTrueに設定されている場合のみ有効です。 - image_std (
floatまたはlist[float]、任意、デフォルトはself.image_std) — 正規化に使用する画像の標準偏差です。do_normalizeがTrueに設定されている場合のみ、効果が現れます。 - do_convert_rgb (
bool、省略可能、デフォルトはself.do_convert_rgb) — 画像を RGB に変換するかどうか。 - return_tensors (
strまたはTensorType, 省略可) — 返すテンソルの型。次のいずれかになります:- Unset:
np.ndarrayのリストを返します。 TensorType.PYTORCHまたは'pt':torch.Tensor型のバッチを返します。TensorType.NUMPYまたは'np':np.ndarray型のバッチを返します。
- Unset:
- data_format (
ChannelDimensionまたはstr, 省略可, デフォルトはChannelDimension.FIRST) — 出力画像のチャネル次元の形式です。次のいずれかになります:"channels_first"またはChannelDimension.FIRST: (num_channels, height, width) 形式の画像。"channels_last"またはChannelDimension.LAST: (高さ, 幅, チャネル数) 形式の画像。- Unset: 入力画像のチャネル次元形式を使用します。
- input_data_format (
ChannelDimensionまたはstr, 省略可) — 入力画像のチャネル次元の形式です。設定されていない場合、入力画像からチャネル次元の形式が推測されます。次のいずれかになります:"channels_first"またはChannelDimension.FIRST: (num_channels, height, width) 形式の画像。"channels_last"またはChannelDimension.LAST: (高さ, 幅, チャネル数) 形式の画像。"none"またはChannelDimension.NONE: (height, width) 形式の画像。
画像または画像のバッチを前処理します。
VideoLlavaVideoProcessor
クラス transformers.VideoLlavaVideoProcessor
< source >( **kwargs: *<class 'transformers.processing_utils.VideosKwargs'> )
パラメータ
- do_convert_rgb (
bool、kwargs、optional、デフォルトはTrue) — 画像を RGB に変換するかどうか。 - do_resize (
bool、kwargs、任意、デフォルトはTrue) — 画像をリサイズするかどうか。 - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs、デフォルトは{'shortest_edge' -- 224}): モデルへの最大入力サイズを指定します。 - default_to_square (
bool、kwargs、任意、デフォルトはFalse) — size が整数の場合、リサイズ時に正方形の画像をデフォルトとするかどうか。 - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs、デフォルトは3) — 画像のリサイズ時に使用するリサンプリングフィルタです。PILImageResamplingの列挙型のいずれかを使用できます。do_resizeがTrueに設定されている場合のみ、効果が現れます。 - do_rescale (
bool、kwargs、任意、デフォルトはTrue) — 画像をリスケールするかどうかを指定します。 - rescale_factor (
float、kwargs、任意、デフォルト値は0.00392156862745098) —do_rescaleがTrueに設定されている場合、画像をリスケールするための係数です。 - do_normalize (
bool、kwargs、optional、デフォルトはTrue) — 画像を正規化するかどうかを指定します。 - image_mean (
Union[float, list[float], tuple[float, ...]]、kwargs、optional、デフォルトは[0.48145466, 0.4578275, 0.40821073]) — 正規化に使用する画像の平均値です。do_normalizeがTrueに設定されている場合のみ有効です。 - image_std (
Union[float, list[float], tuple[float, ...]], kwargs, optional, デフォルト値は[0.26862954, 0.26130258, 0.27577711]) — 正規化に使用する画像の標準偏差です。do_normalizeがTrueに設定されている場合のみ、効果が現れます。 - do_center_crop (
bool、kwargs、optional、デフォルトはTrue) — 画像を中央クロップするかどうか。 - do_pad (
bool, kwargs, optional) — 画像をパディングするかどうかを指定します。パディングは、バッチ内の最大サイズに合わせるか、画像ごとに固定の正方形サイズに合わせるかのいずれかで行われます。具体的なパディング戦略はモデルによって異なります。 - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs、デフォルトは{'height' -- 224, 'width': 224}):center_cropを適用した後の出力画像のサイズです。 - data_format (
Union[str, ~image_utils.ChannelDimension]、kwargs、任意) — サポートされているのはChannelDimension.FIRSTのみです。slow processors との互換性のために追加されました。 - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, 省略可) — 入力画像のチャネル次元の形式です。設定されていない場合、入力画像からチャネル次元の形式が推測されます。次のいずれかになります:"channels_first"またはChannelDimension.FIRST: (num_channels, height, width) 形式の画像。"channels_last"またはChannelDimension.LAST: (高さ, 幅, チャネル数) 形式の画像。"none"またはChannelDimension.NONE: (height, width) 形式の画像。
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — 動画を処理するデバイスです。未設定の場合、入力動画からデバイスが推論されます。 - do_sample_frames (
bool、kwargs、任意、デフォルトはFalse) — 処理前に動画からフレームをサンプリングするか、動画全体を処理するかを指定します。 - video_metadata (
Annotated[~video_utils.VideoMetadata | dict | list[dict | ~video_utils.VideoMetadata] | list[list[dict | ~video_utils.VideoMetadata]] | None, None], kwargs) — 動画のメタデータで、総再生時間、fps、総フレーム数に関する情報を含みます。動画からのフレームサンプリングやタイムスタンプの計算に使用されます。動画を処理する前に手動でデコードしようとしている場合を除き、メタデータは渡さないでください。 - fps (
Annotated[int | float | None, None], kwargs) —do_sample_frames=Trueの場合、1 秒あたりサンプリングするターゲットフレーム数。 - num_frames (
Annotated[int | None, None], kwargs) —do_sample_frames=Trueの場合、サンプリングするフレームの最大数。 - return_metadata (
bool、kwargs、任意、デフォルトはFalse) — 動画メタデータを返すかどうかを指定します。動画メタデータは、動画の長さ、fps、デコードバックエンドなどの情報を含むオブジェクトです。 - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — 設定されている場合、特定のフレームワークのテンソルを返します。受け入れられる値は以下の通りです:'pt': PyTorchのtorch.Tensorオブジェクトを返します。'np': NumPyのnp.ndarrayオブジェクトを返します。
- **kwargs (VideosKwargs、optional) — テキスト、画像、動画、音声の各モダリティに対する追加の処理オプション。モデル固有のパラメータは上記にリストされています。サポートされている引数の完全なリストについては、TypedDictクラスを参照してください。
VideoLlavaVideoProcessor ビデオプロセッサを構築します。
VideoLlavaProcessor
class transformers.VideoLlavaProcessor
< source >( image_processor = Nonevideo_processor = Nonetokenizer = Nonepatch_size = 14vision_feature_select_strategy = 'default'image_token = '<image>'video_token = '<video>'chat_template = Nonenum_additional_image_tokens = 1**kwargs )
パラメータ
- image_processor (
VideoLlavaImageProcessor) — 画像プロセッサは必須の入力です。 - video_processor (
VideoLlavaVideoProcessor) — ビデオプロセッサは必須の入力です。 - tokenizer (
tokenizer_class) — トークナイザーは必須の入力です。 - patch_size (
int、任意、デフォルト値は 14)— ビジョンタワーのパッチサイズ。 - vision_feature_select_strategy (
str、任意、デフォルトは"default") — ビジョンバックボーンからビジョン特徴を選択するために使用される特徴選択戦略です。モデルの設定と同じである必要があります。 - image_token (
str、任意、デフォルトは"<image>") — 画像の位置を示すために使用される特殊トークン。 - video_token (
str、任意、デフォルトは"<video>") — 動画の位置を示すために使用される特別なトークン。 - chat_template (
str) — チャット内のメッセージのリストをトークン化可能な文字列に変換するための Jinja テンプレート。 - num_additional_image_tokens (
int、任意、デフォルト値は 1)— 画像埋め込みに追加されるトークンの数です。例えば、CLS トークン (+1) などです。バックボーンに CLS トークンやその他の追加トークンが付け加えられていない場合は、この引数を設定する必要はありません。
画像プロセッサ、動画プロセッサ、トークナイザーを単一のプロセッサにラップするVideoLlavaProcessorを構築します。
VideoLlavaProcessor は、VideoLlavaImageProcessor、VideoLlavaVideoProcessor、および tokenizer_class のすべての機能を提供します。詳細については、~VideoLlavaImageProcessor、~VideoLlavaVideoProcessor、および ~tokenizer_class を参照してください。
__call__
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Nonetext: str | list[str] | list[list[str]] | None = Nonevideos: typing.Union[list['PIL.Image.Image'], numpy.ndarray, ForwardRef('torch.Tensor'), list[numpy.ndarray], list['torch.Tensor'], list[list['PIL.Image.Image']], list[list[numpy.ndarray]], list[list['torch.Tensor']], transformers.video_utils.URL, list[transformers.video_utils.URL], list[list[transformers.video_utils.URL]], transformers.video_utils.Path, list[transformers.video_utils.Path], list[list[transformers.video_utils.Path]], NoneType] = Noneaudio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor'], NoneType] = None**kwargs: *<class 'transformers.processing_utils.ProcessingKwargs'> )
パラメータ
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], 任意) — 前処理対象の画像です。ピクセル値が 0 から 255 の範囲にある単一の画像またはバッチを想定しています。ピクセル値が 0 から 1 の範囲にある画像を渡す場合は、do_rescale=Falseを設定してください。 - text (
Union[str, list[str], list[list[str]]]、省略可) — エンコード対象のシーケンスまたはシーケンスのバッチです。各シーケンスは文字列、または文字列のリスト(事前トークン化済み文字列)であることができます。事前トークン化済みの入力を渡す場合は、バッチ入力との曖昧さを避けるためにis_split_into_words=Trueを設定してください。 - videos (
Union[list[PIL.Image.Image], numpy.ndarray, torch.Tensor, list[numpy.ndarray], list[torch.Tensor], list[list[PIL.Image.Image]], list[list[numpy.ndarray]], list[list[torch.Tensor]], ~video_utils.URL, list[~video_utils.URL], list[list[~video_utils.URL]], ~video_utils.Path, list[~video_utils.Path], list[list[~video_utils.Path]]], 任意) — 前処理を行う動画です。ピクセル値が 0 から 255 の範囲にある、単一の動画またはバッチの動画を想定しています。ピクセル値が 0 から 1 の範囲にある動画を渡す場合は、do_rescale=Falseを設定してください。 - audio (
Union[numpy.ndarray, torch.Tensor, collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence[torch.Tensor]], 任意) — 準備対象のオーディオまたはオーディオのバッチです。各オーディオは NumPy 配列または PyTorch テンソルであることができます。 NumPy 配列/PyTorch テンソルの場合、各オーディオの形状は (C, T) である必要があります。ここで C はチャネル数、T はオーディオのサンプル長です。 - return_tensors (
strまたは TensorType, 省略可) — 設定すると、特定のフレームワークのテンソルを返します。使用可能な値は以下の通りです:'pt': PyTorchのtorch.Tensorオブジェクトを返します。'np': NumPyのnp.ndarrayオブジェクトを返します。
- **kwargs (ProcessingKwargs、任意) — 各モダリティ(テキスト、画像、動画、音声)の追加処理オプション。モデル固有のパラメータは上記にリストされています。サポートされている引数の完全なリストについては、TypedDictクラスを参照してください。
VideoLlavaModel
class transformers.VideoLlavaModel
< source >( config: VideoLlavaConfig )
パラメータ
- config (VideoLlavaConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
ビジョンバックボーンと、言語モデリングヘッドを備えない言語モデルで構成されるVideoLlavaモデル。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonepixel_values: typing.Optional[torch.FloatTensor] = Nonepixel_values_videos: 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_layer: int | list[int] | None = Nonevision_feature_select_strategy: str | None = Noneuse_cache: bool | None = Nonemm_encoder_outputs: dict[str, transformers.modeling_outputs.BaseModelOutputWithPooling] | None = None**kwargs: *<class 'transformers.modeling_flash_attention_utils.FlashAttentionKwargs'> ) → VideoLlavaModelOutputWithPast or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- pixel_values (
torch.FloatTensor、形状(batch_size, num_channels, image_size, image_size)、任意) — 入力画像に対応するテンソルです。ピクセル値はimage_processor_classを使用して取得できます。詳細はimage_processor_class.__call__を参照してください(processor_classは画像の処理にimage_processor_classを使用します)。 - pixel_values_videos (
torch.FloatTensor、形状(batch_size, num_frames, num_channels, frame_size, frame_size)、任意) — 入力動画に対応するテンソルです。動画のピクセル値はvideo_processor_classを使用して取得できます。詳細はvideo_processor_class.__call__を参照してください(processor_classは動画の処理にvideo_processor_classを使用します)。 - 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]. - 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_layer (
Union[int, list[int]]、省略可) — 視覚特徴を選択するレイヤーのインデックスです。複数のインデックスが指定された場合、対応するインデックスの視覚特徴が連結されて視覚特徴が形成されます。 - vision_feature_select_strategy (
str, 任意) — ビジョンバックボーンからビジョン特徴を選択するために使用される特徴選択戦略です。"default"または"full"のいずれかになります。 - 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は、エンコーダーのマルチモーダル特徴量をテキスト埋め込みにマージしたシーケンスです。
戻り値
VideoLlavaModelOutputWithPast または tuple(torch.FloatTensor)
VideoLlavaModelOutputWithPast または、torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)。設定(None)や入力に応じて、さまざまな要素で構成されます。
VideoLlavaModelのforwardメソッドは、__call__特殊メソッドをオーバーライドします。
この関数内でフォワードパスの手順を定義する必要がありますが、その後、この関数ではなく
Moduleインスタンスを呼び出すべきです。前者は前処理と後処理の実行を適切に処理するのに対し、後者はそれらを黙って無視するためです。
last_hidden_state (
torch.FloatTensor、shape(batch_size, sequence_length, hidden_size)、optional) — モデルの最終層の出力における隠れ状態のシーケンス。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。video_hidden_states (
torch.FloatTensor、任意) — サイズが(batch_size * num_frames, num_videos, sequence_length, hidden_size)のtorch.FloatTensor。 ビジョンエンコーダーによって生成され、最後の隠れ状態を投影した後のモデルのvideo_hidden_statesです。
get_image_features
< source >( pixel_values: typing.Optional[torch.FloatTensor] = Nonepixel_values_images: typing.Optional[torch.FloatTensor] = Nonevision_feature_layer: int | list[int] | None = Nonevision_feature_select_strategy: str | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.FloatTensor)
パラメータ
- pixel_values (
torch.FloatTensor、形状(batch_size, num_channels, image_size, image_size)、任意) — 入力画像に対応するテンソルです。ピクセル値はimage_processor_classを使用して取得できます。詳細はimage_processor_class.__call__を参照してください(processor_classは画像の処理にimage_processor_classを使用します)。 - pixel_values_images (
torch.FloatTensor、形状(batch_size, channels, height, width)) — 入力画像に対応するテンソルです。 - vision_feature_select_strategy (
str, 省略可) — ビジョンバックボーンからビジョン特徴を選択するために使用される特徴選択戦略です。"default"または"full"のいずれかになります。 - vision_feature_layer (
Union[int, list[int]]、省略可) — 視覚特徴を選択するレイヤーのインデックスです。複数のインデックスが指定された場合、対応するインデックスの視覚特徴が連結されて視覚特徴が形成されます。 - vision_feature_select_strategy (
str, 任意) — ビジョンバックボーンからビジョン特徴を選択するために使用される特徴選択戦略です。"default"または"full"のいずれかになります。
戻り値
BaseModelOutputWithPooling または tuple(torch.FloatTensor)
None や入力に応じて、さまざまな要素で構成される BaseModelOutputWithPooling または torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)。
ビジョンタワーから画像の最終隠れ状態を取得し、マルチモーダル投影を適用します。
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
< source >( input_ids: LongTensorinputs_embeds: FloatTensorimage_features: typing.Optional[torch.FloatTensor] = Nonevideo_features: typing.Optional[torch.FloatTensor] = None )
input_idsまたはinputs_embedsからマルチモーダルプレースホルダーマスクを取得し、プレースホルダートークンの数がマルチモーダル特徴の長さと等しいことを確認します。長さが異なる場合、エラーが発生します。
get_video_features
< source >( pixel_values_videos: FloatTensorvision_feature_layer: int | list[int] | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.FloatTensor)
パラメータ
- pixel_values_videos (
torch.FloatTensor、形状(batch_size, num_frames, num_channels, frame_size, frame_size)) — 入力動画に対応するテンソルです。動画のピクセル値は、VideoLlavaVideoProcessor を使用して取得できます。詳細については、VideoLlavaVideoProcessor.call() を参照してください(VideoLlavaProcessor は、動画の処理に VideoLlavaVideoProcessor を使用します)。 - vision_feature_layer (
Union[int, list[int]]、省略可) — 視覚特徴を選択するレイヤーのインデックスです。複数のインデックスが指定された場合、対応するインデックスの視覚特徴が連結されて視覚特徴が形成されます。
戻り値
BaseModelOutputWithPooling または tuple(torch.FloatTensor)
torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)、または BaseModelOutputWithPooling。設定(VideoLlavaConfig)や入力に応じて、さまざまな要素で構成されます。
ビジョンタワーから動画の最終隠れ状態を取得し、マルチモーダル投影を適用します。
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後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。
VideoLlavaForConditionalGeneration
クラス transformers.VideoLlavaForConditionalGeneration
< source >( config: VideoLlavaConfig )
パラメータ
- config (VideoLlavaConfig) — モデルのパラメータをすべて含むモデル設定クラスです。設定ファイルで初期化しても、モデルに関連する重みは読み込まれず、設定のみが読み込まれます。モデルの重みをロードするには、from_pretrained() メソッドを参照してください。
ビジョンバックボーンと言語モデルで構成されるVideoLlavaモデル。
このモデルは PreTrainedModel を継承しています。すべてのモデルに実装されている汎用的なメソッド(ダウンロードや保存、入力埋め込みのリサイズ、ヘッドのプルーニングなど)については、スーパークラスのドキュメントを参照してください。
このモデルは、PyTorchのtorch.nn.Moduleのサブクラスでもあります。 通常のPyTorch Moduleとして使用し、一般的な使用方法や動作に関する詳細については、PyTorchのドキュメントを参照してください。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonepixel_values: typing.Optional[torch.FloatTensor] = Nonepixel_values_images: typing.Optional[torch.FloatTensor] = Nonepixel_values_videos: 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_layer: int | list[int] | None = Nonevision_feature_select_strategy: str | 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'> ) → VideoLlavaCausalLMOutputWithPast or tuple(torch.FloatTensor)
パラメータ
- input_ids (
torch.LongTensorの形状(batch_size, sequence_length), 、省略可) — 語彙における入力シーケンスのトークンインデックスです。デフォルトではパディングは無視されます。インデックスはAutoTokenizerを使用して取得できます。詳細については、PreTrainedTokenizer.encode()およびPreTrainedTokenizer.call()を参照してください。
- pixel_values (
torch.FloatTensor、形状(batch_size, num_channels, image_size, image_size)、任意) — 入力画像に対応するテンソルです。ピクセル値はimage_processor_classを使用して取得できます。詳細はimage_processor_class.__call__を参照してください(processor_classは画像の処理にimage_processor_classを使用します)。 - pixel_values_images (
torch.FloatTensorof shape(batch_size, num_channels, image_size, image_size)) -- The tensors corresponding to the input images. Pixel values can be obtained using [AutoImageProcessor](/docs/transformers/main/en/model_doc/auto#transformers.AutoImageProcessor). See [VideoLlavaImageProcessor.__call__()](/docs/transformers/main/en/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) for details ([]LlavaProcessor`] uses VideoLlavaImageProcessor for processing images). - pixel_values_videos (
torch.FloatTensor、形状(batch_size, num_frames, num_channels, frame_size, frame_size)、任意) — 入力動画に対応するテンソルです。動画のピクセル値はvideo_processor_classを使用して取得できます。詳細はvideo_processor_class.__call__を参照してください(processor_classは動画の処理にvideo_processor_classを使用します)。 - 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]. - 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_layer (
Union[int, list[int]]、省略可) — 視覚特徴を選択するレイヤーのインデックスです。複数のインデックスが指定された場合、対応するインデックスの視覚特徴が連結されて視覚特徴が形成されます。 - vision_feature_select_strategy (
str, 任意) — ビジョンバックボーンからビジョン特徴を選択するために使用される特徴選択戦略です。"default"または"full"のいずれかになります。 - 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は、エンコーダーのマルチモーダル特徴量をテキスト埋め込みにマージしたシーケンスです。
戻り値
VideoLlavaCausalLMOutputWithPast または tuple(torch.FloatTensor)
VideoLlavaCausalLMOutputWithPast または、torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)。設定(None)や入力に応じて、さまざまな要素で構成されます。
VideoLlavaForConditionalGenerationの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。video_hidden_states (
torch.FloatTensor、任意) — サイズが(batch_size * num_frames, num_videos, sequence_length, hidden_size)のtorch.FloatTensor。 ビジョンエンコーダーによって生成され、最後の隠れ状態を投影した後のモデルのvideo_hidden_statesです。
例:
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> import numpy as np
>>> import av
>>> from huggingface_hub import hf_hub_download
>>> from transformers import VideoLlavaProcessor, VideoLlavaForConditionalGeneration
>>> def read_video_pyav(container, indices):
... '''
... Decode the video with PyAV decoder.
... Args:
... container (`av.container.input.InputContainer`): PyAV container.
... indices (`list[int]`): List of frame indices to decode.
... Returns:
... result (np.ndarray): np array of decoded frames of shape (num_frames, height, width, 3).
... '''
... frames = []
... container.seek(0)
... start_index = indices[0]
... end_index = indices[-1]
... for i, frame in enumerate(container.decode(video=0)):
... if i > end_index:
... break
... if i >= start_index and i in indices:
... frames.append(frame)
... return np.stack([x.to_ndarray(format="rgb24") for x in frames])
>>> model = VideoLlavaForConditionalGeneration.from_pretrained("LanguageBind/Video-LLaVA-7B-hf")
>>> processor = VideoLlavaProcessor.from_pretrained("LanguageBind/Video-LLaVA-7B-hf")
>>> prompt = "USER: <video>\nWhy is this video funny? ASSISTANT:"
>>> video_path = hf_hub_download(repo_id="raushan-testing-hf/videos-test", filename="sample_demo_1.mp4", repo_type="dataset")
>>> container = av.open(video_path)
>>> # sample uniformly 8 frames from the video
>>> total_frames = container.streams.video[0].frames
>>> indices = np.arange(0, total_frames, total_frames / 8).astype(int)
>>> clip = read_video_pyav(container, indices)
>>> inputs = processor(text=prompt, videos=clip, return_tensors="pt")
>>> # Generate
>>> generate_ids = model.generate(**inputs, max_length=80)
>>> processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"USER: Why is this video funny? ASSISTANT: The video is funny because the baby is playing with a Wii remote while sitting on the floor, and the baby is wearing glasses.Ъ. The baby's actions are amusing because it is a young child trying to interact with a video game, which is not a typical activity for a"
>>> # to generate from image and video mix
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
... image = Image.open(BytesIO(response.read()))
>>> prompt = [
... "USER: <image>\nHow many cats do you see? ASSISTANT:",
... "USER: <video>\nWhy is this video funny? ASSISTANT:"
... ]
>>> inputs = processor(text=prompt, images=image, videos=clip, padding=True, return_tensors="pt")
>>> # Generate
>>> generate_ids = model.generate(**inputs, max_length=50)
>>> processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True)
['USER: How many cats do you see? ASSISTANT: There are two cats visible in the image. (or three, if you count the one in the background).', 'USER: Why is this video funny? ASSISTANT: The video is funny because it shows a baby sitting on a bed and playing with a Wii remote.Ъ. The baby is holding the remote']get_image_features
< source >( pixel_values: FloatTensorvision_feature_layer: int | list[int] | None = Nonevision_feature_select_strategy: str | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.FloatTensor)
パラメータ
- pixel_values (
torch.FloatTensor、shape(batch_size, num_channels, image_size, image_size)) — 入力画像に対応するテンソルです。ピクセル値はimage_processor_classを使用して取得できます。詳細はimage_processor_class.__call__を参照してください(processor_classは画像の処理にimage_processor_classを使用します)。 - vision_feature_layer (
Union[int, list[int]]、省略可) — 視覚特徴を選択するレイヤーのインデックスです。複数のインデックスが指定された場合、対応するインデックスの視覚特徴が連結されて視覚特徴が形成されます。 - vision_feature_select_strategy (
str, 省略可) — ビジョンバックボーンからビジョン特徴を選択するために使用される特徴選択戦略です。"default"または"full"のいずれかになります。
戻り値
BaseModelOutputWithPooling または tuple(torch.FloatTensor)
None や入力に応じて、さまざまな要素で構成される BaseModelOutputWithPooling または torch.FloatTensor のタプル(return_dict=False が渡された場合、または config.return_dict=False の場合)。
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後のアテンション重み。自己アテンションヘッド内で加重平均を計算するために使用されます。