Transformers documentation

Video Vision Transformer (ViViT)

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

and get access to the augmented documentation experience

to get started

Mô hình này được công bố trên HF papers vào ngày 2021-03-29 và được đóng góp cho Hugging Face Transformers vào ngày 2023-07-11.

Video Vision Transformer (ViViT)

FlashAttention SDPA

Tổng quan

Mô hình Vivit được đề xuất trong ViViT: A Video Vision Transformer bởi Anurag Arnab, Mostafa Dehghani, Georg Heigold, Chen Sun, Mario Lučić, Cordelia Schmid. Bài báo đề xuất một trong những bộ mô hình thuần transformer đầu tiên thành công cho việc hiểu video.

Tóm tắt từ bài báo như sau:

Chúng tôi giới thiệu các mô hình dựa trên pure-transformer cho bài toán phân loại video, dựa trên thành công gần đây của các mô hình như vậy trong phân loại ảnh. Mô hình của chúng tôi trích xuất các token không gian-thời gian từ video đầu vào, sau đó được mã hóa bởi một chuỗi các lớp transformer. Để xử lý các chuỗi token dài gặp phải trong video, chúng tôi đề xuất một số biến thể hiệu quả của mô hình, trong đó tách riêng các chiều không gian và thời gian của đầu vào. Mặc dù các mô hình dựa trên transformer được biết là chỉ hiệu quả khi có sẵn các bộ dữ liệu huấn luyện lớn, chúng tôi cho thấy cách có thể điều hòa (regularise) hiệu quả mô hình trong quá trình huấn luyện và tận dụng các mô hình ảnh được huấn luyện trước để có thể huấn luyện trên các bộ dữ liệu tương đối nhỏ. Chúng tôi thực hiện các nghiên cứu ablation kỹ lưỡng và đạt được kết quả state-of-the-art trên nhiều benchmark phân loại video, bao gồm Kinetics 400 và 600, Epic Kitchens, Something-Something v2 và Moments in Time, vượt trội hơn các phương pháp trước đó dựa trên các mạng tích chập 3D sâu.

Mô hình này được đóng góp bởi jegormeister. Mã nguồn gốc (được viết bằng JAX) có thể được tìm thấy tại đây.

Sử dụng Scaled Dot Product Attention (SDPA)

PyTorch bao gồm một toán tử scaled dot-product attention (SDPA) bản địa như một phần của torch.nn.functional. Hàm này bao gồm một số triển khai có thể được áp dụng tùy thuộc vào đầu vào và phần cứng đang sử dụng. Xem tài liệu chính thức hoặc trang GPU Inference để biết thêm thông tin.

SDPA được sử dụng mặc định cho torch>=2.1.1 khi có sẵn một bản triển khai, nhưng bạn cũng có thể đặt attn_implementation="sdpa" trong from_pretrained() để yêu cầu sử dụng SDPA một cách rõ ràng.

from transformers import VivitModel


model = VivitModel.from_pretrained("google/vivit-b-16x2-kinetics400", attn_implementation="sdpa", device_map="auto")
...

Để đạt được tốc độ tăng tốc tốt nhất, chúng tôi khuyến nghị nạp mô hình ở độ chính xác nửa (ví dụ: torch.float16 hoặc torch.bfloat16).

Trên một benchmark cục bộ (A100-40GB, PyTorch 2.3.0, hệ điều hành Ubuntu 22.04) với float32 và mô hình google/vivit-b-16x2-kinetics400, chúng tôi đã quan sát thấy các mức tăng tốc sau trong quá trình suy luận.

Huấn luyện

num_training_stepsbatch_sizelà cudaTốc độ tăng (%)Bộ nhớ đỉnh Eager (MB)đỉnh bộ nhớ sdpa (MB)Tiết kiệm bộ nhớ (%)
1001True7.1222575.285932.54130.364

Suy luận

num_batchesbatch_sizelà cudalà một nửaTốc độ tăng (%)Bộ nhớ eager (MB)Bộ nhớ BT (MB)Bộ nhớ đã tiết kiệm (%)
201TrueFalse15.422715.807317.079125.75
202TrueFalse17.1461234.75447.175176.122
204TrueFalse18.0932275.82709.864220.6
208TrueFalse19.2844358.191233.24253.393

VivitConfig

lớp transformers.VivitConfig

< >

( 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 = Noneimage_size: int | list[int] | tuple[int, int] = 224num_frames: int = 32tubelet_size: list[int] | tuple[int, ...] = (2, 16, 16)num_channels: int = 3hidden_size: int = 768num_hidden_layers: int = 12num_attention_heads: int = 12intermediate_size: int = 3072hidden_act: str = 'gelu_fast'hidden_dropout_prob: float | int = 0.0attention_probs_dropout_prob: float | int = 0.0initializer_range: float = 0.02layer_norm_eps: float = 1e-06qkv_bias: bool = Truepooler_output_size: int | None = Nonepooler_act: str = 'tanh' )

