Transformers 文件

V-JEPA 2

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

PyTorch SDPA FlashAttention

V-JEPA 2

V-JEPA 2 是 FAIR, Meta 開發的一種用於訓練影片編碼器的自監督方法。V-JEPA 2 使用網際網路規模的影片資料,在運動理解和人類動作預測任務上取得了最先進的效能。V-JEPA 2-AC 是一種潛在的動作條件世界模型,由 V-JEPA 2 後訓練而來(使用少量機器人軌跡互動資料),無需環境特定資料收集或任務特定訓練或校準即可解決機器人操作任務。

drawing

您可以在 V-JEPA 2 集合中找到所有原始 V-JEPA2 檢查點。

此模型由 koustuvsyonigozlanqubvel 貢獻。原始程式碼可在此處找到。

用法示例

以下程式碼片段展示瞭如何使用 AutoModel 類載入 V-JEPA 2 模型進行特徵提取。

import torch
from torchcodec.decoders import VideoDecoder
import numpy as np

processor = AutoVideoProcessor.from_pretrained("facebook/vjepa2-vitl-fpc64-256")
model = AutoModel.from_pretrained(
    "facebook/vjepa2-vitl-fpc64-256",
    torch_dtype=torch.float16,
    device_map="auto",
    attn_implementation="sdpa"
)

video_url = "https://huggingface.co/datasets/nateraw/kinetics-mini/resolve/main/val/archery/-Qz25rXdMjE_000014_000024.mp4"

vr = VideoDecoder(video_url)
frame_idx = np.arange(0, 64) # choosing some frames. here, you can define more complex sampling strategy
video = vr.get_frames_at(indices=frame_idx).data  # T x C x H x W
video = processor(video, return_tensors="pt").to(model.device)
outputs = model(**video)

# V-JEPA 2 encoder outputs, same as calling `model.get_vision_features()`
encoder_outputs = outputs.last_hidden_state

# V-JEPA 2 predictor outputs
predictor_outputs = outputs.predictor_output.last_hidden_state

V-JEPA 2 也可以針對影片分類進行微調。在以下程式碼片段中,我們展示瞭如何在 Something-Something-V2 影片分類模型上使用微調模型。

import torch
import numpy as np

from torchcodec.decoders import VideoDecoder
from transformers import AutoVideoProcessor, AutoModelForVideoClassification

device = "cuda" if torch.cuda.is_available() else "cpu"

# Load model and video preprocessor
hf_repo = "facebook/vjepa2-vitl-fpc16-256-ssv2"

model = AutoModelForVideoClassification.from_pretrained(hf_repo).to(device)
processor = AutoVideoProcessor.from_pretrained(hf_repo)

# To load a video, sample the number of frames according to the model.
video_url = "https://huggingface.co/datasets/nateraw/kinetics-mini/resolve/main/val/bowling/-WH-lxmGJVY_000005_000015.mp4"
vr = VideoDecoder(video_url)
frame_idx = np.arange(0, model.config.frames_per_clip, 8) # you can define more complex sampling strategy
video = vr.get_frames_at(indices=frame_idx).data  # frames x channels x height x width

# Preprocess and run inference
inputs = processor(video, return_tensors="pt").to(model.device)
with torch.no_grad():
    outputs = model(**inputs)
logits = outputs.logits

print("Top 5 predicted class names:")
top5_indices = logits.topk(5).indices[0]
top5_probs = torch.softmax(logits, dim=-1).topk(5).values[0]
for idx, prob in zip(top5_indices, top5_probs):
    text_label = model.config.id2label[idx.item()]
    print(f" - {text_label}: {prob:.2f}")

VJEPA2Config

class transformers.VJEPA2Config

< >

