Transformers documentation
Video processor
Video processor
Video Processorは、動画モデルの入力特徴量の準備と、その出力の後処理を担当するユーティリティです。リサイズ、正規化、PyTorch への変換などの変換処理を提供します。変換処理に加えて、VideoProcessor クラスは、ローカルパスまたは URL からの動画デコード(torchcodec が必要)と、モデル固有の戦略に基づくフレームサンプリングを処理します。
video processorは、画像プロセッサの機能を拡張し、Vision Large Language Models (VLMs) が画像とは異なる引数セットを使用して動画を処理できるようにします。これは生データである動画とモデルの間の橋渡し役として機能し、入力特徴量がVLM向けに最適化されることを保証します。
Video processorの設定はvideo_preprocessor_config.jsonに保存されます。古いチェックポイントでは、preprocessor_config.jsonに保存されている場合があります。再読み込み時のカスタムバックエンドの登録については、保存と再読み込みを参照してください。
使用例
llava-hf/llava-onevision-qwen2-0.5b-ov-hf モデルでビデオプロセッサを読み込む例を以下に示します。
from transformers import AutoVideoProcessor
processor = AutoVideoProcessor.from_pretrained("llava-hf/llava-onevision-qwen2-0.5b-ov-hf")前処理は、入力テンソルのデバイス上、またはその他の入力の場合は CPU 上で実行されます。前処理の前に動画を別のデバイスに移動するには、device を設定してください。これによりバックエンドは変更されません。アクセラレーターを使用している場合、torchvision の前処理を torch.compile でコンパイルすることもできます。
import torch
from transformers.video_utils import load_video
from transformers import AutoVideoProcessor
device = torch.accelerator.current_accelerator().type if torch.accelerator.is_available() else "cpu"
video = load_video("video.mp4")
processor = AutoVideoProcessor.from_pretrained("llava-hf/llava-onevision-qwen2-0.5b-ov-hf", device=device)
processor = torch.compile(processor)
processed_video = processor(video, return_tensors="pt")Video processor バックエンド
組み込みのビデオプロセッサは、バッチ化されたリサイズ、リスケール、正規化にtorchvisionを使用します。これらを使用するには、PyTorchとtorchvisionをインストールしてください。画像プロセッサとは異なり、組み込みのビデオプロセッサにはPILバックエンドは提供されていません。
AutoVideoProcessor はデフォルトで torchvision バックエンドを選択します。明示的に指定することも可能で、読み込まれたプロセッサの backend 属性を確認できます。
from transformers import AutoVideoProcessor
model_id = "llava-hf/llava-onevision-qwen2-0.5b-ov-hf"
video_processor = AutoVideoProcessor.from_pretrained(model_id, backend="torchvision")
print(video_processor.backend)
# torchvisionbackend 引数は、動画デコーダーではなく、前処理の実装を選択します。デコードとフレームサンプリングについては、サンプリングの動作を参照してください。
カスタムバックエンド
BaseVideoProcessor は torchvision ベースの前処理を提供します。torchvision を使わない実装を行う場合は、VideoProcessorMixin をサブクラス化し、preprocess をオーバーライドして、モデルが期待する入力を格納した BatchFeature を返すようにします。
AutoVideoProcessor.register() でカスタムクラスを登録し、video_processor_classes を使用してバックエンド名をクラスにマッピングします。以下の例では、NewCustomVideoProcessor が LLaVA-OneVision チェックポイントに必要な前処理を定義済みであると仮定しています。
from transformers import LlavaOnevisionConfig
AutoVideoProcessor.register(
LlavaOnevisionConfig,
video_processor_classes={"custom": NewCustomVideoProcessor},
exist_ok=True,
)
custom_processor = AutoVideoProcessor.from_pretrained(model_id, backend="custom")LlavaOnevisionConfig はすでに登録されているため、exist_ok=True を使用します。指定されたエントリはバックエンドのマッピングにマージされ、名前が一致するエントリは置き換えられ、torchvision のように指定されていないエントリは保持されます。
保存と再読み込み
save_pretrained() は、AutoVideoProcessor.register() で追加されたバックエンドのマッピングではなく、前処理の設定を保存します。同じ Python プロセス内で、保存したプロセッサを backend="custom" を指定して再読み込みします:
custom_processor.save_pretrained("./saved-video-processor")
custom_processor = AutoVideoProcessor.from_pretrained("./saved-video-processor", backend="custom")カスタム登録は、現在の Python プロセスにのみ適用されます。新しいプロセスでは、カスタムクラスを定義またはインポートし、読み込み前に再度登録してください。
サンプリングの動作
Video Processor は、対象のモデルに最も適した手法を用いて動画フレームをサンプリングすることもできます。サンプリングの動作は do_sample_frames 引数で制御され、num_frames や fps(動画のサンプリングレート)などのモデル固有のパラメータで設定できます。入力動画がローカルパスまたは URL(str)として与えられた場合、プロセッサは自動的にデコードします。サンプリングされたフレームのインデックス、元の解像度、再生時間、fps などのデコード済み動画のメタデータを取得するには、プロセッサに return_metadata=True を渡してください。
num_framesを指定しても、出力がちょうどそのフレーム数になることは保証されません。モデルによって、サンプラーが最小または最大のフレーム数の制限を強制する場合があります。デフォルトのデコーダーは
torchcodecであり、インストールが必要です。
import torch
from transformers import AutoVideoProcessor
device = torch.accelerator.current_accelerator().type if torch.accelerator.is_available() else "cpu"
processor = AutoVideoProcessor.from_pretrained("llava-hf/llava-onevision-qwen2-0.5b-ov-hf", device=device)
processed_video_inputs = processor(videos=["video_path.mp4"], return_metadata=True, do_sample_frames=True, return_tensors="pt")
video_metadata = processed_video_inputs["video_metadata"]
# See how many frames the original video had and what was the original FPS
print(video_metadata.total_num_frames, video_metadata.fps)If you pass an already decoded video array but still want to enable model-specific frame sampling, it is strongly recommended to provide video_metadata. This allows the sampler to know the original video’s duration and FPS. You can pass metadata as a VideoMetadata object or as a plain dict.
import torch
from transformers import AutoVideoProcessor
from transformers.video_utils import VideoMetadata
device = torch.accelerator.current_accelerator().type if torch.accelerator.is_available() else "cpu"
processor = AutoVideoProcessor.from_pretrained("llava-hf/llava-onevision-qwen2-0.5b-ov-hf", device=device)
decoded_video = torch.randint(0, 255, size=(100, 3, 1280, 1280)) # short video of 100 frames
video_metadata = VideoMetadata(
total_num_frames=100,
fps=24,
duration=4.1, # in seconds
)
processed_video_inputs = processor(videos=[decoded_video], video_metadata=video_metadata, do_sample_frames=True, num_frames=10, return_tensors="pt")
print(processed_video_inputs.pixel_values_videos.shape)
[10, 3, 384, 384]VideoProcessorMixin
class transformers.VideoProcessorMixin
< source >( **kwargs: *<class 'transformers.processing_utils.VideosKwargs'> )
fetch_videos
< source >( video_url_or_urls: str | list[str] | list[list[str]]sample_indices_fn = None )
単一のURLまたはURLのリストを、対応するnp.arrayオブジェクトに変換します。
単一のurlが渡された場合、戻り値は単一のオブジェクトになります。リストが渡された場合、オブジェクトのリストが返されます。
from_dict
< source >( video_processor_dict: dict**kwargs ) → ~video_processing_utils.VideoProcessorBase
パラメータ
- video_processor_dict (
dict[str, Any]) — video processor オブジェクトをインスタンス化するために使用される辞書です。このような辞書は、~video_processing_utils.VideoProcessorBase.to_dictメソッドを活用して事前学習済みチェックポイントから取得できます。 - kwargs (
dict[str, Any]) — 動画プロセッサオブジェクトの初期化に使用する追加のパラメータ。
戻り値
~video_processing_utils.VideoProcessorBase
これらのパラメータからインスタンス化されたビデオプロセッサオブジェクト。
Pythonのパラメータ辞書から~video_processing_utils.VideoProcessorBaseの型をインスタンス化します。
from_json_file
< source >( json_file: str | os.PathLike ) → A video processor of type ~video_processing_utils.VideoProcessorBase
パラメータの JSON ファイルへのパスから、~video_processing_utils.VideoProcessorBase 型のビデオプロセッサをインスタンス化します。
from_pretrained
< source >( pretrained_model_name_or_path: str | os.PathLikecache_dir: str | os.PathLike | None = Noneforce_download: bool = Falselocal_files_only: bool = Falsetoken: str | bool | None = Nonerevision: str = 'main'**kwargs )
パラメータ
- pretrained_model_name_or_path (
strまたはos.PathLike) — 次のいずれかです:- 文字列、huggingface.co上のモデルリポジトリにホストされている事前学習済み動画のmodel id。
~video_processing_utils.VideoProcessorBase.save_pretrainedメソッドを使用して保存されたビデオプロセッサファイルを含むディレクトリへのパス。例:./my_model_directory/- 保存されたビデオプロセッサの JSON ファイルへのパス。例:
./my_model_directory/video_preprocessor_config.json
- cache_dir (
strまたはos.PathLike、省略可) — 標準のキャッシュを使用しない場合、ダウンロードした事前学習済みモデルの video processor をキャッシュするディレクトリのパス。 - force_download (
bool、任意、デフォルトはFalse) — 存在する場合はキャッシュされたバージョンを上書きし、動画プロセッサのファイルを(再)ダウンロードすることを強制するかどうか。 - proxies (
dict[str, str]、省略可) — プロトコルまたはエンドポイントごとに使用するプロキシサーバーの辞書です。例:{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}.各リクエストでこれらのプロキシが使用されます。 - token (
strまたはbool、省略可) — リモートファイルの HTTP ベアラ認証に使用するトークンです。Trueの場合、または指定されていない場合は、hf auth loginを実行した際に生成されたトークン(~/.huggingfaceに保存)が使用されます。 - revision (
str、任意、デフォルトは"main") — 使用する特定のモデルのバージョンです。huggingface.co 上でモデルやその他の成果物を保存するために git ベースのシステムを使用しているため、ブランチ名、タグ名、コミット ID のいずれかを指定できます。したがって、revisionには git で許可される任意の識別子を指定できます。
~video_processing_utils.VideoProcessorBase の型を、video processor からインスタンス化します。
例:
# We can't instantiate directly the base class *VideoProcessorBase* so let's show the examples on a
# derived class: *LlavaOnevisionVideoProcessor*
video_processor = LlavaOnevisionVideoProcessor.from_pretrained(
"llava-hf/llava-onevision-qwen2-0.5b-ov-hf"
) # Download video_processing_config from huggingface.co and cache.
video_processor = LlavaOnevisionVideoProcessor.from_pretrained(
"./test/saved_model/"
) # E.g. video processor (or model) was saved using *save_pretrained('./test/saved_model/')*
video_processor = LlavaOnevisionVideoProcessor.from_pretrained("./test/saved_model/video_preprocessor_config.json")
video_processor = LlavaOnevisionVideoProcessor.from_pretrained(
"llava-hf/llava-onevision-qwen2-0.5b-ov-hf", do_normalize=False, foo=False
)
assert video_processor.do_normalize is False
video_processor, unused_kwargs = LlavaOnevisionVideoProcessor.from_pretrained(
"llava-hf/llava-onevision-qwen2-0.5b-ov-hf", do_normalize=False, foo=False, return_unused_kwargs=True
)
assert video_processor.do_normalize is False
assert unused_kwargs == {"foo": False}get_video_processor_dict
< source >( pretrained_model_name_or_path: str | os.PathLike**kwargs ) → tuple[Dict, Dict]
pretrained_model_name_or_pathから、from_dictを使用して~video_processing_utils.VideoProcessorBase型のビデオプロセッサをインスタンス化するために使用されるパラメータの辞典を解決します。
preprocess
< source >( videos: 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]]]**kwargs: *<class 'transformers.processing_utils.VideosKwargs'> ) → ~image_processing_base.BatchFeature
パラメータ
- 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を設定してください。 - do_convert_rgb (
bool、kwargs、任意) — 画像を RGB に変換するかどうかを指定します。 - do_resize (
bool、kwargs、optional) — 画像をリサイズするかどうか。 - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — モデルへの最大入力次元を記述します。 - default_to_square (
bool、kwargs、任意) — サイズが整数の場合、リサイズ時に正方形の画像をデフォルトとするかどうか。 - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs) — 画像のリサイズ時に使用するリサンプリングフィルタ。PILImageResamplingの列挙型のいずれかを使用できます。do_resizeがTrueに設定されている場合のみ有効です。 - do_rescale (
bool、kwargs、optional) — 画像をリスケールするかどうかを指定します。 - rescale_factor (
float、kwargs、任意) —do_rescaleがTrueに設定されている場合、画像をリスケールするための係数。 - do_normalize (
bool, kwargs, optional) — 画像を正規化するかどうかを指定します。 - image_mean (
Union[float, list[float], tuple[float, ...]]、kwargs、optional) — 正規化に使用する画像の平均値。do_normalizeがTrueに設定されている場合のみ有効です。 - image_std (
Union[float, list[float], tuple[float, ...]], kwargs, optional) — 正規化に使用する画像の標準偏差。do_normalizeがTrueに設定されている場合のみ有効です。 - do_center_crop (
bool, kwargs, optional) — 画像を中央クロップするかどうかを指定します。 - do_pad (
bool, kwargs, optional) — 画像をパディングするかどうかを指定します。パディングは、バッチ内の最大サイズに合わせるか、画像ごとに固定の正方形サイズに合わせるかのいずれかで行われます。具体的なパディング戦略はモデルによって異なります。 - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) —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、任意) — 処理前に動画からフレームをサンプリングするか、動画全体を処理するかどうかを指定します。 - 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、optional) — 動画メタデータを返すかどうかを指定します。動画メタデータは、動画の長さ、fps、デコードバックエンドなどの情報を含むオブジェクトです。 - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) —'pt'に設定されている場合はスタックされたテンソルを返し、それ以外の場合はテンソルのリストを返します。
戻り値
~image_processing_base.BatchFeature
- data (
dict) — call メソッド(‘pixel_values’ など)によって返される、リスト/配列/テンソルの辞書。 - tensor_type (
Union[None, str, TensorType]、省略可) — 初期化時に PyTorch/Numpy の Tensor 内の整数リストを変換するために、ここで tensor_type を指定できます。
register_for_auto_class
< source >( auto_class = 'AutoVideoProcessor' )
このクラスを指定された auto クラスに登録します。ライブラリ内のものはすでにAutoVideoProcessorにマッピングされているため、このメソッドはカスタムな video processor の場合にのみ使用してください。
このAPIは実験的なものであり、次のリリースでわずかな破壊的変更が発生する可能性があります。
save_pretrained
< source >( save_directory: str | os.PathLikepush_to_hub: bool = False**kwargs )
パラメータ
- save_directory (
strまたはos.PathLike) — 動画プロセッサの JSON ファイルを保存するディレクトリ(存在しない場合は作成されます)。 - push_to_hub (
bool、省略可、デフォルトはFalse) — モデルを保存した後、Hugging Face モデルハブにプッシュするかどうかを指定します。プッシュ先のリポジトリはrepo_idで指定できます(指定しない場合、save_directoryの名前があなたのネームスペース内でデフォルトとして使用されます)。 - kwargs (
dict[str, Any]、省略可) — push_to_hub() メソッドに渡される追加のキーワード引数。
save_directory にビデオプロセッサオブジェクトを保存し、~video_processing_utils.VideoProcessorBase.from_pretrained クラスメソッドによって再読み込みできるようにします。
このインスタンスをPythonの辞書にシリアライズします。
BaseVideoProcessor
class transformers.BaseVideoProcessor
< source >( **kwargs: *<class 'transformers.processing_utils.VideosKwargs'> )
convert_to_rgb
< source >( video: torch.Tensor ) → torch.Tensor
動画をRGB形式に変換します。
sample_frames
< source >( metadata: VideoMetadatanum_frames: int | None = Nonefps: int | float | None = None**kwargs ) → np.ndarray
0から総フレーム数までの範囲で、指定されたフレーム数を均等にサンプリングするデフォルトのサンプリング関数です。
メタデータとともにfpsが渡された場合、fpsフレーム/秒で均等にサンプリングされます。引数num_framesとfpsは排他的です。