Tham số

  • image_size (Union[int, list[int], tuple[int, int]], tùy chọn, mặc định là 224) — Kích thước (độ phân giải) của mỗi hình ảnh.
  • num_frames (int, tùy chọn, mặc định là 32) — Số lượng khung hình trong mỗi video.
  • tubelet_size (list[int], tùy chọn, mặc định là [2, 16, 16]) — Kích thước (độ phân giải) của mỗi tubelet.
  • num_channels (int, tùy chọn, mặc định là 3) — Số lượng kênh đầu vào.
  • hidden_size (int, tùy chọn, mặc định là 768) — Kích thước của các biểu diễn ẩn.
  • num_hidden_layers (int, tùy chọn, mặc định là 12) — Số lượng lớp ẩn trong bộ giải mã Transformer.
  • num_attention_heads (int, tùy chọn, mặc định là 12) — Số lượng đầu attention cho mỗi lớp attention trong bộ giải mã Transformer.
  • intermediate_size (int, tùy chọn, mặc định là 3072) — Kích thước của các biểu diễn MLP.
  • hidden_act (str, tùy chọn, mặc định là gelu_fast) — Hàm kích hoạt phi tuyến (hàm hoặc chuỗi) trong bộ giải mã. Ví dụ, "gelu", "relu", "silu", v.v.
  • hidden_dropout_prob (Union[float, int], tùy chọn, mặc định là 0.0) — Xác suất dropout cho tất cả các lớp fully connected trong embeddings, encoder và pooler.
  • attention_probs_dropout_prob (Union[float, int], tùy chọn, mặc định là 0.0) — Tỷ lệ dropout cho các xác suất chú ý.
  • initializer_range (float, tùy chọn, mặc định là 0.02) — Độ lệch chuẩn của truncated_normal_initializer để khởi tạo tất cả các ma trận trọng số.
  • layer_norm_eps (float, tùy chọn, mặc định là 1e-06) — Giá trị epsilon được sử dụng bởi các lớp chuẩn hóa lớp (layer normalization).
  • qkv_bias (bool, tùy chọn, mặc định là True) — Có thêm bias cho queries, keys và values hay không.
  • pooler_output_size (int, tùy chọn) — Kích thước chiều của lớp pooler. Nếu là None, mặc định là hidden_size.
  • pooler_act (str, tùy chọn, mặc định là "tanh") — Hàm kích hoạt được sử dụng bởi pooler.

Đây là lớp cấu hình để lưu trữ cấu hình của một VivitModel. Nó được sử dụng để khởi tạo một mô hình Vivit theo các đối số được chỉ định, xác định kiến trúc của mô hình. Khởi tạo một cấu hình với các giá trị mặc định sẽ tạo ra một cấu hình tương tự như cấu hình của google/vivit-b-16x2-kinetics400

Các đối tượng cấu hình kế thừa từ PreTrainedConfig và có thể được sử dụng để kiểm soát đầu ra của mô hình. Đọc tài liệu từ PreTrainedConfig để biết thêm thông tin.

Ví dụ:

>>> from transformers import VivitConfig, VivitModel

>>> # Initializing a ViViT google/vivit-b-16x2-kinetics400 style configuration
>>> configuration = VivitConfig()

>>> # Initializing a model (with random weights) from the google/vivit-b-16x2-kinetics400 style configuration
>>> model = VivitModel(configuration)

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

VivitImageProcessor

lớp transformers.VivitImageProcessor

< >

( do_resize: bool = Truesize: dict[str, int] | None = Noneresample: Resampling = <Resampling.BILINEAR: 2>do_center_crop: bool = Truecrop_size: dict[str, int] | None = Nonedo_rescale: bool = Truerescale_factor: int | float = 0.00784313725490196offset: bool = Truedo_normalize: bool = Trueimage_mean: float | list[float] | None = Noneimage_std: float | list[float] | None = None**kwargs )