( patch_size = 16 crop_size = 256 frames_per_clip = 64 tubelet_size = 2 hidden_size = 1024 in_chans = 3 num_attention_heads = 16 num_hidden_layers = 24 drop_path_rate = 0.0 mlp_ratio = 4.0 layer_norm_eps = 1e-06 qkv_bias = True attention_probs_dropout_prob = 0.0 hidden_act = 'gelu' initializer_range = 0.02 attention_dropout = 0.0 num_pooler_layers = 3 pred_hidden_size = 384 pred_num_attention_heads = 12 pred_num_hidden_layers = 12 pred_num_mask_tokens = 10 pred_zero_init_mask_tokens = True pred_mlp_ratio = 4.0 **kwargs )

引數

  • patch_size (int, 可選, 預設為 16) — 每個補丁的大小(解析度)。
  • crop_size (int, 可選, 預設為 256) — 模型的輸入解析度
  • frames_per_clip (int, 可選, 預設為 64) — 模型預訓練時使用的幀數。不影響推理。
  • tubelet_size (int, 可選, 預設為 2) — 用於單個柵格的 temporal 幀數,更多資訊請參閱論文。
  • hidden_size (int, 可選, 預設為 1024) — 編碼器層的維度
  • in_chans (int, 可選, 預設為 3) — 輸入通道數
  • num_attention_heads (int, 可選, 預設為 16) — 編碼器中每個注意力層的注意力頭數量
  • num_hidden_layers (int, 可選, 預設為 24) — 隱藏層數量
  • drop_path_rate (float, 可選, 預設為 0.0) — 每個樣本的隨機深度率(應用於殘差層的主路徑時)。
  • mlp_ratio (float, 可選, 預設為 4.0) — 編碼器中使用的 MLPs 隱藏層大小與 hidden_size 的比率。
  • layer_norm_eps (float, 可選, 預設為 1e-06) — 層歸一化層使用的 epsilon。
  • qkv_bias (bool, 可選, 預設為 True) — 是否為查詢、鍵和值新增偏置。
  • attention_probs_dropout_prob (float, 可選, 預設為 0.0) — 注意力的 dropout 機率。所有全連線層的 dropout 機率。
  • hidden_act (str, 可選, 預設為 "gelu") — 編碼器和池化器中的非線性啟用函式(函式或字串)。如果是字串,支援 "gelu""relu""selu""gelu_new"
  • initializer_range (float, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的截斷正態初始化器的標準差。
  • attention_dropout (float, 可選, 預設為 0.0) — 注意力的 dropout 機率。
  • num_pooler_layers (int, 可選, 預設為 3) — 池化器中自注意力層的數量。
  • pred_hidden_size (int, 可選, 預設為 384) — 預測器層的維度
  • pred_num_attention_heads (int, 可選, 預設為 12) — 預測器中每個注意力層的注意力頭數量
  • pred_num_hidden_layers (int, 可選, 預設為 12) — 預測器中隱藏層的數量
  • pred_num_mask_tokens (int, 可選, 預設為 10) — 定義預測器中使用的掩碼標記數量
  • pred_zero_init_mask_tokens (bool, 可選, 預設為 True) — 將預測器中的掩碼標記初始化為 0。
  • pred_mlp_ratio (float, 可選, 預設為 4.0) — 預測器中使用的 MLPs 隱藏層大小與 pred_hidden_size 的比率。

這是一個配置類,用於儲存 VJEPA2Model 的配置。它用於根據指定的引數例項化 VJEPA2 模型,定義模型架構。使用預設值例項化配置將生成與 VJEPA2 facebook/vjepa2-vitl-fpc64-256 架構相似的配置。

配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。

示例

>>> from transformers import VJEPA2Config, VJEPA2Model

>>> # Initializing a VJEPA2 vjepa2-vitl-fpc64-256 style configuration
>>> configuration = VJEPA2Config()

>>> # Initializing a model (with random weights) from the vjepa2-vitl-fpc64-256  style configuration
>>> model = VJEPA2Model(configuration)

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

VJEPA2Model

class transformers.VJEPA2Model

< >

( config: VJEPA2Config )

引數

  • config (VJEPA2Config) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請查閱 from_pretrained() 方法以載入模型權重。

裸 Vjepa2 模型輸出原始隱藏狀態,頂部沒有任何特定頭部。

此模型繼承自 PreTrainedModel。請查閱超類文件以瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)