Tham số

  • do_resize (bool, tùy chọn, mặc định là True) — Có nên điều chỉnh kích thước (chiều cao, chiều rộng) của ảnh thành size được chỉ định hay không. Có thể bị ghi đè bởi tham số do_resize trong phương thức preprocess.
  • size (dict[str, int] không bắt buộc, mặc định là {"shortest_edge" -- 256}): Kích thước của ảnh đầu ra sau khi thay đổi kích thước. Cạnh ngắn nhất của ảnh sẽ được thay đổi kích thước thành size["shortest_edge"] trong khi vẫn giữ nguyên tỷ lệ khung hình của ảnh gốc. Có thể bị ghi đè bởi size trong phương thức preprocess.
  • resample (PILImageResampling, tùy chọn, mặc định là Resampling.BILINEAR) — Bộ lọc lấy mẫu lại (resampling) được sử dụng khi thay đổi kích thước ảnh. Có thể bị ghi đè bởi tham số resample trong phương thức preprocess.
  • do_center_crop (bool, tùy chọn, mặc định là True) — Có nên cắt ảnh ở giữa theo crop_size đã chỉ định hay không. Có thể bị ghi đè bởi tham số do_center_crop trong phương thức preprocess.
  • crop_size (dict[str, int], tùy chọn, mặc định là {"height" -- 224, "width": 224}): Kích thước của ảnh sau khi áp dụng cắt giữa. Có thể được ghi đè bởi tham số crop_size trong phương thức preprocess.
  • do_rescale (bool, tùy chọn, mặc định là True) — Có nên tái quy đổi kích thước ảnh theo hệ số rescale_factor được chỉ định hay không. Có thể bị ghi đè bởi tham số do_rescale trong phương thức preprocess.
  • rescale_factor (int hoặc float, tùy chọn, mặc định là 1/127.5) — Xác định hệ số tỷ lệ cần sử dụng nếu thực hiện việc chuẩn hóa lại (rescale) ảnh. Có thể bị ghi đè bởi tham số rescale_factor trong phương thức preprocess.
  • offset (bool, tùy chọn, mặc định là True) — Có nên phóng to/thu nhỏ hình ảnh theo cả hai hướng âm và dương hay không. Có thể bị ghi đè bởi offset trong phương thức preprocess.
  • do_normalize (bool, tùy chọn, mặc định là True) — Có nên chuẩn hóa hình ảnh hay không. Có thể bị ghi đè bởi tham số do_normalize trong phương thức preprocess.
  • image_mean (float hoặc list[float], tùy chọn, mặc định là IMAGENET_STANDARD_MEAN) — Giá trị trung bình được sử dụng khi chuẩn hóa ảnh. Đây là một số float hoặc danh sách các số float có độ dài bằng số kênh của ảnh. Có thể ghi đè bằng tham số image_mean trong phương thức preprocess.
  • image_std (float hoặc list[float], tùy chọn, mặc định là IMAGENET_STANDARD_STD) — Độ lệch chuẩn để sử dụng khi chuẩn hóa ảnh. Đây là một float hoặc danh sách các float có độ dài bằng số kênh trong ảnh. Có thể ghi đè bằng tham số image_std trong phương thức preprocess.

Tạo bộ xử lý ảnh Vivit.

preprocess

< >

( videos: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']]do_resize: bool | None = Nonesize: dict[str, int] | None = Noneresample: PIL.Image.Resampling | None = Nonedo_center_crop: bool | None = Nonecrop_size: dict[str, int] | None = Nonedo_rescale: bool | None = Nonerescale_factor: float | None = Noneoffset: bool | None = Nonedo_normalize: bool | None = Noneimage_mean: float | list[float] | None = Noneimage_std: float | list[float] | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = Nonedata_format: ChannelDimension = <ChannelDimension.FIRST: 'channels_first'>input_data_format: str | transformers.image_utils.ChannelDimension | None = None )

Tham số

  • videos (ImageInput) — Các khung hình video cần tiền xử lý. Kỳ vọng một khung hình hoặc một lô khung hình video có giá trị pixel từ 0 đến 255. Nếu truyền vào các khung hình có giá trị pixel từ 0 đến 1, hãy đặt do_rescale=False.
  • do_resize (bool, tùy chọn, mặc định là self.do_resize) — Có nên thay đổi kích thước ảnh hay không.
  • size (dict[str, int], tùy chọn, mặc định là self.size) — Kích thước của hình ảnh sau khi áp dụng resize.
  • resample (PILImageResampling, tuỳ chọn, mặc định là self.resample) — Bộ lọc lấy mẫu lại (resampling) được sử dụng khi thay đổi kích thước ảnh. Giá trị này có thể là một trong các hằng số liệt kê (enum) của PILImageResampling. Chỉ có hiệu lực khi do_resize được đặt thành True.
  • do_center_crop (bool, tùy chọn, mặc định là self.do_centre_crop) — Có nên cắt ảnh theo tâm hay không.
  • crop_size (dict[str, int], tùy chọn, mặc định là self.crop_size) — Kích thước của ảnh sau khi áp dụng cắt giữa.
  • do_rescale (bool, tùy chọn, mặc định là self.do_rescale) — Có nên điều chỉnh lại giá trị ảnh về khoảng [-1 - 1] nếu offset là True, hoặc [0, 1] nếu không.
  • rescale_factor (float, tùy chọn, mặc định là self.rescale_factor) — Hệ số để thay đổi kích thước ảnh nếu do_rescale được đặt thành True.
  • offset (bool, tùy chọn, mặc định là self.offset) — Xác định có nên phóng to/thu nhỏ hình ảnh theo cả hai hướng âm và dương hay không.
  • do_normalize (bool, tùy chọn, mặc định là self.do_normalize) — Có nên chuẩn hóa hình ảnh hay không.
  • image_mean (float hoặc list[float], tùy chọn, mặc định là self.image_mean) — Trung bình của ảnh.
  • image_std (float hoặc list[float], tùy chọn, mặc định là self.image_std) — Độ lệch chuẩn của ảnh.
  • return_tensors (str hoặc TensorType, tùy chọn) — Loại tensor cần trả về. Có thể là một trong các giá trị sau:
    • Unset: Trả về một danh sách np.ndarray.
    • TensorType.PYTORCH hoặc 'pt': Trả về một batch có kiểu torch.Tensor.
    • TensorType.NUMPY hoặc 'np': Trả về một batch có kiểu np.ndarray.
  • data_format (ChannelDimension hoặc str, tùy chọn, mặc định là ChannelDimension.FIRST) — Định dạng chiều kênh cho ảnh đầu ra. Có thể là một trong các giá trị:
    • ChannelDimension.FIRST: ảnh ở định dạng (num_channels, height, width).
    • ChannelDimension.LAST: ảnh ở định dạng (height, width, num_channels).
    • Unset: Sử dụng định dạng chiều kênh suy ra của ảnh đầu vào.
  • input_data_format (ChannelDimension hoặc str, tùy chọn) — Định dạng chiều kênh cho ảnh đầu vào. Nếu không được đặt, định dạng chiều kênh sẽ được suy ra từ ảnh đầu vào. Có thể là một trong các giá trị sau:
    • "channels_first" hoặc ChannelDimension.FIRST: ảnh ở định dạng (num_channels, height, width).
    • "channels_last" hoặc ChannelDimension.LAST: ảnh ở định dạng (height, width, num_channels).
    • "none" hoặc ChannelDimension.NONE: ảnh ở định dạng (chiều cao, chiều rộng).

Tiền xử lý một hình ảnh hoặc một lô hình ảnh.

VivitVideoProcessor

lớp transformers.VivitVideoProcessor

< >

( **kwargs: *<class 'transformers.processing_utils.VideosKwargs'> )

Tham số

  • do_convert_rgb (bool, kwargs, tuỳ chọn, mặc định là True) — Có chuyển đổi ảnh sang RGB hay không.
  • do_resize (bool, kwargs, tuỳ chọn, mặc định là True) — Có nên thay đổi kích thước ảnh hay không.
  • size (Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs, mặc định là {'shortest_edge' -- 256}): Mô tả kích thước đầu vào tối đa cho mô hình.
  • default_to_square (bool, kwargs, tuỳ chọn, mặc định là False) — Có nên mặc định dùng ảnh vuông khi thay đổi kích thước không, nếu size là một số nguyên.
  • resample (Annotated[Union[int, PILImageResampling, NoneType], None], kwargs, mặc định là 2) — Bộ lọc lấy mẫu lại (resampling filter) được sử dụng khi thay đổi kích thước ảnh. Giá trị này có thể là một trong các hằng số liệt kê (enum) của PILImageResampling. Chỉ có hiệu lực khi do_resize được đặt thành True.
  • do_rescale (bool, kwargs, tuỳ chọn, mặc định là True) — Có nên điều chỉnh lại tỷ lệ ảnh hay không.
  • rescale_factor (float, kwargs, optional, mặc định là 0.00784313725490196) — Hệ số rescale để rescale ảnh nếu do_rescale được đặt thành True.
  • do_normalize (bool, kwargs, tuỳ chọn, mặc định là True) — Có nên chuẩn hóa hình ảnh hay không.
  • image_mean (Union[float, list[float], tuple[float, ...]], kwargs, optional, mặc định là [0.5, 0.5, 0.5]) — Giá trị trung bình của ảnh để sử dụng cho việc chuẩn hóa. Chỉ có hiệu lực nếu do_normalize được đặt thành True.
  • image_std (Union[float, list[float], tuple[float, ...]], kwargs, tuỳ chọn, mặc định là [0.5, 0.5, 0.5]) — Độ lệch chuẩn của ảnh để sử dụng cho việc chuẩn hóa. Chỉ có hiệu lực nếu do_normalize được đặt thành True.
  • do_center_crop (bool, kwargs, tuỳ chọn, mặc định là True) — Có nên cắt ảnh ở vị trí trung tâm hay không.
  • do_pad (bool, kwargs, optional) — Có nên chèn padding cho ảnh hay không. Padding được thực hiện đến kích thước lớn nhất trong batch hoặc đến một kích thước vuông cố định cho mỗi ảnh. Chiến lược padding cụ thể phụ thuộc vào model.
  • crop_size (Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs, mặc định là {'height' -- 224, 'width': 224}): Kích thước của ảnh đầu ra sau khi áp dụng center_crop.
  • data_format (Union[str, ~image_utils.ChannelDimension], kwargs, optional) — Chỉ hỗ trợ ChannelDimension.FIRST. Được thêm vào để tương thích với các bộ xử lý chậm.
  • input_data_format (Union[str, ~image_utils.ChannelDimension], kwargs, tùy chọn) — Định dạng chiều kênh cho ảnh đầu vào. Nếu không được đặt, định dạng chiều kênh sẽ được suy ra từ ảnh đầu vào. Có thể là một trong các giá trị:
    • "channels_first" hoặc ChannelDimension.FIRST: ảnh ở định dạng (num_channels, height, width).
    • "channels_last" hoặc ChannelDimension.LAST: ảnh ở định dạng (height, width, num_channels).
    • "none" hoặc ChannelDimension.NONE: ảnh ở định dạng (chiều cao, chiều rộng).
  • device (Annotated[Union[str, torch.device, NoneType], None], kwargs) — Thiết bị để xử lý các video. Nếu không được đặt, thiết bị sẽ được suy ra từ các video đầu vào.
  • do_sample_frames (bool, kwargs, tuỳ chọn, mặc định là False) — Có lấy mẫu các khung hình từ video trước khi xử lý hay xử lý toàn bộ video hay không.
  • video_metadata (Annotated[~video_utils.VideoMetadata | dict | list[dict | ~video_utils.VideoMetadata] | list[list[dict | ~video_utils.VideoMetadata]] | None, None], kwargs) — Metadata của video, chứa thông tin về tổng thời lượng, fps và tổng số khung hình. Nó sẽ được sử dụng để lấy mẫu các khung hình từ video hoặc tính toán mốc thời gian. Không truyền bất kỳ metadata nào trừ khi bạn đang cố gắng giải mã video thủ công trước khi xử lý
  • fps (Annotated[int | float | None, None], kwargs) — Số khung hình mục tiêu cần lấy mẫu mỗi giây khi do_sample_frames=True.
  • num_frames (Annotated[int | None, None], kwargs) — Số khung hình tối đa cần lấy mẫu khi do_sample_frames=True.
  • return_metadata (bool, kwargs, tuỳ chọn, mặc định là False) — Có trả về metadata của video hay không. Video metadata là một đối tượng chứa thông tin về thời lượng video, fps, backend giải mã, v.v.
  • return_tensors (Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — Nếu được đặt, sẽ trả về tensor của một framework cụ thể. Các giá trị chấp nhận được là:
    • 'pt': Trả về các đối tượng torch.Tensor của PyTorch.
    • 'np': Trả về các đối tượng np.ndarray của NumPy.
  • **kwargs (VideosKwargs, optional) — Các tùy chọn xử lý bổ sung cho từng phương thức (text, hình ảnh, video, âm thanh). Các tham số cụ thể của model được liệt kê ở trên; xem lớp TypedDict để biết danh sách đầy đủ các đối số được hỗ trợ.

Tạo một trình xử lý video VivitVideoProcessor.

preprocess

< >

( 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

Tham số

  • 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]]]) — Video cần tiền xử lý. Kỳ vọng một video đơn hoặc một lô video có giá trị pixel từ 0 đến 255. Nếu truyền vào các video có giá trị pixel từ 0 đến 1, hãy đặt do_rescale=False.
  • do_convert_rgb (bool, kwargs, optional) — Có nên chuyển đổi ảnh sang RGB hay không.
  • do_resize (bool, kwargs, optional) — Có nên thay đổi kích thước ảnh hay không.
  • size (Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Mô tả các kích thước đầu vào tối đa của mô hình.
  • default_to_square (bool, kwargs, tuỳ chọn) — Có mặc định thành ảnh vuông khi thay đổi kích thước hay không, nếu size là một số nguyên.
  • resample (Annotated[Union[int, PILImageResampling, NoneType], None], kwargs) — Bộ lọc lấy mẫu lại (resampling filter) được sử dụng khi thay đổi kích thước ảnh. Giá trị này có thể là một trong các hằng số liệt kê (enum) của PILImageResampling. Chỉ có hiệu lực khi do_resize được đặt thành True.
  • do_rescale (bool, kwargs, optional) — Có nên điều chỉnh lại tỷ lệ ảnh hay không.
  • rescale_factor (float, kwargs, optional) — Hệ số rescale để rescale ảnh nếu do_rescale được đặt thành True.
  • do_normalize (bool, kwargs, optional) — Có nên chuẩn hóa ảnh hay không.
  • image_mean (Union[float, list[float], tuple[float, ...]], kwargs, optional) — Giá trị trung bình của ảnh để sử dụng cho việc chuẩn hóa. Chỉ có hiệu lực nếu do_normalize được đặt thành True.
  • image_std (Union[float, list[float], tuple[float, ...]], kwargs, optional) — Độ lệch chuẩn của ảnh để sử dụng cho việc chuẩn hóa. Chỉ có hiệu lực nếu do_normalize được đặt thành True.
  • do_center_crop (bool, kwargs, optional) — Có nên cắt ảnh ở vị trí trung tâm hay không.
  • do_pad (bool, kwargs, optional) — Có nên chèn padding cho ảnh hay không. Padding được thực hiện đến kích thước lớn nhất trong batch hoặc đến một kích thước vuông cố định cho mỗi ảnh. Chiến lược padding cụ thể phụ thuộc vào model.
  • crop_size (Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Kích thước của ảnh đầu ra sau khi áp dụng center_crop.
  • data_format (Union[str, ~image_utils.ChannelDimension], kwargs, optional) — Chỉ hỗ trợ ChannelDimension.FIRST. Được thêm vào để tương thích với các bộ xử lý chậm.
  • input_data_format (Union[str, ~image_utils.ChannelDimension], kwargs, tùy chọn) — Định dạng chiều kênh cho ảnh đầu vào. Nếu không được đặt, định dạng chiều kênh sẽ được suy ra từ ảnh đầu vào. Có thể là một trong các giá trị:
    • "channels_first" hoặc ChannelDimension.FIRST: ảnh ở định dạng (num_channels, height, width).
    • "channels_last" hoặc ChannelDimension.LAST: ảnh ở định dạng (height, width, num_channels).
    • "none" hoặc ChannelDimension.NONE: ảnh ở định dạng (chiều cao, chiều rộng).
  • device (Annotated[Union[str, torch.device, NoneType], None], kwargs) — Thiết bị để xử lý các video. Nếu không được đặt, thiết bị sẽ được suy ra từ các video đầu vào.
  • do_sample_frames (bool, kwargs, tuỳ chọn) — Có lấy mẫu các khung hình từ video trước khi xử lý hay xử lý toàn bộ video hay không.
  • video_metadata (Annotated[~video_utils.VideoMetadata | dict | list[dict | ~video_utils.VideoMetadata] | list[list[dict | ~video_utils.VideoMetadata]] | None, None], kwargs) — Metadata của video, chứa thông tin về tổng thời lượng, fps và tổng số khung hình. Nó sẽ được sử dụng để lấy mẫu các khung hình từ video hoặc tính toán mốc thời gian. Không truyền bất kỳ metadata nào trừ khi bạn đang cố gắng giải mã video thủ công trước khi xử lý
  • fps (Annotated[int | float | None, None], kwargs) — Số khung hình mục tiêu cần lấy mẫu mỗi giây khi do_sample_frames=True.
  • num_frames (Annotated[int | None, None], kwargs) — Số khung hình tối đa cần lấy mẫu khi do_sample_frames=True.
  • return_metadata (bool, kwargs, optional) — Có nên trả về metadata của video hay không. Video metadata là một object chứa thông tin về thời lượng video, fps, backend giải mã, v.v.
  • return_tensors (Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — Trả về các tensor được xếp chồng nếu được đặt thành 'pt', ngược lại trả về một danh sách các tensor.

Trả về

~image_processing_base.BatchFeature

  • data (dict) — Từ điển chứa các danh sách/mảng/tensor được trả về bởi phương thức call (‘pixel_values’, v.v.).
  • tensor_type (Union[None, str, TensorType], tùy chọn) — Bạn có thể cung cấp một tensor_type tại đây để chuyển đổi các danh sách số nguyên trong Tensor PyTorch/Numpy khi khởi tạo.

VivitModel

lớp transformers.VivitModel

< >

( config: VivitConfigadd_pooling_layer: bool = True )

Tham số

  • config (VivitConfig) — Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức from_pretrained() để tải trọng số của mô hình.
  • add_pooling_layer (bool, tùy chọn, mặc định là True) — Có thêm một lớp pooling hay không

Mô hình Vivit cơ bản, xuất ra các hidden-state thô mà không có head cụ thể nào ở phía trên.

Mô hình này kế thừa từ PreTrainedModel. Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu, v.v.)

Mô hình này cũng là một lớp con của torch.nn.Module trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.

forward

< >

( pixel_values: typing.Optional[torch.Tensor] = Noneinterpolate_pos_encoding: bool = Falseattention_mask: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.Tensor)

Tham số

  • pixel_values (torch.Tensor có hình dạng (batch_size, num_channels, image_size, image_size), tùy chọn) — Các tensor tương ứng với các hình ảnh đầu vào. Giá trị pixel có thể được lấy bằng cách sử dụng VivitImageProcessor. Xem VivitImageProcessor.call() để biết chi tiết (processor_class sử dụng VivitImageProcessor để xử lý hình ảnh).
  • interpolate_pos_encoding (bool, tùy chọn, mặc định là False) — Có nội suy các mã vị trí được huấn luyện trước hay không.
  • attention_mask (torch.Tensor có hình dạng (batch_size, sequence_length), tùy chọn) — Mặt nạ để tránh thực hiện chú ý trên các chỉ số token đệm. Các giá trị mặt nạ được chọn trong [0, 1]:
    • 1 cho các token không bị che,
    • 0 cho các token bị che.

    Mặt nạ chú ý là gì?

Trả về

BaseModelOutputWithPooling hoặc tuple(torch.Tensor)

Một BaseModelOutputWithPooling hoặc một tuple của torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các thành phần khác nhau tùy thuộc vào cấu hình (VivitConfig) và đầu vào.

Phương thức forward của VivitModel ghi đè phương thức đặc biệt __call__.

Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, người dùng nên gọi instance của Module sau đó thay vì gọi hàm này, vì instance Module sẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ lặng lẽ bỏ qua chúng.

  • last_hidden_state (torch.Tensor có hình dạng (batch_size, sequence_length, hidden_size)) — Chuỗi các hidden-state tại đầu ra của lớp cuối cùng của mô hình.

  • pooler_output (torch.Tensor có hình dạng (batch_size, hidden_size)) — Trạng thái ẩn của lớp cuối cùng của token đầu tiên trong chuỗi (token phân loại) sau khi được xử lý thêm qua các lớp được sử dụng cho tác vụ tiền huấn luyện bổ trợ. Ví dụ, đối với các mô hình thuộc họ BERT, giá trị này trả về token phân loại sau khi được xử lý qua một lớp tuyến tính và một hàm kích hoạt tanh. Trọng số của lớp tuyến tính được huấn luyện từ mục tiêu dự đoán câu tiếp theo (phân loại) trong quá trình tiền huấn luyện.

  • hidden_states (tuple(torch.Tensor), tuỳ chọn, được trả về khi output_hidden_states=True được truyền vào hoặc khi config.output_hidden_states=True) — Bộ tuple của torch.Tensor (một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi lớp) có hình dạng (batch_size, sequence_length, hidden_size).

    Trạng thái ẩn của mô hình tại đầu ra của mỗi lớp cùng với các đầu ra embedding ban đầu tùy chọn.

  • attentions (tuple(torch.Tensor), tuỳ chọn, được trả về khi output_attentions=True được truyền vào hoặc khi config.output_attentions=True) — Tuple của torch.Tensor (một cho mỗi lớp) có hình dạng (batch_size, num_heads, sequence_length, sequence_length).

    Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.

Ví dụ:

>>> import av
>>> import numpy as np

>>> from transformers import VivitImageProcessor, VivitModel
>>> from huggingface_hub import hf_hub_download

>>> np.random.seed(0)


>>> 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])