此模型也是 PyTorch torch.nn.Module 的子類。將其用作常規 PyTorch 模組,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。

向前傳播

< >

( pixel_values_videos: Tensor context_head_mask: typing.Optional[torch.Tensor] = None context_mask: typing.Optional[list[torch.Tensor]] = None target_head_mask: typing.Optional[torch.Tensor] = None target_mask: typing.Optional[list[torch.Tensor]] = None skip_predictor: bool = False output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None ) transformers.models.vjepa2.modeling_vjepa2.VJEPA2WithMaskedInputModelOutputtuple(torch.FloatTensor)

引數

  • pixel_values_videos (torch.Tensor 形狀為 [批次大小 x 幀數 x 通道數 x 高度 x 寬度], 必需) — 由 VJEPA2VideoProcessor 處理的輸入影片畫素。
  • context_head_mask (torch.Tensor 形狀為 [頭數][隱藏層數 x 頭數], 可選) — 指示上下文是否保留頭部的掩碼(1.0 為保留,0.0 為丟棄)。
  • context_mask (torch.Tensor 形狀為 [批次大小, 補丁大小, 1], 可選) — 指示哪些編碼器輸出補丁將暴露給預測器的掩碼位置 ID。預設情況下,此掩碼建立為 torch.arange(N).unsqueeze(0).repeat(B,1),表示預測器可獲取所有上下文。
  • target_head_mask (torch.Tensor 形狀為 [頭數][隱藏層數 x 頭數], 可選) — 指示目標是否保留頭部的掩碼(1.0 為保留,0.0 為丟棄)。
  • target_mask (torch.Tensor 形狀為 [批次大小, 補丁大小, 1], 可選) — 指示哪些編碼器輸出補丁將用作預測器預測目標的掩碼位置 ID。預設情況下,此掩碼建立為 torch.arange(N).unsqueeze(0).repeat(B,1),表示預測器應預測所有編碼器補丁。
  • skip_predictor (bool, 預設為 False) — 跳過預測器前向傳播的標誌,如果您只需要編碼器輸出,則很有用
  • output_attentions (bool, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的 attentions
  • output_hidden_states (bool, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 hidden_states

返回

transformers.models.vjepa2.modeling_vjepa2.VJEPA2WithMaskedInputModelOutputtuple(torch.FloatTensor)

一個 transformers.models.vjepa2.modeling_vjepa2.VJEPA2WithMaskedInputModelOutput 或一個 torch.FloatTensor 元組(如果傳遞 return_dict=Falseconfig.return_dict=False 時),其中包含各種元素,具體取決於配置 (VJEPA2Config) 和輸入。

  • last_hidden_state (形狀為 (批次大小, 序列長度, 隱藏大小)<class 'torch.FloatTensor'>.last_hidden_state) — 模型最後一層輸出的隱藏狀態序列。

  • masked_hidden_state (形狀為 (批次大小, 序列長度, 隱藏大小)torch.FloatTensor, 可選, 當提供應用於 VJEPA2Encoder 輸出的 context_mask 時返回) — 模型的掩碼隱藏狀態。

  • hidden_states (tuple[torch.FloatTensor, ...], 可選, 當傳遞 output_hidden_states=Trueconfig.output_hidden_states=True 時返回) — 形狀為 (批次大小, 序列長度, 隱藏大小)torch.FloatTensor 元組(一個用於嵌入層輸出,如果模型有嵌入層,+ 一個用於每個層的輸出)。

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple[torch.FloatTensor, ...], 可選, 當傳遞 output_attentions=Trueconfig.output_attentions=True 時返回) — 形狀為 (批次大小, 頭數, 序列長度, 序列長度)torch.FloatTensor 元組(每個層一個)。

    注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。

  • predictor_output (VJEPA2WithMaskedInputPredictorOutput, 可選) — 預測器模組的輸出。

VJEPA2Model 前向方法,覆蓋 __call__ 特殊方法。

儘管前向傳播的配方需要在此函式中定義,但此後應呼叫 Module 例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。

VJEPA2ForVideoClassification

class transformers.VJEPA2ForVideoClassification

< >

( config: VJEPA2Config )

引數

  • config (VJEPA2Config) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請查閱 from_pretrained() 方法以載入模型權重。

V-JEPA 2 模型 Transformer,頂部帶有一個影片分類頭(注意力池化器頂部的一個線性層)。

此模型繼承自 PreTrainedModel。請查閱超類文件以瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)