>>> def sample_frame_indices(clip_len, frame_sample_rate, seg_len):
...     '''
...     Sample a given number of frame indices from the video.
...     Args:
...         clip_len (`int`): Total number of frames to sample.
...         frame_sample_rate (`int`): Sample every n-th frame.
...         seg_len (`int`): Maximum allowed index of sample's last frame.
...     Returns:
...         indices (`list[int]`): List of sampled frame indices
...     '''
...     converted_len = int(clip_len * frame_sample_rate)
...     end_idx = np.random.randint(converted_len, seg_len)
...     start_idx = end_idx - converted_len
...     indices = np.linspace(start_idx, end_idx, num=clip_len)
...     indices = np.clip(indices, start_idx, end_idx - 1).astype(np.int64)
...     return indices


>>> # video clip consists of 300 frames (10 seconds at 30 FPS)
>>> file_path = hf_hub_download(
...     repo_id="nielsr/video-demo", filename="eating_spaghetti.mp4", repo_type="dataset"
... )
>>> container = av.open(file_path)

>>> # sample 32 frames
>>> indices = sample_frame_indices(clip_len=32, frame_sample_rate=1, seg_len=container.streams.video[0].frames)
>>> video = read_video_pyav(container=container, indices=indices)

>>> image_processor = VivitImageProcessor.from_pretrained("google/vivit-b-16x2-kinetics400")
>>> model = VivitModel.from_pretrained("google/vivit-b-16x2-kinetics400")

>>> # prepare video for the model
>>> inputs = image_processor(list(video), return_tensors="pt")

>>> # forward pass
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 3137, 768]

VivitForVideoClassification

lớp transformers.VivitForVideoClassification

< >

( config: VivitConfig )

Tham số

  • config (VivitConfig) — Lớp cấu hình mô hình chứa tất cả các tham số của mô hình. Khởi tạo bằng tệp cấu hình không tải trọng số liên quan đến mô hình, chỉ tải cấu hình. Xem phương thức from_pretrained() để tải trọng số của mô hình.

Mô hình ViViT Transformer với đầu phân loại video phía trên (một lớp tuyến tính phía trên trạng thái ẩn cuối cùng của token [CLS]) ví dụ cho Kinetics-400.

Lưu ý rằng có thể tinh chỉnh ViT trên các hình ảnh có độ phân giải cao hơn so với những hình ảnh mà nó đã được huấn luyện, bằng cách đặt interpolate_pos_encoding thành True trong forward của mô hình. Thao tác này sẽ nội suy các position embeddings đã được huấn luyện trước lên độ phân giải cao hơn.

Mô hình này kế thừa từ PreTrainedModel. Xem tài liệu của lớp cha để biết các phương thức chung mà thư viện triển khai cho tất cả các mô hình của nó (chẳng hạn như tải xuống hoặc lưu trữ, thay đổi kích thước các nhúng đầu vào, cắt tỉa các đầu, v.v.)