此模型也是 PyTorch torch.nn.Module 的子類。將其用作常規 PyTorch 模組,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。

向前傳播

< >

( pixel_values_videos: Tensor labels: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None ) transformers.modeling_outputs.ImageClassifierOutputtuple(torch.FloatTensor)

引數

  • pixel_values_videos (形狀為 [batch size x num_frames x num_channels x height x width]torch.Tensor) — 由 VJEPA2VideoProcessor 處理的輸入影片畫素。
  • labels (形狀為 (batch_size,)torch.LongTensor可選) — 用於計算影像分類/迴歸損失的標籤。索引應在 [0, ..., config.num_labels - 1] 之間。如果 config.num_labels == 1,則計算迴歸損失(均方損失);如果 config.num_labels > 1,則計算分類損失(交叉熵)。
  • output_attentions (bool可選) — 是否返回所有注意力層的注意力張量。更多詳細資訊請參閱返回張量下的 attentions
  • output_hidden_states (bool可選) — 是否返回所有層的隱藏狀態。更多詳細資訊請參閱返回張量下的 hidden_states

返回

transformers.modeling_outputs.ImageClassifierOutputtuple(torch.FloatTensor)

一個 transformers.modeling_outputs.ImageClassifierOutput 或一個 torch.FloatTensor 元組(如果傳遞了 return_dict=Falseconfig.return_dict=False),包含根據配置(VJEPA2Config)和輸入的不同元素。

  • loss (形狀為 (1,)torch.FloatTensor可選,當提供 labels 時返回) — 分類損失(如果 config.num_labels==1,則為迴歸損失)。

  • logits (形狀為 (batch_size, config.num_labels)torch.FloatTensor) — 分類(如果 config.num_labels==1,則為迴歸)分數(SoftMax 之前)。

  • hidden_states (tuple(torch.FloatTensor)可選,當傳遞 output_hidden_states=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 元組(一個用於嵌入層輸出,如果模型有嵌入層,+ 一個用於每個階段的輸出),形狀為 (batch_size, sequence_length, hidden_size)。模型在每個階段輸出的隱藏狀態(也稱為特徵圖)。

  • attentions (tuple(torch.FloatTensor)可選,當傳遞 output_attentions=Trueconfig.output_attentions=True 時返回) — torch.FloatTensor 元組(每層一個),形狀為 (batch_size, num_heads, patch_size, sequence_length)

    注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。

VJEPA2ForVideoClassification 的 forward 方法,覆蓋了 __call__ 特殊方法。

儘管前向傳播的配方需要在此函式中定義,但此後應呼叫 Module 例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。

示例

>>> import torch
>>> import numpy as np
>>> from transformers import AutoVideoProcessor, VJEPA2ForVideoClassification

>>> device = "cuda"

>>> video_processor = AutoVideoProcessor.from_pretrained("facebook/vjepa2-vitl-fpc16-256-ssv2")
>>> model = VJEPA2ForVideoClassification.from_pretrained("facebook/vjepa2-vitl-fpc16-256-ssv2").to(device)

>>> video = np.ones((64, 256, 256, 3))  # 64 frames, 256x256 RGB
>>> inputs = video_processor(video, return_tensors="pt").to(device)

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

>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])

>>> # For training
>>> labels = torch.ones(1, dtype=torch.long, device=device)
>>> loss = model(**inputs, labels=labels).loss

VJEPA2VideoProcessor

class transformers.VJEPA2VideoProcessor

< >

( **kwargs: typing_extensions.Unpack[transformers.models.vjepa2.video_processing_vjepa2.VJEPA2VideoProcessorInitKwargs] )

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.