Mô hình này cũng là một lớp con của torch.nn.Module trong PyTorch. Hãy sử dụng nó như một Module PyTorch thông thường và tham khảo tài liệu PyTorch cho mọi vấn đề liên quan đến cách sử dụng và hành vi chung.

forward

< >

( pixel_values: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneinterpolate_pos_encoding: bool = False**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → ImageClassifierOutput or tuple(torch.Tensor)

Tham số

  • pixel_values (torch.Tensor có hình dạng (batch_size, num_channels, image_size, image_size), tùy chọn) — Các tensor tương ứng với các hình ảnh đầu vào. Giá trị pixel có thể được lấy bằng cách sử dụng VivitImageProcessor. Xem VivitImageProcessor.call() để biết chi tiết (processor_class sử dụng VivitImageProcessor để xử lý hình ảnh).
  • labels (torch.LongTensor có shape (batch_size,), tùy chọn) — Nhãn để tính loss phân loại/hồi quy ảnh. Các chỉ số phải nằm trong [0, ..., config.num_labels - 1]. Nếu config.num_labels == 1, loss hồi quy sẽ được tính (Mean-Square loss). Nếu config.num_labels > 1, loss phân loại sẽ được tính (Cross-Entropy).
  • interpolate_pos_encoding (bool, tùy chọn, mặc định là False) — Có nội suy các mã vị trí được huấn luyện trước hay không.

Trả về

ImageClassifierOutput hoặc tuple(torch.Tensor)

Một ImageClassifierOutput hoặc một tuple của torch.Tensor (nếu return_dict=False được truyền hoặc khi config.return_dict=False) bao gồm các thành phần khác nhau tùy thuộc vào cấu hình (VivitConfig) và đầu vào.

Phương thức forward của VivitForVideoClassification ghi đè lên phương thức đặc biệt __call__.

Mặc dù công thức cho bước truyền tiến cần được định nghĩa bên trong hàm này, người dùng nên gọi instance của Module sau đó thay vì gọi hàm này, vì instance Module sẽ đảm nhận việc thực hiện các bước tiền xử lý và hậu xử lý, trong khi hàm này sẽ lặng lẽ bỏ qua chúng.

  • loss (torch.Tensor có shape (1,), optional, được trả về khi labels được cung cấp) — Loss phân loại (hoặc hồi quy nếu config.num_labels==1).

  • logits (torch.Tensor có hình dạng (batch_size, config.num_labels)) — Điểm phân loại (hoặc hồi quy nếu config.num_labels==1) (trước SoftMax).

  • hidden_states (tuple(torch.Tensor), tuỳ chọn, được trả về khi output_hidden_states=True được truyền vào hoặc khi config.output_hidden_states=True) — Tuple của torch.Tensor (một cho đầu ra của embeddings, nếu mô hình có lớp embedding, + một cho đầu ra của mỗi giai đoạn) có hình dạng (batch_size, sequence_length, hidden_size). Hidden-states (còn được gọi là feature maps) của mô hình tại đầu ra của mỗi giai đoạn.

  • attentions (tuple(torch.Tensor), tuỳ chọn, được trả về khi output_attentions=True được truyền vào hoặc khi config.output_attentions=True) — Tuple của torch.Tensor (một cho mỗi lớp) có hình dạng (batch_size, num_heads, patch_size, sequence_length).

    Trọng số chú ý sau softmax của attention, được sử dụng để tính trung bình có trọng số trong các đầu self-attention.

Ví dụ:

>>> import av
>>> import numpy as np
>>> import torch

>>> from transformers import VivitImageProcessor, VivitForVideoClassification
>>> from huggingface_hub import hf_hub_download

>>> np.random.seed(0)


>>> 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])


>>> def sample_frame_indices(clip_len, frame_sample_rate, seg_len):
...     '''
...     Sample a given number of frame indices from the video.
...     Args:
...         clip_len (`int`): Total number of frames to sample.
...         frame_sample_rate (`int`): Sample every n-th frame.
...         seg_len (`int`): Maximum allowed index of sample's last frame.
...     Returns:
...         indices (`list[int]`): List of sampled frame indices
...     '''
...     converted_len = int(clip_len * frame_sample_rate)
...     end_idx = np.random.randint(converted_len, seg_len)
...     start_idx = end_idx - converted_len
...     indices = np.linspace(start_idx, end_idx, num=clip_len)
...     indices = np.clip(indices, start_idx, end_idx - 1).astype(np.int64)
...     return indices


>>> # video clip consists of 300 frames (10 seconds at 30 FPS)
>>> file_path = hf_hub_download(
...     repo_id="nielsr/video-demo", filename="eating_spaghetti.mp4", repo_type="dataset"
... )
>>> container = av.open(file_path)

>>> # sample 32 frames
>>> indices = sample_frame_indices(clip_len=32, frame_sample_rate=4, seg_len=container.streams.video[0].frames)
>>> video = read_video_pyav(container=container, indices=indices)

>>> image_processor = VivitImageProcessor.from_pretrained("google/vivit-b-16x2-kinetics400")
>>> model = VivitForVideoClassification.from_pretrained("google/vivit-b-16x2-kinetics400")

>>> inputs = image_processor(list(video), return_tensors="pt")

>>> with torch.no_grad():
...     outputs = model(**inputs)
...     logits = outputs.logits

>>> # model predicts one of the 400 Kinetics-400 classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
LABEL_116
Update on GitHub